{"version":3,"file":"assets/chunk.b153f2489cd2250a5efb.js","mappings":"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AChH,KAAM,EAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAChH,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAChH,KAEA,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAC9G,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,EAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAC9G,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAC9G,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAC9G,EAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAC9G,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAC9G,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,EAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAC9G,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAC9G,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAC9G,EAEA,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM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AAW,cACX,OAAW,IACX,MAAU,CACN,GACA,IACA,KACA,KACA,MAEJ,MAAU,CACN,IACA,IACA,IACA,MAGR,wBAA2B,CACvB,WAAc,YACd,OAAU,KACV,OAAU,gBACV,aAAgB,IAChB,MAAS,CACL,IAEJ,MAAS,CACL,MAGR,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,OAK5B,cAAc,CACV,GAAO,IACP,GAAO,IACP,GAAO,MACP,GAAO,EACP,mBAAuB,EACvB,MAAU,EACV,mBAAuB,QACvB,MAAU,CACN,OAAW,EACX,OAAW,QACX,KAAS,IACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,IACX,MAAU,CACN,GACA,IACA,KACA,KACA,MAEJ,MAAU,CACN,IACA,IACA,IACA,MAGR,wBAA2B,CACvB,WAAc,YACd,OAAU,KACV,OAAU,gBACV,aAAgB,IAChB,MAAS,CACL,IAEJ,MAAS,CACL,MAGR,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,OAK5B,YAAY,CACR,GAAO,IACP,GAAO,IACP,GAAO,MACP,GAAO,EACP,mBAAuB,EACvB,MAAU,EACV,mBAAuB,QACvB,MAAU,CACN,OAAW,EACX,OAAW,QACX,KAAS,IACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,IACX,MAAU,CACN,GACA,IACA,KACA,KACA,MAEJ,MAAU,CACN,IACA,IACA,IACA,MAGR,wBAA2B,CACvB,WAAc,YACd,OAAU,KACV,OAAU,gBACV,aAAgB,IAChB,MAAS,CACL,IAEJ,MAAS,CACL,MAGR,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,OAK5B,cAAc,CACV,GAAO,KACP,GAAO,IACP,GAAO,MACP,GAAO,EACP,mBAAuB,EACvB,MAAU,EACV,mBAAuB,QACvB,MAAU,CACN,OAAW,EACX,OAAW,QACX,KAAS,IACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,IACX,MAAU,CACN,GACA,IACA,KACA,KACA,MAEJ,MAAU,CACN,IACA,IACA,IACA,MAGR,wBAA2B,CACvB,WAAc,YACd,OAAU,KACV,OAAU,gBACV,aAAgB,IAChB,MAAS,CACL,IAEJ,MAAS,CACL,MAGR,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,OAK5B,gBAAgB,CACZ,GAAO,KACP,GAAO,IACP,GAAO,MACP,GAAO,EACP,mBAAuB,EACvB,MAAU,EACV,mBAAuB,QACvB,MAAU,CACN,OAAW,EACX,OAAW,QACX,KAAS,IACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,IACX,MAAU,CACN,GACA,IACA,KACA,KACA,MAEJ,MAAU,CACN,IACA,IACA,IACA,MAGR,wBAA2B,CACvB,WAAc,YACd,OAAU,KACV,OAAU,gBACV,aAAgB,IAChB,MAAS,CACL,IAEJ,MAAS,CACL,MAGR,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,OAK5B,YAAY,CACR,GAAO,IACP,GAAO,IACP,GAAO,MACP,GAAO,EACP,mBAAuB,EACvB,MAAU,EACV,mBAAuB,QACvB,MAAU,CACN,OAAW,EACX,OAAW,QACX,KAAS,IACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,IACX,MAAU,CACN,GACA,IACA,KACA,KACA,MAEJ,MAAU,CACN,IACA,IACA,IACA,MAGR,wBAA2B,CACvB,WAAc,YACd,OAAU,KACV,OAAU,gBACV,aAAgB,IAChB,MAAS,CACL,IAEJ,MAAS,CACL,MAGR,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,OAK5B,gBAAgB,CACZ,GAAO,IACP,GAAO,IACP,GAAO,IACP,GAAO,EACP,mBAAuB,EACvB,MAAU,EACV,mBAAuB,QACvB,MAAU,CACN,OAAW,EACX,OAAW,QACX,KAAS,IACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,IACX,MAAU,CACN,GACA,IACA,KACA,KACA,MAEJ,MAAU,CACN,IACA,IACA,IACA,MAGR,wBAA2B,CACvB,WAAc,YACd,OAAU,KACV,OAAU,gBACV,aAAgB,IAChB,MAAS,CACL,IAEJ,MAAS,CACL,MAGR,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,OAK5B,kBAAkB,CACd,GAAO,KACP,GAAO,IACP,GAAO,IACP,GAAO,EACP,mBAAuB,EACvB,MAAU,EACV,mBAAuB,QACvB,MAAU,CACN,OAAW,EACX,OAAW,QACX,KAAS,IACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,IACX,MAAU,CACN,GACA,IACA,KACA,KACA,MAEJ,MAAU,CACN,IACA,IACA,IACA,MAGR,wBAA2B,CACvB,WAAc,YACd,OAAU,KACV,OAAU,gBACV,aAAgB,IAChB,MAAS,CACL,IAEJ,MAAS,CACL,MAGR,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,OAK5B,cAAc,CACV,GAAO,IACP,GAAO,IACP,GAAO,IACP,GAAO,EACP,mBAAuB,EACvB,MAAU,EACV,mBAAuB,QACvB,MAAU,CACN,OAAW,EACX,OAAW,QACX,KAAS,IACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,IACX,MAAU,CACN,GACA,IACA,KACA,KACA,MAEJ,MAAU,CACN,IACA,IACA,IACA,MAGR,wBAA2B,CACvB,WAAc,YACd,OAAU,KACV,OAAU,gBACV,aAAgB,IAChB,MAAS,CACL,IAEJ,MAAS,CACL,MAGR,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,OAM5B,QAAU,CACN,GAAO,KACP,GAAO,MACP,GAAO,IACP,GAAO,QACP,mBAAuB,MACvB,MAAU,MACV,mBAAuB,SACvB,MAAU,CACN,OAAW,EACX,OAAW,SACX,KAAS,OACT,QAAY,CACR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,cAChD,mBAKpB,QAAU,CACN,KAAS,KACT,GAAO,IACP,GAAO,IACP,GAAO,MACP,GAAO,EACP,mBAAuB,EACvB,MAAU,EACV,mBAAuB,KACvB,MAAU,CACN,OAAW,EACX,OAAW,SACX,KAAS,GACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,IACX,MAAU,CACN,MAEJ,MAAU,IAId,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,EACf,QAAY,CAAC,cAAgB,cACzB,aAAgB,aAAgB,cAAgB,cAChD,cAAgB,cAAgB,cAAgB,cAChD,cAAgB,cAAgB,cAAgB,cAChD,aAAgB,cAAgB,cAAgB,cAChD,cAAgB,cAAgB,cAAgB,cAChD,cAAgB,cAAgB,cAAgB,cAChD,cAAgB,cAAgB,cAAgB,cAChD,cAAgB,cAAgB,aAAgB,cAChD,cAAgB,cAAgB,cAAgB,cAChD,cAAgB,cAAgB,cAAgB,kBAOpE,QAAU,CAAC,EAIX,kBAAoB,CAChB,GAAO,KACP,GAAO,IACP,GAAO,MACP,mBAAuB,IACvB,mBAAuB,MACvB,MAAU,CACN,OAAW,EACX,OAAW,MACX,KAAS,KACT,QAAY,CACR,aAAiB,CACb,WAAc,YACd,OAAW,KACX,OAAW,cACX,OAAW,GACX,MAAU,GAGV,MAAU,IAGd,oBAAwB,CACpB,WAAe,uBACf,OAAW,KACX,OAAW,WACX,WAAe,GACf,QAAY,CACR,MACA,OACA,OACA,QACA,QACA,QACA,OACA,QACA,QACA,OACA,QACA,OACA,QACA,OACA,QACA,KACA,MACA,OACA,MACA,MACA,OACA,MACA,OACA,OACA,SACA,SACA,SACA,OACA,SACA,MACA,SACA,QACA,QACA,MACA,QACA,QACA,QACA,SACA,QACA,OACA,QACA,QACA,SACA,SACA,SACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,SACA,UACA,UACA,QACA,QACA,SACA,SACA,SACA,QACA,SACA,SACA,QACA,QACA,SACA,gBC3yDjBA,EAAO,CACd,IAAO,CACH,UAAa,YACb,SAAa,WACb,SAAa,WACb,iBAAmB,iBACnB,iBAAmB,iBACnB,iBAAmB,iBACnB,UAAc,YACd,eAAiB,gBAGrB,SAAY,CACR,UAAa,CACTqsG,iBAAkB,MAClBC,UAAW/D,EACXgE,eAAgB,GAChBnB,sBAAuB,GACvBoB,aAAc,KACdC,cAAe,IAEnB,SAAa,CACTJ,iBAAkB,OAClBC,UAAW/D,EACXgE,eAAgB,GAChBnB,sBAAuB,GACvBoB,aAAc,KACdC,cAAe,IAEnB,SAAa,CACTJ,iBAAkB,MAClBC,UAAY/D,EACZgE,eAAgB,IAChBnB,sBAAuB,GACvBoB,aAAc,KACdC,cAAe,IAEnB,iBAAmB,CACfJ,iBAAkB,MAClBC,UAAY/D,EACZgE,eAAgB,GAChBnB,sBAAuB,GACvBoB,aAAc,KACdC,cAAe,IAEnB,iBAAmB,CACfJ,iBAAkB,OAClBC,UAAW/D,EACXgE,eAAgB,GAChBnB,sBAAuB,GACvBoB,aAAc,KACdC,cAAe,IAEnB,iBAAmB,CACfJ,iBAAkB,MAClBC,UAAY/D,EACZgE,eAAgB,IAChBnB,sBAAuB,GACvBoB,aAAc,KACdC,cAAe,IAEnB,UAAc,CACVJ,iBAAkB,MAClBC,UAAY/D,EACZgE,eAAgB,GAChBnB,sBAAuB,GACvBoB,aAAc,MACdC,cAAe,IAEnB,eAAiB,CACbJ,iBAAkB,MAClBC,UAAY/D,EACZgE,eAAgB,GAChBnB,sBAAuB,GACvBoB,aAAc,KACdC,cAAe,OC3DpB,MAAMC,EAAa,CACtBzC,IAAK,MACLZ,OAAQ,QACRsD,WAAY,oBACZrD,SAAU,kBACVG,OAAQ,QACRmD,UAAW,YACXpC,MAAQ,SA+GZ,SAASqC,EAAeC,GACpB,OAAQA,GACJ,KAAKJ,EAAWzC,IAAK,OAAO8C,EAC5B,KAAKL,EAAWpD,SAAU,OAAO0D,EACjC,KAAKN,EAAWjD,OAAQ,OAAOwD,EAC/B,KAAKP,EAAWrD,OAChB,KAAKqD,EAAWC,WAAY,OAAOO,EACnC,KAAKR,EAAWE,UAAW,OAAOO,EAClC,QAAS,OAAO,KAExB,CAkuBA,SAASC,EAAiBC,GAEtB,IAAIC,EAAY,CAAC,EACjB,MAAO,CACHC,QAAS,SAAUhlG,EAAUukG,GACzB,IAAIx0G,EAAMw0G,EAAW,IAAMvkG,EAC3B,GAAI+kG,EAAUh1G,GACV,OAAOg1G,EAAUh1G,GAEhB,CACD,IAAIk1G,EAAUH,EAAW9kG,EAAUukG,GAEnC,OADAQ,EAAUh1G,GAAOk1G,EACVA,CACX,CACJ,EAER,CAEmBJ,GAGnB,SAA+B7kG,EAAUukG,GACrC,IAAIW,EAAcZ,EAAeC,GAC7BY,EAAYD,aAAW,EAAXA,EAAaztG,KAAKH,IAAI0I,GAEtC,OADcklG,aAAW,EAAXA,EAAaztG,KAAK2tG,SAASD,EAE7C,IAPsBN,GAStB,SAA+B7kG,EAAUukG,GAErC,IACIc,EADAC,EA9vBR,SAA2Bf,GACvB,OAAQA,GACJ,KAAKJ,EAAWzC,IAAK,OAAO6D,EAC5B,KAAKpB,EAAWpD,SAAU,OAAOyE,EACjC,KAAKrB,EAAWjD,OAAQ,OAAOuE,EAC/B,KAAKtB,EAAWrD,OAChB,KAAKqD,EAAWC,WAAY,OAAOsB,EACnC,KAAKvB,EAAWE,UAAW,OAAOO,EAClC,KAAKT,EAAWlC,MAAQ,OAAO0D,EAC/B,QAAS,OAAO,KAExB,CAmvByBC,CAAkBrB,GAEvC,GAAuB,OAAnBe,EAAyB,CACzB,IAAIH,EAAYG,EAAe7tG,KAAKH,IAAI0I,GACxCqlG,EAAaC,EAAe7tG,KAAK2tG,SAASD,EAC9C,CACA,OAAOE,CACX,8BCv5BA,MAEMQ,GAAY,EACZC,EAA+B,CACnC,YACA,YACA,YACA,YACA,YACA,YACA,YACA,aAGWC,EAAW,CACtBzJ,WAAY,WACZF,QAAS,iBACTI,UAAW,UACXI,SAAU,SACVZ,OAAQ,OAEGgK,EAAkB,CAC7B3J,SAAU,SACVE,QAAS,QACTL,OAAQ,OAGV,MAAM+J,EACJ9/G,WAAAA,GACEoC,KAAKkP,KAAO,CAAC,CACf,CACAyuG,MAAAA,GACE,OAAOj/G,OAAOC,KAAKqB,KAAKkP,KAC1B,CACA0uG,OAAAA,CAAQ5rG,EAAInB,EAAMvN,GACV0O,KAAMhS,KAAKkP,OACflP,KAAKkP,KAAK8C,GAAM,CAAC,GAEnBhS,KAAKkP,KAAK8C,GAAInB,GAAQvN,CACxB,CACAu6G,aAAAA,CAAc7rG,GAGZ,IAAI8rG,EAAa,CAAEC,OAAQ/rG,GACvB4L,EAAO5d,KAAKkP,KAAK8C,GACjBgsG,GAAa,EACbC,EAAW,kBAIf,GAAI,WAAYrgG,EAAM,CACpB,IAAK,IAAIsgG,KAAUtgG,EAAa,OAC1BqgG,EAASjtG,KAAKktG,KAChBJ,EAAWI,GAAUtgG,EAAa,OAAEsgG,IAGxCF,GAAa,CACf,CACA,GAAI,QAASpgG,EAAM,CACjBkgG,EAAoB,QAAIlgG,EAAU,IAAE,GAAK3U,QAAU2U,EAAU,IAAE,GAAK3U,QAAU+I,EAAG4E,cACjF,IAAK,IAAIsnG,KAAUtgG,EAAU,IAC3B,GAAIqgG,EAASjtG,KAAKktG,GAAS,CACzB,IAAIC,GAAO,EACPD,KAAUJ,IAEZK,EAAOC,EAAoBxgG,EAAU,IAAEsgG,KAErCC,IACFL,EAAWI,GAAUtgG,EAAU,IAAEsgG,GAErC,CAEFF,GAAa,CACf,CACA,GAAI,WAAYpgG,EAAM,CACpB,IAAK,IAAIsgG,KAAUtgG,EAAa,OAC9B,GAAIqgG,EAASjtG,KAAKktG,GAAS,CACzB,IAAIC,GAAO,EACPD,KAAUJ,IAEZK,EAAOC,EAAoBxgG,EAAa,OAAEsgG,KAExCC,IACFL,EAAWI,GAAUtgG,EAAa,OAAEsgG,GAExC,CAEFF,GAAa,CACf,CAaA,OAZIA,GAAc,gBAAiBpgG,IACjCkgG,EAAwB,YAAIlgG,EAAkB,aAE5CogG,GAAc,gBAAiBpgG,IACjCkgG,EAAwB,YAAIlgG,EAAkB,aAE5CogG,GAAc,UAAWpgG,IAC3BkgG,EAAkB,MAAIlgG,EAAY,OAEhCogG,GAAc,YAAapgG,IAC7BkgG,EAAoB,QAAIlgG,EAAc,SAEjCkgG,CACT,EAGF,IAAIM,EAAsB,SAAUC,GAClC,YAC6B,IAApBA,EAAU/6G,OACG,OAApB+6G,EAAU/6G,YACwB,IAA3B+6G,EAAU/6G,MAAM7F,QACI,IAA3B4gH,EAAU/6G,MAAM7F,QACO,KAAvB4gH,EAAU/6G,MAAM,EAEpB,EAoBIg7G,EAAc,SAAUR,EAAYh4F,EAAYy4F,EAAS3R,GAA4B,IAAA4R,EAAAC,EAAAC,EACvF,IAAI9gG,EAAO,CAAEc,WAAYo/F,EAAWC,QAChCY,EAAe,GACfC,EAAa,GACbC,EAAe,GAGnBngH,OAAO4V,OAAOwR,GAAYhW,SAASgvG,IACjC,GAAoB,MAAhBA,EAAS9sG,GAEX,GAAI8sG,EAAS9sG,MAAM8rG,EAAY,CAC7B,IAAKx6G,EAAOuiB,IA7Bew4F,EA6BaP,EAAWgB,EAAS9sG,IA7BtB+sG,EA6B2BD,EAAS5vG,KA7B1B8vG,EA6BgCF,EAASx7G,WA3BlE,IAApB+6G,EAAU/6G,OACG,OAApB+6G,EAAU/6G,YACwB,IAA3B+6G,EAAU/6G,MAAM7F,OAEhB,CAAC,KAAM,WAEe,IAA3B4gH,EAAU/6G,MAAM7F,QAA4C,IAA3B4gH,EAAU/6G,MAAM7F,QAAuC,KAAvB4gH,EAAU/6G,MAAM,GAC5E,CAAC,KAAM,SAEZy7G,IAAavB,EAASzJ,YAAciL,IAAcvB,EAAgBzJ,QAC7D,CAACqK,EAAU/6G,MAAM6S,KAAK,MAAO,MAE7B,CAACkoG,EAAU/6G,MAAM,GAAI,OAgBpBuiB,EACY,YAAVA,EACFg5F,EAAa//G,KAAK,GAAGggH,EAAS5hH,QAAQ4hH,EAAS9sG,OAC5B,UAAV6T,GAAsBi5F,EAASlL,UAAc,YAAakL,GACnEF,EAAW9/G,KAAK,GAAGggH,EAAS5hH,QAAQ4hH,EAAS9sG,OAG/C4L,EAAKkhG,EAAS5hH,MAAQoG,CAE1B,MACOw7G,EAASlL,UACZ+K,EAAa7/G,KAAK,GAAGggH,EAAS5hH,QAAQ4hH,EAAS9sG,OAzChC,IAAUqsG,EAAWU,EAAUC,CA4CpD,IAIFtgH,OAAO4V,OAAOwR,GAAYhW,SAASgvG,IACjC,GAAI,YAAaA,KACTA,EAAS5hH,QAAQ0gB,GAAO,CAC5B,IAAIta,EAAQw7G,EAASviH,QAAQqhB,GACf,OAAVta,GAAmBw7G,EAASlL,SAG9Bh2F,EAAKkhG,EAAS5hH,MAAQoG,EAFtBs7G,EAAW9/G,KAAK,GAAGggH,EAAS5hH,QAAQ4hH,EAAS9sG,MAIjD,CACF,IAGF,IAAIitG,GAA0BrS,GDHzB,SAAoBn1F,EAAUukG,GACjC,IAAIkD,EAAWnD,EAAeC,GAC9B,QAAKkD,QACkC11G,IAAhC01G,EAAShwG,KAAKH,IAAI0I,EAC7B,CCAM0nG,CAAuBrB,EAAWC,OAAQoB,EAAuB5G,UAC/C,QADsDiG,EACxEV,EAAW,aAAO,IAAAU,OAAA,EAAlBA,EAAoB1gG,gBACF,QADc2gG,EAChCX,EAAW,aAAO,IAAAW,OAAA,EAAlBA,EAAoB3gG,gBACF,QADc4gG,EAChCZ,EAAW,aAAO,IAAAY,OAAA,EAAlBA,EAAoB5gG,gBACnBy/F,EAA6BpqG,SAAS2qG,EAAWC,QAItD,GAAIY,EAAalhH,OAAS,GAAKmhH,EAAWnhH,OAAS,GAAKohH,EAAaphH,OAAS,IAAMwhH,EAiBlF,OAAO,KAUT,GANI,YAAanB,IACflgG,EAAc,QAAIkgG,EAAoB,SAEpC,gBAAiBA,IACnBlgG,EAAkB,YAAIkgG,EAAwB,aAE5C,gBAAiBA,EACnBlgG,EAAkB,YAAIkgG,EAAwB,iBACzC,GAA0C,OAAtCA,EAAWC,OAAOhuG,UAAU,EAAG,GAAa,CACrD,IAAI8kE,EAAMj3D,EAAU,IAIpBA,EAAkB,YAAI,CACpBpN,IAAKqkE,EACLuqC,QAAS,IAAOvqC,EAChBr0B,EAAG,CAAC,IAAMq0B,GACVF,EAAG,CAAC,GAAME,GACVD,KAAM,KAEV,CAOA,MANI,UAAWkpC,IACblgG,EAAY,MAAIkgG,EAAkB,OAEhC,YAAaA,IACflgG,EAAc,QAAIkgG,EAAoB,SAEjClgG,CACT,EAEIyhG,EAAsB,SAAUp3G,EAAO6d,EAAYy4F,EAAS3R,GAC9D,IACE,IAAI7jG,EAAS,GAOb,OANAd,EAAM01G,SAAS7tG,SAASiuG,IACtB,IAAIuB,EAAgBhB,EAAYr2G,EAAM41G,cAAcE,GAASj4F,EAAYy4F,EAAS3R,GAC9E0S,GACFv2G,EAAOjK,KAAKwgH,EACd,IAEKv2G,CACT,CAAE,MAAOghB,GAEP,OADAw0F,EAAQlN,KAAK,4CAA6CtnF,EAAE5I,SACrD,IACT,CACF,EAEIo+F,EAAoB,SAAUxiG,EAAWyiG,EAAav3G,EAAOlK,GAC3DA,EAAO0hH,UAAUC,oBAAsBF,GACzCA,EAAYtwG,KAAK6N,GAAWjN,SAAS8N,IACnC3V,EAAM21G,QAAQhgG,EAAK,GAAKE,aAAc,SAAUF,EAAK,IAGrD7f,EAAO0hH,UAAUE,mBAAqB5hH,EAAO0hH,UAAUG,YACzD7hH,EAAO0hH,UAAUG,WAAW7iG,GAAWjN,SAAS8N,IAC9C3V,EAAM21G,QAAQhgG,EAAKmgG,OAAQ,SAAUngG,EAAK,IAG1C7f,EAAO8tD,aACTntD,OAAOC,KAAKZ,EAAO8tD,aAAa/7C,SAASkC,IACvC/J,EAAM21G,QAAQ5rG,EAAI,cAAejU,EAAO8tD,YAAY75C,GAAI,IAGxDjU,EAAO6tD,aACTltD,OAAOC,KAAKZ,EAAO6tD,aAAa97C,SAASkC,IACvC/J,EAAM21G,QAAQ5rG,EAAI,cAAejU,EAAO6tD,YAAY55C,GAAI,IAK5D,MAAM6tG,EAAaC,EACfD,GACFnhH,OAAOC,KAAKkhH,GAAY/vG,SAASkC,IAC/B/J,EAAM21G,QAAQ5rG,EAAI,QAAS6tG,EAAW7tG,GAAI,IAG1CjU,EAAOgiH,UACTrhH,OAAOC,KAAKZ,EAAOgiH,UAAUjwG,SAASkC,IACpC/J,EAAM21G,QAAQ5rG,EAAI,UAAWjU,EAAOgiH,SAAS/tG,GAAIguG,QAAQ,GAG/D,EAEIC,EAAiB,SAAUC,EAAU9xG,EAAOnG,GAC9C,IAAIk4G,EAAcD,EAAW,IAAIE,OAAOF,GAAY,KACpD9xG,EAAMc,KAAKY,SAAS8N,IACbuiG,GAAgBA,EAAYnvG,KAAK4M,EAAK,GAAKE,eAC9C7V,EAAM21G,QAAQhgG,EAAK,GAAKE,aAAc,MAAOF,EAC/C,GAEJ,EAEO,SAASm3F,EAAkBpsG,EAAKs5B,GAErC,OADAA,EAAOqxE,KAAK,uBAAuB3qG,gBAC5BilG,MAAMjlG,GAAK67B,MAAMwpE,GACfA,EAASC,QAEpB,CAEO,SAAS+G,EAAcjzE,EAAKhlB,EAAW0nB,EAAM+6E,EAAa15F,EAAYy4F,EAAS3R,GACpF,IAAI3kG,EAAQ,IAAIy1G,EAEhB,OADAz1G,EAAM4U,WAAaklB,EAAIkuE,gBAChBluE,EACJouE,eAAe1rE,GACfD,MAAMzmC,IACL,IAAKA,EACH,KAAM,iBAKR,OAHAwgH,EAAQj7E,KAAK,iBACbi8E,EAAkBxiG,EAAWyiG,EAAav3G,EAAOlK,GACjDwgH,EAAQ56E,QAAQ,iBACT5lC,CAAM,IAEdymC,MAAMzmC,IACLkK,EAAM2U,QAAUmlB,EAAI6tE,YAAY7xG,EAAO0hH,UAAUY,YAC1Ct+E,EAAIguE,WAAWhyG,EAAO0hH,UAAUa,YAAY97E,MAAK8F,UACtD,IAAKl8B,EACH,KAAM,oBAERmwG,EAAQj7E,KAAK,iBACb28E,EAAeliH,EAAO0hH,UAAUc,YAAanyG,EAAOnG,GACpDs2G,EAAQ56E,QAAQ,iBAChB,IAAI68E,EAAMpyG,EAEV,OADAnG,EAAMwV,QAAU+iG,EACTv4G,CAAK,OAGfu8B,MAAMv8B,IACLs2G,EAAQj7E,KAAK,uBACb,IAAIv6B,EAASs2G,EAAoBp3G,EAAO6d,EAAYy4F,EAAS3R,GAS7D,OARA2R,EAAQ56E,QAAQ,uBACZ25E,IACFjvG,QAAQC,IAAI,WACZD,QAAQC,IAAIvF,EAAOgG,KAAKnG,GAASA,EAAK8V,eAExC3V,EAAO0U,QAAUxV,EAAMwV,QACvB1U,EAAO6zB,eAAiB30B,EAAM2U,QAC9B7T,EAAO8zB,kBAAoB50B,EAAM4U,WAC1B9T,CAAM,IAEdy8B,OAAO3f,IACN04F,EAAQ14F,MAAM,gCAAiCA,EAAM1E,SAC9C,OAEb,sKC7VO,SAASq0F,EAA8BnqF,GAC5C,IAAIqqF,EAAU,GACV/pF,EAA2C,iBAAtBN,EAAMM,YAA2BN,EAAMM,YAAYziB,cAAgBmiB,EAAMM,YAoBlG,OAnBIA,IACE1X,WAAWoX,EAAMG,gBAAkB,EACI,IAArCvX,WAAWoX,EAAMG,gBACnBkqF,EAAQ52G,KAAKovD,EAAAA,QAAO3uD,OAAO,CAAE4uD,UAAW,sCAExCunD,EAAQ52G,KAAKovD,EAAAA,QAAO3uD,OAAO,CAAE4uD,UAAW,2CAEI,IAArCl6C,WAAWoX,EAAMG,iBACrBi1F,EAAAA,EAAAA,QAAO90F,KAAiB+0F,EAAAA,EAAAA,UAAS/0F,KAAiBg1F,EAAAA,EAAAA,QAAOh1F,KAAiBi1F,EAAAA,EAAAA,UAASj1F,IACtF+pF,EAAQ52G,KAAKovD,EAAAA,QAAO3uD,OAAO,CAAE4uD,UAAW,gDAEI,IAArCl6C,WAAWoX,EAAMG,mBACrBi1F,EAAAA,EAAAA,QAAO90F,KAAiB+0F,EAAAA,EAAAA,UAAS/0F,KAAiBk1F,EAAAA,EAAAA,SAAQl1F,IAC7D+pF,EAAQ52G,KAAKovD,EAAAA,QAAO3uD,OAAO,CAAE4uD,UAAW,kDAMvCunD,CACT,CAEO,SAASp2D,EAAwBj0B,GAEtC,OADgBmqF,EAA8BnqF,GAC/B5tB,OAAS,EAAI,UAAY,aAC1C,CAIO,SAASqjH,EAAoBp+G,EAAQ2oB,GAC1C,IAAIhrB,GAAS,EAEb,GAAI,gBAAiBgrB,EAAO,CAC1B,IAAI01F,EAAU11F,EAAMwgC,YAAYrL,EAAE5uC,MAAMtO,GAC/BA,EAAQ,KAEjBjD,EALmB,GAKTgrB,EAAMqhC,KAAuBq0D,EAAUr+G,EAAOu9C,WAC1D,CACA,OAAO5/C,CACT,gRCtBA,IAAI2gH,EAAc,SAAU19G,GAC1B,OAAO,MAAOA,IAA4CiQ,MAAMjQ,EAClE,EAuCqB29G,GAAkB54G,GACpCC,EAAAA,EAAAA,QAAQ,sBAAqBrB,EADjB,cAAiCsmG,KAAQ3vG,WAAAA,GAAA,SAAAC,YAAA0K,EAAAA,EAAAA,GAAA,iBAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,cAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,cAAAG,EAAA,OAAA5K,EAAAA,EAAAA,GAAA,eAI5C,KAAI,CAEdojH,uBAAAA,CAAwBxxE,EAAYznC,GAClC,MAAM/K,EAAO,SAAW+K,EAAQ,GAChC,OAAO/K,KAAQwyC,EAAWyxE,qBAAuBzxE,EAAWyxE,qBAAqBjkH,GAAQ,EAC3F,CACAkkH,0BAAAA,CAA2BC,EAAsBC,GAC/C,OAAOA,EAAgBxrF,wBAAwBmG,WAAW9oB,SAASkuG,GAC/DA,EACAC,EAAgB9mG,cACtB,CAEAu4B,WAAAA,CAAYrN,EAAayM,EAAYovE,GACnC,IAAIvuE,EAAS,CAAEtN,YAAa,GAAI5kC,WAAY,GAAIuhB,eAAgB,CAAC,EAAGE,WAAY,CAAC,EAAGE,WAAY,CAAC,EAAGilB,UAAW,CAAC,GAC5G7H,EAAU6F,GAA4B,CAAC,eACvC8X,EAAa,IAAIC,EAAAA,QAAWz9C,KAAK+I,QA+BrC,OA7BAiqC,EAAOtN,YAAc7F,EAErBA,EAAQ/vB,SAASkS,IACf,OAAQA,GACN,IAAK,cACHw7B,EAAWppB,OAAOtzB,WAAaqxC,EAAWrxC,WAC1CkyC,EAAOlyC,WAAaqxC,EAAWrxC,WAAaqxC,EAAWrxC,WAAa,CAAC,EACrE,MACF,IAAK,iBACH08C,EAAWppB,OAAO/R,eAAiB8vB,EAAW9vB,eAC9C2wB,EAAO3wB,eAAiBriB,KAAKwhH,+BAA+BrvE,EAAW9vB,gBACvE,MACF,IAAK,aACHm7B,EAAWppB,OAAO7R,WAAag/F,EAAkBv5E,YAAYmK,EAAW5vB,YACxEywB,EAAOzwB,WAAaviB,KAAKyhH,2BACvBjkE,EAAWppB,OAAO7R,WAClBi7B,EAAWhiC,QAAQ+G,WAAW0K,iBAEhC,MACF,IAAK,aACHuwB,EAAWppB,OAAO3R,WAAa0vB,EAAW1vB,WAC1CuwB,EAAOvwB,WAAaziB,KAAK0hH,2BAA2BvvE,EAAW1vB,YAC/D,MACF,IAAK,aACC0vB,EAAWzK,YAAW8V,EAAWppB,OAAOsT,UAAYyK,EAAWzK,WACnEsL,EAAOtL,UAAYyK,EAAWzK,UAAYyK,EAAWzK,UAAY,CAAC,EAEtE,IAEK,CAAEsL,OAAQA,EAAQ9yC,MAAOs9C,EAClC,CACAgkE,8BAAAA,CAA+BtyG,GAC7B,IAAIwgC,EAAa,CAAC,EAUlB,OATAA,EAAWtvC,KAAO8O,EAAK9O,KACvBsvC,EAAW3vC,SAAWmP,EAAKnP,SAC3B2vC,EAAW9sC,oBAAsBsM,EAAKtM,oBACtC8sC,EAAW3sC,kBAAoBmM,EAAKnM,kBACpC2sC,EAAWtrC,oBAAsB8K,EAAK9K,oBACtCsrC,EAAWzuC,kBAAoBiO,EAAKjO,kBACpCyuC,EAAW5pC,oBAAsBoJ,EAAKpJ,oBAAsBoJ,EAAKpJ,oBAAsB,EACvF4pC,EAAWhW,qBAAuBxqB,EAAKwqB,qBACvCgW,EAAWvuC,gBAAkB+N,EAAK/N,gBAC3BuuC,CACT,CACA+xE,0BAAAA,CAA2BvyG,EAAMyyG,GAC/B,IAAIjyE,EAAa,CAAC,EAClBA,EAAWp1B,OAASpL,EAAKoL,OACzBo1B,EAAWn1B,QAAUrL,EAAKqL,QAC1Bm1B,EAAW5b,aAAe5kB,EAAK4kB,aAC/B4b,EAAW/b,uBAAyBzkB,EAAKykB,uBACzC+b,EAAWlY,iBAAmBtoB,EAAKsoB,iBACnCkY,EAAWwB,oBAAsBhiC,EAAKgiC,oBAGtC,IAAIlkB,EAAS,GACb,IAAK,MAAMxe,KAASU,EAAKwmB,sBACvB1I,EAAOluB,KAAK,CACVoL,YAAasE,EAAMtE,YACnB6rB,gBAAiBvnB,EAAMunB,gBAAgBzyB,MACvClD,KAAMoO,EAAMwnB,UAAU1yB,MACtBs+G,YAAapzG,EAAMwnB,UAAUzD,QAC7B/X,eAAgBhM,EAAMgM,eACtBqb,OAAQrnB,EAAM6c,QAOlB,GAJAqkB,EAAW1iB,OAASA,EACpB0iB,EAAWmyE,gBAAkB,GAGzBnyE,EAAW/b,yBAA2BrzB,EAAAA,QAAgBszB,8BAA8BC,YAAa,CACnG,IAAIoC,EAAY0rF,EAAU5yG,KAAKnG,GACtBA,EAAKgpB,YAAYswB,QAAU,IAEpCxS,EAAWzZ,UAAYA,CACzB,MACEyZ,EAAWzZ,UAAY/mB,EAAK+mB,UAE9B,OAAOyZ,CACT,CACAgyE,0BAAAA,CAA2BxyG,GACzB,IAAIwgC,EAAa,CAAC,EAQlB,OAPAA,EAAWtS,kBAAoBluB,EAAKkuB,kBACpCsS,EAAWzS,mBAAqB/tB,EAAK+tB,mBACrCyS,EAAWnS,kBAAoBruB,EAAKquB,kBACpCmS,EAAWhS,kBAAoBxuB,EAAKwuB,kBACpCgS,EAAW1R,wBAA0B9uB,EAAK8uB,wBAC1C0R,EAAW7R,yBAA2B3uB,EAAK2uB,yBAC3C6R,EAAWvR,wBAA0BjvB,EAAKivB,wBACnCuR,CACT,CACAoyE,WAAAA,CAAYp8E,EAAagK,GACvB,MAAM8N,EAAa,IAAIC,EAAAA,QAAWz9C,KAAK+I,QACvC,IAAI82B,EAAU6F,GAA4B,CAAC,eAoC3C,MAlCqB,QAAjB1lC,KAAK+hH,UACPliF,EAAU7/B,KAAKgiH,iBAAiBtyE,IAGlC7P,EAAQ/vB,SAASkS,IACf,OAAQA,GACN,IAAK,cACHw7B,EAAWppB,OAAOtzB,WAAa4uC,EAAW5uC,WACtC4uC,EAAW5uC,WACX4uC,EAAW7+B,KACT6+B,EAAW7+B,KAAK/P,WAChB,KACN,MACF,IAAK,iBACH08C,EAAWppB,OAAO/R,eAAiBriB,KAAKiiH,4BAA4BzkE,EAAY9N,EAAWrtB,gBAC3F,MACF,IAAK,aACHm7B,EAAWppB,OAAO7R,WAAaviB,KAAKkiH,wBAClC1kE,EACA9N,EAAWntB,WAAamtB,EAAWntB,WAAamtB,EAAWyyE,YAE7D,MACF,IAAK,aACH3kE,EAAWppB,OAAO3R,WAAaziB,KAAKoiH,wBAClC5kE,EACA9N,EAAWjtB,WAAaitB,EAAWjtB,WAAaitB,EAAW2yE,eAE7D,MACF,IAAK,aACH7kE,EAAWppB,OAAOsT,UAAY,KAElC,IAGK,CAAEhC,YAAa7F,EAASsS,WADZqL,EAAWppB,OAEhC,CACA4tF,gBAAAA,CAAiBtyE,GACf,IAAI4yE,EAAU,GACd,IAAK,IAAI15G,IAAQ,CAAC,OAAQ,iBAAkB,aAAc,gBAAiB,gBACzE,GAAIA,KAAQ8mC,EACV,OAAQ9mC,GACN,IAAK,OACC8mC,EAAW7+B,MAAQ6+B,EAAW7+B,KAAK/P,YACrCwhH,EAAQxjH,KAAK,eAEf,MACF,IAAK,iBACCwjH,EAAQnvG,SAAS,gBACnBmvG,EAAQxjH,KAAK,kBAEf,MACF,IAAK,aACCwjH,EAAQnvG,SAAS,mBACnBmvG,EAAQxjH,KAAK,cAEf,MACF,IAAK,gBACCwjH,EAAQnvG,SAAS,eACnBmvG,EAAQxjH,KAAK,cAEf,MACF,IAAK,eACCwjH,EAAQnvG,SAAS,eACnBmvG,EAAQxjH,KAAK,cAMvB,OAAOwjH,CACT,CACAL,2BAAAA,CAA4BzkE,EAAY9N,GACtC,IACI6yE,EADU,IAAIz6D,EAAAA,QAAqBtK,GACftV,YACxB1G,EAAAA,EAAAA,KAAI+gF,EAAW,OAAQvB,EAAYtxE,EAAWtvC,MAAQ6T,WAAWy7B,EAAWtvC,MAAQmiH,EAAUniH,MAC9F,IAAIL,EAAW2vC,EAAW3vC,SAAW2vC,EAAW3vC,SAAW2vC,EAAW8yE,iBACtEziH,EAAWA,IAAaO,EAAAA,QAAgBC,UAAU83B,IAAMt4B,IAAaO,EAAAA,QAAgBC,UAAUC,GAAKT,EAAW,MAC/GyhC,EAAAA,EAAAA,KAAI+gF,EAAW,WAAYxiH,GAAsBwiH,EAAUxiH,WAC3DyhC,EAAAA,EAAAA,KACE+gF,EACA,sBACAvB,EAAYtxE,EAAW9sC,qBACnBqR,WAAWy7B,EAAW9sC,qBACtB2/G,EAAU3/G,sBAEhB4+B,EAAAA,EAAAA,KACE+gF,EACA,oBACAvB,EAAYtxE,EAAW3sC,mBACnBkR,WAAWy7B,EAAW3sC,mBACtBw/G,EAAUx/G,oBAEhBy+B,EAAAA,EAAAA,KACE+gF,EACA,sBACAvB,EAAYtxE,EAAWtrC,qBACnB6P,WAAWy7B,EAAWtrC,qBACtBm+G,EAAUn+G,sBAEhBo9B,EAAAA,EAAAA,KACE+gF,EACA,oBACAvB,EAAYtxE,EAAWzuC,mBACnBgT,WAAWy7B,EAAWzuC,mBACtBshH,EAAUthH,mBAEZu8C,EAAWppB,OAAOtzB,aAAeR,EAAAA,QAAgBQ,WAAWC,WAC9DygC,EAAAA,EAAAA,KACE+gF,EACA,kBACAvB,EAAYtxE,EAAWvuC,iBAAmB8S,WAAWy7B,EAAWvuC,iBAAmBohH,EAAUphH,iBAGjG,IAAIu4B,EACe,QAAjB15B,KAAK+hH,QAAoBryE,EAAWhW,qBAAuBgW,EAAW+yE,0BAYxE,OAXAjhF,EAAAA,EAAAA,KACE+gF,EACA,uBACAvB,EAAYtnF,GAAwBzlB,WAAWylB,GAAwB6oF,EAAU7oF,uBAEnF8H,EAAAA,EAAAA,KAAI+gF,EAAW,wBAAwB3oF,EAAAA,EAAAA,iBAAgB2oF,EAAU7oF,wBACjE8H,EAAAA,EAAAA,KACE+gF,EACA,uBACA9oF,EAAAA,EAAAA,kBAAiB8oF,EAAU7oF,qBAAsB6oF,EAAU3/G,sBAEtD2/G,CACT,CACAL,uBAAAA,CAAwB1kE,EAAY9N,GAClC,IACI6yE,EADU,IAAIx+E,EAAAA,QAAkByZ,GACZtV,YACxB1G,EAAAA,EAAAA,KAAI+gF,EAAW,sBAAuB7yE,EAAWwB,sBACjD1P,EAAAA,EAAAA,KAAI+gF,EAAW,eAAgB7yE,EAAW5b,eAC1C0N,EAAAA,EAAAA,KAAI+gF,EAAW,yBAA0B7yE,EAAW/b,yBACpD6N,EAAAA,EAAAA,KAAI+gF,EAAW,kBAAmB7yE,EAAWmyE,gBAAkBnyE,EAAWmyE,gBAAkB,IAC5F,IAAIa,EAAmBH,EAAU7sF,sBAC7BO,EAAY,GAahB,GAAqB,QAAjBj2B,KAAK+hH,QAAmB,EAC1BvgF,EAAAA,EAAAA,KAAI+gF,EAAW,SAAUvB,EAAYtxE,EAAWp1B,QAAUrG,WAAWy7B,EAAWp1B,QAAUioG,EAAUjoG,SACpGknB,EAAAA,EAAAA,KAAI+gF,EAAW,UAAWvB,EAAYtxE,EAAWn1B,SAAWtG,WAAWy7B,EAAWn1B,SAAWgoG,EAAUhoG,UACvGinB,EAAAA,EAAAA,KAAI+gF,EAAW,mBAAoB7yE,EAAWlY,kBAC9C,IAAK,IAAI34B,EAAI,EAAGA,EAAI6wC,EAAW1iB,OAAOvvB,OAAQoB,KAC5C2iC,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GACjB,cACA6wC,EAAW1iB,OAAOnuB,GAAGqL,YAAcwlC,EAAW1iB,OAAOnuB,GAAGqL,YAAcw4G,EAAiB7jH,GAAGqL,cAE5Fs3B,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GACjB,iBACA6wC,EAAW1iB,OAAOnuB,GAAG2b,eACjBk1B,EAAW1iB,OAAOnuB,GAAG2b,eACrBkoG,EAAiB7jH,GAAG2b,iBAE1BgnB,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGi3B,wBAAyB,eAAgB4sF,EAAiB7jH,GAAG2b,iBACrFgnB,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GACjB,QACA6wC,EAAW1iB,OAAOnuB,GAAGg3B,OAAS6Z,EAAW1iB,OAAOnuB,GAAGg3B,OAAS6sF,EAAiB7jH,GAAGwsB,QAElFmW,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GAAGk3B,gBACpB,aACgD,IAAzC2Z,EAAW1iB,OAAOnuB,GAAGk3B,iBACe,OAAzC2Z,EAAW1iB,OAAOnuB,GAAGk3B,iBACpBxiB,MAAMm8B,EAAW1iB,OAAOnuB,GAAGk3B,iBAE1B2sF,EAAiB7jH,GAAGk3B,gBAAgBzyB,MADpCosC,EAAW1iB,OAAOnuB,GAAGk3B,kBAG3ByL,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGk3B,gBAAiB,WAAY,IACrDyL,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGk3B,gBAAiB,WAAY,IACrDyL,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GAAGm3B,UACpB,aACqC,IAA9B0Z,EAAW1iB,OAAOnuB,GAAGuB,MACI,OAA9BsvC,EAAW1iB,OAAOnuB,GAAGuB,MACpBmT,MAAMm8B,EAAW1iB,OAAOnuB,GAAGuB,MAE1BsiH,EAAiB7jH,GAAGm3B,UAAU1yB,MAD9BosC,EAAW1iB,OAAOnuB,GAAGuB,OAG3BohC,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGm3B,UAAW,WAAY,IAC/CwL,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGm3B,UAAW,WAAY,IAC/CwL,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GAAGm3B,UACpB,UACA0Z,EAAW1iB,OAAOnuB,GAAG+iH,YAAclyE,EAAW1iB,OAAOnuB,GAAG+iH,YAAcc,EAAiB7jH,GAAGm3B,UAAUzD,SAGxG0D,EAAYyZ,EAAWzZ,SACzB,MAAO,GAAqB,QAAjBj2B,KAAK+hH,QAAmB,EACjCvgF,EAAAA,EAAAA,KAAI+gF,EAAW,SAAUvB,EAAYtxE,EAAWizE,QAAU1uG,WAAWy7B,EAAWizE,QAAUJ,EAAUjoG,SACpGknB,EAAAA,EAAAA,KAAI+gF,EAAW,UAAWvB,EAAYtxE,EAAWkzE,SAAW3uG,WAAWy7B,EAAWkzE,SAAWL,EAAUhoG,UACvGinB,EAAAA,EAAAA,KAAI+gF,EAAW,mBAAoB7yE,EAAWmzE,eAC9C,IAAK,IAAIhkH,EAAI,EAAGA,EAAI6wC,EAAW7Z,OAAOp4B,OAAQoB,KAC5C2iC,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GACjB,cACA6wC,EAAW7Z,OAAOh3B,GAAG2P,MAAQkhC,EAAW7Z,OAAOh3B,GAAG2P,MAAQk0G,EAAiB7jH,GAAGqL,cAEhFs3B,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GACjB,iBACAmB,KAAKohH,2BAA2BphH,KAAKkhH,wBAAwBxxE,EAAY7wC,GAAI6jH,EAAiB7jH,MAEhG2iC,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGi3B,wBAAyB,eAAgB4sF,EAAiB7jH,GAAG2b,iBACrFgnB,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GACjB,QACA6wC,EAAW7Z,OAAOh3B,GAAGyE,MAAQosC,EAAW7Z,OAAOh3B,GAAGyE,MAAQo/G,EAAiB7jH,GAAGwsB,QAEhFmW,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGk3B,gBAAiB,QAAS,OAClDyL,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGk3B,gBAAiB,WAAY,IACrDyL,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGk3B,gBAAiB,WAAY,IACrDyL,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGm3B,UAAW,QAAS,OAC5CwL,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGm3B,UAAW,WAAY,IAC/CwL,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGm3B,UAAW,WAAY,IAC/CwL,EAAAA,EAAAA,KAAIkhF,EAAiB7jH,GAAGm3B,UAAW,UAAW0Z,EAAWtvC,KAAKvB,IAAM6wC,EAAWtvC,KAAKvB,GAAGwX,SAAW,OAClGmrB,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GACjB,0BACA6wC,EAAWozE,SAASjkH,GAChB6wC,EAAWozE,SAASjkH,GAAGkkH,OACrBrzE,EAAWozE,SAASjkH,GAAGkkH,OACvBrzE,EAAWozE,SAASjkH,GAAGyE,MACzB,OAENk+B,EAAAA,EAAAA,KACEkhF,EAAiB7jH,GACjB,wBACA6wC,EAAWtvC,KAAKvB,IAAM6wC,EAAWtvC,KAAKvB,GAAGyE,MAAQosC,EAAWtvC,KAAKvB,GAAGyE,MAAgB,MAGxF2yB,EAAYj2B,KAAKgjH,iBAAiBtzE,EAAWzZ,UAC/C,CAGA,OAFAuL,EAAAA,EAAAA,KAAI+gF,EAAW,wBAAyBG,IACxClhF,EAAAA,EAAAA,KAAI+gF,EAAW,YAAatsF,GACrBssF,CACT,CACAH,uBAAAA,CAAwB5kE,EAAY9N,GAWlC,IACI6yE,EADU,IAAIv+E,EAAAA,QAAkBwZ,GACZtV,WACpB9K,EAAoBsS,EAAWtS,kBAAoBsS,EAAWtS,kBAAoBsS,EAAW0yD,UACjG5gE,EAAAA,EAAAA,KAAI+gF,EAAW,oBAAqBnlF,GAAwCmlF,EAAUnlF,mBACtF,IAAIH,EAAqByS,EAAWzS,mBAAqByS,EAAWzS,mBAAqByS,EAAWuzE,WACpGzhF,EAAAA,EAAAA,KAAI+gF,EAAW,qBAAsBtlF,GAA0CslF,EAAUtlF,oBACzF,IAAIM,EAAoBmS,EAAWnS,kBAAoBmS,EAAWnS,kBAAoBmS,EAAWjf,UACjG+Q,EAAAA,EAAAA,KAAI+gF,EAAW,oBAAqBhlF,GAAwCglF,EAAUhlF,mBACtF,IAAIG,EAAoBgS,EAAWhS,kBAAoBgS,EAAWhS,kBAAoBgS,EAAWl/B,KACjGgxB,EAAAA,EAAAA,KAAI+gF,EAAW,oBAAqB7kF,GAAwC6kF,EAAU7kF,mBACtF,IAAIM,EAA0B0R,EAAW1R,wBACrC0R,EAAW1R,wBACX0R,EAAWwzE,eACf1hF,EAAAA,EAAAA,KACE+gF,EACA,0BACAvkF,GAAoDukF,EAAUvkF,yBAEhE,IAAIH,EAA2B6R,EAAW7R,yBACtC6R,EAAW7R,yBACX6R,EAAWyzE,gBACf3hF,EAAAA,EAAAA,KACE+gF,EACA,2BACA1kF,GAAsD0kF,EAAU1kF,0BAElE,IAAIM,EAA0BuR,EAAWvR,wBACrCuR,EAAWvR,wBACXuR,EAAW0zE,cAMf,OALA5hF,EAAAA,EAAAA,KACE+gF,EACA,0BACApkF,GAAoDokF,EAAUpkF,yBAEzDokF,CACT,CACAS,gBAAAA,CAAiBr9G,GACf,IAAIswB,EAAY,GAChB,IAAK,IAAIp3B,EAAI,EAAGA,EAAI8G,EAAMlI,OAAQoB,IAChCo3B,EAAUn3B,KAAK6G,EAAM9G,GAAK,GAE5B,OAAOo3B,CACT,CACAyc,IAAAA,CAAKx1C,EAAMu1C,EAAMne,EAAMF,EAAQmtF,GAC7B,IAAIvuE,EAAShzC,KAAK+yC,YAAYze,EAAMF,EAAQmtF,GAAmBvuE,OAC3DqwE,EAAM,IAAIllG,KACVmlG,EAAQD,EAAIjW,UACZhhE,GAAYlvC,EAAKO,OAAS,EAAIP,EAAO,cAAgBuxC,EAAAA,QAAIg+D,SAASvjG,cAAgBo6G,EAAMj6G,YAAc,QACtGk6G,EACFF,EAAIG,cACJ,KACC,KAAOH,EAAII,WAAa,IAAItmH,OAAO,GACpC,KACC,IAAMkmH,EAAIK,WAAWvmH,OAAO,GAC7B,KACC,MAASkmH,EAAIM,WAAa,IAAM,GAAM,IAAIxmH,OAAO,GAClD,KACC,IAAMkmH,EAAIO,cAAczmH,OAAO,GAChC,KACC,IAAMkmH,EAAIQ,cAAc1mH,OAAO,GAChC,KACCkmH,EAAIM,YAAc,GAAK,KAAO,MAI7Bj0E,EAAa,CACfwjE,KAAMh2G,EACN4mH,YAAarxE,EACbsxE,KALa,KAMbC,QAPY,MAQZC,OAAQjxE,EACRkxE,YAAaX,EACbY,YAAaZ,GAEX3xE,EAAiBn/B,KAAKK,UAAU48B,EAAY,KAAM,MAElDw+D,EAAO,IAAIkW,KAAK,CAACxyE,GAAiB,CAAE/gC,KAAM,0CAA2CwzG,SAAU,UAEnG,QAA2C,IAAhChoH,OAAOioH,UAAUC,WAC1BloH,OAAOioH,UAAUC,WAAWrW,EAAM9hE,OAC7B,CACL,IAAIo4E,EAAMnoH,OAAOmoH,KAAOnoH,OAAOooH,UAC3BC,EAAcF,EAAIG,gBAAgBzW,GAEtC,GAAI9hE,EAAU,CACZ,IAAIS,EAAIx3B,SAASuvG,cAAc,UACL,IAAf/3E,EAAEb,SACX3vC,OAAOk0C,SAAWm0E,GAElB73E,EAAEa,KAAOg3E,EACT73E,EAAEb,SAAWI,EACbS,EAAEg4E,QAEN,MACExoH,OAAOk0C,SAAWm0E,EAEpBF,EAAIM,gBAAgBJ,EACtB,EACAK,EAAAA,EAAAA,qBAAoB7nH,EAAMu1C,EAAM8wE,EAAevjH,KAAKkzB,UACtD,CACA2e,IAAAA,CAAKD,GACH,IAAIozE,EAAa,KACb5wF,EAAS,KACT6wF,EAAY,KACZnzE,EAAY,CAAEC,KAAMzxC,EAAAA,QAAgB0xC,eAAeC,QAAShmC,QAAS,IAEzE,IACE,GAAgC,OAA5BjM,KAAK+I,OAAO8xB,YAAsB,CACpCoqF,EAAYxyG,KAAKC,MAAMk/B,GACvB,IAAIhvB,GAAU,EACVm/F,EAAUkD,EAAUjB,QAAU,MAAQ,OAC1CxiF,EAAAA,EAAAA,KAAIxhC,KAAM,UAAW+hH,GAEjBkD,EAAU/R,OAAMtwF,EAAUA,GAAWqiG,EAAU/R,KAAKz1G,OAAS,GAC7DwnH,EAAUnB,cAAalhG,EAAUA,GAAWqiG,EAAUnB,YAAYrmH,OAAS,GAC3EwnH,EAAUlB,OAAMnhG,EAAUA,GAA8B,OAAnBqiG,EAAUlB,MAC/CkB,EAAUf,cAAathG,EAAUA,GAAWqiG,EAAUf,YAAYzmH,OAAS,GAC3EwnH,EAAUd,cAAavhG,EAAUA,GAAWqiG,EAAUd,YAAY1mH,OAAS,GAE/E,IAAIiyC,OAC0B,IAArBu1E,EAAUhB,QAA+C,OAArBgB,EAAUhB,OAAkBgB,EAAUhB,OAASgB,EAgB5F,GAfIriG,IACc,QAAZm/F,GACFn/F,EAAUA,GAAqC,OAA1B8sB,EAAW5uC,WAChC8hB,EAAUA,GAAyC,OAA9B8sB,EAAWrtB,eAChCO,EAAUA,GAAqC,OAA1B8sB,EAAWntB,WAChCK,EAAUA,GAAqC,OAA1B8sB,EAAWjtB,WAChCG,EAAUA,GAAoC,OAAzB8sB,EAAWhI,YAEhC9kB,EAAUA,GAA+B,OAApB8sB,EAAW7+B,KAC3B6+B,EAAWrtB,iBAAgBqtB,EAAWrtB,eAAiB,CAAC,GAC7DO,EAAUA,GAAqC,OAA1B8sB,EAAWyyE,WAChCv/F,EAAUA,GAAwC,OAA7B8sB,EAAW2yE,cAChCz/F,EAAUA,GAAuC,OAA5B8sB,EAAWw1E,eAGhCtiG,GAKF,GAHAwR,EAASp0B,KAAK8hH,YAAYpyE,EAAWhK,YAAagK,GAIhDtb,EAAO+d,WAAW5vB,YAClB6R,EAAO+d,WAAW5vB,WAAWmT,uBAC7BtB,EAAO+d,WAAW5vB,WAAWmT,sBAAsBj4B,OAAS,EAC5D,CACA,IAAI0nH,EA/iBO,SAAUn4F,EAAQjkB,GAEvC,IAAIq8G,EAAY,GAQhB,OAPAp4F,EAAOld,SAAStB,IACT42G,EAAUjyG,SAAS3E,EAAM6c,QAC5B+5F,EAAUtmH,KAAK0P,EAAM6c,MACvB,IAIK+5F,EAAU7jH,QAAQ8pB,IACvB,IAAIhrB,EAAS0I,EAAOC,SAASqiB,GAC7B,MAAiB,UAAVA,GAAqB,MAAQhrB,CAA0C,GAElF,CAiiBgCglH,CAAiBjxF,EAAO+d,WAAW5vB,WAAWmT,sBAAuB11B,KAAK+I,QAC1Fo8G,EAAc1nH,OAAS,IACzBq0C,EAAUC,KAAOzxC,EAAAA,QAAgB0xC,eAAeK,iBAChDP,EAAU7lC,QAAUk5G,EAAchvG,KAAK,OACvCmvG,EAAAA,EAAAA,4BAA2BxzE,EAAU7lC,QAASjM,KAAKkzB,WAEvD,OAEA4e,EAAUC,KAAOzxC,EAAAA,QAAgB0xC,eAAeI,YAEpD,MACEN,EAAUC,KAAOzxC,EAAAA,QAAgB0xC,eAAeO,QAEpD,CAAE,MAAO3S,GACPkS,EAAUC,KAAOzxC,EAAAA,QAAgB0xC,eAAeI,YAClD,CAAE,QACIN,EAAUC,OAASzxC,EAAAA,QAAgB0xC,eAAeC,UACpDszE,EAAAA,EAAAA,qBAAoBN,EAAWjlH,KAAKkzB,WACpC8xF,EAAa,CAAElzE,UAAWA,EAAWpM,YAAatR,EAAOsR,YAAayM,WAAY/d,EAAO+d,aAEzF6yE,EAAa,CAAElzE,UAAWA,EAAWpM,YAAa,KAAMyM,WAAY,KAExE,CAEA,OAAO6yE,CACT,CACAjxE,IAAAA,CAAK7kC,GACH,IAAIuhF,EAAS,GACT+0B,EAAS9lF,mBAAmBxwB,GAC5BsxC,GAAIilE,EAAAA,EAAAA,QAAO,IAAID,IACfzgE,EAAMvE,EAAE/rB,OACZ,MAAQswB,EAAI2gE,MACVj1B,EAAO3xF,KAAKimD,EAAIzhD,OAChByhD,EAAMvE,EAAE/rB,OAEV,OAAOkxF,EAAAA,EAAAA,qBAAmBC,EAAAA,EAAAA,gBAAen1B,GAC3C,CAEA9gD,GAAAA,CAAIrb,EAAM6d,EAAY0xB,EAAsB09C,GAE1C,IAAIzgH,GAAayrB,EAAAA,EAAAA,IAAU4lB,EAAWrxC,YACtCA,EAAaA,EAAW+kH,OAAO,GAAG38G,cAAgBpI,EAAW3D,MAAM,GACnE,IAAIusC,EAAa5oC,EAAa,iBAE1B6oC,EA3kBS,SAAUmyB,GACzB,IAAIt8C,EAAI,CAAC,KAAM,KAAM,KAAM,MACzB6gB,EAAIy7B,EAAI,IACV,OAAOA,GAAKt8C,GAAG6gB,EAAI,IAAM,KAAO7gB,EAAE6gB,IAAM7gB,EAAE,GAC5C,CAukBqBsmG,CAAWjiD,EAAqBj+D,UAAY,UAAYi+D,EAAqBpiE,aAC9FkoC,GAAck6B,EAAqB/9D,oBAC/B,IACA+9D,EAAqB/9D,oBAAoBuD,YACF,cAAtCw6D,EAAqBpiE,aAA+B,MAAQ,IAC7D,GAEJ,IAGI4hH,EAAM,IAAIllG,KACVolG,EACFF,EAAIG,cAAcn6G,YACjB,KAAOg6G,EAAII,WAAa,IAAItmH,OAAO,IACnC,IAAMkmH,EAAIK,WAAWvmH,OAAO,IAC5B,IAAMkmH,EAAIM,YAAYxmH,OAAO,IAC7B,IAAMkmH,EAAIO,cAAczmH,OAAO,IAC/B,IAAMkmH,EAAIQ,cAAc1mH,OAAO,GAE9BkD,EAASL,KAAK+yC,YAAYze,EAAM6d,EAAYovE,GAC5CwE,EAAc1lH,EAAO2yC,OAErBgzE,EACF,0HAkBF,OAjBAA,EAAQA,EAAM93G,QAAQ,SAAUw7B,GAChCs8E,EAAQA,EAAM93G,QAAQ,SAAUy7B,GAChCq8E,EAAQA,EAAM93G,QAAQ,SAlBP,MAmBf83G,EAAQA,EAAM93G,QAAQ,YApBR,OAqBd83G,EAAQA,EAAM93G,QAAQ,UAAWq1G,GACjCyC,EAAQA,EAAM93G,QAAQ,UAAWq1G,GACjCyC,EAAQA,EAAM93G,QAAQ,UAAU+3G,EAAAA,EAAAA,gBAAeF,EAAYrgF,cAC3DsgF,EAAQA,EAAM93G,QAAQ,iBAAiBg4G,EAAAA,EAAAA,WAAUH,EAAYjlH,aAC7DklH,EAAQA,EAAM93G,QAAQ,oBAAoBi4G,EAAAA,EAAAA,mBAAkBJ,EAAY1jG,iBACxE2jG,EAAQA,EAAM93G,QAAQ,gBAAgBk4G,EAAAA,EAAAA,eAAcL,EAAYxjG,aAChEyjG,EAAQA,EAAM93G,QAAQ,gBAAgBm4G,EAAAA,EAAAA,eAAcN,EAAYtjG,aAOzD,CACL6jG,QAASN,EACThzE,OAAQ+yE,EACRvX,YAAa7kE,EACbpnB,YATegkG,EAAAA,EAAAA,wBACflmH,EAAOH,MAAMsb,QAAQksB,UAAUza,gBAC/B5sB,EAAOH,MAAMsb,QAAQksB,UAAUld,mBASnC,CAEA0nB,eAAAA,CAAgBN,EAAgBO,GAC9B,MAAM8yE,EAAYxyG,KAAKC,MAAMk/B,GACvBmwE,EAAUkD,EAAUjB,QAEpBljH,EAAaihH,EAAUkD,EAAUhB,OAAOnjH,WAAcmkH,EAAUhB,OAAOpzG,KAAK/P,YAAc,GAEhG,IAAKA,GAA6B,KAAfA,EAAmB,OAAO,EAE7C,MAAMuhB,EAAiB4iG,EAAUhB,OAAO5hG,eAExC,IAAKA,GAAkB2uB,EAAAA,cAA0B3uB,GAAiB,OAAO,EAEzE,MAAMmkG,EACJ1lH,IAAeR,EAAAA,QAAgBQ,WAAWC,UAC1C,IAAMkT,WAAWoO,EAAelhB,iBAAmB8S,WAAWoO,EAAetf,mBAE/E,GAAIg/G,EAAS,CAEX,MAAMx/F,EAAa0iG,EAAUhB,OAAO1hG,WACpC,GAAIA,IAAeyuB,EAAAA,cAA0BzuB,GAC3C,GA1oBmB,SAAUkkG,EAAMC,GACzC,IAAIl3F,EAAKi3F,EAAKh3G,MAAM,KAChBggB,EAwoBoC,MAxoB1BhgB,MAAM,KACpB,MAAMoe,EAAIzsB,KAAK8+C,IAAI1wB,EAAG/xB,OAAQgyB,EAAGhyB,QACjC,IAAK,IAAIoB,EAAI,EAAGA,EAAIgvB,IAAKhvB,EAAG,CAG1B,GAFA2wB,EAAG3wB,GAAK6Q,SAAS8f,EAAG3wB,GAAI,IACxB4wB,EAAG5wB,GAAK6Q,SAAS+f,EAAG5wB,GAAI,IACpB2wB,EAAG3wB,GAAK4wB,EAAG5wB,GAAI,OAAO,EAC1B,GAAI2wB,EAAG3wB,GAAK4wB,EAAG5wB,GAAI,OAAQ,CAC7B,CACA,OAAO2wB,EAAG/xB,SAAWgyB,EAAGhyB,OAAS,EAAI+xB,EAAG/xB,OAASgyB,EAAGhyB,QAAU,EAAI,CACpE,CA+nBYkpH,CAAqB5E,GAAkB,EAAG,CAE5C,MAAM7wE,EAAsB3uB,EAAW2uB,oBACvC,GAAIA,EAEF,MAAiB,YADHA,EAAoB,oBAGtC,MAEE,GAAIpwC,IAAeR,EAAAA,QAAgBQ,WAAW+B,SAAW2jH,EAAY,CACnE,MAAMx5F,EAASzK,EAAWyK,OACpB2yB,EAAa6mE,EAAax5F,EAAOvvB,OAAS,EAAIuvB,EAAOvvB,OAE3D,IAAK,IAAIoB,EAAI,EAAGA,EAAI8gD,EAAY9gD,IAC9B,GAAImuB,EAAOnuB,GAAG2b,iBAAmBla,EAAAA,QAAgB0vB,mBAAmBI,UAClE,OAAO,CAGb,CAGN,MAGE,GAAI+hB,EAAW5vB,WAAY,CACzB,IAAIi7B,EAAa,IAAIC,EAAAA,QAAWz9C,KAAK+I,QACrCy0C,EAAWppB,OAAOtzB,WAAaqxC,EAAWrxC,WAC1C08C,EAAWppB,OAAO/R,eAAiB8vB,EAAW9vB,eAC9Cm7B,EAAWppB,OAAO7R,WAAa4vB,EAAW5vB,WAC1C,MAAMyK,EAASwwB,EAAWhiC,QAAQ+G,WAAW0K,gBAC7C,IAAK,IAAIpuB,EAAI,EAAGA,EAAImuB,EAAOvvB,OAAQoB,IAAK,CACtC,MAAM2P,EAAQwe,EAAOnuB,GACfuN,EAAsBoC,EAAMgM,eAAetM,QAAQ,KAAM,IAE/D,IADkB6T,EAAAA,EAAAA,IAASvT,EAAM3N,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,QAExD5N,EAAAA,QAAgBQ,WAAW+B,SACzCuJ,IAAwB9L,EAAAA,QAAgB0vB,mBAAmBI,UAE3D,OAAO,CAEX,CACF,CAEF,OAAO,CACT,GACD5nB,GAAAd,EAAAA,EAAAA,GAAAT,EAAAU,UAAA,aAAAU,GAAA,CAAAuB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAA7M,YAAA,OAAAwL,GAAAf,EAAAA,EAAAA,GAAAT,EAAAU,UAAA,UAtqBEW,EAAAA,QAAO,CAAAsB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAA7M,YAAA,OAAAyL,GAAAhB,EAAAA,EAAAA,GAAAT,EAAAU,UAAA,UACPW,EAAAA,QAAO,CAAAsB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAA7M,YAAA,OAAAgK,wOC/DV,MAAM2/G,EAAsB,IACtBC,EAAe,CACnB,cAAe,IACfxkG,eAAgB,IAChBE,WAAY,IACZE,WAAY,IACZ,aAAc,KAEVqkG,EAAgB,IAChBC,EAAU,CACdlkH,QAAS,IACTG,SAAU,IACVjC,SAAU,KAENimH,EAAwB,sBACxBC,EAAiB,CACrB7mH,KAAM,IACNL,SAAU,IACV6C,oBAAqB,IACrBG,kBAAmB,IACnBqB,oBAAqB,IACrBnD,kBAAmB,IACnB6E,oBAAqB,IACrB4zB,qBAAsB,IACtBv4B,gBAAiB,KAEnB,IAAI+lH,EAAa,CACfC,GAAI,IACJ,MAAO,KAET,MAAMC,EAAoB,kBACpBC,EAAa,CACjB/sG,OAAQ,IACRC,QAAS,IACTuZ,aAAc,IACdH,uBAAwB,IACxB6D,iBAAkB,IAClBxK,OAAQ,IACRiJ,UAAW,IACXib,oBAAqB,KAEjBo2E,EAAe,CACnBhlC,MAAO,IACPE,aAAc,IACdD,MAAO,IACPglC,8BAA+B,IAC/BC,0BAA2B,KAEvBC,EAA0B,CAC9B5zF,YAAa,IACbqB,SAAU,KAENwyF,EAAuB,CAI3B,oBAAqB,KAEjBC,EAA8B,CAGlCC,QAAS,KACTC,UAAW,MAEPC,EAAS,CACb59G,YAAa,IACb6rB,gBAAiB,IACjB31B,KAAM,IACNwhH,YAAa,IACbpnG,eAAgB,IAChBqb,OAAQ,KAEJkyF,EAAiB,CACrB33F,UAAW,IACXG,iBAAkB,IAClBE,SAAU,IACVU,iBAAkB,IAClBlB,WAAY,KAER+3F,EAAoB,kBACpBC,EAAa,CACjB7qF,kBAAmB,IACnBH,mBAAoB,IACpBM,kBAAmB,IACnBG,kBAAmB,IACnBM,wBAAyB,IACzBH,yBAA0B,IAC1BM,wBAAyB,KAErB+pF,EAAmB,CACvB,KAAM,IACN,KAAM,IACN,MAAO,IACP,MAAO,IACP5wE,MAAO,IACP,OAAQ,IACR,OAAQ,KAGV,IAAI6wE,EAAU,SAAUt2G,GACtB,OAAOA,SAAoD,IAAfA,EAAIpU,MAClD,EAEO,SAASwoH,EAAe3xF,GAC7B,IAAIj0B,EAASumH,EACb,IAAK,IAAI/nH,EAAI,EAAGA,EAAIy1B,EAAK72B,OAAQoB,IAC3BgoH,EAAavyF,EAAKz1B,MACpBwB,GAAUwmH,EAAavyF,EAAKz1B,KAGhC,OAAOwB,CACT,CAEO,SAAS6lH,EAAUr1G,GACxB,IAAIxQ,EAASymH,EAIb,OAHIC,EAAQl2G,KACVxQ,GAAU0mH,EAAQl2G,IAEbxQ,CACT,CAEO,SAAS8lH,EAAkBhmH,GAChC,IAAIE,EAAS2mH,EACToB,EAAuB,GAiB3B,OAhBA1pH,OAAOC,KAAKwB,GAAqB2P,SAAStI,IACpC4gH,EAAqB3qH,OAAS,IAAO0qH,EAAQlB,EAAez/G,MAAS2gH,EAAQhoH,EAAoBqH,MACnG4gH,GAAwB,KAEnB,aADC5gH,EAEJ4gH,GAAwBnB,EAAyB,SAAIC,EAAW/mH,EAAoBJ,UAI9EooH,EAAQlB,EAAez/G,KAAS2gH,EAAQhoH,EAAoBqH,MAChE4gH,GAAwBnB,EAAez/G,GAAOrH,EAAoBqH,GAAK6B,WAI7E,IAEKhJ,EAAO6N,QAAQ,mBAAoBk6G,EAC5C,CAEO,SAAShC,EAAcl5F,GAC5B,IAAI7sB,EAAS+mH,EACTiB,EAAmB,GAsEvB,OArEA3pH,OAAOC,KAAKuuB,GAAiBpd,SAAStI,IAGpC,OAFI6gH,EAAiB5qH,OAAS,IAAO0qH,EAAQd,EAAW7/G,MAAS2gH,EAAQj7F,EAAgB1lB,MACvF6gH,GAAoB,KACd7gH,GACN,IAAK,mBACH6gH,GAAoBhB,EAA6B,kBAAKn6F,EAAgBsK,iBAAmB,IAAM,KAC/F,MAEF,IAAK,eACH6wF,GAAoBhB,EAAyB,aAAIC,EAAap6F,EAAgB4G,cAC9E,MAEF,IAAK,yBACHu0F,GACEhB,EAAmC,uBAAII,EAAwBv6F,EAAgByG,wBACjF,MAEF,IAAK,YAAa,CAChB,IAAI20F,EAAa,GACjB,GAAIp7F,EAAgB+I,UAAUx4B,OAAS,EAAG,CACxC,IAAK,IAAIoB,EAAI,EAAGA,EAAIquB,EAAgB+I,UAAUx4B,OAAQoB,IAChDypH,EAAW7qH,OAAS,IAAM0qH,EAAQj7F,EAAgB+I,UAAUp3B,MAAKypH,GAAc,KACnFA,GAAcjB,EAAsB,UAAIn6F,EAAgB+I,UAAUp3B,GAAGwK,WAEvEg/G,GAAoBC,CACtB,CACA,KACF,CACA,IAAK,SAAU,CACb,IAAIC,EAAa,GACjB,GAAIr7F,EAAgBF,OAAOvvB,OAAS,EAAG,CACrC,IAAK,IAAIoB,EAAI,EAAGA,EAAIquB,EAAgBF,OAAOvvB,OAAQoB,IAC7C0pH,EAAW9qH,OAAS,IAAM0qH,EAAQj7F,EAAgBF,OAAOnuB,MAAK0pH,GAAc,KAChFA,GAAcC,EAAUnB,EAAmB,OAAGn6F,EAAgBF,OAAOnuB,IAEvEwpH,GAAoBE,CACtB,CACA,KACF,CACA,IAAK,sBAAuB,CAC1B,IAAIE,EAA4B,GAC5Bv7F,EAAgBgkB,sBAClBxyC,OAAOC,KAAKuuB,EAAgBgkB,qBAAqBphC,SAAStI,IAGpD2gH,EAAQT,EAAqBlgH,KAC7B2gH,EAAQj7F,EAAgBgkB,oBAAoB1pC,KAC5C2gH,EAAQR,EAA4Bz6F,EAAgBgkB,oBAAoB1pC,OAGtEihH,EAA0BhrH,OAAS,IAAGgrH,GAA6B,KACvEA,GACEf,EAAqBlgH,GACrBmgH,EAA4Bz6F,EAAgBgkB,oBAAoB1pC,IAAM6B,WAC1E,IAEEo/G,EAA0BhrH,OAAS,IACrC4qH,GAAoB,GAAGhB,EAAgC,uBAAKoB,OAEhE,KACF,CACA,QACQN,EAAQd,EAAW7/G,KAAS2gH,EAAQj7F,EAAgB1lB,MACxD6gH,GAAoBhB,EAAW7/G,GAAO0lB,EAAgB1lB,GAAK6B,YAIjE,IAEKhJ,EAAO6N,QAAQ,eAAgBm6G,EACxC,CAEO,SAASG,EAAUE,EAAcxlE,GACtC,IAAIylE,EAAc,GAqBlB,OApBAjqH,OAAOC,KAAKukD,GAAYpzC,SAAStI,IAG/B,OAFImhH,EAAYlrH,OAAS,QAAgC,IAApBylD,EAAW17C,IAA4C,OAApB07C,EAAW17C,KACjFmhH,GAAe,KACTnhH,GACN,IAAK,cACHmhH,GAAeb,EAAoB,aAAK5kE,EAAW0+D,YAAc,IAAM,KACvE,MAEF,IAAK,iBACH+G,GAAeb,EAAuB,eAAIC,EAAe7kE,EAAW1oC,gBACpE,MAEF,QACQ2tG,EAAQL,EAAOtgH,KAAS2gH,EAAQjlE,EAAW17C,MAC/CmhH,GAAeb,EAAOtgH,GAAO07C,EAAW17C,GAAK6B,YAInD,IAEKq/G,EAAe,IAAMC,EAAc,GAC5C,CAEO,SAAStC,EAAcuC,GAC5B,IAAIvoH,EAAS2nH,EACTa,EAAmB,GAoBvB,OAnBAnqH,OAAOC,KAAKiqH,GAAiB94G,SAAStI,IAGpC,OAFIqhH,EAAiBprH,OAAS,IAAO0qH,EAAQF,EAAWzgH,MAAS2gH,EAAQS,EAAgBphH,MACvFqhH,GAAoB,KACdrhH,GACN,IAAK,oBACL,IAAK,qBACL,IAAK,oBACL,IAAK,oBACHqhH,GAAoBZ,EAAWzgH,GAAO0gH,EAAiBU,EAAgBphH,IACvE,MAEF,QACQ2gH,EAAQF,EAAWzgH,KAAS2gH,EAAQS,EAAgBphH,MACxDqhH,GAAoBZ,EAAWzgH,GAAOohH,EAAgBphH,GAAK6B,YAIjE,IAEKhJ,EAAO6N,QAAQ,eAAgB26G,EACxC,CAEO,SAAStC,EAAuBv5F,EAAQmyB,GAC7C,IAAI58B,EAAa,CAAC,EAClB,IAAK,IAAI1jB,EAAI,EAAGA,EAAImuB,EAAOvvB,OAAQoB,IAAK,CACtC,IAAI2P,EAAQwe,EAAOnuB,GACf0uB,EAAU4xB,EAAStgD,GACnBuN,EAAsBoC,EAAMgM,eAAetM,QAAQ,KAAM,IACzDO,GAAYsT,EAAAA,EAAAA,IAASvT,EAAM3N,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,MAClEhE,EAAcsE,EAAMtE,YACpB4+G,EAAc,CAAC,EAKnB,OAJAA,EAAkB,KAAIr6G,EACtBq6G,EAAkB,MAAIz1G,EAAAA,EAAAA,mBAAkB7E,EAAMpO,KAAK8iB,QACnD4lG,EAAgB,IAAIz1G,EAAAA,EAAAA,mBAAkB7E,EAAM2jB,QAAQjP,QACpD4lG,EAAe,EAAIt6G,EAAM8jB,OAAOC,SAAUlf,EAAAA,EAAAA,mBAAkB7E,EAAM8jB,OAAOpP,QAAU,MAC3E9W,GACN,KAAK9L,EAAAA,QAAgB0vB,mBAAmB5vB,KACtC0oH,EAAgB,GAAIv7F,EAAQsC,GAAGvsB,MAC/BwlH,EAAgB,GAAIv7F,EAAQuC,GAAGxsB,MAC/B,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBC,WACtC64F,EAAgB,GAAIv7F,EAAQ9gB,GAAGnJ,MAC3BiqB,EAAQsC,GAAGvsB,QAAUhD,EAAAA,QAAgBm1C,OAAOU,WAC9C2yE,EAAgB,GAAIv7F,EAAQsC,GAAGvsB,OAE7BiqB,EAAQuC,GAAGxsB,MAAQ,IACrBwlH,EAAgB,GAAIv7F,EAAQuC,GAAGxsB,OAEjCwlH,EAAgB,GAAIv7F,EAAQxhB,GAAGzI,MAC/B,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBI,UACtC04F,EAAgB,GAAIv7F,EAAQ9gB,GAAGnJ,MAC/BwlH,EAAgB,GAAIv7F,EAAQqC,GAAGtsB,MAC3BiqB,EAAQsC,GAAGvsB,QAAUhD,EAAAA,QAAgBm1C,OAAOU,WAC9C2yE,EAAgB,GAAIv7F,EAAQsC,GAAGvsB,OAE7BiqB,EAAQuC,GAAGxsB,MAAQ,IACrBwlH,EAAgB,GAAIv7F,EAAQuC,GAAGxsB,OAEjCwlH,EAAgB,GAAIv7F,EAAQxhB,GAAGzI,MAC/BwlH,EAAgB,GAAIv7F,EAAQlhB,GAAG/I,MAC/B,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBS,SACtCq4F,EAAgB,GAAIv7F,EAAQ9gB,GAAGnJ,MAC3BiqB,EAAQsC,GAAGvsB,QAAUhD,EAAAA,QAAgBm1C,OAAOU,WAC9C2yE,EAAgB,GAAIv7F,EAAQsC,GAAGvsB,OAE7BiqB,EAAQuC,GAAGxsB,MAAQ,IACrBwlH,EAAgB,GAAIv7F,EAAQuC,GAAGxsB,OAEjCwlH,EAAgB,GAAIv7F,EAAQxhB,GAAGzI,MAC/BwlH,EAAgB,GAAIv7F,EAAQgrB,GAAGj1C,MAC/B,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBO,iBAClC9hB,IAAcnO,EAAAA,QAAgBQ,WAAW+B,SAC3CimH,EAAgB,GAAIv7F,EAAQ9gB,GAAGnJ,MAC/BwlH,EAAgB,GAAIv7F,EAAQqC,GAAGtsB,MAC/BwlH,EAAgB,GAAIv7F,EAAQ0pB,GAAG3zC,MAC/BwlH,EAAgB,GAAIv7F,EAAQxhB,GAAGzI,MAC/BwlH,EAAgB,GAAIv7F,EAAQlhB,GAAG/I,QAE/BwlH,EAAgB,GAAIv7F,EAAQ9gB,GAAGnJ,MAC/BwlH,EAAgB,GAAIv7F,EAAQqC,GAAGtsB,MAC/BwlH,EAAgB,GAAIv7F,EAAQxhB,GAAGzI,MAC/BwlH,EAAgB,GAAIv7F,EAAQlhB,GAAG/I,MAC/BwlH,EAAgB,GAAIv7F,EAAQhhB,GAAGjJ,OAEjC,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBmB,iBAClC1iB,IAAcnO,EAAAA,QAAgBQ,WAAWC,UAC3C+nH,EAAgB,GAAIv7F,EAAQ9gB,GAAGnJ,MAC/BwlH,EAAgB,GAAIv7F,EAAQqC,GAAGtsB,MAC3BiqB,EAAQsC,GAAGvsB,MAAQ,IACrBwlH,EAAgB,GAAIv7F,EAAQsC,GAAGvsB,OAE7BiqB,EAAQuC,GAAGxsB,QAAUhD,EAAAA,QAAgBm1C,OAAOU,WAC9C2yE,EAAgB,GAAIv7F,EAAQuC,GAAGxsB,OAEjCwlH,EAAgB,GAAIv7F,EAAQ0pB,GAAG3zC,MAC/BwlH,EAAgB,GAAIv7F,EAAQxhB,GAAGzI,MAC/BwlH,EAAgB,GAAIv7F,EAAQlhB,GAAG/I,OACtBmL,IAAcnO,EAAAA,QAAgBQ,WAAWm0C,QAClD6zE,EAAgB,GAAIv7F,EAAQ9gB,GAAGnJ,MAC/BwlH,EAAgB,GAAIv7F,EAAQqC,GAAGtsB,MAC3BiqB,EAAQsC,GAAGvsB,MAAQ,IACrBwlH,EAAgB,GAAIv7F,EAAQsC,GAAGvsB,OAE7BiqB,EAAQuC,GAAGxsB,QAAUhD,EAAAA,QAAgBm1C,OAAOU,WAC9C2yE,EAAgB,GAAIv7F,EAAQuC,GAAGxsB,OAEjCwlH,EAAgB,GAAIv7F,EAAQ0pB,GAAG3zC,MAC/BwlH,EAAgB,GAAIv7F,EAAQ0pB,GAAG3zC,MAC/BwlH,EAAgB,GAAIv7F,EAAQxhB,GAAGzI,MAC/BwlH,EAAgB,GAAIv7F,EAAQlhB,GAAG/I,OAKrCif,EAAWrY,GAAe4+G,CAC5B,CACA,OAAOvmG,CACT,2ICxXA,MAAwEwmG,EAAe,EACrFC,EAAW,EACPC,EAAY,EAChBC,EAAS,EACTC,EAAQ,EACRC,EAAU,EACVC,EAAU,EACVC,EAAQ,EACV,IAAIC,EAAkB,CACpBC,SAAU,CACR,CAAC,OAAQ,IACT,CAAC,OAAQ,IACT,CAAC,OAAQ,IACT,CAAC,SAAU,KACX,CAAC,OAAQ,IACT,CAAC,UAAW,MAEdC,QAAS,CACP,CAAC,OAAQ,IACT,CAAC,UAAW,IACZ,CAAC,WAAY,KACb,CAAC,OAAQ,IACT,CAAC,OAAQ,IACT,CAAC,UAAW,MAEdC,QAAS,CACP,CAAC,WAAY,KACb,CAAC,UAAW,IACZ,CAAC,OAAQ,IACT,CAAC,SAAU,KACX,CAAC,UAAW,KACZ,CAAC,UAAW,MAEdC,OAAQ,CACN,CAAC,WAAY,IACb,CAAC,OAAQ,IACT,CAAC,OAAQ,IACT,CAAC,SAAU,KACX,CAAC,UAAW,IACZ,CAAC,UAAW,MAEdC,QAAS,CACP,CAAC,UAAW,KACZ,CAAC,UAAW,KACZ,CAAC,UAAW,KACZ,CAAC,UAAW,KACZ,CAAC,OAAQ,IACT,CAAC,UAAW,OAIT,SAASC,EAAUC,GACxB,IAAID,EAAY,QAAQrsH,QAAQssH,GAEhC,OADID,EAAY,IAAGA,EAAYb,GACxBa,CACT,CAEO,SAAUpE,EAAOv2G,GACtB,IACE1H,EACAlE,EACAymH,EAHEC,EAAU,GAId,IAAK,IAAIC,KAASC,EAAUh7G,GAC1B,OAAQ+6G,EAAM,IACZ,KAAKf,EACH,KAAM,UACR,KAAKG,EACHW,GAAWxiH,EACXA,EAAM,GACN,MACF,KAAK8hH,EACH,CACE,IAAIxlB,EAAMkmB,EAAQvsH,OAClBusH,EAAUA,EAAQ7sH,MAAM,EAAG2mG,EAAM,GACjCt8F,EAAM,GACNlE,EAAQ,EACV,CACA,MACF,KAAK6lH,EACH3hH,EAAMyiH,EAAM,GACZ,MACF,KAAKb,EACH,CACE9lH,EAAQ2mH,EAAM,GACd,IAAIE,EAAKH,EAAUxiH,EACnBuiH,EAAgB,MAARviH,GAAeuiH,IAAUzmH,EAAQA,EAAQymH,OAC3C,CAAEI,KAAIH,UAASxiH,MAAKlE,QAAOymH,QACnC,EAIR,CAEO,SAAUG,EAAUE,GACzB,IAAIC,EAAQ,WACRx6G,EAAc,GAClB,IAAK,IAAIi6G,KAAMM,EAAO,CACpB,IAAKE,EAAW1iH,GAAU2hH,EAAgBc,GAAOR,EAAUC,IAC3D,OAAQliH,GACN,IAAK,IACHiI,GAAei6G,EACf,MACF,IAAK,SACG,CAACX,EAAOW,GACd,MACF,IAAK,SACG,CAACV,EAASv5G,GAChBA,EAAc,GACd,MACF,IAAK,SACG,CAACw5G,GACP,MACF,IAAK,SACG,CAACC,GACP,MACF,IAAK,SACG,CAACF,EAASv5G,GAChBA,EAAc,QACR,CAACy5G,GAIX,GADAe,EAAQC,EACM,SAAVD,EAAkB,MAAO,CAACnB,EAChC,CACoB,KAAhBr5G,SACI,CAACu5G,EAASv5G,QACV,CAACy5G,IAET,IAAKgB,GAAaf,EAAgBc,GAAOtB,GACzC,MAAqB,SAAduB,EAAuB,CAACpB,GAAU,CAACD,EAC5C,CAEO,SAASrD,EAAe12G,GAC7B,IAAIq7G,EAAc,CAChBC,EAAG,CAAE3zG,KAAM,OAAQkoG,SAAU,UAC7BvL,EAAG,CAAE38F,KAAM,cAAekoG,SAAU,UACpC0L,EAAG,CAAE5zG,KAAM,OAAQkoG,SAAU,UAC7B2L,EAAG,CAAE7zG,KAAM,UAAWkoG,SAAU,UAChCrL,EAAG,CAAE78F,KAAM,cAAekoG,SAAU,YACpC4L,EAAG,CAAE9zG,KAAM,cAAekoG,SAAU,YAEpC5/G,EAAG,CAAE0X,KAAM,SAAUkoG,SAAU,UAC/B6L,GAAI,CAAE/zG,KAAM,cAAekoG,SAAU,eACrC8L,GAAI,CAAEh0G,KAAM,aAAckoG,SAAU,cAEpC+L,GAAI,CAAEj0G,KAAM,iBAAkBkoG,SAAU,UACxCgM,IAAK,CAAEl0G,KAAM,OAAQkoG,SAAU,UAC/BiM,IAAK,CAAEn0G,KAAM,WAAYkoG,SAAU,YACnCkM,IAAK,CAAEp0G,KAAM,sBAAuBkoG,SAAU,UAC9CmM,IAAK,CAAEr0G,KAAM,oBAAqBkoG,SAAU,UAC5CoM,IAAK,CAAEt0G,KAAM,sBAAuBkoG,SAAU,UAC9CqM,IAAK,CAAEv0G,KAAM,oBAAqBkoG,SAAU,UAC5CsM,IAAK,CAAEx0G,KAAM,kBAAmBkoG,SAAU,UAC1CuM,IAAK,CAAEz0G,KAAM,sBAAuBkoG,SAAU,UAC9CwM,IAAK,CAAE10G,KAAM,uBAAwBkoG,SAAU,UAE/CyM,GAAI,CAAE30G,KAAM,aAAckoG,SAAU,UACpC0M,IAAK,CAAE50G,KAAM,SAAUkoG,SAAU,UACjC2M,IAAK,CAAE70G,KAAM,UAAWkoG,SAAU,UAClC4M,IAAK,CAAE90G,KAAM,eAAgBkoG,SAAU,2BACvC6M,IAAK,CAAE/0G,KAAM,yBAA0BkoG,SAAU,qCACjD8M,IAAK,CAAEh1G,KAAM,mBAAoBkoG,SAAU,WAC3C+M,IAAK,CAAEj1G,KAAM,iBAAkBkoG,SAAU,UACzCgN,IAAK,CAAEl1G,KAAM,YAAakoG,SAAU,aACpCiN,IAAK,CAAEn1G,KAAM,sBAAuBkoG,SAAU,UAC9CkN,KAAM,CAAEp1G,KAAM,oBAAqBkoG,SAAU,kCAE7CmN,IAAK,CAAEr1G,KAAM,QAASkoG,SAAU,UAChCoN,KAAM,CAAEt1G,KAAM,cAAekoG,SAAU,UACvCqN,KAAM,CAAEv1G,KAAM,kBAAmBkoG,SAAU,UAC3CsN,KAAM,CAAEx1G,KAAM,OAAQkoG,SAAU,UAChCuN,KAAM,CAAEz1G,KAAM,cAAekoG,SAAU,WACvCwN,KAAM,CAAE11G,KAAM,iBAAkBkoG,SAAU,6BAC1CyN,KAAM,CAAE31G,KAAM,SAAUkoG,SAAU,UAElC0N,GAAI,CAAE51G,KAAM,aAAckoG,SAAU,UACpC2N,IAAK,CAAE71G,KAAM,oBAAqBkoG,SAAU,cAC5C4N,IAAK,CAAE91G,KAAM,qBAAsBkoG,SAAU,cAC7C6N,IAAK,CAAE/1G,KAAM,oBAAqBkoG,SAAU,cAC5C8N,IAAK,CAAEh2G,KAAM,oBAAqBkoG,SAAU,cAC5C+N,IAAK,CAAEj2G,KAAM,0BAA2BkoG,SAAU,UAClDgO,IAAK,CAAEl2G,KAAM,2BAA4BkoG,SAAU,UACnDiO,IAAK,CAAEn2G,KAAM,0BAA2BkoG,SAAU,UAElDkO,GAAI,CAAEp2G,KAAM,YAAakoG,SAAU,WAEjC1+G,EAAS,GACX41B,EAAY,GACZk0D,GAAa,EACb+iC,EAAc,GACdC,EAAW,GAkBb,OAjBAj+G,EAAKY,SAAQ,CAAC3Q,EAAGN,KACf,IAAIi9D,EAAIyuD,EAAYprH,EAAE6qH,QAAU7qH,EAAEqI,KAChCtK,EAAO4+D,EAAEjlD,KACTvT,EAAQnE,EAAEmE,MACVuN,EAAOirD,EAAEijD,SACE,cAAT7hH,GACuB,IAArB+4B,EAAUx4B,SACZyvH,EAAc/tH,EAAE6qH,QAChBmD,EAAWjwH,EACXitF,EAAYtrF,GAEVquH,IAAgB/tH,EAAE6qH,SAAWmD,IAAajwH,GAAM+4B,EAAUn3B,KAAK4Q,SAASpM,KAE5EjD,EAAOvB,KAAK,CAAEkrH,QAAS7qH,EAAE6qH,QAAS9sH,KAAMA,EAAMoG,MAAO8pH,EAAa9pH,EAAOuN,GAAOk5G,MAAO5qH,EAAE4qH,OAC3F,IAEF1pH,EAAO8yD,OAAOg3B,EAAW,EAAG,CAAE6/B,QAASkD,EAAahwH,KAAMiwH,EAAU7pH,MAAO2yB,EAAW8zF,MAAO,KACtF1pH,CACT,CAEO,SAASslH,EAAmBz2G,GACjC,IAAI7O,EAAS,GACXqvC,EAAa,GACbrtB,EAAiB,GACjBE,EAAa,GACbE,EAAa,GACbilB,EAAY,GACZ1a,EAAS,GACP+8F,EAAQ,GACRsD,EAAkB,CAAC,EA2CvB,OA1CAn+G,EAAKY,SAAS3Q,IACZ,OAAQA,EAAE6qH,SACR,IAAK,IACHt6E,EAAWvwC,EAAEjC,MAAQiC,EAAEmE,MACvB,MACF,IAAK,KACH+e,EAAeljB,EAAEjC,MAAQiC,EAAEmE,MAC3B,MACF,IAAK,KACHif,EAAWpjB,EAAEjC,MAAQiC,EAAEmE,MACvB,MACF,IAAK,KACHmf,EAAWtjB,EAAEjC,MAAQiC,EAAEmE,MACvB,MACF,IAAK,KACHokC,EAAUvoC,EAAEjC,MAAQiC,EAAEmE,MACtB,MACF,IAAK,MACEymH,EAAM52G,SAAShU,EAAE4qH,QACpBA,EAAMjrH,KAAKK,EAAE4qH,OAEf/8F,EAAO,GAAG7tB,EAAE4qH,SAAS5qH,EAAEjC,QAAUiC,EAAEmE,MACnC,MACF,IAAK,MACH+pH,EAAgBluH,EAAEjC,MAAQiC,EAAEmE,MAC5B,MAEF,QACEjD,EAAOlB,EAAEjC,MAAQiC,EAAEmE,MAEvB,IAEFosC,EAA2B,eAAIhxC,OAAOkM,OAAO,CAAC,EAAGyX,GACjDE,EAAmB,OA2FrB,SAAuByK,EAAQ+8F,GAC7B,IAAI1pH,EAAS,GAUb,OATA0pH,EAAMj6G,SAASw9G,IACb,IAAI9+G,EAAQ,GACZ,IAAK,IAAIhH,KAAOwlB,EACVxlB,EAAIhK,QAAQ,GAAG8vH,OAAS,IAC1B9+G,EAAMhH,EAAIrK,MAAM,IAAM6vB,EAAOxlB,IAGjCnH,EAAOvB,KAAKJ,OAAOkM,OAAO,CAAC,EAAG4D,GAAO,IAEhCnO,CACT,CAvGyBktH,CAAcvgG,EAAQ+8F,GACD,IAAxCrrH,OAAOC,KAAK0uH,GAAiB5vH,QAAgB4vH,EAAgBzvH,cAAgBc,SAE/E6jB,EAAgC,oBAAI8qG,GAEtC39E,EAAuB,WAAIhxC,OAAOkM,OAAO,CAAC,EAAG2X,GAC7CmtB,EAAuB,WAAIhxC,OAAOkM,OAAO,CAAC,EAAG6X,GAC7CitB,EAAsB,UAAIhxC,OAAOkM,OAAO,CAAC,EAAG88B,GAC5CrnC,EAAe,OAAI3B,OAAOkM,OAAO,CAAC,EAAG8kC,GAC9Bj9B,KAAKK,UAAUpU,OAAOkM,OAAO,CAAC,EAAGvK,GAAS,KAAM,KACzD,CAGA,MAAMmtH,EAAyB,CAC7BjwD,EAAG,cACH/9C,EAAG,iBACH/V,EAAG,aACHL,EAAG,aACH0yD,EAAG,cAEC2xD,EAAwB,CAAEzsB,EAAG,UAAWv+F,EAAG,WAAY+wD,EAAG,YAC1Dk6D,EAAsB,CAAErtF,EAAG,MAAOlhC,EAAG,MACrCwuH,EAA0B,CAAEntE,EAAG,QAASsb,EAAG,QAASz7B,EAAG,eAAgB12B,EAAG,iCAC1EikH,EAAoC,CAAE9xD,EAAG,cAAet8C,EAAG,YAC3DquG,EAA4B,CAChCruG,EAAG,YACHpjB,EAAG,mBACHyC,EAAG,WACHM,EAAG,mBACHo+D,EAAG,cAECuwD,EAAuB,CAAEC,EAAG,KAAMC,EAAG,KAAMvD,EAAG,MAAO/uB,EAAG,MAAO78F,EAAG,QAASovH,EAAG,OAAQ1wD,EAAG,QACzF2wD,EAAiC,CAAEC,GAAI,UAAWC,GAAI,aAE5D,SAAShB,EAAa9pH,EAAOuN,GAC3B,OAAQA,GACN,IAAK,SA0BL,QACE,OAAOvN,EAzBT,IAAK,UACH,OA4BN,SAAwBA,GACtB,OAA2B,IAApBoM,SAASpM,EAClB,CA9Ba+qH,CAAe/qH,GACxB,IAAK,SACH,OAAO2Q,WAAW3Q,GACpB,IAAK,WACH,OA4BN,SAAqBgrH,GACnB,IAAIC,EAAOD,EAASnxH,MAAM,EAAG,GAC3BqxH,EAAQF,EAASnxH,MAAM,EAAG,GAC1BsxH,EAAMH,EAASnxH,MAAM,EAAG,GACxB0+C,EAAOyyE,EAASnxH,MAAM,EAAG,IACzBuxH,EAAUJ,EAASnxH,MAAM,GAAI,IAC7BwxH,EAAUL,EAASnxH,MAAM,IAG3B,MAAO,GAAGoxH,KAAQC,KAASC,KAFhB/+G,SAASmsC,IAAS,GAAK,IAAIh7B,OAAOnR,SAASmsC,GAAQ,IAAI1+C,OAAO,GAAK0+C,KAElC6yE,KAAWC,KAD5Cj/G,SAASmsC,IAAS,GAAK,KAAO,MAE3C,CAtCa+yE,CAAYtrH,GACrB,IAAK,cACH,OAgEN,SAAyBA,EAAO6hB,GAC9B,IAAI0pG,GAAc,EACdxuH,EAAS,IAAIiD,GAAOyL,KAAKnG,IACrBA,KAAQuc,IAAQ0pG,GAAc,GAC7BjmH,KAAQuc,EAAQA,EAAMvc,GAAQ,QAEvC,OAAOimH,EAAc,KAAOxuH,CAC9B,CAvEayuH,CAAgBxrH,EAAOkqH,GAChC,IAAK,YACH,OAoCN,SAA0BlqH,GACxB,IAAIjD,EAAS,GAIb,MAHA,IAAIiD,GAAOwM,SAAS3Q,IAClBkB,EAAOvB,KAAK4Q,SAASvQ,GAAG,IAEnBkB,CACT,CA1Ca0uH,CAAiBzrH,GAC1B,IAAK,aACH,OAAO0rH,EAAmB1rH,EAAOmqH,GACnC,IAAK,WACH,OAAOuB,EAAmB1rH,EAAOoqH,GACnC,IAAK,0BACH,OAAOsB,EAAmB1rH,EAAOqqH,GACnC,IAAK,oCACH,OAAOqB,EAAmB1rH,EAAOsqH,GACnC,IAAK,4BACH,OAAOoB,EAAmB1rH,EAAOuqH,GACnC,IAAK,iCACH,OAAOmB,EAAmB1rH,EAAO4qH,GACnC,IAAK,aACH,OAAOc,EAAmB1rH,EAAOwqH,GAIvC,CAwCA,SAASkB,EAAmB1rH,EAAO6hB,GACjC,OAAO7hB,KAAS6hB,EAAQA,EAAM7hB,GAAS,IACzC,oHCpWA,IAEqB2rH,GAAc5mH,GAChCC,EAAAA,EAAAA,QAAQ,iBAAgBrB,EADZ,cAA6BsmG,KAAQ3vG,WAAAA,GAAA,SAAAC,YAAA0K,EAAAA,EAAAA,GAAA,kBAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,cAAAE,EAAA,MAIlDkqC,WAAAA,CAAYz1C,EAAM01C,EAAQC,EAAYG,GACpC,IAAIqwE,EAAM,IAAIllG,KACVmlG,EAAQD,EAAIjW,UACZhhE,EAAWlvC,EAAKO,OAAS,EAAIP,EAAKgR,QAAQ,gBAAiB,IAAM,kBAAoBo1G,EAAMj6G,WAC3Fk6G,EACFF,EAAIG,cACJ,KACC,KAAOH,EAAII,WAAa,IAAItmH,OAAO,GACpC,KACC,IAAMkmH,EAAIK,WAAWvmH,OAAO,GAC7B,KACC,MAASkmH,EAAIM,WAAa,IAAM,GAAM,IAAIxmH,OAAO,GAClD,KACC,IAAMkmH,EAAIO,cAAczmH,OAAO,GAChC,KACC,IAAMkmH,EAAIQ,cAAc1mH,OAAO,GAChC,KACCkmH,EAAIM,YAAc,GAAK,KAAO,MAC7BuL,EAAY,CACdrjF,OAAQ,EACRqnE,KAAMh2G,EACN4mH,YAAa5mH,EACbiyH,SAAU/iF,EACVgjF,WAAY,CACVlc,KAAMh2G,EACN4mH,YAAa5mH,EACb6mH,KAAM,KACNC,QAAS,MACTC,OAAQjxE,EACRkxE,YAAaX,EACbY,YAAaZ,GAEf8L,gBAAiBx8E,EACjBy8E,WAAY18E,GAEd,OAAOg7D,MAAM,GAAG5tG,KAAK6I,WAAW2pG,gBAAgBxyG,KAAK6I,WAAWC,YAAa,CAC3E+kG,QAAS,CACP4E,OAAQ,mBACR,eAAgB,oBAElB3E,OAAQ,OACR4E,KAAM,IAAMC,mBAAmBlgG,KAAKK,UAAUo8G,IAAc,MAE3D1qF,MAAMwpE,GACEA,EAASC,SAEjBzoE,OAAO3f,IACN7lB,KAAKiiC,OAAOpc,MAAM,wBAAwBA,KACnC,CAAErC,QAAS,KAExB,GACDhb,GAAAd,EAAAA,EAAAA,GAAAT,EAAAU,UAAA,cAAAU,GAAA,CAAAuB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAA7M,YAAA,OAAAwL,GAAAf,EAAAA,EAAAA,GAAAT,EAAAU,UAAA,UArDEW,EAAAA,QAAO,CAAAsB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAA7M,YAAA,OAAAgK,iHCJV,MAAMsoH,EAAoB,SAAUC,EAAwBvtF,GAE1D,IAAIwtF,EAAY,GAChB,MAAMliF,EAASl4B,SAASm4B,YACxB,IAAK,MAAMkiF,KAASniF,EAClB,IACE,MAAME,EAAUiiF,EAAMhiF,KACtB,GACGD,GAAWA,EAAQt6B,SAAS9W,OAAOk0C,SAASo/E,UAE3CliF,GAAWiiF,EAAM9hF,SAASnwC,OAAS,GAA0D,eAApDiyH,EAAM9hF,SAAS,GAAoBG,aAC9E,CACA,MAAMJ,EAAQ+hF,EAAM9hF,SACpB,IAAK,IAAIrvB,EAAI,EAAGA,EAAIovB,EAAMlwC,OAAQ8gB,IAAK,CACrC,MAAMsvB,EAAOF,EAAMpvB,GACnB,GAAIsvB,EAAKC,MAAO,CACd,MAAMC,EAAeF,EAAKE,aAC1B,OACgD,IAAhCA,EAAavwC,QAAQ,MAAegyH,EAAc/4G,iBAAiBs3B,GAAgB,IACvFtwC,QAA2B,UAAjBswC,KAClB0hF,GAAa1hF,EAAe,MAAQF,EAAKC,MAAM8hF,QAAU,OAE7D,CAAE,MAAO/pG,GAEP,MAAMgqG,EAAahqG,EACnBoc,EAAO3zB,IAAI,kBAAkBiQ,QAAQkvB,WAAiBM,MAAmB8hF,EAAW1uG,QAAQ9X,WAC9F,CACF,CACF,CACF,CACF,CAAE,MAAOwc,GACP,MAAMgqG,EAAahqG,EACnBoc,EAAO3zB,IAAI,SAAWuhH,EAAW1uG,QAAQ9X,WAC3C,CAEF,MAAMmW,EAAInK,SAASuvG,cAAc,SACjCplG,EAAE8qF,aAAa,OAAQ,YACvB9qF,EAAEswG,UAAYL,EACDp6G,SAASuvG,cAAc,QAC/BmL,YAAYvwG,GACjBgwG,EAAcQ,aAAaxwG,EAAGgwG,EAAcS,WAC9C,EAAE,IAEmBC,GAAejpH,EAArB,cAA8BsmG,KAAQ3vG,WAAAA,GAAA,SAAAC,YAAA0K,EAAAA,EAAAA,GAAA,cAAAC,EAAA,MAGnD8iC,iBAAAA,CAAkB6kF,GAChB,IAAIC,EACJ,MAAMC,EAASh7G,SAASuvG,cAAc,UACtC,OAAO,IAAItkF,SAAQ,CAACC,EAASyO,KAC3B,MAAMshF,EAA0Bj7G,SAASmqB,cAAc2wF,EAAc,QACjEG,IACFf,EAAkBe,EAAStwH,KAAKiiC,QAChCouF,EAAOluH,MAASmuH,EAA0BnuH,MAAMouH,QAAQjtH,MACxD+sH,EAAOnuH,OAAUouH,EAA0BpuH,OAAOquH,QAAQjtH,OAE5D,MAAMktH,GAAY,IAAIC,eAAgBC,kBAAkBJ,GAClDK,EAAMN,EAAOO,WAAW,MACxBC,EAASx0H,OAAOmoH,KAAOnoH,OAAOooH,UAC9BqM,EAAM,IAAIC,MACVC,EAAM,IAAI5M,KAAK,CAACoM,GAAY,CAAE3/G,KAAM,gCACpClI,EAAMkoH,EAAOlM,gBAAgBqM,GACnCF,EAAIG,OAAS,KACPN,GAAKA,EAAIO,UAAUJ,EAAK,EAAG,GAC/BV,EAAYC,EAAOc,UAAU,aAC7BN,EAAO/L,gBAAgBn8G,GACL,OAAdynH,EACF7vF,EAAQ,CAAErxB,KAAMkhH,EAAWjuH,MAAO2uH,EAAI3uH,MAAOD,OAAQ4uH,EAAI5uH,OAAQkvH,OAAQ,QAEzEpiF,EAAO,CAAE9/B,KAAM,KAAM/M,MAAO,EAAGD,OAAQ,EAAGkvH,OAAQ,OACpD,EAEFN,EAAIO,IAAM1oH,CAAG,GAEjB,CAEA4iC,kBAAAA,CAAmB4kF,EAAqBmB,GACtC,IAAIlB,EACJ,OAAO,IAAI9vF,SAAQ,CAACC,EAASyO,KAC3B,MAAMuiF,EAAcl8G,SAASoB,iBAAiB05G,EAAc,QAC5D,IAAK,MAAMqB,KAAWD,EAEpBhC,EAAkBiC,EAASxxH,KAAKiiC,QAGlC,MAAMwvF,EAA+Bp8G,SAASmqB,cAAc2wF,GACxDsB,EACFH,EAAaG,EAAU,CAAEC,QAAS,EAAGC,QAAS,IAAKntF,MAAM6rF,IACvDD,EAAYC,EAAOc,UAAU,aACX,OAAdf,EACF7vF,EAAQ,CAAErxB,KAAMkhH,EAAWjuH,MAAOkuH,EAAOluH,MAAOD,OAAQmuH,EAAOnuH,OAAQkvH,OAAQ,QAE/EpiF,EAAO,CAAE9/B,KAAM,KAAM/M,MAAO,EAAGD,OAAQ,EAAGkvH,OAAQ,OACpD,IAGFpiF,EAAO,CAAE9/B,KAAM,KAAM/M,MAAO,EAAGD,OAAQ,EAAGkvH,OAAQ,OACpD,GAEJ,GACD5oH,GAAAd,EAAAA,EAAAA,GAAAT,EAAAU,UAAA,UAxDEW,EAAAA,QAAO,CAAAsB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAA7M,YAAA,OAAAgK,kfC3CV,IAAI2qH,EAAgB,CAClB,cAAe,cACfvvG,eAAgB,eAChBE,WAAY,cACZE,WAAY,eAGVovG,EAAwB,SAAUC,EAAUpjB,GAC9C,IAAIqjB,EAAc,IAAI5zG,KAAK2zG,GAI3B,MAAO,cAHW,IAAI3zG,KAAKuwF,GAGY,cAAgBqjB,EAAc,oBAFnDD,EAAWpjB,EAG/B,EAEIsjB,EAAkB,SAAUhlG,EAAQrnB,GACtC,IAAItF,EAAS,GACb,IAAK,IAAIxB,EAAI,EAAGA,EAAI8G,EAAMlI,OAAQoB,IAChC,IAAK,IAAI0f,EAAI,EAAGA,EAAIyO,EAAOvvB,OAAQ8gB,IACjC,GAAI5Y,EAAM9G,KAAO0f,EAAG,CAClBle,EAAOvB,KAAKkuB,EAAOzO,GAAG8M,OACtB,KACF,CAGJ,OAAOhrB,CACT,EAEO,SAAS0mC,EAAqBkrF,EAAWvrF,EAAWxT,GACzD,IAAIg/F,EAAY,KACZC,EAAc,KAClB,GAAIzrF,EAAW,CACbwrF,EAAYN,EAAclrF,GAC1B,IAAI67E,EAAY0P,EAAU79F,QAAOrS,EAAAA,EAAAA,IAAS2kB,IAC1C,QAAQ3kB,EAAAA,EAAAA,IAAS2kB,IACf,KAAKpmC,EAAAA,QAAgBg0B,KAAKxzB,WACxBqxH,EAAc5P,EACd,MAEF,KAAKjiH,EAAAA,QAAgBg0B,KAAKjS,eAAgB,CACxC,IAAIvhB,EAAamxH,EAAU79F,OAAO9zB,EAAAA,QAAgBg0B,KAAKxzB,YACnDsxH,EAAaH,EAAUz2G,QAAQ26D,KAAIp0D,EAAAA,EAAAA,IAAS2kB,IAC5C2rF,EAAe9uH,EAAAA,iBACjBg/G,EAAUx/G,kBACVzC,EAAAA,QAAgBkD,WAAWK,YAC3B,MAEE+B,EAAWwsH,EAAWxsH,SACtBq3F,EAAuB,IAAbr3F,EAAiB,KAAoB,IAAbA,EAAiB,KAAoB,IAAbA,EAAiB,KAAO,KAClFnE,EAAe8gH,EAAU5oF,qBACzBM,EAAgBsoF,EAAUz8G,oBAAsB,EAAIy8G,EAAUz8G,oBAAoBuD,WAAa,GAC/FipH,EAAYF,EAAW1/F,eAC3By/F,EACErxH,EACA,IACAuxH,EACA,IACAzsH,EACAq3F,EACA,UACAx7F,EACA,IACAw4B,GACCA,EAAgB,KAAO,KACxBq4F,GACCA,EAAY,EAAI,WAAa,WAChC,KACF,CACA,KAAKhyH,EAAAA,QAAgBg0B,KAAK/R,WACxB4vG,EACE,OACA5P,EAAUjoG,OACV,QACAioG,EAAUhoG,QACV,IACAgoG,EAAU5uF,uBACV4uF,EAAUzuF,aACZ,MAEF,KAAKxzB,EAAAA,QAAgBg0B,KAAK7R,WACxB0vG,EACE5P,EAAUtlF,mBACV,IACAslF,EAAUnlF,kBACV,IACAmlF,EAAUhlF,kBACV,IACAglF,EAAU7kF,kBACV,IACA6kF,EAAU1kF,yBACV,IACA0kF,EAAUvkF,wBACV,IACAukF,EAAUpkF,wBAMlB,CAEI,MAAO+zF,GACTh/F,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAAUylB,EAAWC,EAGnD,CAEO,SAASvqF,EAA2Bd,EAAQ0rF,EAAQ3rF,EAAS3T,GAClE,GAAI4T,GAAUD,EAAS,CACrB,IAAIqrF,EAAY,aACZC,GAA2B,QAAZtrF,EAAoB,eAAiB,uBAAyBC,EAAS,OAAS0rF,EACnGt/F,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAAUylB,EAAWC,EAEjD,CACF,CAEO,SAASxqF,EAAoCznC,EAAOgzB,EAAW/pB,GACpE,IACI6jB,EAAS9sB,EAAMk0B,OAAO7R,WAAWmT,sBACjC/vB,EAAQzF,EAAMk0B,OAAO7R,WAAW0T,UAChCiU,EAAa8nF,EAAgBhlG,EAAQrnB,GACrC8sH,EAAW,OAASvyH,EAAMsb,QAAQ+G,WAAWwI,mBAAmB1hB,WAChE8oH,EACF,QACAjoF,EAAW/zB,KAAK,MAChB,KACAs8G,EACA,KACAC,EAAAA,kBAA0BxyH,EAAMsb,QAAQiH,WAAYtZ,EAAM,SAC5D+pB,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAZV,oBAY+B0lB,EACjD,CAEO,SAASrhF,EAA6B6hF,EAASnvG,EAAQtjB,EAAOgzB,EAAW/pB,GAC9E,IAAI+oH,EAAYS,GAAsB,MAAXnvG,EAAiB,eAA4B,MAAXA,EAAiB,gBAAkB,WAC5FwJ,EAAS9sB,EAAMk0B,OAAO7R,WAAWmT,sBACjC/vB,EAAQzF,EAAMk0B,OAAO7R,WAAW0T,UAChCiU,EAAa8nF,EAAgBhlG,EAAQrnB,GACrC8sH,EAAW,OAASvyH,EAAMsb,QAAQ+G,WAAWwI,mBAAmB1hB,WAChE8oH,EACF,QACAjoF,EAAW/zB,KAAK,MAChB,KACAs8G,EACA,KACAC,EAAAA,kBAA0BxyH,EAAMsb,QAAQiH,WAAYtZ,EAAM,SAC5D+pB,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAAUylB,EAAWC,EACjD,CAEO,SAAS3hF,EAA0BoiF,EAAUC,EAAQ3/F,GAC1D,IACIi/F,EAAcS,EAAW,IAAMC,EACnC3/F,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAFV,OAE+B0lB,EAEjD,CAEO,SAASpN,EAAoBr7E,EAAYopF,EAAmBC,EAAU7/F,GAC3E,IACI8/F,EAAU,CACZtpF,WAAYA,EACZopF,kBAAmBA,EACnBG,SAAUxkF,EAAAA,QAAIg+D,SACdsmB,SAAUA,GAEZ7/F,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAPV,OAO+Bh6F,KAAKK,UAAUkgH,GAChE,CAEO,SAASzN,EAAoB71E,EAAYxc,GAC9C,IACImwF,EAAM,IAAIllG,KACV+0G,EACF7P,EAAIG,cACJ,KACC,KAAOH,EAAII,WAAa,IAAItmH,OAAO,GACpC,KACC,IAAMkmH,EAAIK,WAAWvmH,OAAO,GAC7B,KACC,MAASkmH,EAAIM,WAAa,IAAM,GAAM,IAAIxmH,OAAO,GAClD,KACC,IAAMkmH,EAAIO,cAAczmH,OAAO,GAChC,KACC,IAAMkmH,EAAIQ,cAAc1mH,OAAO,GAChC,KACCkmH,EAAIM,YAAc,GAAK,KAAO,MAC7BqP,EAAU,CACZtpF,WAAYgG,EAAWwjE,KACvB4f,kBAAmBpjF,EAAWo0E,YAC9BmP,SAAUxkF,EAAAA,QAAIg+D,SACdymB,SAAUA,GAEZhgG,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAtBV,OAsB+Bh6F,KAAKK,UAAUkgH,GAChE,CAEO,SAAS9/E,EAAqBs7D,EAAa57D,EAAQC,EAAYnD,EAAYxc,GAChF,IACI8/F,EAAU,CACZF,kBAAmBtkB,EACnB2kB,WAAYvgF,EACZwgF,gBAAiBvgF,EACjBwgF,YAAa3jF,GAEfxc,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAPV,YAO+Bh6F,KAAKK,UAAUkgH,GAEhE,CAEO,SAAS/hF,EAAwB1pC,EAAOrH,EAAOgzB,EAAW/pB,GAC/D,IAAI+oH,EAAY3qH,EACZylB,EAAS9sB,EAAMk0B,OAAO7R,WAAWmT,sBACjC/vB,EAAQzF,EAAMk0B,OAAO7R,WAAW0T,UAChCiU,EAAa8nF,EAAgBhlG,EAAQrnB,GACrC8sH,EAAW,OAASvyH,EAAMsb,QAAQ+G,WAAWwI,mBAAmB1hB,WAChE8oH,EACF,QACAjoF,EAAW/zB,KAAK,MAChB,KACAs8G,EACA,KACAC,EAAAA,kBAA0BxyH,EAAMsb,QAAQiH,WAAYtZ,EAAM,SAC5D+pB,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAAUylB,EAAWC,EACjD,CAEO,SAASjlB,EAAkBomB,EAAWC,EAASrgG,GACpD,IACIi/F,EAAcN,EAAsB0B,EAASD,GACjDpgG,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAFV,UAE+B0lB,EACjD,CAEO,SAAS7M,EAA2BkO,EAActgG,GACvD,IACIi/F,EAAcqB,EAAe,iCACjCtgG,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAFV,oBAE+B0lB,EACjD,CAEO,SAASl/F,EAA0BF,EAAUC,EAAWE,GAC7D,IACIi/F,EAAc,GAAGp/F,MAAaC,IAClCE,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAFV,eAE+B0lB,EACjD,CAEO,SAASxjB,EAAiB8kB,EAAMr7G,EAAS8a,GAC9C,IAAIg/F,EAAY,YAAcuB,EAC1BT,EAAU,CAAC,EACX56G,EAAQw2F,MACVokB,EAAa,IAAI56G,EAAQw2F,IAAI8kB,OAAO,EAAG,IAErCt7G,EAAQq2F,QACVukB,EAAe,MAAI56G,EAAQq2F,MAAMilB,OAAO,EAAG,IAEzCt7G,EAAQlb,OACV81H,EAAc,KAAI56G,EAAQlb,MAExBkb,EAAQzP,MACVqqH,EAAa,IAAI56G,EAAQzP,KAEvByP,EAAQoL,SACVwvG,EAAgB,OAAI56G,EAAQoL,OAAOuuB,KACnCihF,EAAoB,WAAI56G,EAAQoL,OAAOrC,SAErC/I,EAAQy2F,YACNz2F,EAAQurB,SACVqvF,EAAc,KAAI56G,EAAQurB,QAAUvrB,EAAQy2F,UAC5CmkB,EAAe,MAAI56G,EAAQurB,QAAQgwF,eAEnCX,EAAe,MAAI56G,EAAQy2F,UAAU8kB,eAGzCzgG,EAAUq/F,YAAY9jF,EAAAA,QAAIg+D,SAAUylB,EAAWz/G,KAAKK,UAAUkgH,GAChE,yOC7QO,SAAS5hG,EAAe9tB,GAE7B,OADaA,EAAQhD,EAAAA,QAAgBm1C,OAAOU,SAAW,MAAQ7yC,EAAQhD,EAAAA,QAAgBm1C,OAAOU,SAAW,IAE3G,CAEO,SAASyM,EAAkBt/C,GAChC,OAAOA,OACT,CAEO,SAASswH,EAActwH,GAC5B,OAAqC,IAA9B5E,OAAOC,KAAK2E,GAAO7F,MAC5B,CAQO,SAASiqB,EAAMmsG,GACpB,OAAOp+D,EAAAA,EAAAA,GAAKo+D,GAAK,EACnB,CAEO,SAASjvE,EAAsBptB,GACpC,IAAIn3B,EAAS,EAKb,OAJIm3B,IACFn3B,EAAS,GAGJA,CACT,CAQO,SAASsM,EAAUhH,GACxB,IAAImuH,EAAY,GAGhB,OAFgBpkH,SAAS/J,IAGvB,KAAK,EACHmuH,EAAY,cACZ,MACF,KAAK,EACHA,EAAY,eACZ,MACF,KAAK,EACHA,EAAY,cACZ,MACF,KAAK,EACHA,EAAY,eACZ,MACF,KAAK,EACHA,EAAY,cACZ,MACF,KAAK,EACHA,EAAY,cACZ,MACF,KAAK,EACHA,EAAY,gBACZ,MACF,KAAK,EACHA,EAAY,eACZ,MACF,KAAK,EACHA,EAAY,eACZ,MACF,KAAK,GACHA,EAAY,cAIhB,OAAOA,CACT,CAEO,SAASC,EAAiBljH,GAC/B,IAAImjH,EAAWnjH,EACf,OAAQA,GACN,KAAKvQ,EAAAA,QAAgBQ,WAAW+B,QAC9BmxH,EAAW,qBACX,MACF,KAAK1zH,EAAAA,QAAgBQ,WAAWkC,SAC9BgxH,EAAW,sBACX,MACF,KAAK1zH,EAAAA,QAAgBQ,WAAWC,SAC9BizH,EAAW,sBACX,MACF,KAAK1zH,EAAAA,QAAgBQ,WAAWk0C,SAC9Bg/E,EAAW,sBAIf,OAAOA,CACT,CAQO,SAASC,IAGd,IAFA,IAAIC,EAAS,EAEJr1H,EAAI,EAAGA,EAAIhB,UAAUJ,OAAQoB,IACpCq1H,EAAS,EAAIr2H,UAAUgB,GAAKq1H,EAK9B,OAFe,EAAIA,CAGrB,0KClHA,IAAIpzH,EAAa,SAAUA,EAAYqI,EAAMgrH,GAC3C,OAAOhrH,EACJC,EAAE,qCAAuCtI,EAAY,CAAEmX,OAAQk8G,GAAkChrH,EAAK8O,SACtG5O,UACL,EAEI+qH,EAAwB,SAAU5jC,EAAOrnF,EAAMgrH,GACjD,OAAOhrH,EAAKC,EAAE,0CAA4ConF,EAAM5qF,SAAU,CACxEnE,aAAc0H,EAAKC,EAAE,2CAA6ConF,EAAM/uF,aAAc,CACpFwW,OAAQk8G,GAAkChrH,EAAK8O,SAEjDA,OAAQk8G,GAAkChrH,EAAK8O,QAEnD,EAEIo8G,EAAkB,SAAU/wH,EAAO6F,EAAM4kG,EAAQomB,GACnD,OAAOhrH,EAAKC,EAAE,kCAAmC,CAC/C9F,MAAOC,EAAAA,iBAAwBD,EAAOhD,EAAAA,QAAgBkD,WAAWK,YAAa,MAC9EkqG,OAAQA,EACR91F,OAAQk8G,GAAkChrH,EAAK8O,QAEnD,EAEIq8G,EAAiB,SAAU9jC,GAC7B,IAAI+jC,EAAc/jC,EAAM72D,uBAAyBr5B,EAAAA,QAAgBmB,aAAaC,UAC9E,OAAO8uF,EAAM1qF,oBACT,IAAM0qF,EAAM1qF,qBAAuByuH,EAAcj0H,EAAAA,QAAgBC,UAAU83B,GAAK,IAChF,EACN,EAEIm8F,EAAmB,SAAUhkC,EAAOrnF,EAAMgrH,GAM5C,IAAIM,EALqB,CACvBnyC,MAAO,4CACPE,aAAc,oDACdD,MAAO,6CAE8BiO,EAAM18D,cAY7C,OAXIxzB,EAAAA,QAAgBszB,8BAA8BsB,WAAas7D,EAAM78D,yBACnE8gG,EAAkB,2DAEGtrH,EACpBC,EAAE,mCAAoC,CACrC0qB,aAAc3qB,EAAKC,EAAEqrH,EAAiB,CAAEx8G,OAAQk8G,GAAkChrH,EAAK8O,SACvFy8G,MAAOlkC,EAAMl2E,OACbq6G,OAAQnkC,EAAMj2E,QACdtC,OAAQk8G,GAAkChrH,EAAK8O,SAEhD5O,UAEL,EAEIurH,EAAmB,SAAUpkC,EAAOrnF,EAAMgrH,GAC5C,OAAO3jC,EAAMh5D,iBACTruB,EACGC,EAAE,uCAAwC,CAAE6O,OAAQk8G,GAAkChrH,EAAK8O,SAC3F5O,WACH,EACN,EAEIwrH,EAAmB,SAAUrkC,EAAOrnF,EAAMk1B,EAAc81F,GAQ1D,OAPuBhrH,EACpBC,EAAE,mCAAoC,CACrC0rH,WAAYtkC,EAAMpzD,kBAClB23F,WAAYvkC,EAAMvzD,mBAClBhlB,OAAQk8G,GAAkChrH,EAAK8O,SAEhD5O,YAGAg1B,EACG,KACAl1B,EACGC,EAAE,4CAA6C,CAC9C4rH,WAAYxkC,EAAMjzD,kBAClBtlB,OAAQk8G,GAAkChrH,EAAK8O,SAEhD5O,WACH,GAER,EAEO,SAAS4rH,EAAc/0H,EAAOiJ,EAAMgrH,GACzC,IAAI9zH,EAAS,GAIb,OAHIH,EAAMhD,OACRmD,EAASS,EAAWZ,EAAMhD,KAAMiM,EAAMgrH,IAEjC9zH,CACT,CAEO,SAAS60H,EAAsBh1H,EAAOiJ,EAAMgrH,GACjD,IAAIzwH,EAAyByF,EAC1BC,EAAE,2CAA4C,CAAE6O,OAAQk8G,GAAkChrH,EAAK8O,SAC/F5O,WACClI,EAAkB,GACtB,GAAIjB,EAAMqB,OAAOrE,OAASoD,EAAAA,QAAgBQ,WAAWC,SAAU,CAC7D,IAAI8D,EAAuBsE,EACxBC,EAAE,yCAA0C,CAAE6O,OAAQk8G,GAAkChrH,EAAK8O,SAC7F5O,WACHlI,EACE,KAAOkzH,EAAgBn0H,EAAMC,oBAAoBgB,gBAAiBgI,EAAMtE,EAAsBsvH,EAClG,CACA,OACEn0H,KAAKi1H,cAAc/0H,EAAMqB,OAAQ4H,EAAMgrH,GACvC,KACAC,EAAsBl0H,EAAOiJ,EAAMgrH,GACnCG,EAAep0H,EAAMC,oBAAqBg0H,GAC1C,KACAE,EAAgBn0H,EAAMC,oBAAoB4C,kBAAmBoG,EAAMzF,EAAwBywH,GAC3FhzH,CAEJ,CAEO,SAASg0H,EAAkBj1H,EAAOiJ,EAAMgrH,GAC7C,OACEn0H,KAAKk1H,sBAAsBh1H,EAAMmiB,eAAgBlZ,EAAMgrH,GACvD,KACAK,EAAiBt0H,EAAMgtB,gBAAiB/jB,EAAMgrH,GAC9CS,EAAiB10H,EAAMgtB,gBAAiB/jB,EAAMgrH,EAElD,CAEO,SAASiB,EAAkBl1H,EAAOiJ,EAAMgrH,GAC7C,MAAM91F,EAAen+B,EAAMqiB,WAAWsI,aAAahW,MAAMjM,GAChDA,EAAKy6C,yBAA2B/iD,EAAAA,QAAgB0vB,mBAAmBS,WAM5E,OAJ0BzwB,KAAKm1H,kBAAkBj1H,EAAMqiB,WAAYpZ,EAAMgrH,GAI9C,MAHIj0H,EAAMovB,eACjCulG,EAAiB30H,EAAMovB,eAAgBnmB,EAAMk1B,EAAc81F,GAC3D,GAEN,4IC/HA,IAAIkB,EAAgC,SAAUC,EAAeC,EAAWC,GACtE,IAAItmH,EAAO,GAGXA,EAAKpQ,KAAKw2H,GAGV,IAAK,IAAIz2H,EAAI,EAAGA,EAAI02H,EAAU93H,OAAQoB,IAAK,CACzC,IAAIgf,EAAM,GAEN43G,EAAWF,EAAU12H,GACzB,IAAK,IAAI0f,EAAI,EAAGA,EAAIk3G,EAASh4H,OAAQ8gB,IAEnCV,EAAI/e,KAAK22H,EAASl3G,GAAKk3G,EAASl3G,GAAGlV,WAAamsH,EAAansH,YAG/D6F,EAAKpQ,KAAK+e,EACZ,CACA,OAAO3O,CACT,EAMe,MAAMwmH,EASnB93H,WAAAA,CAAYmkC,EAAKC,EAAaC,EAAQ94B,EAAM+4B,EAAUC,IAAQrkC,EAAAA,EAAAA,GAAA,mBARhD,OAAIA,EAAAA,EAAAA,GAAA,WACZ,OAAIA,EAAAA,EAAAA,GAAA,cACD,OAAIA,EAAAA,EAAAA,GAAA,YACN,OAAIA,EAAAA,EAAAA,GAAA,gBACA,OAAIA,EAAAA,EAAAA,GAAA,cACN,OAAIA,EAAAA,EAAAA,GAAA,gBACF,IAGTkC,KAAK+hC,IAAMA,EACX/hC,KAAKgiC,YAAcA,EACnBhiC,KAAKiiC,OAASA,EACdjiC,KAAKmJ,KAAOA,EACZnJ,KAAKkiC,SAAWA,EAChBliC,KAAKmiC,OAASA,CAChB,CAMAsH,gBAAAA,CAAiBrV,EAAQE,EAAMp3B,EAAMu1C,EAAM8uE,GACzC,IAAIx4E,EAAgB,GAChB+J,EAAW9yC,KAAKgiC,YAAY+Q,YAAYze,EAAMF,EAAQmtF,GAAmBvuE,OACzEqwE,EAAM,IAAIllG,KACVolG,EACFF,EAAIG,cACJ,KACC,KAAOH,EAAII,WAAa,IAAItmH,OAAO,GACpC,KACC,IAAMkmH,EAAIK,WAAWvmH,OAAO,GAC7B,KACC,MAASkmH,EAAIM,WAAa,IAAM,GAAM,IAAIxmH,OAAO,GAClD,KACC,IAAMkmH,EAAIO,cAAczmH,OAAO,GAChC,KACC,IAAMkmH,EAAIQ,cAAc1mH,OAAO,GAChC,KACCkmH,EAAIM,YAAc,GAAK,KAAO,MAK7Bj0E,EAAa,CACfwjE,KAHeh2G,GAAQA,EAAKyX,OAAOlX,OAAS,EAAIP,EAAO,uBAIvD4mH,YAHerxE,GAAQA,EAAK99B,OAAOlX,OAAS,EAAIg1C,EAAO,uBAIvDsxE,KANa,KAObC,QARY,MASZC,OAAQnxE,EACRoxE,YAAaX,EACbY,YAAaZ,GAGf,OADAx6E,EAAcjqC,KAAK,CAAE5B,KAAM,cAAeoG,MAAOosC,EAAYa,SAAU,GAAI1/B,KAAM,eAC1Ek4B,CACT,CACA4C,YAAAA,CAAazrC,EAAOy1H,EAAQz4H,EAAMu1C,GAChC,IAAI1J,EAAgB,GAChBs6E,EAAM,IAAIllG,KACVolG,GACD,KAAOF,EAAII,WAAa,IAAItmH,OAAO,GAAK,KAAO,IAAMkmH,EAAIK,WAAWvmH,OAAO,GAAK,IAAMkmH,EAAIG,cACzF95E,EAAaxsC,GAAQA,EAAKyX,OAAOlX,OAAS,EAAIP,EAAO,uBACrDysC,EAAa8I,GAAQA,EAAK99B,OAAOlX,OAAS,EAAIg1C,EAAO,uBACrDmjF,EAAS51H,KAAKmJ,KAAKC,EAAE,YAAYC,WACjCwsH,EAAS71H,KAAKmJ,KAAKC,EAAE,YAAYC,WAMjCorH,EALqB,CACvBnyC,MAAO,4CACPE,aAAc,oDACdD,MAAO,6CAE8BriF,EAAMk0B,OAAO7R,WAAWuR,cAC3DxzB,EAAAA,QAAgBszB,8BAA8BsB,WAAah1B,EAAMk0B,OAAO7R,WAAWoR,yBACrF8gG,EAAkB,2DAEpB,IAAID,EAAmBx0H,KAAKmJ,KACzBC,EAAE,mCAAoC,CACrC0qB,aAAc9zB,KAAKmJ,KAAKC,EAAEqrH,GAAiBprH,WAC3CqrH,MAAOnxH,EAAAA,iBAAwBrD,EAAMk0B,OAAO7R,WAAWjI,OAAQha,EAAAA,QAAgBkD,WAAWC,eAAgB,MAC1GkxH,OAAQpxH,EAAAA,iBACNrD,EAAMk0B,OAAO7R,WAAWhI,QACxBja,EAAAA,QAAgBkD,WAAWC,eAC3B,QAGH4F,WACCysH,EAAU,CACZC,WAAY,CACV,CAAE74H,KAAM,oBAAqBoG,MAAOtD,KAAKg2H,iCAAiCtsF,EAAY,GAAI65E,IAC1F,CAAErmH,KAAM,iBAAkBoG,MAAOtD,KAAKmJ,KAAKC,EAAE,kDAAkDC,aAEjG4sH,uBAAwBj2H,KAAKmJ,KAAKC,EAAE,sCAAsCC,WAC1E6sH,SAAU,IACV10G,QAASxhB,KAAKmJ,KAAKC,EAAE,oCAAoCC,WACzD8sH,WAAYn2H,KAAKmJ,KACdC,EAAE,sCAAuC,CACxCtI,WAAYd,KAAKmJ,KAAKC,EAAE,qCAAuClJ,EAAMk0B,OAAOtzB,YAAYuI,WACxFzD,SAAU5F,KAAKmJ,KACZC,EAAE,wCAA0ClJ,EAAMsb,QAAQ6G,eAAezc,UACzEyD,WACHirH,eAAgBt0H,KAAKmJ,KAClBC,EAAE,2CAA6ClJ,EAAMsb,QAAQ6G,eAAe5gB,cAC5E4H,aAEJA,WACHkgB,OAAQ,CACN,CAAErsB,KAAM8C,KAAKmJ,KAAKC,EAAE,yBAAyBC,WAAY/F,MAAOkxH,GAChE,CACEt3H,KAAM8C,KAAKmJ,KAAKC,EAAE,gCAAgCC,WAClD/F,MACEC,EAAAA,iBAAwBrD,EAAMk0B,OAAO/R,eAAejiB,KAAME,EAAAA,QAAgBkD,WAAWC,eAAgB,MACrG,IACAvD,EAAMk0B,OAAO/R,eAAetiB,UAEhC,CACE7C,KAAM8C,KAAKmJ,KAAKC,EAAE,oCAAoCC,WACtD/F,MACEC,EAAAA,iBACErD,EAAMk0B,OAAO/R,eAAezf,oBAC5BtC,EAAAA,QAAgBkD,WAAWC,eAC3B,MAEFmyH,EACA,OACAryH,EAAAA,iBACErD,EAAMk0B,OAAO/R,eAAetf,kBAC5BzC,EAAAA,QAAgBkD,WAAWK,YAC3B,MAEFgyH,GAEJ,CACE34H,KAAM8C,KAAKmJ,KAAKC,EAAE,oCAAoCC,WACtD/F,MACEC,EAAAA,iBACErD,EAAMk0B,OAAO/R,eAAeje,oBAC5B9D,EAAAA,QAAgBkD,WAAWC,eAC3B,MAEFmyH,EACA,OACAryH,EAAAA,iBACErD,EAAMk0B,OAAO/R,eAAephB,kBAC5BX,EAAAA,QAAgBkD,WAAWK,YAC3B,MAEFgyH,GAEJ,CACE34H,KAAM8C,KAAKmJ,KAAKC,EAAE,4CAA4CC,WAC9D/F,MACEtD,KAAKmJ,KAAKC,EAAE,iCAAiCC,WAC7C,MACAnJ,EAAMk0B,OAAO3R,WAAWwa,mBACxB,KACAj9B,KAAKmJ,KAAKC,EAAE,gCAAgCC,WAC5C,MACAnJ,EAAMk0B,OAAO3R,WAAW2a,kBACxB,KACAp9B,KAAKmJ,KAAKC,EAAE,gCAAgCC,WAC5C,MACAnJ,EAAMk0B,OAAO3R,WAAW8a,kBACxB,KACAv9B,KAAKmJ,KAAKC,EAAE,kCAAkCC,WAC9C,MACAnJ,EAAMk0B,OAAO3R,WAAWib,mBAE5B,CAAExgC,KAAM,MAAOoG,MAAO,0BAExBqyH,OAAQ,CACN,CACEz4H,KAAM8C,KAAKmJ,KAAKC,EAAE,mDAAmDC,WACrE/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,mDAAmDC,WACrE/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,oDAAoDC,WACtE/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,oDAAoDC,WACtE/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,kDAAkDC,WACpE/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,kDAAkDC,WACpE/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,oDAAoDC,WACtE/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,0DAA0DC,WAC5E/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,4DAA4DC,WAC9E/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,4CAA4CC,WAC9D/F,MAAOtD,KAAKo2H,YAAYT,EAAO,GAAGzmH,OAEpC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,6CAA6CC,WAC/D/F,MAAOtD,KAAKo2H,YAAYT,EAAO,IAAIzmH,OAErC,CACEhS,KAAM8C,KAAKmJ,KAAKC,EAAE,8CAA8CC,WAChE/F,MAAOtD,KAAKo2H,YAAYT,EAAO,IAAIzmH,QAGvCmnH,WAAY,CAAEn5H,KAAMwsC,EAAY8kE,YAAa7kE,EAAY2sF,aAAc,MACvEt6E,KAAMunE,GAGR,OADAx6E,EAAcjqC,KAAK,CAAE5B,KAAM,aAAcoG,MAAOwyH,EAASvlF,SAAU,GAAI1/B,KAAM,cACtEk4B,CACT,CACA2C,kBAAAA,CAAmBxrC,EAAOy1H,EAAQz4H,EAAMu1C,EAAM8jF,GAC5C,IAAIxtF,EAAgB,GAChBs6E,EAAM,IAAIllG,KACVolG,GACD,KAAOF,EAAII,WAAa,IAAItmH,OAAO,GAAK,KAAO,IAAMkmH,EAAIK,WAAWvmH,OAAO,GAAK,IAAMkmH,EAAIG,cACzF95E,EAAaxsC,GAAQA,EAAKyX,OAAOlX,OAAS,EAAIP,EAAO,uBACrDysC,EAAa8I,GAAQA,EAAK99B,OAAOlX,OAAS,EAAIg1C,EAAO,GACrDmjF,EAAS51H,KAAKmJ,KAAKC,EAAE,YAAYC,WACjCwsH,EAAS71H,KAAKmJ,KAAKC,EAAE,YAAYC,WAMjCorH,EALqB,CACvBnyC,MAAO,4CACPE,aAAc,oDACdD,MAAO,6CAE8BriF,EAAMk0B,OAAO7R,WAAWuR,cAC3DxzB,EAAAA,QAAgBszB,8BAA8BsB,WAAah1B,EAAMk0B,OAAO7R,WAAWoR,yBACrF8gG,EAAkB,2DAEpB,IAAID,EAAmBx0H,KAAKmJ,KACzBC,EAAE,mCAAoC,CACrC0qB,aAAc9zB,KAAKmJ,KAAKC,EAAEqrH,GAAiBprH,WAC3CqrH,MAAOnxH,EAAAA,iBAAwBrD,EAAMk0B,OAAO7R,WAAWjI,OAAQha,EAAAA,QAAgBkD,WAAWC,eAAgB,MAC1GkxH,OAAQpxH,EAAAA,iBACNrD,EAAMk0B,OAAO7R,WAAWhI,QACxBja,EAAAA,QAAgBkD,WAAWC,eAC3B,QAGH4F,WACCkgB,EAAS,CACX,CAAErsB,KAAM8C,KAAKmJ,KAAKC,EAAE,yBAAyBC,WAAY/F,MAAOkxH,GAChE,CACEt3H,KAAM8C,KAAKmJ,KAAKC,EAAE,gCAAgCC,WAClD/F,MACEC,EAAAA,iBAAwBrD,EAAMk0B,OAAO/R,eAAejiB,KAAME,EAAAA,QAAgBkD,WAAWC,eAAgB,MACrG,IACAvD,EAAMk0B,OAAO/R,eAAetiB,UAEhC,CACE7C,KAAM8C,KAAKmJ,KAAKC,EAAE,oCAAoCC,WACtD/F,MACEC,EAAAA,iBACErD,EAAMk0B,OAAO/R,eAAezf,oBAC5BtC,EAAAA,QAAgBkD,WAAWC,eAC3B,MAEFmyH,EACA,OACAryH,EAAAA,iBACErD,EAAMk0B,OAAO/R,eAAetf,kBAC5BzC,EAAAA,QAAgBkD,WAAWK,YAC3B,MAEFgyH,GAEJ,CACE34H,KAAM8C,KAAKmJ,KAAKC,EAAE,oCAAoCC,WACtD/F,MACEC,EAAAA,iBACErD,EAAMk0B,OAAO/R,eAAeje,oBAC5B9D,EAAAA,QAAgBkD,WAAWC,eAC3B,MAEFmyH,EACA,OACAryH,EAAAA,iBACErD,EAAMk0B,OAAO/R,eAAephB,kBAC5BX,EAAAA,QAAgBkD,WAAWK,YAC3B,MAEFgyH,GAEJ,CACE34H,KAAM8C,KAAKmJ,KAAKC,EAAE,4CAA4CC,WAC9D/F,MACEtD,KAAKmJ,KAAKC,EAAE,iCAAiCC,WAC7C,MACAnJ,EAAMk0B,OAAO3R,WAAWwa,mBACxB,KACAj9B,KAAKmJ,KAAKC,EAAE,gCAAgCC,WAC5C,MACAnJ,EAAMk0B,OAAO3R,WAAW2a,kBACxB,KACAp9B,KAAKmJ,KAAKC,EAAE,gCAAgCC,WAC5C,MACAnJ,EAAMk0B,OAAO3R,WAAW8a,kBACxB,KACAv9B,KAAKmJ,KAAKC,EAAE,kCAAkCC,WAC9C,MACAnJ,EAAMk0B,OAAO3R,WAAWib,mBAE5B,CAAExgC,KAAM,MAAOoG,MAAO,0BAEpBkzH,EAAa,CACf,CACEt5H,KAAM8C,KAAKmJ,KAAKC,EAAE,mDAAmDC,WACrE/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,mDAAmDC,WACrE/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,oDAAoDC,WACtE/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,oDAAoDC,WACtE/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,kDAAkDC,WACpE/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,kDAAkDC,WACpE/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,oDAAoDC,WACtE/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,0DAA0DC,WAC5E/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,4DAA4DC,WAC9E/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,4CAA4CC,WAC9D/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,GAAGzmH,OACvC/M,MAAOwzH,EAAO,GAAGxzH,MACjBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,GAAGvE,QAEpB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,6CAA6CC,WAC/D/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,IAAIzmH,OACxC/M,MAAOwzH,EAAO,IAAIxzH,MAClBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,IAAIvE,QAErB,CACEl0H,KAAM8C,KAAKmJ,KAAKC,EAAE,8CAA8CC,WAChE/F,MAAOksC,KAAKxvC,KAAKo2H,YAAYT,EAAO,IAAIzmH,OACxC/M,MAAOwzH,EAAO,IAAIxzH,MAClBD,OAAQyzH,EAAO,GAAGzzH,OAClBkvH,OAAQuE,EAAO,IAAIvE,SAIvB,OAAO,IAAI7sF,IAAAA,UAAa,CAAChE,EAASyO,KAChC,IAAIynF,GAAajoF,EAAAA,EAAAA,QAAOC,EAAAA,QAAIC,QAAUpuC,EAAAA,QAAgBq7C,mBAAoB37C,KAAKkiC,SAAUliC,KAAKiiC,QAC9F,OAAOjiC,KAAKmiC,OACT2M,SAAS2nF,EAAY,QACrBjyF,MAAMuK,GAEE,IAAIxK,IAAAA,UAAa,CAAChE,EAASyO,KAChC,IAAIC,EAAS,IAAIC,WACjBD,EAAOE,cAAcJ,GACrBE,EAAOG,UAAY,WACjB,IAAIsnF,EAAiBznF,EAAO5uC,OACL,OAAnBq2H,EACFn2F,EAAQm2F,GAER1nF,EAAO0nF,EAEX,CAAC,MAGJlyF,MAAMkyF,IAEL,IAAIttF,EAAY,IAAImtF,EAAav2H,KAAKspC,UAGtCF,EAAUutF,aACR32H,KAAKmJ,KAAKC,EAAE,sCAAsCC,WAClDrJ,KAAKg2H,iCAAiCtsF,EAAYC,EAAY45E,GAC9D,CAAEr0G,KAAMsgC,KAAKknF,EAAexoH,QAAQ,0BAA2B,KAAMkjH,OAAQ,SAI/EhoF,EAAUwtF,YACR52H,KAAKmJ,KAAKC,EAAE,oCAAoCC,WAChDrJ,KAAKmJ,KACFC,EAAE,sCAAuC,CACxCtI,WAAYd,KAAKmJ,KAAKC,EAAE,qCAAuClJ,EAAMk0B,OAAOtzB,YAAYuI,WACxFzD,SAAU5F,KAAKmJ,KACZC,EAAE,wCAA0ClJ,EAAMsb,QAAQ6G,eAAezc,UACzEyD,WACHirH,eAAgBt0H,KAAKmJ,KAClBC,EAAE,2CAA6ClJ,EAAMsb,QAAQ6G,eAAe5gB,cAC5E4H,aAEJA,WACHkgB,GAIF,IAAK,IAAI1qB,EAAI,EAAGA,EAAI23H,EAAW/4H,OAAQoB,IACrCuqC,EAAUytF,aAAaL,EAAW33H,IAIpC,IAAIowC,EAAS,IAAIC,WACjBD,EAAOE,cAAc/F,EAAU0tF,UAC/B7nF,EAAOG,UAAY,WACjB,IAAI0mF,EAAU7mF,EAAO5uC,OACrBy1H,EAAUA,EAAQ5nH,QAAQ,+BAAgC,IAC1C,OAAZ4nH,GACF/sF,EAAcjqC,KAAK,CAAE5B,KAAM,aAAcoG,MAAOwyH,EAASvlF,SAAU,GAAI1/B,KAAM,WAC7E0vB,EAAQwI,IAERiG,EAAOjG,EAEX,CAAC,GACD,GAER,CACAkB,YAAAA,CAAa/pC,GACX,IAAI6oC,EAAgB,GAClBguF,EAAkB,GAClBC,EAAU92H,EAAM4sB,gBAClB,IAAK,IAAIjuB,EAAI,EAAGA,EAAIm4H,EAAQv5H,OAAQoB,IAAK,CACvC,IAAIivB,EAAUpvB,OAAOkM,OAAO,CAAC,EAAGosH,EAAQn4H,IACpCyE,EAAQ,GAIZ,GAHsB,KAAlBwqB,EAAQxqB,QACVA,EAAQwqB,EAAQxqB,MAAM4K,QAAQ,IAAK,SAEb,KAApB4f,EAAQrI,QAAgB,CAC1B,IAAID,EAAMsI,EAAQrI,QAEdD,EAAIrS,SAAS,cACfqS,EAAMA,EAAItX,QAAQ,aAAclO,KAAKmJ,KAAKC,EAAE,mDAAmDC,YACtFmc,EAAIrS,SAAS,cACtBqS,EAAMA,EAAItX,QAAQ,aAAclO,KAAKmJ,KAAKC,EAAE,mDAAmDC,YACtFmc,EAAIrS,SAAS,cACtBqS,EAAMA,EAAItX,QAAQ,aAAclO,KAAKmJ,KAAKC,EAAE,mDAAmDC,YACtFmc,EAAIrS,SAAS,gBACtBqS,EAAMA,EAAItX,QACR,eACAlO,KAAKmJ,KAAKC,EAAE,qDAAqDC,YAE1Dmc,EAAIrS,SAAS,gBACtBqS,EAAMA,EAAItX,QACR,eACAlO,KAAKmJ,KAAKC,EAAE,qDAAqDC,YAE1Dmc,EAAIrS,SAAS,kBACtBqS,EAAMA,EAAItX,QACR,eACAlO,KAAKmJ,KAAKC,EAAE,qDAAqDC,aAGrE/F,GAAS,KAAOkiB,CAClB,CACA,GAAyB,KAArBsI,EAAQpI,SAAiB,CAC3B,IAAIA,EAAWoI,EAAQpI,SAEN,OAAbA,GACEA,EAASvS,SAAS,kBACpBuS,EAAWA,EAASxX,QAClB,eACAlO,KAAKmJ,KAAKC,EAAE,8CAA8CC,aAIhE/F,GAAS,KAAOoiB,CAClB,CAC0B,KAAtBoI,EAAQ9jB,YACV1G,GAAS,KAAOwqB,EAAQ9jB,WAE1B+sH,EAAgBj4H,KAAK,CAAE5B,KAAMoG,EAAOgM,SAAUwe,EAAQ1I,MAAO6xG,WAAYnpG,EAAQzI,aACnF,CAEA,OADA0jB,EAAcjqC,KAAK,CAAE5B,KAAM,UAAWoG,MAAOyzH,EAAiBxmF,SAAU,GAAI1/B,KAAM,QAC3Ek4B,CACT,CACAc,wBAAAA,CAAyB3pC,GACvB,IAAI6oC,EAAgB,GAChBmuF,EAAY,CAAC,YAAa,UAAW,MAAO,OAsFhD,OAnFAnuF,EAAcjqC,KAAK,CACjB5B,KAAM,oBACNoG,MAAO+xH,EAA8B6B,EAAWh3H,EAAMwnC,UAAUthC,YAAY8I,KAAK/R,MAAM,GAAI,GAC3FozC,SAAU,aACV1/B,KAAM,QAIRk4B,EAAcjqC,KAAK,CACjB5B,KAAM,gCACNoG,MAAO+xH,EAA8B6B,EAAWh3H,EAAMwnC,UAAUrhC,YAAY6I,KAAK/R,MAAM,GAAI,GAC3FozC,SAAU,aACV1/B,KAAM,QAIRk4B,EAAcjqC,KAAK,CACjB5B,KAAM,gCACNoG,MAAO+xH,EAA8B6B,EAAWh3H,EAAMwnC,UAAUoN,wBAAwB5lC,KAAK/R,MAAM,GAAI,GACvGozC,SAAU,aACV1/B,KAAM,QAIRk4B,EAAcjqC,KAAK,CACjB5B,KAAM,4BACNoG,MAAO+xH,EAA8B6B,EAAWh3H,EAAMwnC,UAAUqN,oBAAoB7lC,KAAK/R,MAAM,GAAI,GACnGozC,SAAU,aACV1/B,KAAM,QAIRk4B,EAAcjqC,KAAK,CACjB5B,KAAM,qBACNoG,MAAO+xH,EAA8B6B,EAAWh3H,EAAMwnC,UAAUnhC,aAAa2I,KAAK/R,MAAM,GAAI,GAC5FozC,SAAU,aACV1/B,KAAM,QAIRk4B,EAAcjqC,KAAK,CACjB5B,KAAM,qBACNoG,MAAO+xH,EAA8B6B,EAAWh3H,EAAMwnC,UAAUphC,aAAa4I,KAAK/R,MAAM,GAAI,GAC5FozC,SAAU,aACV1/B,KAAM,QAIRk4B,EAAcjqC,KAAK,CACjB5B,KAAM,kBACNoG,MAAO+xH,EAA8B6B,EAAWh3H,EAAMwnC,UAAUjhC,WAAWyI,KAAK/R,MAAM,GAAI,GAC1FozC,SAAU,aACV1/B,KAAM,QAIRk4B,EAAcjqC,KAAK,CACjB5B,KAAM,kBACNoG,MAAO+xH,EAA8B6B,EAAWh3H,EAAMwnC,UAAUlhC,WAAW0I,KAAK/R,MAAM,GAAI,GAC1FozC,SAAU,aACV1/B,KAAM,QAIRk4B,EAAcjqC,KAAK,CACjB5B,KAAM,oBACNoG,MAAO+xH,EACL,CAAC,UAAW6B,EAAU/5H,MAAM,IAC5B+C,EAAMwnC,UAAUhhC,aAAawI,KAAK/R,MAAM,GACxC,GAEFozC,SAAU,aACV1/B,KAAM,QAIRk4B,EAAcjqC,KAAK,CACjB5B,KAAM,YACNoG,MAAO+xH,EAA8B6B,EAAWh3H,EAAMwnC,UAAUlgB,MAAMO,UAAU7Y,KAAK/R,MAAM,GAAI,GAC/FozC,SAAU,aACV1/B,KAAM,QAGDk4B,CACT,CACAgB,mBAAAA,CAAoB7pC,EAAO+X,GACzB,IAAI8wB,EAAgB,GAChBouF,EAAgB,GAChBroH,EAAgB5O,EAAM4O,cAC1B,IAAK,IAAIjQ,EAAI,EAAGA,EAAIiQ,EAAcrR,OAAQoB,IAAK,CAC7C,IAAIiuC,EAAgBpuC,OAAOkM,OAAO,CAAC,EAAGkE,EAAcjQ,IACT,OAAvCiuC,EAAcn+B,uBACa,IAAzBwoH,EAAc15H,QAAgB05H,EAAc35H,QAAQsvC,EAAcn+B,uBAAyB,GAAM,GACnGwoH,EAAcr4H,KAAKguC,EAAcn+B,sBAGvC,CAEA,IAAK,IAAI4P,EAAI,EAAGA,EAAI44G,EAAc15H,OAAQ8gB,IAAK,CAC7C,IAAI64G,EAAe,IAAMn/G,EAAS,4CAA8Ck/G,EAAc54G,GAAK,OACnGwqB,EAAcjqC,KAAK,CACjB5B,KAAMi6H,EAAc54G,GAAK,OACzBjb,MAAO8zH,EACP7mF,SAAU,mBACV1/B,KAAM,SAEV,CACA,OAAOk4B,CACT,CAMAitF,gCAAAA,CAAiCtsF,EAAY2tF,EAAgBC,GAC3D,IAAIC,EAAgB,GAoBpB,OAjBEA,EAFEv3H,KAAKw3H,oBAAoB9tF,IAAe1pC,KAAKw3H,oBAAoBH,GAEnDr3H,KAAKmJ,KAAKC,EAAE,6CAA8C,CAAE4yC,KAAMs7E,IAAWjuH,WACpFrJ,KAAKw3H,oBAAoB9tF,KAAgB1pC,KAAKw3H,oBAAoBH,GAE3Dr3H,KAAKmJ,KAClBC,EAAE,+CAAgD,CAAEquH,KAAMJ,EAAe1iH,OAAQqnC,KAAMs7E,IACvFjuH,WACMrJ,KAAKw3H,oBAAoBH,KAAoBr3H,KAAKw3H,oBAAoB9tF,GAE/D1pC,KAAKmJ,KAClBC,EAAE,6CAA8C,CAAEqpC,KAAM/I,EAAW/0B,OAAQqnC,KAAMs7E,IACjFjuH,WAGarJ,KAAKmJ,KAClBC,EAAE,gCAAiC,CAAEqpC,KAAM/I,EAAW/0B,OAAQ8iH,KAAMJ,EAAe1iH,OAAQqnC,KAAMs7E,IACjGjuH,WAEEkuH,CACT,CACAC,mBAAAA,CAAoBl6H,GAElB,OAAIA,GAEa,OAARA,GAAsC,OAAtBA,EAAIkb,MAAM,OAErC,CACA49G,WAAAA,CAAYsB,GACV,IACIC,EAAcD,EAAMruH,WAExB,OADAsuH,EAAcA,EAAYzpH,QAFL,yBAE6B,IAC3CypH,CACT,iCC3sBK,SAAStrF,EAAaF,EAAaC,EAAUwrF,GAClD,IAAIC,GAAU,EACd,GAAID,EAAU,CACZ,IAAI1pB,EAAO,IAAIkW,KAAK,CAACwT,GAAW,CAAE/mH,KAAMs7B,IACxC,QAA2C,IAAhC9vC,OAAOioH,UAAUC,WAC1BloH,OAAOioH,UAAUC,WAAWrW,EAAM9hE,OAC7B,CACL,IAAIo4E,EAAMnoH,OAAOmoH,KAAOnoH,OAAOooH,UAC3BC,EAAcF,EAAIG,gBAAgBzW,GAEtC,GAAI9hE,EAAU,CACZ,IAAIS,EAAIx3B,SAASuvG,cAAc,UACL,IAAf/3E,EAAEb,SACX3vC,OAAOk0C,SAAWm0E,GAElB73E,EAAEa,KAAOg3E,EACT73E,EAAEb,SAAWI,EACbS,EAAEg4E,QAEN,MACExoH,OAAOk0C,SAAWm0E,EAEpBF,EAAIM,gBAAgBJ,EACtB,CACAmT,GAAU,CACZ,CAEA,OAAOA,CACT,oJCxBA,IAEqBtwG,GAAYtgB,EAAlB,MAObrJ,WAAAA,CAAYk6H,EAASrwG,IAAS3pB,EAAAA,EAAAA,GAAA,eANpB,OAAIA,EAAAA,EAAAA,GAAA,eACJ,OAAIA,EAAAA,EAAAA,GAAA,yBACM,KAAEA,EAAAA,EAAAA,GAAA,yBACF,KAAEyK,EAAAA,EAAAA,GAAA,iBAAAC,EAAA,MAIpBxI,KAAK83H,QAAUA,EACf93H,KAAKynB,QAAUA,CACjB,CASAoB,aAAAA,CAAcS,GACZ,OAAOtpB,KAAK8oB,UAAUjU,MAAMgR,GACnBA,EAAM0D,OAAOpW,SAASmW,IAEjC,CAGAY,qBAAAA,CAAsBJ,GAChBA,EAAMtG,OAEJxjB,KAAK+3H,cAAcjuG,EAAMvG,UAC3BvjB,KAAKg4H,eAAeluG,EAAMvG,QAASuG,EAAM1W,YAAY,GAGlDpT,KAAK+3H,cAAcjuG,EAAMvG,SAG5BvjB,KAAKi4H,sBAAsBnuG,EAAMvG,QAASuG,EAAM1W,YAFhDpT,KAAKg4H,eAAeluG,EAAMvG,QAASuG,EAAM1W,YAAY,EAK3D,CAIA2kH,aAAAA,CAAczuG,GACZ,OAAOtpB,KAAKk4H,kBAAkB/kH,SAASmW,EACzC,CAMA0uG,cAAAA,CAAe1uG,EAAWlW,EAAY+kH,GACpC,GAAIA,EACGn4H,KAAKk4H,kBAAkB/kH,SAASmW,KACnCtpB,KAAKk4H,kBAAkBp5H,KAAKwqB,GAC5BtpB,KAAKo4H,kBAAkBt5H,KAAKsU,SAG9B,GAAIpT,KAAKk4H,kBAAkB/kH,SAASmW,GAAY,CAC9C,MAAMrhB,EAAQjI,KAAKk4H,kBAAkB16H,QAAQ8rB,GAC7CtpB,KAAKk4H,kBAAkB/kE,OAAOlrD,EAAO,GACrCjI,KAAKo4H,kBAAkBjlE,OAAOlrD,EAAO,EACvC,CAEJ,CAGAgwH,qBAAAA,CAAsB3uG,EAAWlW,GAC/B,MAAMnL,EAAQjI,KAAKk4H,kBAAkB16H,QAAQ8rB,GAC7CtpB,KAAKo4H,kBAAkBjlE,OAAOlrD,EAAO,EAAGmL,EAC1C,CAEA4jB,mBAAAA,GACE,OAAOh3B,KAAKk4H,kBAAkBz6H,OAAS,CACzC,CAGA46H,cAAAA,GACE,IAAIC,EAAc,GAClB,IAAK,IAAIz5H,EAAI,EAAGA,EAAImB,KAAKk4H,kBAAkBz6H,OAAQoB,IAAK,CACtD,IAAI0kB,EAAUvjB,KAAKk4H,kBAAkBr5H,GACjCuU,EAAapT,KAAKo4H,kBAAkBv5H,GACxCy5H,EAAYx5H,KAAK,CACfkjB,IAAKhiB,KAAK83H,QACVvuG,OAAQ,CAAChG,GACTvR,GAAIoB,EAAW3V,OAAS,EAAI,eAAiB,aAC7CqoB,WAAY,CAAEvC,QAASA,EAASjgB,MAAO8P,IAE3C,CACA,OAAOklH,CACT,CAKA5uG,QAAAA,CAAS8J,GAGP,IAAI8kG,EAAct4H,KAAKq4H,iBAGnBE,EAAcv4H,KAAKynB,QAAQiC,SAAS8J,EAAcxzB,KAAKk4H,mBAGvDl0G,EAASs0G,EAAYz3G,OAAO03G,GAGhC,OAFAv4H,KAAK8oB,UAAY9E,EAEVA,CACT,GACDxb,GAAAd,EAAAA,EAAAA,GAAAT,EAAAU,UAAA,aAxGE6F,EAAAA,GAAO,CAAA5D,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAA7M,YAAA,iBAAa,EAAE,IAAAgK,yRCRlB,SAASuxH,EAAQC,EAAUC,EAAKC,GAErC,OAAOF,EAASh7H,OAASi7H,EAAMr5G,MAAMq5G,EAAME,OAAOH,GAAUh7H,OAAS,GAAG0Y,KAAKwiH,GAAW,KAAOF,EAAWA,CAC5G,CAEO,SAASI,EAAcC,EAAQC,GACpC,IAAIC,EAAYtpH,SAASopH,GAAQzvH,WACjC,GAAI2vH,EAAUv7H,OAASs7H,EAAmB,CACxC,IAAIE,EAAYD,EAAUvpH,MAAM,IAChC,IAAK,IAAI5Q,EAAIk6H,EAAmBl6H,EAAIo6H,EAAUx7H,OAAQoB,IACpDo6H,EAAUp6H,GAAK,IAEjBm6H,EAAYC,EAAU9iH,KAAK,GAC7B,CACA,OAAOlC,WAAW+kH,EACpB,CAEO,SAASE,EAAa51H,EAAO61H,GAClC,IAAIjxB,EAAYixB,GAAe,EAC7B7lG,EAAQlyB,KAAKwlD,IAAI,GAAIshD,GACrBkxB,EAAWh4H,KAAK4xD,IAAI5xD,KAAKgB,MAAMkB,EAAQgwB,IACvCjzB,GAAUiD,EAAQ,EAAI,IAAM,IAAMs1H,OAAOx3H,KAAK+3D,MAAMigE,EAAW9lG,IAEjE,GAAI40E,EAAY,EAAG,CACjB,IAAImxB,EAAWT,OAAOQ,EAAW9lG,GAEjCjzB,GAAU,IADE,IAAIgf,MAAMje,KAAKgoB,IAAI8+E,EAAYmxB,EAAS57H,OAAQ,GAAK,GAAG0Y,KAAK,KAC/CkjH,CAC5B,CACA,OAAOh5H,CACT,CAEO,SAASi5H,EAAsBh2H,GACpC,OAAOA,SAAyCA,EAAM+F,WAAWmP,MAAM,kBACzE,CAEO,SAAS+gH,EAAsBP,GACpC,OAAOA,EAAUnT,OAAO,GAAG38G,cAAgB8vH,EAAU77H,MAAM,EAC7D,CAEO,SAASq8H,EAAwBR,GACtC,OAAOA,EAAUnT,OAAO,GAAGjvG,cAAgBoiH,EAAU77H,MAAM,EAC7D,CAEO,SAASs8H,EAAoB1W,EAAQ2W,GAE1C,OAAOt4H,KAAK4xD,IAAI+vD,EAAS2W,GADT,MACmCA,EAAa3W,CAClE,CAOO,SAASv6F,EAAiBllB,EAAO0f,EAAW8G,GACjD,IAAIzpB,EAAS,GACb,OAAQ2iB,GACN,KAAK1iB,EAAAA,QAAgBkD,WAAWm3C,SAChC,KAAKr6C,EAAAA,QAAgBkD,WAAWi3C,SAChC,KAAKn6C,EAAAA,QAAgBkD,WAAWg3C,aAC9B,OAAQ1wB,GACN,KAAKxpB,EAAAA,QAAgBu6C,mBAAmBC,UACtCz6C,EAASiD,EAAM4F,cACf,MACF,KAAK5I,EAAAA,QAAgBu6C,mBAAmBE,UACtC16C,EAASiD,EAAMsT,cACf,MACF,KAAKtW,EAAAA,QAAgBu6C,mBAAmBG,UACtC36C,EAASL,KAAKu5H,sBAAsBj2H,GAKxC,MAEF,KAAKhD,EAAAA,QAAgBkD,WAAWwmB,QAC9B3pB,EAASuD,OAAON,GAAO+F,WACvB,MACF,KAAK/I,EAAAA,QAAgBkD,WAAWC,eAAgB,CAC9C,IAAIk2H,EAAgD,MAA5B7vG,EAAMA,EAAMrsB,OAAS,GACzCm8H,EAAe9vG,EACf6vG,IACFC,EAAe9vG,EAAM/Z,UAAU,EAAG+Z,EAAMrsB,OAAS,IAEnD,IAAIo8H,EAAWj2H,OAAOg2H,EAAa7pH,UAAU,EAAG6pH,EAAan8H,OAAS,IAClEq8H,EAAYF,EAAa7pH,UAAU6pH,EAAan8H,OAAS,EAAGm8H,EAAan8H,QACzEkT,EAAW/M,OAAON,GACtBjD,GAAS+J,EAAAA,EAAAA,qBAAoBuG,EAAU,WAAYkpH,EAAU,CAC3DE,YAA2B,MAAdD,EACbzvH,WAAYsvH,IAEd,KACF,CACA,KAAKr5H,EAAAA,QAAgBkD,WAAWk3C,OAC9B,MACF,KAAKp6C,EAAAA,QAAgBkD,WAAWK,YAAa,CAC3C,IAAIm2H,EAAa,QACbC,EAAgB,SAChBN,EAAgD,MAA5B7vG,EAAMA,EAAMrsB,OAAS,GACzCm8H,EAAe9vG,EACf6vG,IACFC,EAAe9vG,EAAM/Z,UAAU,EAAG+Z,EAAMrsB,OAAS,IAEnD,IAAIo8H,EAAWj2H,OAAOg2H,EAAa7pH,UAAU,EAAG6pH,EAAan8H,OAAS,IAClEq8H,EAAYF,EAAa7pH,UAAU6pH,EAAan8H,OAAS,EAAGm8H,EAAan8H,QACzEkT,EAAW2oH,EAAsBh2H,IAAS+P,EAAAA,EAAAA,mBAAkB/P,GAASA,EACrE42H,GAAY9vH,EAAAA,EAAAA,qBAAoBuG,EAAU,cAAekpH,EAAU,CACrEE,YAA2B,MAAdD,EACbzvH,WAAYsvH,IAEdt5H,EAAS65H,EAAU1hH,MAAMwhH,IAAeE,EAAU1hH,MAAMyhH,GAAiB32H,EAAM+F,WAAa6wH,EAC5F,KACF,EAIF,OAAO75H,CACT,CAEO,SAAS85H,EAAYr+D,EAAGs+D,GAC7B,MAAMpjE,EAAO51D,KAAKwlD,IAAI,GAAIwzE,EAAMh5H,KAAK+3D,MAAM/3D,KAAKklB,MAAMw1C,IAAM,GAC5D,OAAO16D,KAAKi5H,MAAMv+D,EAAI9E,GAAQA,CAChC,wPCjHO,SAAStrC,EAA4BC,EAAa2uG,GACvD,IAAI1rG,EAAqB,KAEzB,OAAQ3a,WAAWqmH,IACjB,KAAK,EACH1rG,GAAqB6xF,EAAAA,EAAAA,QAAO90F,KAAgB+0F,EAAAA,EAAAA,UAAS/0F,GAAe,MAAOk1F,EAAAA,EAAAA,SAAQl1F,GAAe,KAAO,KACzG,MAEF,KAAK,EACHiD,GACE6xF,EAAAA,EAAAA,QAAO90F,KAAgB+0F,EAAAA,EAAAA,UAAS/0F,GAC5B,MACAg1F,EAAAA,EAAAA,QAAOh1F,KAAgBi1F,EAAAA,EAAAA,UAASj1F,GAC9B,KACA,KAOZ,OAAOiD,CACT,CACO,SAAS7jB,EAAoBzH,EAAOi3H,EAAgBC,GAEzD,OADaC,EAAiCn3H,EAAOi3H,EAAgBC,GACvD/0G,OAChB,CACO,SAASqH,EACdhsB,EACAX,EACAoa,EACAwxE,EACAxhE,EACA+E,EACAvE,EACAO,GAEA,IAAIovG,EAAuB,IAAIr7G,MAC3Bs7G,GAAqB,EACrBC,EAAoB,GACpBj7E,EAAaosC,EAAatuF,OAG9B,IAAK,IAAIoB,EAAI,EAAGA,EAAI8gD,EAAY9gD,IAAK,CACnC,IAGIg8H,EAAiBC,EAAgBC,EADjCC,EAAsBC,EAFRlvC,EAAaltF,GAAGylE,cAAc/2C,QACtBw+D,EAAaltF,GAAGylE,cAAc/2C,QAAQq+C,sBAG/DivD,EAAiBC,EAAgBC,GAAkBG,EAClDnvC,EAAaltF,GACb0rB,EAAe1rB,IACf,GAIF,IAAIs8H,EAA8BC,EAAkB7gH,GAGpDqgH,EAAoBA,EAAkB/5G,OACpCw6G,EAAgBtvC,EAAaltF,GAAIi8H,EAAgBE,EAAqB1rG,EAAe8N,oBAIvFw9F,EAAoBA,EAAkB/5G,OACpCy6G,EACEvvC,EAAaltF,GACbg8H,EACAG,EACA1rG,EAAe2N,mBACf09F,IAKJC,EAAoBA,EAAkB/5G,OACpC06G,EACExvC,EAAaltF,GACbk8H,EACAC,EACA1rG,EAAeiO,kBACfp9B,EACAW,IAKJ85H,EAAoBA,EAAkB/5G,OAAO26G,EAAazvC,EAAaltF,GAAIysB,IAG3EsvG,EAAoBA,EAAkB/5G,OACpC46G,EACEN,EAA4B1vH,iBAC5BsgF,EAAaltF,GAAGqL,YAChBywH,GAGN,CAGA,GAAI5vG,EAAoB,CACtB,IAAI2wG,EAAkBC,IAGtB,IAAK,IAAIn8G,EAAI,EAAGA,EAAIk8G,EAAgBj+H,OAAQ+hB,IAAK,CAC/C,IAAIo8G,EAAa,KAEfF,EAAgBl8G,GAAGq8G,eACnBH,EAAgBl8G,GAAGq8G,cAAcp+H,OAAS,GACF,MAAxCi+H,EAAgBl8G,GAAGq8G,cAAc,KAEjCD,EAAa,eAAsBF,EAAgBl8G,GAAGlc,MAAQ,SAChEs3H,EAAkB97H,KAAK,CACrB+8H,cAAeH,EAAgBl8G,GAAGq8G,cAClCv4H,MAAOo4H,EAAgBl8G,GAAGlc,MAC1BiiB,QAASq2G,EACTn2G,QAASi2G,EAAgBl8G,GAAGiG,QAC5BC,SAAUg2G,EAAgBl8G,GAAGkG,SAC7B1b,UAAW0xH,EAAgBl8G,GAAGxV,UAC9Bsb,WAAW,GAEf,CACF,CAMA,IAHA,IAAIw2G,EAAoBC,EAAuBxhH,GAGtCqkD,EAAI,EAAGA,EAAIk9D,EAAkBr+H,OAAQmhE,IAAK,CACjD,IAAIo9D,EAAiCvB,EACnCqB,EAAkBl9D,GAAGt7D,MACrBw4H,EAAkBl9D,GAAG50D,WACrB,GAEF4wH,EAAkB97H,KAAK,CACrB+8H,cAAeC,EAAkBl9D,GAAGq9D,WACpC34H,MAAOw4H,EAAkBl9D,GAAGt7D,MAC5BiiB,QAAS,KACTE,QAASu2G,EAA+Bv2G,QACxCC,SAAUs2G,EAA+Bt2G,SACzC1b,UAAW8xH,EAAkBl9D,GAAG50D,UAChCsb,WAAW,GAEf,CAGA,IAAI42G,EAA+B,IAAI78G,MACrC88G,EAAgC,IAAI98G,MACpC+8G,EAA4B,IAAI/8G,MAChCg9G,EAA+B,IAAIh9G,MAErC,IAAK,IAAIwtB,EAAI,EAAGA,EAAI+tF,EAAkBn9H,OAAQovC,IAES,MAAjD+tF,EAAkB/tF,GAAGgvF,cAAchW,OAAO,KAAez0F,EAAAA,EAAAA,gBAAewpG,EAAkB/tF,GAAGvpC,OAIvC,MAAjDs3H,EAAkB/tF,GAAGgvF,cAAchW,OAAO,KAAez0F,EAAAA,EAAAA,gBAAewpG,EAAkB/tF,GAAGvpC,OAE1C,MAAjDs3H,EAAkB/tF,GAAGgvF,cAAchW,OAAO,GACnDuW,EAA0Bt9H,KAAK87H,EAAkB/tF,IACS,MAAjD+tF,EAAkB/tF,GAAGgvF,cAAchW,OAAO,IACnDwW,EAA6Bv9H,KAAK87H,EAAkB/tF,IAJpDsvF,EAA8Br9H,KAAK87H,EAAkB/tF,IAJrDqvF,EAA6Bp9H,KAAK87H,EAAkB/tF,IAaxD,IAAIyvF,EAAkBC,EACpBxwC,EACAywC,EAAyBzwC,EAAatuF,QACtCstB,GAGFmxG,EAA+BA,EAA6Br7G,OAAOy7G,EAAgBG,mBAGnF,IAAIC,EAAgBC,EAAsBT,GAA8B,EAAM,KAG1EU,EAAiBD,EAAsBR,GAA+B,EAAM,KAG5EU,EAAgBF,EAAsBN,GAA8B,EAAM,KAG1ES,EAAaH,EAAsBP,GAA2B,EAAO,MAIzE,OAFA1B,EAAuBgC,EAAc77G,OAAOg8G,EAAch8G,OAAO+7G,EAAe/7G,OAAOi8G,KACvFpC,EAAuBA,EAAqB75G,OAAOy7G,EAAgBS,gBAC5DrC,CACT,CACO,SAASsC,EAAeziH,EAASwxE,EAAcxhE,EAAgB+E,EAAgBvE,EAAoBO,GACxG,IAAI2xG,EAAsB,IAAI59G,MAG1B69G,EAmhCN,SAAiC3iH,EAASwQ,GACxC,IACE2wG,EADEyB,EAA6B,IAAI99G,MAIrC,GAAI0L,EAAoB,CACtB2wG,EAAkBC,IAElB,IAAK,IAAIn8G,EAAI,EAAGA,EAAIk8G,EAAgBj+H,OAAQ+hB,IAC1C29G,EAA2Br+H,KAAK48H,EAAgBl8G,GAAGq8G,cAEvD,CAEA,IAAIuB,EAAsBrB,EAAuBxhH,GAEjD,IAAK,IAAIqkD,EAAI,EAAGA,EAAIw+D,EAAoB3/H,OAAQmhE,IAC9Cu+D,EAA2Br+H,KAAKs+H,EAAoBx+D,GAAGq9D,YAEzD,OAAOkB,CACT,CAtiCmCE,CAAwB9iH,EAASwQ,GAE9DuyG,EAA2B,GAC/B,IAAK,IAAIzvG,EAAI,EAAGA,EAAIqvG,EAA2Bz/H,OAAQowB,IACjDyvG,EAAyB7/H,OAAS,IAAG6/H,GAA4B,KACrEA,GAA4BJ,EAA2BrvG,GAGzD,IAAIyuG,EAAkBC,EACpBxwC,EACAywC,EAAyBzwC,EAAatuF,QACtCstB,GAGF,OAAQuxG,EAAgBS,eAAet/H,QACrC,KAAK,EACH6/H,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBG,kBAAkB,GAAGZ,cACvEyB,GAA4B,IAAMhB,EAAgBG,kBAAkB,GAAGZ,cACvEyB,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpE,MACF,KAAK,EACHi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBG,kBAAkB,GAAGZ,cACvEyB,GAA4B,IAAMhB,EAAgBG,kBAAkB,GAAGZ,cACvEyB,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpE,MACF,KAAK,EACHi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBG,kBAAkB,GAAGZ,cACvEyB,GAA4B,IAAMhB,EAAgBG,kBAAkB,GAAGZ,cACvEyB,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpE,MACF,KAAK,EACHi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBG,kBAAkB,GAAGZ,cACvEyB,GAA4B,IAAMhB,EAAgBG,kBAAkB,GAAGZ,cACvEyB,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YACpEi4G,GAA4B,IAAMhB,EAAgBS,eAAe,GAAG13G,YAIxE,IAAIk4G,EAA0Bj9H,EAAAA,QAAgB8O,UAAU8rC,SAAShtC,QAC/D,wCACA5N,EAAAA,QAAgB8O,UAAU+rC,QAE5B8hF,EAAoBn+H,KAAK,CACvB0P,MAAO,GACPC,UAAW,OACXrC,oBAAqB,OACrBsC,aAAc,OACdC,qBAAsB4uH,EACtB3uH,iBAAkB0uH,IAIpB,IAAI39E,EAAaosC,EAAatuF,OAC9B,IAAK,IAAIoB,EAAI,EAAGA,EAAI8gD,EAAY9gD,IAAK,CACnC,IACIg8H,EAAiBC,EADjB0C,EAAgB,IAEnB3C,EAAiBC,GAAkBI,EAAgCnvC,EAAaltF,GAAI0rB,EAAe1rB,IAAI,GAGxG,IAAK,IAAI0f,EAAI,EAAGA,EAAIu8G,EAAer9H,OAAQ8gB,IAEzC,KAAK6S,EAAAA,EAAAA,gBAAe0pG,EAAev8G,GAAGjb,OAAQ,CAC5C,IAAIm6H,EAAwBC,EAC1B3xC,EAAaltF,GACbi8H,EAAev8G,GAAGrhB,KAClB49H,EAAev8G,GAAGjb,MAClBgsB,EAAe8N,mBAEjBogG,GAAiBA,EAAc//H,OAAS,EAAI,IAAMggI,EAAwBA,CAC5E,CAGF,IAAK,IAAI5vG,EAAI,EAAGA,EAAIgtG,EAAgBp9H,OAAQowB,IAE1C,KAAKuD,EAAAA,EAAAA,gBAAeypG,EAAgBhtG,GAAGvqB,OAAQ,CAC7C,IAAIq6H,EAAyBD,EAC3B3xC,EAAaltF,GACbg8H,EAAgBhtG,GAAG3wB,KACnB29H,EAAgBhtG,GAAGvqB,MACnBgsB,EAAe2N,oBAEjBugG,GAAiBA,EAAc//H,OAAS,EAAI,IAAMkgI,EAAyBA,CAC7E,CAGF,IAAItyG,EAAQC,EAAYtiB,SAAS+iF,EAAaltF,GAAG+yB,YAAYvG,OACzDuD,EAAqBgvG,EAA0BvyG,EAAO0gE,EAAaltF,IACvE2+H,GAAiBA,EAAc//H,OAAS,EAAI,IAAMmxB,EAAqBA,EAGvE,IAAIusG,EAA8BC,EAAkB7gH,GAGpD,IAAK,IAAIymF,EAAI,EAAGA,EAAIm6B,EAA4B1vH,iBAAiBhO,OAAQujG,IAAK,CAC5E,IAAI68B,EAA4BC,EAC9B3C,EAA4B1vH,iBAAiBu1F,GAAG9jG,KAChD6uF,EAAaltF,GAAGqL,aAElBszH,GAAiBA,EAAc//H,OAAS,EAAI,IAAMogI,EAA4BA,CAChF,CAEA,IAAIE,EAAgBzB,EAAgBS,eAAe,GAAG13G,YAAY5V,MAAM,KAGxE,IAAK,IAAIrT,EAAI,EAAGA,EAAI2hI,EAActgI,OAAQrB,IAAK,CAC7C,IAAI4hI,EAAYD,EAAc3hI,GAAGuY,OACfqpH,EAAUnY,OAAO,CAAC,MAEhB95B,EAAaltF,GAAGqL,cAClCszH,GAAiBA,EAAc//H,OAAS,EAAI,IAAMugI,EAAYA,EAElE,CAEA,IAAIC,EAAwBC,EAA0B7yG,EAAO0gE,EAAaltF,IAC1Eo+H,EAAoBn+H,KAAK,CACvB0P,MAAOu9E,EAAaltF,GAAGqL,YACvBuE,UAAWwvH,EAAsBxvH,UACjCrC,oBAAqB6xH,EAAsB7xH,oBAC3CsC,aAAcuvH,EAAsBvvH,aACpCC,qBAAsBsvH,EAAsBtvH,qBAC5CC,iBAAkB4uH,GAEtB,CACA,OAAOP,CACT,CACO,SAASrsF,EAAam7C,EAAczgE,GACzC,IAAI2qF,EAAY,GACZkoB,EAAmB,GACvB,IAAK,IAAIt/H,EAAI,EAAGA,EAAIktF,EAAatuF,OAAQoB,IAAK,CAC5C,IAAIusB,EAAY2gE,EAAaltF,GAAG+yB,YAAYvG,MAAMzU,cAC7Cq/F,EAAU9iG,SAASiY,IACtB6qF,EAAUn3G,KAAKssB,EAEnB,CACA,IAAK,IAAIvsB,EAAI,EAAGA,EAAIo3G,EAAUx4G,OAAQoB,IACpCs/H,EAAiBr/H,KAAKwsB,EAAY0qF,oBAAoBC,EAAUp3G,KAGlE,OADwB0lC,IAAAA,QAAauE,IAAIq1F,GAChB35F,MAAM45F,IAC7B/vH,QAAQC,IAAI8vH,GACLA,EAAY78H,QAAQsrC,GAAY,OAANA,MAErC,CAMA,SAASwxF,EAAgC9D,GACvC,IAAI/0G,EAAM,GACRE,EAAW,GAQb,OAPI60G,GAAkBj6H,EAAAA,QAAgB88B,kBAAkBoa,YACtDhyB,EAAM,OACNE,EAAW,cAEXF,EAAM,OACNE,EAAW,IAEN,CAAED,QAASD,EAAKE,SAAUA,EACnC,CACA,SAAS+0G,EAAiCn3H,EAAOi3H,EAAgBI,GAC/D,IAEE3wH,EAFEwb,EAAM,GACRE,EAAW,GAwBb,OApBI60G,IAAmBj6H,EAAAA,QAAgB28B,mBAAmBqa,QACxDttC,EAAYiK,WAAWsmH,GAEnBj3H,GAAS,MACXoiB,EAAW,MACXF,EAAM,QACGliB,EAAQ,MAAaA,GAAS,IAAM,MAAQ0G,GAAa,IAClE0b,EAAW,MACXF,EAAM,QACGliB,EAAQ,MAAaA,GAAS,IAAM,MAAsB,KAAd0G,GACrD0b,EAAW,MACXF,EAAM,QACGliB,EAAQ,IAAM,MAAQA,EAAQ,GAAK,MAC5CoiB,EAAW,MACXF,EAAM,QACa,OAAVliB,IAA4C,IAAvBq3H,IAC9Bj1G,EAAW,eACXF,EAAM,SAGH,CAAEC,QAASD,EAAKE,SAAUA,EACnC,CACA,SAAS44G,EAAgCh7H,EAAOi3H,EAAgBgE,EAAaz9H,GAC3E,IACE09H,EADEh5G,EAAM,GAERE,EAAW,GAOb,OAJEF,EADEliB,GAAS,MACL,OAEA,OAEAxC,GACN,KAAKR,EAAAA,QAAgBQ,WAAW+B,QAC9B27H,EAAqB,GAAK56H,OAAO26H,EAAYx7H,mBAC7C,MACF,KAAKzC,EAAAA,QAAgBQ,WAAWkC,SAC9Bw7H,EAAqB,GAAK56H,OAAO26H,EAAYt9H,mBAC7C,MACF,KAAKX,EAAAA,QAAgBQ,WAAWC,SAGhC,KAAKT,EAAAA,QAAgBQ,WAAWm0C,MAC9BupF,EAAqB,GAAK56H,OAAO26H,EAAYp9H,iBAKjD,OAFAukB,EACE,eAAiBniB,EAAAA,iBAAwBi7H,EAAoBl+H,EAAAA,QAAgBkD,WAAWK,YAAa,MAAQ,KACxG,CAAE4hB,QAASD,EAAKE,SAAUA,EACnC,CAiBA,SAAS+4G,EAASn+B,EAAOpjG,GACvB,IAAK,IAAI2vC,EAAI,EAAGA,EAAIyzD,EAAM7iG,OAAQovC,IAChC,GAAIyzD,EAAMzzD,GAAG3vC,OAASA,EACpB,MAAO,EAAC,EAAM2vC,GAGlB,MAAO,EAAC,GAAQ,EAClB,CACA,SAAS2vF,EAAyBkC,GAChC,IAAIpvH,EAGJ,QAAQ,GACN,KAAKovH,GAAY,EACfpvH,EAAW,EAEX,MACF,KAAKovH,GAAY,GAAKA,GAAY,EAChCpvH,EAAW,EACX,MACF,KAAKovH,EAAW,EAEdpvH,GAAY,EAGhB,OAAOA,CACT,CACA,SAASqtH,EAAsBr8B,EAAO/jD,EAAajyC,GAEjD,GAAqB,IAAjBg2F,EAAM7iG,OAAc,MAAO,GAE/B,IAAIkhI,EAAwB,IAAIt/G,MAC5Bu/G,EAAW,IAAIv/G,MACfw/G,EAAa,IAAIx/G,MACjBy/G,EAAQ,GACRC,GAAY,EACZC,GAAat3G,EAAAA,EAAAA,OAAM44E,EAAM,IAG7Bs+B,EAAS9/H,KAAKkgI,GACdH,EAAW//H,KAAK,GAEhB,IAAK,IAAI00D,EAAI,EAAGA,EAAI8sC,EAAM7iG,OAAQ+1D,IAAK,CACrCsrE,EAAQx+B,EAAM9sC,GAAGqoE,cACjBkD,GAAY,EAGZ,IAAK,IAAIlgI,EAAI,EAAGA,EAAI+/H,EAASnhI,OAAQoB,IACnC,GACEyhG,EAAM9sC,GAAGlwD,QAAUs7H,EAAS//H,GAAGyE,OAC/Bg9F,EAAM9sC,GAAGxpD,YAAc40H,EAAS//H,GAAGmL,WACnCs2F,EAAM9sC,GAAG/tC,UAAYm5G,EAAS//H,GAAG4mB,SACjC66E,EAAM9sC,GAAG9tC,WAAak5G,EAAS//H,GAAG6mB,SAClC,CACAk5G,EAAS//H,GAAGg9H,cAAgB+C,EAAS//H,GAAGg9H,cAAgB,KAAOiD,EAE3Dx+B,EAAM9sC,GAAGpuC,MAAQ,GACnBy5G,EAAWhgI,KAEbggI,EAAWhgI,KACXkgI,GAAY,EACZ,KACF,CAIF,GAAIA,EAAW,SAGf,IAAIE,GAAUv3G,EAAAA,EAAAA,OAAM44E,EAAM9sC,IAC1BorE,EAAS9/H,KAAKmgI,GACdJ,EAAW//H,KAAK,EAClB,CAEA,IAAK,IAAIyf,EAAI,EAAGA,EAAIqgH,EAASnhI,OAAQ8gB,IAC/Bg+B,IACFqiF,EAASrgH,GAAGjb,MAAQC,EAAAA,iBAAwBq7H,EAASrgH,GAAGjb,MAAOhD,EAAAA,QAAgBkD,WAAWK,YAAa,MACvG+6H,EAASrgH,GAAGjb,MAAQs7H,EAASrgH,GAAGjb,MAAQgH,GAI1Cq0H,EAAsB7/H,KAAK,CACzBsmB,MAAOy5G,EAAWtgH,GAClB8G,YAAau5G,EAASrgH,GAAGs9G,cACzBv4H,MAAOs7H,EAASrgH,GAAGjb,MACnBiiB,QAASq5G,EAASrgH,GAAGgH,QACrBE,QAASm5G,EAASrgH,GAAGkH,QACrBzb,UAAW40H,EAASrgH,GAAGvU,UACvB0b,SAAUk5G,EAASrgH,GAAGmH,SACtBJ,UAAWs5G,EAASrgH,GAAG+G,YAI3B,OAAOq5G,CACT,CACA,SAAS1D,EAAwBp5E,EAAa+pB,GAC5C,IAAIrpD,EAAa,GACjB,IAAK,IAAI1jB,EAAI,EAAGA,EAAI+sE,EAAoBnuE,OAAQoB,IAAK,CACnD,IAAImnF,EAAgBpa,EAAoB/sE,GACpCqnF,EAAiBrkC,EAAYs0B,IAAI6P,EAAgB,UACjDu0C,EAAiB14E,EAAYs0B,IAAI6P,EAAgB,mBAC9B,IAAnBE,IAAyB90D,EAAAA,EAAAA,gBAAe80D,IAAsC,UAAnBq0C,GAC7Dh4G,EAAWzjB,KAAK,CAAE5B,KAAM8oF,EAAc98E,cAAec,UAAWuwH,GACpE,CACA,OAAOh4G,CACT,CACA,SAAS24G,EAAgCgE,EAAWr9E,EAAas9E,GAC/D,IAAIrE,EAAiB,GACjBD,EAAkB,GAClBE,EAAiB,GACjB3uH,EAAsB8yH,EAAU1kH,eAAetM,QAAQ,KAAM,IAC7DO,GAAYsT,EAAAA,EAAAA,IAASm9G,EAAUr+H,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,MAG1E,OAAQ9B,GACN,KAAK9L,EAAAA,QAAgB0vB,mBAAmB5vB,KAEtC06H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcvoB,GAAIvsB,MAAOu+C,EAAYhyB,GAAGvsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAActoB,GAAIxsB,MAAOu+C,EAAY/xB,GAAGxsB,QACpF,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBC,WAEtC6qG,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAc3rC,GAAInJ,MAAOu+C,EAAYp1C,GAAGnJ,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcvoB,GAAIvsB,MAAOu+C,EAAYhyB,GAAGvsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAActoB,GAAIxsB,MAAOu+C,EAAY/xB,GAAGxsB,QAEpFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAetsC,GAAIzI,MAAOu+C,EAAY91C,GAAGzI,QACtF,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBI,UAEtC0qG,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAc3rC,GAAInJ,MAAOu+C,EAAYp1C,GAAGnJ,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcxoB,GAAItsB,MAAOu+C,EAAYjyB,GAAGtsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcvoB,GAAIvsB,MAAOu+C,EAAYhyB,GAAGvsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAActoB,GAAIxsB,MAAOu+C,EAAY/xB,GAAGxsB,QAEpFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAetsC,GAAIzI,MAAOu+C,EAAY91C,GAAGzI,QACtFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAehsC,GAAI/I,MAAOu+C,EAAYx1C,GAAG/I,QACtF,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBS,SAEtCqqG,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAc3rC,GAAInJ,MAAOu+C,EAAYp1C,GAAGnJ,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcvoB,GAAIvsB,MAAOu+C,EAAYhyB,GAAGvsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAActoB,GAAIxsB,MAAOu+C,EAAY/xB,GAAGxsB,QAEpFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAetsC,GAAIzI,MAAOu+C,EAAY91C,GAAGzI,QAEtFy3H,EAAej8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgBg4C,cAAcC,GAAIj1C,MAAOu+C,EAAYtJ,GAAGj1C,QACpF,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBO,iBAClC9hB,IAAcnO,EAAAA,QAAgBQ,WAAW+B,SAE3Ci4H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAc3rC,GAAInJ,MAAOu+C,EAAYp1C,GAAGnJ,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcxoB,GAAItsB,MAAOu+C,EAAYjyB,GAAGtsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcnB,GAAI3zC,MAAOu+C,EAAY5K,GAAG3zC,QAEpFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAetsC,GAAIzI,MAAOu+C,EAAY91C,GAAGzI,QACtFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAehsC,GAAI/I,MAAOu+C,EAAYx1C,GAAG/I,UAGtFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAc3rC,GAAInJ,MAAOu+C,EAAYp1C,GAAGnJ,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcxoB,GAAItsB,MAAOu+C,EAAYjyB,GAAGtsB,QAEpFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAetsC,GAAIzI,MAAOu+C,EAAY91C,GAAGzI,QACtFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAehsC,GAAI/I,MAAOu+C,EAAYx1C,GAAG/I,QACtFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAe9rC,GAAIjJ,MAAOu+C,EAAYt1C,GAAGjJ,SAExF,MAEF,KAAKhD,EAAAA,QAAgB0vB,mBAAmBmB,iBAClC1iB,IAAcnO,EAAAA,QAAgBQ,WAAWC,UAE3C+5H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAc3rC,GAAInJ,MAAOu+C,EAAYp1C,GAAGnJ,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcxoB,GAAItsB,MAAOu+C,EAAYjyB,GAAGtsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcvoB,GAAIvsB,MAAOu+C,EAAYhyB,GAAGvsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAActoB,GAAIxsB,MAAOu+C,EAAY/xB,GAAGxsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcnB,GAAI3zC,MAAOu+C,EAAY5K,GAAG3zC,QAEpFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAetsC,GAAIzI,MAAOu+C,EAAY91C,GAAGzI,QACtFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAehsC,GAAI/I,MAAOu+C,EAAYx1C,GAAG/I,SAC7EmL,IAAcnO,EAAAA,QAAgBQ,WAAWm0C,QAElD6lF,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAc3rC,GAAInJ,MAAOu+C,EAAYp1C,GAAGnJ,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcxoB,GAAItsB,MAAOu+C,EAAYjyB,GAAGtsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcvoB,GAAIvsB,MAAOu+C,EAAYhyB,GAAGvsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAActoB,GAAIxsB,MAAOu+C,EAAY/xB,GAAGxsB,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAcnB,GAAI3zC,MAAOu+C,EAAY5K,GAAG3zC,QACpFw3H,EAAeh8H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB83C,cAAclB,GAAI5zC,MAAOu+C,EAAY3K,GAAG5zC,QAEpFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAetsC,GAAIzI,MAAOu+C,EAAY91C,GAAGzI,QACtFu3H,EAAgB/7H,KAAK,CAAE5B,KAAMoD,EAAAA,QAAgB+3C,eAAehsC,GAAI/I,MAAOu+C,EAAYx1C,GAAG/I,SAK5F,OAAI67H,EAAyB,CAACtE,EAAiBC,EAAgBC,GACnD,CAACF,EAAiBC,EAChC,CACA,SAASO,EAAgB+D,EAAatE,EAAgBE,EAAqB59F,GACzE,IAAIw9F,EAAoB,GACxB,IAAK,IAAIr8G,EAAI,EAAGA,EAAIu8G,EAAer9H,OAAQ8gB,IAAK,CAC9C,IAAI8gH,EAAeZ,EAASzD,EAAqBF,EAAev8G,GAAGrhB,MAC/Dq9H,EAAiB8E,EAAa,GAAKrE,EAAoBqE,EAAa,IAAIr1H,UAAYozB,EACpFqgG,EAAwBC,EAC1B0B,EACAtE,EAAev8G,GAAGrhB,KAClB49H,EAAev8G,GAAGjb,MAClBi3H,GAEE+E,EAA6BjB,EAAgC9D,GACjEK,EAAkB97H,KAAK,CACrB+8H,cAAe4B,EACfn6H,MAAOw3H,EAAev8G,GAAGjb,MACzBiiB,QAAS,KACTE,QAAS65G,EAA2B75G,QACpCC,SAAsC,IAA5Bo1G,EAAev8G,GAAGjb,MAAc,GAAKg8H,EAA2B55G,SAC1E1b,UAAuC,IAA5B8wH,EAAev8G,GAAGjb,MAAc,GAAKi3H,EAChDj1G,UAAuC,IAA5Bw1G,EAAev8G,GAAGjb,OAEjC,CACA,OAAOs3H,CACT,CACA,SAASU,EAAiB8D,EAAavE,EAAiBG,EAAqB/9F,EAAoB09F,GAC/F,IAAIC,EAAoB,GACxB,IAAK,IAAIr8G,EAAI,EAAGA,EAAIs8G,EAAgBp9H,OAAQ8gB,IAAK,CAC/C,IAAIghH,EAAgBd,EAASzD,EAAqBH,EAAgBt8G,GAAGrhB,MACrE,IAAIq9H,EAAiBgF,EAAc,GAAKvE,EAAoBuE,EAAc,IAAIv1H,UAAYizB,EACtF0gG,EAAyBD,EAC3B0B,EACAvE,EAAgBt8G,GAAGrhB,KACnB29H,EAAgBt8G,GAAGjb,MACnBi3H,GAEEiF,EAA8B/E,EAChCI,EAAgBt8G,GAAGjb,MACnBi3H,EACAI,GAEFC,EAAkB97H,KAAK,CACrB+8H,cAAe8B,EACfr6H,MAAOu3H,EAAgBt8G,GAAGjb,MAC1BiiB,QAAS,KACTE,QAAS+5G,EAA4B/5G,QACrCC,SAAU85G,EAA4B95G,SACtC1b,UAAWuwH,EACXj1G,WAAW,GAEf,CACA,OAAOs1G,CACT,CACA,SAASW,EACP6D,EACArE,EACAC,EACAz9F,EACAp9B,EACAW,GAEA,IAAI85H,EAAoB,GACxB,IAAK,IAAIr8G,EAAI,EAAGA,EAAIw8G,EAAet9H,OAAQ8gB,IAAK,CAC9C,IAAIkhH,EAAehB,EAASzD,EAAqBD,EAAex8G,GAAGrhB,MAC/Dq9H,EAAiBkF,EAAa,GAAKzE,EAAoByE,EAAa,IAAIz1H,UAAYuzB,EACpFmiG,EAAwBhC,EAC1B0B,EACArE,EAAex8G,GAAGrhB,KAClB69H,EAAex8G,GAAGjb,MAClBi3H,GAEEoF,EAA6BrB,EAC/BvD,EAAex8G,GAAGjb,MAClBi3H,EACAp6H,EACAW,GAEF85H,EAAkB97H,KAAK,CACrB+8H,cAAe6D,EACfp8H,MAAOy3H,EAAex8G,GAAGjb,MACzBiiB,QAAS,KACTE,QAASk6G,EAA2Bl6G,QACpCC,SAAUi6G,EAA2Bj6G,SACrC1b,UAAWuwH,EACXj1G,WAAW,GAEf,CACA,OAAOs1G,CACT,CACA,SAASY,EAAa4D,EAAa9zG,GACjC,IAAIsvG,EAAoB,GACpBvvG,EAAQC,EAAYtiB,SAASo2H,EAAYxtG,YAAYvG,OACrDuD,EAAqBgvG,EAA0BvyG,EAAO+zG,GACtDQ,EArTN,SAAsCv0G,GACpC,IAAI7F,EAAM,GAaV,OAXIi7F,EAAAA,EAAAA,QAAOp1F,EAAMM,aACfnG,EAAM,QACGk7F,EAAAA,EAAAA,UAASr1F,EAAMM,aACxBnG,EAAM,WACGm7F,EAAAA,EAAAA,QAAOt1F,EAAMM,aACtBnG,EAAM,QACGo7F,EAAAA,EAAAA,UAASv1F,EAAMM,aACxBnG,EAAM,WACGq7F,EAAAA,EAAAA,SAAQx1F,EAAMM,eACvBnG,EAAM,UAED,CAAEC,QAASD,EAAKE,SAZV,GAaf,CAsSiCm6G,CAA6Bx0G,GACxDy0G,EAAgB,eAAsBz0G,EAAMpiB,QAAQC,cAAgB,QAUxE,OATA0xH,EAAkB97H,KAAK,CACrB+8H,cAAejtG,EACftrB,MAAO+nB,EAAM3M,WACb6G,QAASu6G,EACTr6G,QAASm6G,EAAyBn6G,QAClCC,SAAUk6G,EAAyBl6G,SACnC1b,UAAW,GACXsb,WAAW,IAENs1G,CACT,CACA,SAASa,EAAwBsE,EAAuB71H,EAAaywH,GACnE,IAAIC,EAAoB,GACxB,IAAK,IAAI55B,EAAI,EAAGA,EAAI++B,EAAsBtiI,OAAQujG,IAAK,CACrD,IAAI68B,EAA4BC,EAAoCiC,EAAsB/+B,GAAG9jG,KAAMgN,GAC/F81H,EAA+BvF,EACjCsF,EAAsB/+B,GAAG19F,MACzBy8H,EAAsB/+B,GAAGh3F,UACzB2wH,GAEFC,EAAkB97H,KAAK,CACrB+8H,cAAegC,EACfv6H,MAAOy8H,EAAsB/+B,GAAG19F,MAChCiiB,QAAS,KACTE,QAASu6G,EAA6Bv6G,QACtCC,SAAUs6G,EAA6Bt6G,SACvC1b,UAAW+1H,EAAsB/+B,GAAGh3F,UACpCsb,WAAW,GAEf,CACA,OAAOs1G,CACT,CACA,SAAS8C,EAAqB3xC,EAAc7uF,EAAMoG,EAAOi3H,GACvD,IAAIsB,EAAgB,GAChBzvH,EAAsB2/E,EAAavxE,eAAetM,QAAQ,KAAM,IAClEO,GAAYsT,EAAAA,EAAAA,IAASgqE,EAAalrF,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,MACzEhE,EAAc6hF,EAAa7hF,YAC3B+1H,EACE7zH,IAAwB9L,EAAAA,QAAgB0vB,mBAAmBC,YAC3DxhB,IAAcnO,EAAAA,QAAgBQ,WAAW+B,QAC3Cq9H,EACE9zH,IAAwB9L,EAAAA,QAAgB0vB,mBAAmBC,YAC3DxhB,IAAcnO,EAAAA,QAAgBQ,WAAWkC,SAE7C,OAAQ9F,GACN,KAAKoD,EAAAA,QAAgB83C,cAAc3rC,GAEjCovH,EACKA,EADWqE,EACK5/H,EAAAA,QAAgB83C,cAAcxoB,GAAK1lB,EACnC5J,EAAAA,QAAgB83C,cAAc3rC,GAAKvC,EACxD,MAEF,KAAK5J,EAAAA,QAAgB83C,cAAcxoB,GACnC,KAAKtvB,EAAAA,QAAgB83C,cAAcvoB,GACnC,KAAKvvB,EAAAA,QAAgB83C,cAActoB,GACnC,KAAKxvB,EAAAA,QAAgB83C,cAAcnB,GACnC,KAAK32C,EAAAA,QAAgB83C,cAAclB,GACnC,KAAK52C,EAAAA,QAAgBg4C,cAAcC,GACjCsjF,EAAgB3+H,EAAOgN,EACvB,MAEF,KAAK5J,EAAAA,QAAgB+3C,eAAetsC,GAAI,CACtC,IAAIo0H,EAAmB1F,EAAiCn3H,EAAOi3H,GAE3D0F,EAC+B,SAA7BE,EAAiB16G,QACnBo2G,EAAgB,KAAO3xH,EACe,SAA7Bi2H,EAAiB16G,UAC1Bo2G,EAAgB,KAAO3xH,GAGQ,SAA7Bi2H,EAAiB16G,QACnBo2G,EAAgB,KAAO3xH,EACe,SAA7Bi2H,EAAiB16G,UAC1Bo2G,EAAgB,KAAO3xH,GAG3B,KACF,CACA,KAAK5J,EAAAA,QAAgB+3C,eAAehsC,GAAI,CACtC,IAAI8zH,EAAmB1F,EAAiCn3H,EAAOi3H,GAC9B,SAA7B4F,EAAiB16G,QACnBo2G,EAAgB,KAAO3xH,EACe,SAA7Bi2H,EAAiB16G,UAC1Bo2G,EAAgB,KAAO3xH,GAEzB,KACF,CACA,KAAK5J,EAAAA,QAAgB+3C,eAAe3oB,GAAI,CACtC,IAAIywG,EAAmB1F,EAAiCn3H,EAAOi3H,GAC9B,SAA7B4F,EAAiB16G,QACnBo2G,EAAgB,KAAO3xH,EACe,SAA7Bi2H,EAAiB16G,UAC1Bo2G,EAAgB,KAAO3xH,GAEzB,KACF,CACA,KAAK5J,EAAAA,QAAgB+3C,eAAe9rC,GAAI,CAEtC,IAAI4zH,EAAmB1F,EAAiCn3H,EAAOi3H,GAC9B,SAA7B4F,EAAiB16G,QACnBo2G,EAAgB,KAAO3xH,EACe,SAA7Bi2H,EAAiB16G,UAC1Bo2G,EAAgB,KAAO3xH,GAEzB,KACF,EAEF,OAAO2xH,CACT,CACA,SAAS+B,EAA0BvyG,EAAO0gE,GAExC,OAAOrgE,EAA4BL,EAAMM,YAAaN,EAAMG,gBAAkBugE,EAAa7hF,WAC7F,CACA,SAAS4zH,EAAoCsC,EAAqBl2H,GAChE,IAAIm2H,EASJ,OAR4B,OAAxBD,IAE0B,uBAAxBA,EACFC,EAAyB//H,EAAAA,QAAgB8sB,qBAAqBC,GAAKnjB,EAClC,wBAAxBk2H,IACTC,EAAyB//H,EAAAA,QAAgB8sB,qBAAqBK,GAAKvjB,IAGhEm2H,CACT,CACA,SAASjF,EAAkB7gH,GACzB,IAAI9O,EAAmB,GA0BvB,OAvBgB,IAAZ8O,GAEF9O,EAAiB3M,KAAK,CACpB5B,KAAM,qBACNoG,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,OAC9C/mC,KAAM,aAERpF,EAAiB3M,KAAK,CACpB5B,KAAM,sBACNoG,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,OAC9C/mC,KAAM,cAIRpF,EAAiB3M,KAAK,CACpB5B,KAAM,qBACNoG,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,OAC9C/mC,KAAM,aAGH,CAAEyvH,UAzBI,CAAC,EAyBgB70H,iBAAkBA,EAClD,CACA,SAASkwH,IACP,IAAI4E,EAAqB,IAAIlhH,MAC3BmhH,EAAsB,IAAInhH,MAC1BohH,EAAkB,IAAIphH,MAMxBkhH,EAAmBzhI,KAAK,CACtBm9H,WAAY37H,EAAAA,QAAgB83C,cAAc3rC,GAAK,IAC/CnJ,MAAO,IACP0G,UAAW1J,EAAAA,QAAgB88B,kBAAkBqa,MAE/C8oF,EAAmBzhI,KAAK,CACtBm9H,WAAY37H,EAAAA,QAAgB83C,cAAcxoB,GAAK,IAC/CtsB,MAAO,IACP0G,UAAW1J,EAAAA,QAAgB88B,kBAAkBqa,MAE/C8oF,EAAmBzhI,KAAK,CACtBm9H,WAAY37H,EAAAA,QAAgB83C,cAAcvoB,GAAK,IAC/CvsB,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB88B,kBAAkBqa,MAI/C+oF,EAAoB1hI,KAAK,CACvBm9H,WAAY37H,EAAAA,QAAgB+3C,eAAetsC,GAAK,IAChDzI,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,SAEhD4oF,EAAoB1hI,KAAK,CACvBm9H,WAAY37H,EAAAA,QAAgB+3C,eAAehsC,GAAK,IAChD/I,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,SAEhD4oF,EAAoB1hI,KAAK,CACvBm9H,WAAY37H,EAAAA,QAAgB+3C,eAAe3oB,GAAK,IAChDpsB,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,SAEhD4oF,EAAoB1hI,KAAK,CACvBm9H,WAAY37H,EAAAA,QAAgB+3C,eAAe1oB,GAAK,IAChDrsB,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,SAIhD4oF,EAAoB1hI,KAAK,CACvBm9H,WAAY37H,EAAAA,QAAgB8sB,qBAAqBC,GAAK,IACtD/pB,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,SAIhD,IAAK,IAAI/pB,EAAI,EAAGA,EAAI0yG,EAAmB9iI,OAAQowB,IAAK,CAClD,IAAIyxG,EAA6BjB,EAAgCkC,EAAmB1yG,GAAG7jB,WACvFy2H,EAAgB3hI,KAAK,CACnB+8H,cAAe0E,EAAmB1yG,GAAGouG,WACrC34H,MAAOi9H,EAAmB1yG,GAAGvqB,MAC7BmiB,QAAS65G,EAA2B75G,QACpCC,SAAU45G,EAA2B55G,SACrC1b,UAAWu2H,EAAmB1yG,GAAG7jB,WAErC,CAEA,IAAK,IAAI5N,EAAI,EAAGA,EAAIokI,EAAoB/iI,OAAQrB,IAAK,CACnD,IAAIskI,EAA+BjG,EACjC+F,EAAoBpkI,GAAGkH,MACvBk9H,EAAoBpkI,GAAG4N,WA/DF,GAkEvBy2H,EAAgB3hI,KAAK,CACnB+8H,cAAe2E,EAAoBpkI,GAAG6/H,WACtC34H,MAAOk9H,EAAoBpkI,GAAGkH,MAC9BmiB,QAASi7G,EAA6Bj7G,QACtCC,SAAUg7G,EAA6Bh7G,SACvC1b,UAAWw2H,EAAoBpkI,GAAG4N,WAEtC,CAIA,OAFAy2H,EAAgB3hI,KAAK,CAAE+8H,cAAe,MAAOv4H,MAAO,SAAUmiB,QAAS,OAAQC,SAAU,GAAI1b,UAAW,KAEjGy2H,CACT,CACA,SAAS1E,EAAuBxhH,GAC9B,IAAIomH,EAAqB,IAAIthH,MAyB7B,OAvBgB,IAAZ9E,GAEFomH,EAAmB7hI,KAAK,CACtBm9H,WAAY37H,EAAAA,QAAgB0tB,uBAAuBC,MACnD3qB,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,OAC9C/mC,KAAM,aAER8vH,EAAmB7hI,KAAK,CACtBm9H,WAAY37H,EAAAA,QAAgB0tB,uBAAuBG,MACnD7qB,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,OAC9C/mC,KAAM,cAIR8vH,EAAmB7hI,KAAK,CACtBm9H,WAAY37H,EAAAA,QAAgB0tB,uBAAuBC,MACnD3qB,MAAO,KACP0G,UAAW1J,EAAAA,QAAgB28B,mBAAmB2a,OAC9C/mC,KAAM,aAGH8vH,CACT,CACA,SAASpE,EAAuBxwC,EAAcz8E,EAAUsxH,GACtD,IAAIlC,EAAW3yC,EAAatuF,OAC1BojI,EAAW,GACXC,EAAW,GACXC,EAAerC,EACfsC,EAAmB1xH,EACnB2xH,EAAmB3xH,EACjBmtH,EAAoB,GACtBM,EAAiB,GAEfztH,EAAW,GAAKA,GAAY,IAC9ByxH,EAAerC,EAAW,EAC1BuC,EAAmB,GAGrB,IAAK,IAAIpiI,EAAI,EAAGA,EAAI6/H,EAAU7/H,IAC5BgiI,GAAY,MAAQ90C,EAAaltF,GAAGqL,YAAc,IAiCpD,GA7B6C,MAAzC22H,EAAShb,OAAOgb,EAASpjI,OAAS,KACpCojI,EAAWA,EAAS1jI,MAAM,GAAI,IAG5B6jI,GAAoB,EACtBjE,EAAej+H,KAAK,CAClBumB,YAAa,qBACb/hB,MAAO,eACPmiB,QAAS,sBACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAGXw3G,EAAej+H,KAAK,CAClBumB,YAAa,qCACb/hB,MAAO,eACPmiB,QAAS,sBACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAKTm5G,IAAasC,EAAkB,CACjC,KAAOD,EAAeE,GACpBH,GAAY,MAAQC,EAAe,GAAK,KACxCA,IAE2C,MAAzCD,EAASjb,OAAOib,EAASrjI,OAAS,KACpCqjI,EAAWA,EAAS3jI,MAAM,GAAI,IAEhC4/H,EAAej+H,KAAK,CAClBumB,YAAay7G,EAASnsH,OACtBrR,MAAO,cACPmiB,QAAS,kBACTC,SAAU,GACV1b,UAAW,GACXob,MAAO47G,EAAmBtC,EAC1Bp5G,WAAW,EACXC,QAAS,MAEb,CACAw3G,EAAej+H,KAAK,CAClBumB,YAAaw7G,EAASlsH,OACtBrR,MAAO,iBACPmiB,QAAS,sBACTC,SAAU,GACV1b,UAAW,GACXob,MAAOs5G,EACPp5G,WAAW,EACXC,QAAS,OAIPm5G,GAAY,GACdjC,EAAkB39H,KAAK,CACrB+8H,cAAe,MACfv4H,MAAO,EACPmiB,QAAS,OACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAEXw3G,EAAej+H,KAAK,CAClBumB,YAAa,WACb/hB,MAAO,eACPmiB,QAAS,eACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAEXw3G,EAAej+H,KAAK,CAClBumB,YAAa,gBACb/hB,MAAO,eACPmiB,QAAS,eACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,QAIJm5G,EAAW,GAAKA,GAAY,IACnCjC,EAAkB39H,KAAK,CACrB+8H,cAAe,UACfv4H,MAAO,EACPmiB,QAAS,OACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPG,QAAS,OAEXw3G,EAAej+H,KAAK,CAClBumB,YAAa,mBACb/hB,MAAO,eACPmiB,QAAS,eACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAEXw3G,EAAej+H,KAAK,CAClBumB,YAAa,4BACb/hB,MAAO,eACPmiB,QAAS,eACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAEXw3G,EAAej+H,KAAK,CAClBumB,YAAa,UACb/hB,MAAO,QACPmiB,QAAS,OACTC,SAAU,MACV1b,UAAW,MACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAEXw3G,EAAej+H,KAAK,CAClBumB,YAAa,YACb/hB,MAAO,cACPmiB,QAAS,eACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAEXw3G,EAAej+H,KAAK,CAClBumB,YAAa,aACb/hB,MAAO,OACPmiB,QAAS,GACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,QAKTq7G,EACFnE,EAAkB39H,KAAK,CACrB+8H,cAAe,MACfv4H,MAAO,EACPmiB,QAAS,OACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAGXk3G,EAAkB39H,KAAK,CACrB+8H,cAAe,MACfv4H,MAAO,EACPmiB,QAAS,OACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAIb,IAAK,IAAI1mB,EAAI,EAAGA,EAAI6/H,EAAU7/H,IAAK,CACjC,IAAIuN,EAAsB2/E,EAAaltF,GAAG2b,eAAetM,QAAQ,KAAM,IACnEO,GAAYsT,EAAAA,EAAAA,IAASgqE,EAAaltF,GAAGgC,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,MAC5EhE,EAAc6hF,EAAaltF,GAAGqL,YAC9BkC,IAAwB9L,EAAAA,QAAgB0vB,mBAAmBC,aACzDxhB,IAAcnO,EAAAA,QAAgBQ,WAAW+B,SAC3C45H,EAAkB39H,KAAK,CACrB+8H,cAAe,KAAO3xH,EACtB5G,MAAO,EACPmiB,QAAS,OACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAGT9W,IAAcnO,EAAAA,QAAgBQ,WAAWkC,UAC3Cy5H,EAAkB39H,KAAK,CACrB+8H,cAAe,KAAO3xH,EACtB5G,MAAO,EACPmiB,QAAS,OACTC,SAAU,GACV1b,UAAW,GACXob,MAAO,EACPE,WAAW,EACXC,QAAS,OAIjB,CACA,MAAO,CAAEk3G,kBAAmBA,EAAmBM,eAAgBA,EACjE,CAqBA,SAASmB,EAA0B7yG,EAAO+zG,GACxC,IAAIhzH,EAAsBgzH,EAAY5kH,eAAetM,QAAQ,KAAM,IAE/DS,EAAuB,KACvBuyH,EAAU,GACVC,EAAgB,GACpB,QAJgBp/G,EAAAA,EAAAA,IAASq9G,EAAYv+H,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,OAK1E,KAAK5N,EAAAA,QAAgBQ,WAAW+B,QAC9Bq+H,EAAU5gI,EAAAA,QAAgB8O,UAAUyB,KAAKhO,QACzCs+H,GAAgB50G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgBQ,WAAW+B,SACrD,MACF,KAAKvC,EAAAA,QAAgBQ,WAAWkC,SAC9Bk+H,EAAU5gI,EAAAA,QAAgB8O,UAAUyB,KAAK7N,SACzCm+H,GAAgB50G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgBQ,WAAWkC,UACrD,MACF,KAAK1C,EAAAA,QAAgBQ,WAAWC,SAC9BmgI,EAAU5gI,EAAAA,QAAgB8O,UAAUyB,KAAK9P,SACzCogI,GAAgB50G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgBQ,WAAWC,UACrD,MACF,KAAKT,EAAAA,QAAgBQ,WAAWk0C,SAC9BksF,EAAU5gI,EAAAA,QAAgB8O,UAAUyB,KAAKmkC,SACzCmsF,GAAgB50G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgBQ,WAAWk0C,UACrD,MACF,KAAK10C,EAAAA,QAAgBQ,WAAWm0C,MAC9BisF,EAAU5gI,EAAAA,QAAgB8O,UAAUyB,KAAKokC,MACzCksF,GAAgB50G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgBQ,WAAWm0C,OACrD,MACF,KAAK30C,EAAAA,QAAgBQ,WAAWV,KAC9B8gI,EAAU5gI,EAAAA,QAAgB8O,UAAUyB,KAAKzQ,KACzC+gI,GAAgB50G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgBQ,WAAWV,MACrD,MACF,QACE8gI,EAAU,GACVE,EAA0B,OAG9B,IAAIC,EAAoB,GACpBD,EAA0B,GAC9B,OAAQh1H,GACN,KAAK9L,EAAAA,QAAgB0vB,mBAAmBC,WACtCoxG,EAAoB/gI,EAAAA,QAAgB8O,UAAUoL,eAAeyV,WAE7DmxG,EAA0B,cAC1B,MACF,KAAK9gI,EAAAA,QAAgB0vB,mBAAmBI,UACtCixG,EAAoB/gI,EAAAA,QAAgB8O,UAAUoL,eAAe4V,UAC7DgxG,GAA0B70G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgB0vB,mBAAmBI,WACvE,MACF,KAAK9vB,EAAAA,QAAgB0vB,mBAAmBS,SACtC4wG,EAAoB/gI,EAAAA,QAAgB8O,UAAUoL,eAAeiW,SAC7D2wG,GAA0B70G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgB0vB,mBAAmBS,UACvE,MACF,KAAKnwB,EAAAA,QAAgB0vB,mBAAmBO,iBACtC8wG,EAAoB/gI,EAAAA,QAAgB8O,UAAUoL,eAAe+V,iBAC7D6wG,GAA0B70G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgB0vB,mBAAmBO,kBACvE,MACF,KAAKjwB,EAAAA,QAAgB0vB,mBAAmBmB,iBACtCkwG,EAAoB/gI,EAAAA,QAAgB8O,UAAUoL,eAAe2W,iBAG7DiwG,GAA0B70G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgB0vB,mBAAmBO,kBACvE,MACF,KAAKjwB,EAAAA,QAAgB0vB,mBAAmB5vB,KACtCihI,EAAoB/gI,EAAAA,QAAgB8O,UAAUoL,eAAepa,KAI7DghI,EACED,KAAkB50G,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgBQ,WAAWV,OACnDmsB,EAAAA,EAAAA,IAAUjsB,EAAAA,QAAgB0vB,mBAAmB5vB,MAC7C,OACN,MACF,QACEihI,EAAoB,GACpBD,EAA0B,OAG9B,IAAIE,EAAkB,GAClB5yH,EAAe,GACnB,OAAQ2c,EAAMG,eAAeniB,YAC3B,IAAK,KACCo3G,EAAAA,EAAAA,QAAOp1F,EAAMM,eAAgB+0F,EAAAA,EAAAA,UAASr1F,EAAMM,eAAgBk1F,EAAAA,EAAAA,SAAQx1F,EAAMM,cAC5E21G,EAAkBhhI,EAAAA,QAAgB8O,UAAU1F,QAAQ+tC,IACpD/oC,EAAe,WAEf4yH,EAAkBhhI,EAAAA,QAAgB8O,UAAU1F,QAAQ4xC,MACpD5sC,EAAe,QAEjB,MACF,IAAK,KAED+xG,EAAAA,EAAAA,QAAOp1F,EAAMM,eACb+0F,EAAAA,EAAAA,UAASr1F,EAAMM,eACfg1F,EAAAA,EAAAA,QAAOt1F,EAAMM,eACbi1F,EAAAA,EAAAA,UAASv1F,EAAMM,cAEf21G,EAAkBhhI,EAAAA,QAAgB8O,UAAU1F,QAAQ2xC,IACpD3sC,EAAe,SAEf4yH,EAAkBhhI,EAAAA,QAAgB8O,UAAU1F,QAAQ4xC,MACpD5sC,EAAe,QAEjB,MACF,QACE4yH,EAAkBhhI,EAAAA,QAAgB8O,UAAU1F,QAAQ4xC,MACpD5sC,EAAe,OAYnB,MAPgB,KAAZwyH,GAAwC,KAAtBG,GAAgD,KAApBC,IAChD3yH,EAAuBrO,EAAAA,QAAgB8O,UAAU8rC,SAC9ChtC,QAAQ,WAAYgzH,GACpBhzH,QAAQ,qBAAsBmzH,GAC9BnzH,QAAQ,cAAeozH,IAGrB,CACL3yH,qBAAsBA,EACtBF,UAAW0yH,EACX/0H,oBAAqBg1H,EACrB1yH,aAAcA,EAElB,2IC/2CA,MAAM6yH,EAAmB,CACvB,MACA,cAEIC,EAAqB,CACzB,SACA,SACA,cAEIC,EAAmB,CACvB,OACA,cAEIC,EAAqB,CACzB,SACA,SACA,SACA,cAEIC,EAAgB,CACpB,OACA,OACA,aACA,cAGK,SAASlhB,EAAOmhB,GACrB,OAAOC,EAAeD,EAAaL,EACrC,CACO,SAAS7gB,EAASkhB,GACvB,OAAOC,EAAeD,EAAaJ,EACrC,CACO,SAAS7gB,EAAOihB,GACrB,OAAOC,EAAeD,EAAaH,EACrC,CACO,SAAS7gB,EAASghB,GACvB,OAAOC,EAAeD,EAAaF,EACrC,CACO,SAAS7gB,EAAQ+gB,GACtB,OAAOC,EAAeD,EAAaD,EACrC,CAGO,SAASE,EAAeC,EAAaC,GAC1C,OAAOA,EAAuBltH,MAAMjM,GAE3Bk5H,EAAYtkI,QAAQoL,IAAS,GAExC,gCChDO,SAAS4lC,EAAO7lC,EAAKu5B,EAAUD,GACpC,GAAIC,EAASgS,WAAY,CAEvB,GAAe,MAAXvrC,EAAI,GAAY,CAClB,IAAIq5H,EAAW9/F,EAAS+sE,QAAQ+yB,SAC3BA,IACHA,EAAW,SAEb,IAAIC,EAAO,MACX,IACEA,EAAO//F,EAAS+sE,QAAQgzB,IAC1B,CAAE,MAAOl4G,GAEP,MADAkY,EAAOpc,MAAM,gCAAgCkE,KACvCA,CACR,CACA,MAAO,GAAGi4G,MAAaC,IAAOt5H,GAChC,CACE,OAAOA,CAEX,CAEE,OAAOA,CAEX,CAEO,SAASu5H,EAAaC,EAAejgG,EAAUD,GACpD,IAAI+oE,EACJ,GAAI9oE,EAASgS,WAEX,IACE82D,EAAO9oE,EAAS+sE,QAAQjE,IAC1B,CAAE,MAAOjhF,GAEP,MADAkY,EAAOpc,MAAM,gCAAgCkE,KACvCA,CACR,MAEAihF,EAAO3uG,OAAOk0C,SAAS6xF,SAGzB,IAAIC,EAAMr3B,EAAKxtG,QAAQ,iBACvB,IAAa,IAAT6kI,EAAY,CACd,IAAIzhI,EAAQyhI,EAAM,GACdx9C,EAAMjkF,EAAQ,EAClB,OAAOoqG,EAAKj7F,UAAUnP,EAAOikF,EAC/B,CACE,OAAOs9C,CAEX,oNC7CA,MAAMG,EAAY,CAChBllE,OAAQ,MACRmlE,OAAQ,MACRC,OAAQ,OAGJC,EAAqB,CACzB,WACA,YACA,YACA,WACA,WACA,aACA,SACA,UAEIC,EAAoB,CAAC,SAAU,gBAAiB,YAAa,YAAa,gBAAiB,QAAS,UACpGC,EAAqB,CAAC,YAAa,SAAU,iBAAkB,iBAC/DC,EAAyB,CAAC,OAAQ,WAAY,YAAa,gBAE3DC,EAAe,CACnBC,EAAG,CAAE5lI,KAAM,WAAY6lI,UAAW,GAClCrvB,EAAG,CAAEx2G,KAAM,YAAa6lI,UAAW,GACnCC,EAAG,CAAE9lI,KAAM,WAAY6lI,UAAW,GAClCvvB,EAAG,CAAEt2G,KAAM,QAAS6lI,UAAW,GAC/BrY,EAAG,CAAExtH,KAAM,UAAW6lI,UAAW,GACjC3+C,EAAG,CAAElnF,KAAM,UAAW6lI,UAAW,IAG5B,MAAME,EACXrlI,WAAAA,CAAYslI,EAAiBC,GAC3BnjI,KAAKojI,SAAWF,EAAgBh1H,QAAQ,SAAU,QAClDlO,KAAKqjI,QAAUF,GAAkB,CACnC,CAEA,WAAIG,GACF,OAAOtjI,KAAKojI,QACd,CAEAG,eAAAA,CAAgBrmI,GACd,IAAIsmI,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BL,EAAYF,EAAa3lI,EAAKgM,cAAc,IAAI65H,UAIpD,OAHWS,EAAMxjI,KAAK0jI,WAAWF,EAAOtmI,IAAO,GAC7BuS,MAAM,KACHtS,MAAM4lI,EAAY,GACxB5sH,KAAK,IACtB,CAEAwtH,mBAAAA,CAAoBzmI,GAClB,IAAIsmI,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAEjC,OADaI,EAAMxjI,KAAK0jI,WAAWF,EAAOtmI,IAAO,GAAGyX,OAAOlF,MAAM,OAAOhS,OAAS,GACxDolI,EAAa3lI,EAAK,IAAI6lI,SACjD,CAEAa,sBAAAA,CAAuB1mI,GACrB,IAAIsmI,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UACjC,OAAOI,EAAMxjI,KAAK0jI,WAAWF,EAAOtmI,IAAO,GAAGyX,OAAOlF,MAAM,OAAOhS,OAAS,CAC7E,CAEAomI,iBAAAA,GACE,IAAIL,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAEjC,OADgBI,EAAMxjI,KAAK0jI,WAAWF,EAAO,YAC5B,GAAG/zH,MAAM,OAAO,EACnC,CAEAq0H,oBAAAA,CAAqB5mI,GACnB,IAAIsmI,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BW,EAAYP,EAAMxjI,KAAKgkI,qBAAqBR,EAAO,UAAWtmI,GAAQ,GACtE+mI,EAAUT,EAAMxjI,KAAKgkI,qBAAqBR,EAAO,QAAStmI,GAAQ,GAClEgnI,EAAalkI,KAAKojI,SAASrzH,UAAUg0H,EAAU,GAAIE,EAAQ,GAAKA,EAAQ,GAAGxmI,QAC/E,OAAO,IAAIwlI,EAAaiB,EAC1B,CAGAC,WAAAA,CAAYC,GACV,IACIC,EADQrkI,KAAKyjI,WAAWzjI,KAAKojI,UAChB,GACb9hH,EAAQ8iH,GAAsB,IAC9B9gI,EAAiC,KAAzBge,EAAMvR,UAAU,EAAG,GAAYuR,EAAQ,IAAMA,EACrDjhB,EAASL,KAAKojI,SAASrzH,UAAU,EAAGs0H,EAAK,IAAM/gI,EAAQtD,KAAKojI,SAASrzH,UAAUs0H,EAAK,GAAKA,EAAK,GAAG5mI,QAErG,OADAuC,KAAKojI,SAAW/iI,EACTL,IACT,CAEAskI,oBAAAA,CAAqBC,EAASC,GAC5B,IAAIhB,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7B/iI,EAAS,GACT0jI,EAAYP,EAAMxjI,KAAKgkI,qBAAqBR,EAAO,UAAWe,IAC9DN,EAAUT,EAAMxjI,KAAKgkI,qBAAqBR,EAAO,QAASe,IAI9D,OAHAlkI,EAASL,KAAKojI,SAASl1H,QAAQ61H,EAAU,GAAIA,EAAU,GAAG71H,QAAQq2H,EAASC,IAC3EnkI,EAASA,EAAO6N,QAAQ+1H,EAAQ,GAAIA,EAAQ,GAAG/1H,QAAQq2H,EAASC,IAChExkI,KAAKojI,SAAW/iI,EACTL,IACT,CAEAykI,uBAAAA,CAAwBvnI,EAAMomI,GAC5B,IAAIE,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BW,EAAYP,EAAMxjI,KAAKgkI,qBAAqBR,EAAO,UAAWtmI,GAAQ,GACtE+mI,EAAUT,EAAMxjI,KAAKgkI,qBAAqBR,EAAO,QAAStmI,GAAQ,GAClEgnI,EAAalkI,KAAKojI,SAASrzH,UAAUg0H,EAAU,GAAIE,EAAQ,GAAKA,EAAQ,GAAGxmI,QAC3E4C,EAASL,KAAKojI,SAASl1H,QAAQg2H,EAAYZ,EAAQA,SAEvD,OADAtjI,KAAKojI,SAAW/iI,EACTL,IACT,CAEA0kI,kBAAAA,CAAmBxnI,EAAMoG,EAAOqhI,GAC9B,IAAInB,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BwB,EAAUpB,EAAMxjI,KAAK0jI,WAAWF,EAAOtmI,IAAO,GAC9C2nI,EAAU7kI,KAAK8kI,oBAAoB5nI,EAAMoG,EAAOqhI,GAChDtkI,EAASL,KAAKojI,SAASl1H,QAAQ02H,EAASC,GAE5C,OADA7kI,KAAKojI,SAAW/iI,EACTL,IACT,CAEA+kI,mBAAAA,CAAoBC,GAClB,IAAIxB,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7B/iI,EAAS,GAOb,OANA2kI,EAAWl1H,SAASxM,IAClB,IAAIshI,EAAUpB,EAAMxjI,KAAK0jI,WAAWF,EAAOlgI,EAAMpG,OAAO,GACpD2nI,EAAU7kI,KAAK8kI,oBAAoBxhI,EAAMpG,KAAMoG,EAAMA,MAAOA,EAAMqhI,OACtEtkI,EAASL,KAAKojI,SAASl1H,QAAQ02H,EAASC,GACxC7kI,KAAKojI,SAAW/iI,CAAM,IAEjBL,IACT,CAEAilI,gBAAAA,CAAiBn/G,GACf,IAAI09G,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BiB,EAAOb,EAAMxjI,KAAK0jI,WAAWF,EAAO,QACpCnrH,EAASgsH,EAAK,GAAG50H,MAAM,MAC3B,GAAgC,QAA5B4I,EAAO,GAAGzB,cACZ,MAAM,IAAI5Z,MAAM,gEAAgEqb,EAAO,MAEzF,IAAI/D,EAAS+D,EAAOlb,MAAM,GACtB+nI,EAAa,CAAC,MAAO,MAAO,OAChC,GAAI5wH,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAaxC,EAAoB78G,GAAa,CAC1E,IACIxiB,EAAQ,OADItD,KAAKolI,kBAAkB9wH,EAAQwR,EAAY68G,EAAoBuC,GAClD/uH,KAAK,OAC9B9V,EAASL,KAAKojI,SAASrzH,UAAU,EAAGs0H,EAAK,IAAM/gI,EAAQtD,KAAKojI,SAASrzH,UAAUs0H,EAAK,GAAKA,EAAK,GAAG5mI,QAErG,OADAuC,KAAKojI,SAAW/iI,EACTL,IACT,CACA,MAAM,IAAIhD,MAAM,4FAClB,CAEAqoI,mBAAAA,CAAoBv/G,GAClB,IAAI09G,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BiB,EAAOb,EAAMxjI,KAAK0jI,WAAWF,EAAO,WACpCnrH,EAASgsH,EAAK,GAAG50H,MAAM,MAC3B,GAAgC,WAA5B4I,EAAO,GAAGzB,cACZ,MAAM,IAAI5Z,MAAM,mEAAmEqb,EAAO,MAE5F,IAAI/D,EAAS+D,EAAOlb,MAAM,GACtB+nI,EAAa,CAAC,MAAO,MAAO,OAChC,GAAI5wH,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAaxC,EAAoB78G,GAAa,CAC1E,IACIxiB,EAAQ,wBADItD,KAAKolI,kBAAkB9wH,EAAQwR,EAAY68G,EAAoBuC,GACjC/uH,KAAK,OAC/C9V,EAASL,KAAKojI,SAASrzH,UAAU,EAAGs0H,EAAK,IAAM/gI,EAAQtD,KAAKojI,SAASrzH,UAAUs0H,EAAK,GAAKA,EAAK,GAAG5mI,QAErG,OADAuC,KAAKojI,SAAW/iI,EACTL,IACT,CACA,MAAM,IAAIhD,MAAM,4FAClB,CAEAsoI,uBAAAA,CAAwBx/G,GACtB,IAAI09G,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BiB,EAAOb,EAAMxjI,KAAK0jI,WAAWF,EAAO,UACpCnrH,EAASgsH,EAAK,GAAG50H,MAAM,MAC3B,GAAgC,UAA5B4I,EAAO,GAAGzB,cACZ,MAAM,IAAI5Z,MAAM,kEAAkEqb,EAAO,MAE3F,IAAI/D,EAAS+D,EAAOlb,MAAM,GAC1B,GAAImX,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAavC,EAAwB98G,GAAa,CAC9E,IACIxiB,EAAQ,SADItD,KAAKolI,kBAAkB9wH,EAAQwR,EAAY88G,GAC5BzsH,KAAK,OAChC9V,EAASL,KAAKojI,SAASrzH,UAAU,EAAGs0H,EAAK,IAAM/gI,EAAQtD,KAAKojI,SAASrzH,UAAUs0H,EAAK,GAAKA,EAAK,GAAG5mI,QAErG,OADAuC,KAAKojI,SAAW/iI,EACTL,IACT,CACA,MAAM,IAAIhD,MAAM,4FAClB,CAGAuoI,qBAAAA,CAAsBroI,EAAMowB,GAC1B,IAAIjtB,EAASL,KAAKwlI,gBAAgBtoI,EAAMowB,GAExC,OADAttB,KAAKojI,SAAW/iI,EACTL,IACT,CAEAylI,qBAAAA,CAAsBvoI,EAAMowB,EAAS8S,GACnC,IAAI//B,EAASL,KAAK0lI,gBAAgBxoI,EAAMowB,EAAS8S,GAEjD,OADApgC,KAAKojI,SAAW/iI,EACTL,IACT,CAEA2lI,uBAAAA,CAAwBzoI,EAAM4oB,GAC5B,IAAIzlB,EAASL,KAAK4lI,kBAAkB1oI,EAAM4oB,GAE1C,OADA9lB,KAAKojI,SAAW/iI,EACTL,IACT,CAEA6lI,wBAAAA,CAAyB3oI,EAAM4oB,GAC7B,IAAIzlB,EAASL,KAAK8lI,mBAAmB5oI,EAAM4oB,GAE3C,OADA9lB,KAAKojI,SAAW/iI,EACTL,IACT,CAGA+lI,qBAAAA,CAAsB7oI,EAAM8oI,GAC1B,IAAI3lI,EAASL,KAAKwlI,gBAAgBtoI,EAAM8oI,GAExC,OADAhmI,KAAKojI,SAAW/iI,EACTL,IACT,CAEAimI,qBAAAA,CAAsB/oI,EAAM8oI,EAAS5lG,GACnC,IAAI//B,EAASL,KAAK0lI,gBAAgBxoI,EAAM8oI,EAAS5lG,GAEjD,OADApgC,KAAKojI,SAAW/iI,EACTL,IACT,CAEAkmI,uBAAAA,CAAwBhpI,EAAM4oB,GAC5B,IAAIzlB,EAASL,KAAK4lI,kBAAkB1oI,EAAM4oB,GAE1C,OADA9lB,KAAKojI,SAAW/iI,EACTL,IACT,CAEAmmI,wBAAAA,CAAyBjpI,EAAM4oB,GAC7B,IAAIzlB,EAASL,KAAK8lI,mBAAmB5oI,EAAM4oB,GAE3C,OADA9lB,KAAKojI,SAAW/iI,EACTL,IACT,CAGAyjI,UAAAA,GACE,IAAIx7H,EAAQ,EACZ,MAAMu7H,EAAQ,GACR4C,EAAc,mBACdC,EAAyD,OAA5CrmI,KAAKojI,SAASpjI,KAAKojI,SAAS3lI,OAAS,GAAcuC,KAAKojI,SAAWpjI,KAAKojI,SAAW,KACtG,IAAIiB,EAAO,KACX,KAAiD,QAAzCA,EAAO+B,EAAYrzB,KAAKszB,KAC9B7C,EAAM1kI,KAAK,CAACulI,EAAK,GAAIp8H,IACrBA,EAAQm+H,EAAY5hE,UAEtB,OAAOg/D,CACT,CAEAE,UAAAA,CAAWF,EAAOlgI,GAKhB,OAJakgI,EAAMtkG,WAAWmlG,GACfA,EAAK,GAAG1vH,OAAOlF,MAAM,MACpB,GAAGmH,eAAiBtT,EAAMsT,eAG5C,CAEAotH,oBAAAA,CAAqBR,EAAO8C,EAASppI,GAKnC,OAJasmI,EAAMtkG,WAAWmlG,IAC5B,IAAIhsH,EAASgsH,EAAK,GAAG1vH,OAAOlF,MAAM,MAClC,OAAO4I,EAAO,GAAGzB,eAAiB0vH,EAAQ1vH,eAAiByB,EAAO,GAAGzB,eAAiB1Z,EAAK0Z,aAAa,GAG5G,CAEAkuH,mBAAAA,CAAoB5nI,EAAMoG,EAAOqhI,GAC/B,IAAInB,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BiB,EAAOb,EAAMxjI,KAAK0jI,WAAWF,EAAOtmI,IAEpCmb,EAASgsH,EAAK,GAAG50H,MAAM,MACvBpP,EAAS,GAcb,OAZEA,EAJmB,CAAC,UAAW,SAGd8S,SAASkF,EAAO,GAAGzB,eAC3BytH,EAAK,GAAGn2H,QAAQmK,EAAO,GAAI/U,GAE3BqhI,EACLN,EAAK,GAAGn2H,QACNmK,EAAOssH,EAAQ,GACfpxH,MAAMjQ,GAASA,GAAQ8G,EAAAA,EAAAA,qBAAoB9G,EAAO,QAAS,EAAG,CAAE+G,YAAY,KAE9Eg6H,EAAK,GAAGn2H,QACNmK,EAAOA,EAAO5a,OAAS,GACvB8V,MAAMjQ,GAASA,GAAQ8G,EAAAA,EAAAA,qBAAoB9G,EAAO,QAAS,EAAG,CAAE+G,YAAY,KAG7EhK,CACT,CAEAmlI,eAAAA,CAAgBtoI,EAAMoG,GACpB,IAAIkgI,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BiB,EAAOb,EAAMxjI,KAAK0jI,WAAWF,EAAOtmI,IACpCmb,EAASgsH,EAAK,GAAG50H,MAAM,MACvB82H,GAAWn8H,EAAAA,EAAAA,qBAAoB9G,EAAO,QAAStD,KAAKqjI,QAAS,CAAEh5H,YAAY,IAC/EgO,EAAOA,EAAO5a,OAAS,GAAK8oI,EAC5B,IAAIzhC,EAASzsF,EAAOlC,KAAK,KACrB9V,EAASL,KAAKojI,SAASrzH,UAAU,EAAGs0H,EAAK,IAAMv/B,EAAS9kG,KAAKojI,SAASrzH,UAAUs0H,EAAK,GAAKA,EAAK,GAAG5mI,QAEtG,OADAuC,KAAKojI,SAAW/iI,EACTA,CACT,CAEAqlI,eAAAA,CAAgBxoI,EAAMoG,EAAO88B,GAC3B,IAAIojG,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BiB,EAAOb,EAAMxjI,KAAK0jI,WAAWF,EAAOtmI,IACpCmb,EAASgsH,EAAK,GAAG50H,MAAM,MAEvB82H,GAAWn8H,EAAAA,EAAAA,qBAAoB9G,EAAO,QAAStD,KAAKqjI,QAAS,CAAEh5H,YAAY,IAC3Em8H,EAAU,GAAGD,SACI,IAAVnmG,IAETomG,EAAU,GAAGD,MADEn8H,EAAAA,EAAAA,qBAAoBg2B,EAAO,QAASpgC,KAAKqjI,QAAS,CAAEh5H,YAAY,OAGjFgO,EAAOA,EAAO5a,OAAS,GAAK+oI,EAC5B,IAAI1hC,EAASzsF,EAAOlC,KAAK,KACrB9V,EAASL,KAAKojI,SAASrzH,UAAU,EAAGs0H,EAAK,IAAMv/B,EAAS9kG,KAAKojI,SAASrzH,UAAUs0H,EAAK,GAAKA,EAAK,GAAG5mI,QAEtG,OADAuC,KAAKojI,SAAW/iI,EACTA,CACT,CAEAulI,iBAAAA,CAAkB1oI,EAAM4oB,GACtB,IAAI09G,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BiB,EAAOb,EAAMxjI,KAAK0jI,WAAWF,EAAOtmI,IACpCM,EAAU6mI,EAAK,GAAGztH,cAAcpZ,QAAQ,QAC5C,IAAgB,GAAZA,EACF,MAAM,IAAIR,MAAM,8CAElB,IAAIsX,EAAS+vH,EAAK,GAAGt0H,UAAUs0H,EAAK,GAAG7mI,QAAQ,KAAO,EAAG6mI,EAAK,GAAG7mI,QAAQ,MAAMiS,MAAM,KACrF,GAAI6E,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAazC,EAAmB58G,GAAa,CACzE,IAAI2gH,EAAYzmI,KAAKolI,kBAAkB9wH,EAAQwR,EAAY48G,GACvDp/H,EAAQ,GAAG+gI,EAAK,GAAGt0H,UAAU,EAAGvS,UAAgBipI,EAAUtwH,KAAK,QAC/D9V,EAASL,KAAKojI,SAASrzH,UAAU,EAAGs0H,EAAK,IAAM/gI,EAAQtD,KAAKojI,SAASrzH,UAAUs0H,EAAK,GAAKA,EAAK,GAAG5mI,QAErG,OADAuC,KAAKojI,SAAW/iI,EACTA,CACT,CACA,MAAM,IAAIrD,MAAM,4FAClB,CAEA8oI,kBAAAA,CAAmB5oI,EAAM4oB,GACvB,IAAI09G,EAAQxjI,KAAKyjI,WAAWzjI,KAAKojI,UAC7BiB,EAAOb,EAAMxjI,KAAK0jI,WAAWF,EAAOtmI,IACpCM,EAAU6mI,EAAK,GAAGztH,cAAcpZ,QAAQ,SAC5C,IAAgB,GAAZA,EACF,MAAM,IAAIR,MAAM,+CAElB,IAAIsX,EAAS+vH,EAAK,GAAGt0H,UAAUs0H,EAAK,GAAG7mI,QAAQ,KAAO,EAAG6mI,EAAK,GAAG7mI,QAAQ,MAAMiS,MAAM,KACrF,GAAI6E,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAa1C,EAAoB38G,GAAa,CAC1E,IAAI2gH,EAAYzmI,KAAKolI,kBAAkB9wH,EAAQwR,EAAY28G,GACvDn/H,EAAQ,GAAG+gI,EAAK,GAAGt0H,UAAU,EAAGvS,WAAiBipI,EAAUtwH,KAAK,QAChE9V,EAASL,KAAKojI,SAASrzH,UAAU,EAAGs0H,EAAK,IAAM/gI,EAAQtD,KAAKojI,SAASrzH,UAAUs0H,EAAK,GAAKA,EAAK,GAAG5mI,QAErG,OADAuC,KAAKojI,SAAW/iI,EACTA,CACT,CACA,MAAM,IAAIrD,MAAM,4FAClB,CAEAmoI,YAAAA,CAAauB,EAAM5gH,GACjB,IAAI6gH,GAAY,EAChB,IAAK,IAAI78G,KAAShE,EAChB6gH,EAAWvlI,KAAKgoB,IACdu9G,EACAD,EAAKxnG,WAAWt2B,GAASA,GAAQkhB,KAGrC,OAAO68G,CACT,CAEAvB,iBAAAA,CAAkB9wH,EAAQwR,EAAY8gH,EAAa1B,GAajD,OAZa5wH,EAAOvF,KAAI,CAACzL,EAAO2E,KAC9B,IAAI2a,EAA6C,OAAnCkD,EAAW8gH,EAAY3+H,UAA8D,IAAnC6d,EAAW8gH,EAAY3+H,IACvF,MAA0B,aAAtB2+H,EAAY3+H,GACP2a,GAAWsiH,EAAW/xH,SAASmvH,EAAUx8G,EAAW8gH,EAAY3+H,MACnEq6H,EAAUx8G,EAAW8gH,EAAY3+H,KACjC3E,EAAM4F,cAEH0Z,GACHxY,EAAAA,EAAAA,qBAAoB0b,EAAW8gH,EAAY3+H,IAAS,QAASjI,KAAKqjI,QAAS,CAAEh5H,YAAY,IACzF/G,CACN,GAGJ,ECnTF,MAAMujI,EAA0C,CAC9CC,GAAI,aACJC,MAAO,gBACPC,KAAM,qBAGD18F,eAAe28F,EACpBx8F,EACAy8F,EACAjvH,EACAlP,EACAo+H,EACA58F,EACArqC,EACAknI,EACAC,EACAC,GAEA,MAAMz8F,EAAqC,GACrC08F,EAAc,GACpB,GAsSF,SAAyBh9F,GAEvB,IAAK,MAAMrtC,KAAQqtC,EACjB,GAAyB,KAArBA,EAAWrtC,GAAc,OAAO,EAEtC,OAJgB,CAKlB,CA5SMsqI,CAAgBj9F,GAAa,CAC/B,MAAMk9F,EA8QV,SAAsBC,GACpB,IAAIrnI,EAAS,GACb,MAAMkqC,EAAqC,CAAC,EAC5C,IAAK,MAAMgX,KAASmmF,EAClB,GAAIhpI,OAAOiJ,UAAUgL,eAAeC,KAAK80H,EAAgBnmF,GAAQ,CAC/D,MAAMomF,EAAWD,EAAenmF,GAC5BomF,GAAYA,EAAqB,YAAKA,EAAe,OACvDp9F,EAAWo9F,EAAqB,YAAKA,EAAe,KAExD,CAEF,IAAK,MAAMzqI,KAAQqtC,EACb7rC,OAAOiJ,UAAUgL,eAAeC,KAAK23B,EAAYrtC,KACnDmD,GAAUkqC,EAAWrtC,IAGzB,OAAOmD,CACT,CA/RsBunI,CA8PtB,SACE7+H,EACAwhC,GAEA,MAAMlqC,EAAiD,CAAC,EASxD,OARA0I,EAAO+G,SAASyxC,IACd,MAAMkmF,EAAYl9F,EAAWgX,GAC7B,GAAIkmF,EAAW,CACb,MAAMnE,EAAU,IAAIuE,EAA2BJ,GACzCK,EAA2B,KAAdL,EAAmBnE,EAAQO,oBAAsBtiF,EACpElhD,EAAOkhD,GAAS,CAAEumF,WAAYA,EAAY54H,KAAMu4H,EAClD,KAEKpnI,CACT,CA5QmC0nI,CAAkB,IAAI,IAAIC,IAAIj/H,IAAUwhC,IACvE,IAAI,IAAIy9F,IAAIj/H,IAASgG,KAAKnG,IACxB2+H,EAAYzoI,KAAK,CAAE2Y,SAAU7O,EAAMiI,KAAM,WAAY,IAEvD,IAAK,MAAMo3H,KAAOpB,EAChB,GAAInoI,OAAOiJ,UAAUgL,eAAeC,KAAKi0H,EAAiBoB,GAAM,CAC9D,MAAM3E,EAAU,IAAIuE,QACZK,GACJ15F,EAAAA,EAAAA,QAAO/D,EAAUo8F,EAAgBoB,GAAO,OAAQX,EAAiBD,GACjED,IAKJ9D,EAAQa,YAAYgE,EAAkBjoI,EAAO6I,EAAQk/H,IAGrD,IAAIj3C,EAAW,EACbK,EAAW,EACXqL,EAAiB,EACnB,MAAM0rC,EAAqBloI,EAAMsb,QAAQ+G,WAAW8Q,aAAaq/D,sBACtC,OAAvB01C,GAA+BA,EAAmB3qI,OAAS,IAC7DuzF,EAAWo3C,EAAmB,GAAGv1C,sBAAsBpB,WAAWN,WAAWv1D,QAC7Ey1D,EAAW+2C,EAAmB,GAAGv1C,sBAAsBpB,WAAWN,WAAWx1D,QAC7E+gE,EAAiB0rC,EAAmB,GAAGv1C,sBAAsBpB,WAAWN,WAAWzvC,WAErF,MAAM2mF,EAAyBC,EAAkBhF,EAAS2E,EAAKj3C,EAAUK,EAAUqL,GAGnF4mC,EAAQoB,mBACN,MACAt6H,EAAAA,EAAAA,qBAAoBlK,EAAMk0B,OAAO7R,WAAWjI,OAAQ,QAAS,EAAG,CAAEjQ,YAAY,KAEhFi5H,EAAQoB,mBACN,MACAt6H,EAAAA,EAAAA,qBAAoBlK,EAAMk0B,OAAO7R,WAAWhI,QAAS,QAAS,EAAG,CAAElQ,YAAY,KAIjFi5H,EAAQ2B,iBAAiB,CACvB3C,UAAW,SACXiG,OAAQ,IACRnhF,eAAgBlnD,EAAMsb,QAAQ6G,eAAe2kC,qBAAqBI,eAClEL,cAAe7mD,EAAMsb,QAAQ6G,eAAe2kC,qBAAqBD,gBAEnEu8E,EAAQ+B,oBAAoB,CAC1B/C,UAAW,SACXiG,OAAQ,IACRnhF,eAAgBlnD,EAAMsb,QAAQ6G,eAAe2kC,qBAAqBI,eAClEL,cAAe7mD,EAAMsb,QAAQ6G,eAAe2kC,qBAAqBD,gBAEnEu8E,EAAQgC,wBAAwB,CAC9B7R,KAAM,KACN+U,SAAUpnI,KAAKgoB,OAAOlpB,EAAMsb,QAAQ6G,eAAeqsD,YAIrD,MAAMzhD,EAAwC/sB,EAAMsb,QAAQ+G,WAAW0K,gBACjEzC,EAA4CtqB,EAAMsb,QAAQiH,WAAW+H,kBAC3E,IAAIi+G,EAAiB,GACrB,IAAK,IAAI5pI,EAAI,EAAGA,EAAIouB,EAAgBxvB,OAAQoB,IAAK,CAC/C,MAAMugI,EAAcnyG,EAAgBpuB,GAC9B6pI,EAAgBl+G,EAAkB3rB,GAClC8pI,EAAqBvJ,EAAcA,EAAYl1H,YAAc,GAC7DkC,EAAsBgzH,EAAcA,EAAY5kH,eAAetM,QAAQ,KAAM,IAAM,GACnFO,EAAY2wH,GAAcr9G,EAAAA,EAAAA,IAASq9G,EAAYv+H,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,MAAQ,GAC9F67F,EAAY2+B,EAAiBE,EAAcF,GAAiB,YAAc,QAAW,GACrFG,EAAoBz8H,GAAsBmtH,EAAAA,EAAAA,uBAAsB9qH,GAAas7F,EAC7E++B,EAAY18H,EAAsBqC,EAAYs7F,EACpD,IAAIg/B,QAAqBb,EAAgBz9F,EAAUo+F,EAAoB,OAAQzB,GAC3ElnI,EAAMsb,QAAQ+G,WAAWwI,qBACa,MAAO,MAA/Cg+G,EAA0BA,EAuVzB76H,QAAQ,IAAIkyG,OAvV2B,MAuVd,KAvVqB,QAEjD,MAAM4oB,EAAe,IAAInB,EAA2BkB,GACpDC,EAAa1E,qBAAqBwE,EAAWA,EAAYH,GACzD,MAAMM,EAAkBP,EAAgBQ,EAAmBR,EAAen+F,GAAc,CAAC,EAEzF,IAAK,MAAM3hC,KAAQqgI,EACjB,GAAIvqI,OAAOiJ,UAAUgL,eAAeC,KAAKq2H,EAAiBrgI,GAAO,CAC/D,IAAIugI,EAAYF,EAAgBrgI,GAC5BugI,IACEA,IAAc7oI,EAAAA,QAAgBm1C,OAAOW,kBACvC+yF,EAAY7oI,EAAAA,QAAgBm1C,OAAOU,UAErC6yF,EAAatE,mBACX97H,EACqB,iBAAdugI,GACH/+H,EAAAA,EAAAA,qBAAoB++H,EAAW,QAAS,EAAG,CAAE9+H,YAAY,IACzD8+H,GAGV,CAEFV,GAAkBO,EAAa1F,QAAU,MAC3C,CAEA,IAAI8F,EAAkB9F,EAAQA,QAAQp1H,QACpC,cACAm7H,EAAap8G,EAAiBzC,EAAmBtqB,EAAMsb,QAAQ+G,WAAWwI,qBAG5E,MAAMu+G,EAAkBppI,EAAMsb,QAAQ+G,WAAWwI,mBAC7C,cAAa3gB,EAAAA,EAAAA,qBAAoBlK,EAAMk0B,OAAO7R,WAAWjI,OAAS,EAAG,QAAS,EAAG,CAAEjQ,YAAY,QAC/F,GAOJ,OANA++H,EAAkBA,EAAgBl7H,QAAQ,eAAgBo7H,GAE1DF,EAAkBA,EACfl7H,QAAQ,cAAem6H,EAAuBkB,WAC9Cr7H,QAAQ,WAAYm6H,EAAuB98E,QAEtC08E,GACN,IAAK,KACHmB,EAAkBA,EAAgBl7H,QAAQ,QAAS,UAAUA,QAAQ,SAAU,WAC/E,MACF,IAAK,QACHk7H,EAAkBA,EAAgBl7H,QAAQ,QAAS,UAAUA,QAAQ,MAAO,QAAQA,QAAQ,MAAO,SACnG,MACF,IAAK,OACHk7H,EAAkBA,EAAgBl7H,QAAQ,MAAO,QAAQA,QAAQ,SAAU,WAK/E28B,EAAc/rC,KAAK,CACjB5B,KAAM2pI,EAAgBoB,GAAO,OAC7B3kI,MAAO8lI,EAAkBX,EAAiBhB,EAC1Cl3F,SAA2B,QAAjB42F,EAAyB,wBAA0B,WAC7Dt2H,KAAM,WAEV,CAEJ,MACE,IAAK,MAAM3T,KAAQqtC,EACQ,KAArBA,EAAWrtC,IAAcqqI,EAAYzoI,KAAK,CAAE2Y,SAAUva,EAAM2T,KAAM,YAG1E,GAAIg6B,EAAcptC,OAAS,EAAG,CAC5B,MAAM+rI,EAA0B,OAAXvxH,EAAkB,KAAOA,EACxCwxH,QAAsBrC,EAAat4F,UACvCN,EAAAA,EAAAA,QAAO,GAAG04F,KAAYsC,8CAA0DlC,EAAiBD,GACjG,QAEoB,OAAlBoC,GACF5+F,EAAc/rC,KAAK,CACjB5B,KAAM,aACNoG,MAAOmmI,EACPl5F,SAA2B,QAAjB42F,EAAyB,wBAA0B,WAC7Dt2H,KAAM,WAGZ,CACA,MAAO,CAAEg6B,cAAeA,EAAeG,aAAcu8F,EACvD,CAEO,SAASmC,EAAc3gI,EAAkBg5B,GAC9C,MAAM4nG,EAAwB,CAAC,EAC/B,IAAK,IAAI9qI,EAAI,EAAGA,EAAIkK,EAAOtL,OAAQoB,IAAK,CACtC,MAAM0iD,EAAQx4C,EAAOlK,GACjB0iD,IAAOooF,EAASpoF,GAASqoF,EAAuBroF,EAAOxf,GAC7D,CACA,OAAO4nG,CACT,CAEA,SAAST,EACP37G,EACAgd,GAEA,MAAM0+F,EAAmD,CAAC,EA0B1D,GAzBI17G,EAAQxhB,IAA2B,OAArBwhB,EAAQxhB,GAAGzI,QAC3B2lI,EAAoB,GAAI17G,EAAQxhB,GAAGzI,OAAS,IAE1CiqB,EAAQlhB,IAA2B,OAArBkhB,EAAQlhB,GAAG/I,QAC3B2lI,EAAoB,GAAI17G,EAAQlhB,GAAG/I,OAAS,IAE1CiqB,EAAQhhB,IAA2B,OAArBghB,EAAQhhB,GAAGjJ,QAC3B2lI,EAAoB,GAAI17G,EAAQhhB,GAAGjJ,OAAS,IAE1CiqB,EAAQ9gB,IAA2B,OAArB8gB,EAAQ9gB,GAAGnJ,QAC3B2lI,EAAoB,GAAI17G,EAAQ9gB,GAAGnJ,OAAS,IAE1CiqB,EAAQqC,IAA2B,OAArBrC,EAAQqC,GAAGtsB,SAAmB8tB,EAAAA,EAAAA,gBAAe7D,EAAQqC,GAAGtsB,SACxE2lI,EAAoB,GAAI17G,EAAQqC,GAAGtsB,OAAS,IAE1CiqB,EAAQsC,IAA2B,OAArBtC,EAAQsC,GAAGvsB,OAAkBiqB,EAAQuC,IAA2B,OAArBvC,EAAQuC,GAAGxsB,OAAkBslI,EAAcr7G,KACtG07G,EAAoB,GAAI17G,EAAQsC,GAAGvsB,OAAS,GAC5C2lI,EAAoB,GAAI17G,EAAQuC,GAAGxsB,OAAS,IAE1CiqB,EAAQ0pB,IAA2B,OAArB1pB,EAAQ0pB,GAAG3zC,QAC3B2lI,EAAoB,GAAI17G,EAAQ0pB,GAAG3zC,OAAS,IAE1CiqB,EAAQgrB,IAA2B,OAArBhrB,EAAQgrB,GAAGj1C,QAC3B2lI,EAAoB,GAAI17G,EAAQgrB,GAAGj1C,OAAS,IAE1CiqB,EAAQlC,OAASkC,EAAQlC,MAAMnuB,KAAM,CACvC,MAAM2sI,EAAYt8G,EAAQlC,MAAMnuB,KAChC,GAAI2sI,EAAW,CACb,MAAMpC,EAAYl9F,EAAWs/F,GAC7B,GAAIpC,EAAW,CACb,MACM7lI,EAuMd,SACE0hI,EACAwG,GAEA,MACMC,EAAYzG,EAAQM,uBAAuB,WADvB,EAEpBoG,EAAU,GAChB,IAAIC,EA9MmC,EA+MvC,IAAK,IAAIprI,EAAI,EAAGA,EAAIkrI,EAAWlrI,IAC7BmrI,EAAQlrI,KAAK,aAAemrI,GAAY5gI,YAG1C,OADA2gI,EAAQlrI,KAAKwkI,EAAQO,qBACd,CAAEqG,QAASF,EAAQ7zH,KAAK,KAAM2zH,eAAgBG,EACvD,CApNmBE,CADK,IAAItC,EAA2BJ,IAE/CwB,EAAoB,GAAIrnI,EAAGsoI,OAC7B,CACF,CACF,CACA,OAAOjB,CACT,CAEA,SAASL,EAAcr7G,GACrB,QAAyB,OAArBA,EAAQsC,GAAGvsB,OAAuC,OAArBiqB,EAAQuC,GAAGxsB,OACtCiqB,EAAQ/S,iBAAmBla,EAAAA,QAAgB0vB,mBAAmBO,mBAEvDhD,EAAQ/S,iBAAmBla,EAAAA,QAAgB0vB,mBAAmBmB,iBACzC,IAArB5D,EAAQsC,GAAGvsB,QAAe8tB,EAAAA,EAAAA,gBAAe7D,EAAQuC,GAAGxsB,QAEpD8tB,EAAAA,EAAAA,gBAAe7D,EAAQsC,GAAGvsB,QAA+B,IAArBiqB,EAAQuC,GAAGxsB,OAI9D,CAEA,SAASsmI,EAAuBlrH,EAAoBqjB,GAClD,OAAOA,EAAI2tE,WAAWhxF,EAAW9H,eAAe4tB,MAAMt1B,IACpD,IAAKA,EAAM,MAAO,GAClB,MAAM++F,EAAwB/+F,EAAc,QAAe,YAAE,GAAqB,iBAAE,GACpF,IAAIk9B,EAAW,GACf,QAAoB,IAAT6hE,GAAwBA,EAAM,CACvC7hE,EAAW6hE,EAAc,QACzB7hE,EAAWA,EAASr8B,UAAUq8B,EAAS5uC,QAAQ,KAAO,GACtD4uC,EA6DN,SAAuBzjC,GACrB,MAAoC,cAA7BtM,OAAOk0C,SAAS65F,SAA2BzhI,EAAIoH,UAAUpH,EAAI0hI,OAAO,eAAiB,GAAK1hI,CACnG,CA/DiB2hI,CAAcl+F,GACzB,MAAMzjC,EAAM,GAAGyjC,2BACf,OAAOwhE,MAAMjlG,GACV67B,MAAMwpE,IACL,GAAwB,MAApBA,EAASxqF,OACX,KAAM,gCAAgC7a,MAAQqlG,EAASxqF,UAAUwqF,EAAS3hD,aAE5E,OAAO2hD,EAASn3F,MAAM,IAEvB2tB,MAAM3tB,IACL,IAAwC,IAApCA,EAAKrZ,QAAQ,kBAEf,MADA6Q,QAAQC,IAAI,sFAAuF3F,GAC7F,8DAA8DA,IAEtE,OAAOkO,CAAI,IAEZ2uB,OAAM,IACE,IAEb,CAEE,OADAn3B,QAAQC,IAAI,iCAAiCoQ,KACtC,EACT,GAEJ,CAiDA,SAASwpH,EAAgBqC,EAA0BnD,GACjD,OAAOA,EAAat4F,SAASy7F,EAAkB,QAAQ/lG,MAAMuK,GACpDA,GAEX,CAEA,SAASu5F,EACPhF,EACA2E,EACAuC,EACAC,EACAC,GAGA,MAAMC,GAAcH,EAAoBC,GAAsB,EACxDG,GAAsBxgI,EAAAA,EAAAA,qBAAoBugI,EAAY,QAAS,EAAG,CAAEtgI,YAAY,IAGhFwgI,GAAoBJ,EAAqBD,GAAqB,EAEpE,IAAIj/E,EAAS,GACTg+E,EAAY,GAEhB,OAAQtB,GACN,IAAK,KACH3E,EAAQqC,wBAAwB,MAAO,CACrCmF,UAAWH,EACXI,cAAeF,EACfnpF,UAAWgpF,IAEbnB,EAAYqB,EACZr/E,EAAS,yBAA2Bq/E,EACpC,MACF,IAAK,OACHtH,EAAQuC,yBAAyB,MAAO,CACtCmF,SAAUL,EACVM,UAAWR,EACXS,UAAW,EACXC,SAAU,KACVC,SAAU,KACVC,WAAY,EACZC,OAAQ,IAEV/B,EAAYqB,EACZr/E,EAAS,yBAA2Bq/E,EACpC,MACF,IAAK,QACHtH,EAAQqC,wBAAwB,MAAO,CACrCmF,UAAWH,EACXI,cAAeF,EACfnpF,UAAWgpF,IAEbn/E,EAAS,uBAAyBq/E,EAGtC,MAAO,CAAErB,UAAWA,EAAWh+E,OAAQA,EACzC,CAEA,SAAS89E,EACPp8G,EACAzC,EACA+gH,GAEA,IAAIC,EAAY,GAChB,MAAMC,GAA6B,IAAlBF,EAAyB,OAAS,IAC7C5rF,EAAa1yB,EAAgBxvB,OACnC,IAAIiuI,EAAkB,GAEtB,IAAK,IAAI7sI,EAAI,EAAGA,EAAI8gD,EAAY9gD,IAAK,CACnC,MAAMugI,EAAcnyG,EAAgBpuB,GAC9B6pI,EAAgBl+G,EAAkB3rB,GAClC8pI,EAAqBvJ,EAAcA,EAAYl1H,YAAc,GAI7Dk3H,GAHsBhC,EAAcA,EAAY5kH,eAAetM,QAAQ,KAAM,IAAM,KACvEkxH,GAAcr9G,EAAAA,EAAAA,IAASq9G,EAAYv+H,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,MAAQ,KAClFw6H,EAAiBE,EAAcF,GAAiB,YAAc,QAAW,IAE3F,IAAIiD,EAAc,GAEhBA,EADiB,IAAfhsF,EACY,IAAIgpF,sBAAuC8C,KAAYrK,IAA0BuH,IAErF,IAAN9pI,EAEY,IAAI8pI,WAA4BA,eAAgC8C,KAAYrK,IAA0BuH,IAC3G9pI,IAAM8gD,EAAa,EAEd,MAAMgpF,QAAyB+C,mBAAiCD,KAAYrK,IAA0BuH,IAGtG,MAAMA,QAAyB+C,QAAsB/C,eAAgC8C,KAAYrK,IAA0BuH,IAG7I+C,EAAkB/C,EAClB6C,GAAaG,CACf,CACA,OAAOH,CACT,CAqBA,SAASrD,EAAkBjoI,EAAmB+1G,EAAqB7xF,GAEjE,MAAMwnH,EAuBR,SAAoB9vE,GAClB,MAAMt8C,EAAI,CAAC,KAAM,KAAM,KAAM,MAC3B6gB,EAAIy7B,EAAI,IACV,OAAOA,EAAEzyD,YAAcmW,GAAG6gB,EAAI,IAAM,KAAO7gB,EAAE6gB,IAAM7gB,EAAE,GACvD,CA1BIsmG,CAAW5lH,EAAMsb,QAAQ6G,eAAezc,UAAY,UAAY1F,EAAMsb,QAAQ6G,eAAe5gB,aACzFw4B,EAAgB/5B,EAAMsb,QAAQ6G,eAAevc,oBAC/C,IACA5F,EAAMsb,QAAQ6G,eAAevc,oBAAoBuD,YACF,cAA9CnJ,EAAMsb,QAAQ6G,eAAe5gB,aAA+B,MAAQ,IACrE,GACEoqI,EACJ3rI,EAAMsb,QAAQ6G,eAAeqQ,gBAC5BxyB,EAAMsb,QAAQ6G,eAAeqQ,eAAiB,EAAI,UAAY,UASjE,MAAO,KAFwB,OAAXtO,EAAkB,KAAkB,UAAXA,EAAqB,QAAU,0BAJ3Dha,EAAAA,EAAAA,qBAAoBlK,EAAMk0B,OAAO/R,eAAetf,kBAAmB,QAAS,EAAG,CAC9FsH,YAAY,OAMZnK,EAAMk0B,OAAOtzB,eACV8qI,IAAe3xG,MAAkB4xG,WAAmB,IAAI,IAAI7D,IAAI/xB,IAAY9/F,KAAK,OACxF,8JCjhBA,MAAMmsH,EAAY,CAChBC,OAAQ,MACRnlE,OAAQ,MACRolE,OAAQ,OAEJC,EAAqB,CACzB,WACA,YACA,YACA,WACA,WACA,aACA,SACA,UAEIC,EAAoB,CAAC,SAAU,gBAAiB,YAAa,YAAa,gBAAiB,QAAS,UACpGC,EAAqB,CAAC,YAAa,SAAU,iBAAkB,iBAC/DC,EAAyB,CAAC,OAAQ,WAAY,YAAa,gBAC3DkJ,EAA0B,CAAC,YAC3BC,EAAa,CAAC,OAAQ,UAAW,SAAU,OAAQ,QACnDC,EAAkB,aAClBC,EAAgB,0DAEf,MAAMC,EACXtuI,WAAAA,CAAYuuI,EAAWC,EAAmBjJ,EAAQkJ,GAChDrsI,KAAKssI,WAAaH,EAClBnsI,KAAKusI,WAAaH,EAAkBl+H,QAAQ,SAAU,QACtDlO,KAAKqjI,QAAUF,GAAkB,EACjCnjI,KAAKwsI,eAAiBH,GAAiBF,CACzC,CAEA,aAAIM,GACF,OAAOzsI,KAAKusI,UACd,CAGAG,cAAAA,CAAexvI,GACb,MAAMyvI,EAAc3sI,KAAK4sI,0BAA0B1vI,GACnD,IAAKyvI,EACH,MAAM,IAAI3vI,MAAM,iBAAiBE,4BAEnC,MAAM2vI,EAAgB7sI,KAAK8sI,2BAA2BH,EAAa,SACnE,IAAKE,EACH,MAAM,IAAI7vI,MAAM,iBAAiBE,wBAGnC,OADuB2vI,EAAc,GAAGp9H,MAAM,UAAU,EAE1D,CAEAs9H,kBAAAA,CAAmB7vI,EAAM8vI,GACvB,MAAML,EAAc3sI,KAAK4sI,0BAA0B1vI,GACnD,IAAKyvI,EACH,MAAM,IAAI3vI,MAAM,iBAAiBE,4BAEnC,MAAM2vI,EAAgB7sI,KAAK8sI,2BAA2BH,EAAaK,GACnE,IAAKH,EACH,MAAM,IAAI7vI,MAAM,iBAAiBE,KAAQ8vI,4BAG3C,OADuBH,EAAc,GAAGp9H,MAAMu9H,EAAY,KAAK,EAEjE,CAEAC,kBAAAA,CAAmB/vI,GACjB,QAAmB,IAARA,GAA+B,MAARA,GAAwB,IAARA,EAChD,MAAM,IAAIF,MAAM,iCAElB,MAAMwmI,EAAQxjI,KAAKyjI,aACnB,IAAIpjI,EAAS,GACb,IAAK,IAAIxB,EAAI2kI,EAAM/lI,OAAS,EAAGoB,GAAK,EAAGA,IAAK,CAC1C,IAAIwlI,EAAOb,EAAM3kI,GACbwlI,EAAK,GAAGztH,cAAcyH,WAAW,SAC9BgmH,EAAK,GAAGx4B,SAAS3uG,KAItBmD,EAASgkI,EAAK,GAAK,KAAOhkI,EAE9B,CAEA,OADAL,KAAKusI,WAAalsI,EACXL,IACT,CAEAktI,kBAAAA,CAAmBC,GACjB,MAAM3J,EAAQxjI,KAAKyjI,aACnB,IAAIpjI,EAAS,GACb,IAAK,IAAIxB,EAAI2kI,EAAM/lI,OAAS,EAAGoB,GAAK,EAAGA,IAAK,CAC1C,IAAIwlI,EAAOb,EAAM3kI,GACbwlI,EAAK,GAAGztH,cAAcyH,WAAW,SAAWre,KAAKotI,iBAAiB/I,EAAK,IACrEA,EAAK,GAAGztH,cAAcpZ,QAAQ,KAAK2vI,EAAav2H,kBAAoB,IACtEvW,EAASgkI,EAAK,GAAK,OAAShkI,GAG9BA,EAASgkI,EAAK,GAAK,OAAShkI,CAEhC,CAEA,OADAL,KAAKusI,WAAalsI,EACXL,IACT,CAEAqtI,cAAAA,CAAenwI,EAAMowI,GACnB,QAAmB,IAARpwI,GAA+B,MAARA,GAAwB,IAARA,EAChD,MAAM,IAAIF,MAAM,iCAElB,QAA8B,IAAnBswI,GAAqD,MAAnBA,GAA8C,IAAnBA,EACtE,MAAM,IAAItwI,MAAM,oDAElB,MAAMwmI,EAAQxjI,KAAKyjI,aACnB,IAAIpjI,EAAS,GACb,IAAK,IAAIxB,EAAI2kI,EAAM/lI,OAAS,EAAGoB,GAAK,EAAGA,IAAK,CAC1C,IAAIwlI,EAAOb,EAAM3kI,GAEfwB,EADEgkI,EAAK,GAAGztH,cAAcyH,WAAW,SACzBgmH,EAAK,GAAGx4B,SAAS3uG,GAAQmnI,EAAK,GAAGn2H,QAAQhR,EAAMowI,GAAmBjJ,EAAK,IAAM,KAAOhkI,EAErFgkI,EAAK,GAAK,KAAOhkI,CAE9B,CAEA,OADAL,KAAKusI,WAAalsI,EACXL,IACT,CAEAutI,YAAAA,CAAarwI,EAAMswI,EAAmBC,EAAkBC,GAWtD,OAVIA,GACF1tI,KAAK2tI,oBAAoBzwI,EAAMwwI,GACR1tI,KAAK4tI,eAAe1wI,EAAMswI,EAAmBE,EAAOD,IAEzEztI,KAAK6tI,gBAAgB3wI,EAAMswI,EAAmBE,IAGhD1tI,KAAK4tI,eAAe1wI,EAAMswI,EAAmBE,EAAOD,GAG/CztI,IACT,CAEA8tI,iBAAAA,CAAkB5wI,EAAMoG,GACtB,MAAMqpI,EAAc3sI,KAAK4sI,0BAA0B1vI,GACnD,IAAKyvI,EACH,MAAM,IAAI3vI,MAAM,6CAA6CE,KAE/D,MAAM2vI,EAAgB7sI,KAAK8sI,2BAA2BH,EAAa,SACnE,IAAKE,EACH,MAAM,IAAI7vI,MAAM,sDAAsDE,KAExE,MAAM6wI,EAAmB,qBAEzB,IADeA,EAAiBh7B,KAAK85B,EAAc,IAEjD,MAAM,IAAI7vI,MAAM,uBAAuBE,qCAEzC,IAAIqpI,GAAWn8H,EAAAA,EAAAA,qBAAoB9G,EAAO,QAAStD,KAAKqjI,QAAS,CAAEh5H,YAAY,IAC/E,MAAM2jI,EAAanB,EAAc,GAAG3+H,QAAQ6/H,EAAkB,KAAKxH,KACnE,IAAIlmI,EACFL,KAAKusI,WAAWx8H,UAAU,EAAG88H,EAAc,IAC3CmB,EACAhuI,KAAKusI,WAAWx8H,UAAU88H,EAAc,GAAKA,EAAc,GAAGpvI,QAEhE,OADAuC,KAAKusI,WAAalsI,EACXL,IACT,CAEAiuI,qBAAAA,CAAsB/wI,EAAM8vI,EAAW1pI,GAErC,OADAtD,KAAKusI,WAAavsI,KAAKkuI,uBAAuBhxI,EAAM8vI,EAAW1pI,GACxDtD,IACT,CAEAmuI,sBAAAA,CAAuBjxI,EAAMkxI,GAC3B,MAAMzB,EAAc3sI,KAAK4sI,0BAA0B1vI,GAC7CmxI,EAAepC,EAAcl5B,KAAK45B,EAAY,GAAG,IACvD,IAAK0B,EACH,MAAM,IAAIrxI,MAAM,2FAGVqxI,EAAa,GADrB,IAAIzwH,EAEClO,SAAS2+H,EAAa,IAFvBzwH,EAGClO,SAAS2+H,EAAa,IAHvBzwH,EAISywH,EAAa,GAG1B,MAAMC,EAAY3B,EAAY,GAAG,GAAGz+H,QAClC+9H,EACA,KAAKmC,MAAexwH,MAAWA,MAAWA,OAE5C,IAAIvd,EACFL,KAAKusI,WAAWx8H,UAAU,EAAG48H,EAAY,GAAG,IAC5C2B,EACAtuI,KAAKusI,WAAWx8H,UAAU48H,EAAY,GAAG,GAAKA,EAAY,GAAG,GAAGlvI,QAElE,OADAuC,KAAKusI,WAAalsI,EACXL,IACT,CAEAuuI,iBAAAA,CAAkBC,EAAiBC,GAEjC,IAAIC,EADU1uI,KAAKyjI,aACGliI,QAAQ8iI,GAASA,EAAK,GAAGztH,cAAcyH,WAAW,UAAqC,GAA1BgmH,EAAK,GAAG7mI,QAAQ,QAC/F6C,EAAS,GAcb,OAbAquI,EAAU5+H,SAASu0H,IACjB,IAAIsK,EAAWtK,EAAK,GAAG7rH,MAAM,wCAC7B,GAAuB,IAAnBg2H,EACFnuI,EAASL,KAAKusI,WAAWr+H,QAAQm2H,EAAK,GAAI,GAAGsK,EAAS,MAAMF,KAC5DzuI,KAAKusI,WAAalsI,OAElB,GAAIsuI,EAAS,GAAGx7H,SAASq7H,GAAkB,CACzC,IAAII,EAAiBD,EAAS,GAAGzgI,QAAQsgI,EAAiBC,GAC1DpuI,EAASL,KAAKusI,WAAWr+H,QAAQm2H,EAAK,GAAI,GAAGsK,EAAS,MAAMC,KAC5D5uI,KAAKusI,WAAalsI,CACpB,CACF,IAEKL,IACT,CAGAulI,qBAAAA,CAAsBroI,EAAMowB,GAC1B,IAAIjtB,EAASL,KAAKwlI,gBAAgBtoI,EAAMowB,GAExC,OADAttB,KAAKusI,WAAalsI,EACXL,IACT,CAEAylI,qBAAAA,CAAsBvoI,EAAMowB,EAASgnD,GACnC,IAAIj0E,EAASL,KAAK0lI,gBAAgBxoI,EAAMowB,EAASgnD,GAEjD,OADAt0E,KAAKusI,WAAalsI,EACXL,IACT,CAEA2lI,uBAAAA,CAAwBzoI,EAAM4oB,GAC5B,IAAIzlB,EAASL,KAAK4lI,kBAAkB1oI,EAAM4oB,GAE1C,OADA9lB,KAAKusI,WAAalsI,EACXL,IACT,CAEA6lI,wBAAAA,CAAyB3oI,EAAM4oB,GAC7B,IAAIzlB,EAASL,KAAK8lI,mBAAmB5oI,EAAM4oB,GAE3C,OADA9lB,KAAKusI,WAAalsI,EACXL,IACT,CAGA+lI,qBAAAA,CAAsB7oI,EAAM8oI,GAC1B,IAAI3lI,EAASL,KAAKwlI,gBAAgBtoI,EAAM8oI,GAExC,OADAhmI,KAAKusI,WAAalsI,EACXL,IACT,CAEAimI,qBAAAA,CAAsB/oI,EAAM8oI,EAAS1xD,GACnC,IAAIj0E,EAASL,KAAK0lI,gBAAgBxoI,EAAM8oI,EAAS1xD,GAEjD,OADAt0E,KAAKusI,WAAalsI,EACXL,IACT,CAEAkmI,uBAAAA,CAAwBhpI,EAAM4oB,GAC5B,IAAIzlB,EAASL,KAAK4lI,kBAAkB1oI,EAAM4oB,GAE1C,OADA9lB,KAAKusI,WAAalsI,EACXL,IACT,CAEAmmI,wBAAAA,CAAyBjpI,EAAM4oB,GAC7B,IAAIzlB,EAASL,KAAK8lI,mBAAmB5oI,EAAM4oB,GAE3C,OADA9lB,KAAKusI,WAAalsI,EACXL,IACT,CAGAslI,uBAAAA,CAAwBx/G,GACtB,IAAIu+G,EAAOrkI,KAAK6uI,2BAA2B,QAC3C,IAAKxK,EACH,MAAM,IAAIrnI,MAAM,wDAElB,IAAI2xI,EAAWtK,EAAK,GAAG50H,MAAM,OAEzB6E,EADSq6H,EAASA,EAASlxI,OAAS,GAAGgS,MAAM,KAC7BtS,MAAM,GACtB2xI,EAAgB9uI,KAAK+uI,0BAA0Bz6H,GAAUw3H,EAA0BlJ,EACvF,GAAI5iI,KAAKgvI,iBAAiBlpH,EAAYgpH,GAAgB,CACpD,GAAIx6H,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAa2J,EAAehpH,GAAa,CACrE,IACIxiB,EAAQ,QADItD,KAAKolI,kBAAkB9wH,EAAQwR,EAAYgpH,GAC7B34H,KAAK,OAC/B9V,EAASL,KAAKivI,sBAAsB3rI,GAExC,OADAtD,KAAKusI,WAAalsI,EACXL,IACT,CACA,MAAM,IAAIhD,MAAM,4FAClB,CACA,MAAM,IAAIA,MAAM,qFAClB,CAEAioI,gBAAAA,CAAiBn/G,GACf,IAAIu+G,EAAOrkI,KAAK6uI,2BAA2B,MAC3C,IAAKxK,EACH,MAAM,IAAIrnI,MAAM,iDAElB,IAAI2xI,EAAWtK,EAAK,GAAG50H,MAAM,OAEzB6E,EADSq6H,EAASA,EAASlxI,OAAS,GAAGgS,MAAM,KAC7BtS,MAAM,GACtB+nI,EAAa,CAAC,MAAO,MAAO,OAChC,GAAI5wH,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAaxC,EAAoB78G,GAAa,CAC1E,IACIxiB,EAAQ,MADItD,KAAKolI,kBAAkB9wH,EAAQwR,EAAY68G,EAAoBuC,GACnD/uH,KAAK,OAC7B9V,EAASL,KAAKivI,sBAAsB3rI,GAExC,OADAtD,KAAKusI,WAAalsI,EACXL,IACT,CACA,MAAM,IAAIhD,MAAM,4FAClB,CAEAqoI,mBAAAA,CAAoBv/G,GAClB,IAAIu+G,EAAOrkI,KAAK6uI,2BAA2B,SAC3C,IAAKxK,EACH,MAAM,IAAIrnI,MAAM,oDAElB,IAAI2xI,EAAWtK,EAAK,GAAG50H,MAAM,OACzB4I,EAASs2H,EAASA,EAASlxI,OAAS,GAAGgS,MAAM,KAC7C6E,EAAS+D,EAAOlb,MAAM,GACtB+nI,EAAa,CAAC,MAAO,MAAO,OAChC,GAAI5wH,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAaxC,EAAoB78G,GAAa,CAC1E,IAAI2gH,EAAYzmI,KAAKolI,kBAAkB9wH,EAAQwR,EAAY68G,EAAoBuC,GAC3E5hI,EAAQ,SAAS+U,EAAO,MAAMA,EAAO,MAAMouH,EAAUtwH,KAAK,OAC1D9V,EAASL,KAAKivI,sBAAsB3rI,GAExC,OADAtD,KAAKusI,WAAalsI,EACXL,IACT,CACA,MAAM,IAAIhD,MAAM,4FAClB,CAEAkyI,iBAAAA,CAAkBhyI,GAChB,MAAMiyI,EAAgBnvI,KAAK+sI,mBAAmB7vI,EAAM,SACpD,OAAOmW,EAAAA,EAAAA,mBAAkB87H,EAC3B,CAEAC,iBAAAA,CAAkBlyI,EAAMoG,GACtB,MAAMwa,GAAe1T,EAAAA,EAAAA,qBAAoB9G,EAAO,QAAStD,KAAKqjI,QAAS,CAAEh5H,YAAY,IACrF,IAAIhK,EAASL,KAAKkuI,uBAAuBhxI,EAAM,QAAS4gB,GAExD,OADA9d,KAAKusI,WAAalsI,EACXL,IACT,CAGAqvI,UAAAA,CAAWC,EAAcC,GACvB,OAAOD,EAAeC,CACxB,CAEA3C,yBAAAA,CAA0B1vI,GACxB,MAAMsmI,EAAQxjI,KAAKyjI,aACnB,IAAI+L,GAAc,EACdC,GAAY,EACZj3H,GAAQ,EACZ,IAAK,IAAIvQ,EAAQ,EAAGA,EAAQu7H,EAAM/lI,OAAQwK,IAAS,CACjD,MACMoQ,EADOmrH,EAAMv7H,GACC,GAAGwH,MAAM,MAC7B,KAAI4I,EAAO5a,OAAS,GAApB,CAGA,OAAQ4a,EAAO,GAAGzB,eAChB,IAAK,SACC4B,EACFi3H,EAAWxnI,EAEXunI,EAAavnI,EAEf,MACF,IAAK,UAEDoQ,EAAO5a,OAAS,GACY,aAA5B4a,EAAO,GAAGzB,eACVyB,EAAO,GAAGzB,gBAAkB1Z,EAAK0Z,gBAEjC4B,GAAQ,GAEV,MACF,IAAK,SACL,IAAK,UACH,MACF,QACMA,IACFi3H,EAAWxnI,GAGjB,GAAIuQ,GAASg3H,GAAc,GAAKC,GAAY,EAC1C,OAAOjM,EAAMrmI,MAAMqyI,EAAYC,EA3BjC,CA6BF,CACA,GAAIj3H,GAASg3H,GAAc,EACzB,OAAOhM,EAAMrmI,MAAMqyI,EAAYhM,EAAM/lI,OAGzC,CAEAqvI,0BAAAA,CAA2B4C,EAAgBxyI,GAQzC,OAPawyI,EAAe99H,MAAMyyH,IAChC,MAAMhsH,EAASgsH,EAAK,GAAG50H,MAAM,MAC7B,QAAI4I,EAAO5a,OAAS,IAGe,YAA5B4a,EAAO,GAAGzB,eAA+ByB,EAAO,GAAGzB,gBAAkB1Z,EAAK0Z,aAAa,GAGlG,CAEAi4H,0BAAAA,CAA2Bh+H,GACzB,MAAM8+H,EAAU,CAAC,OAAQ,OAAQ,UAAW,OAAQ,OAAQ,UAW5D,OAVc3vI,KAAKyjI,aACA7xH,MAAMtO,IACvB,MAAM+U,EAAS/U,EAAM,GAAGmM,MAAM,MAC9B,OACE4I,EAAO5a,OAAS,GACY,SAA5B4a,EAAO,GAAGzB,eACV+4H,EAAQx8H,SAASkF,EAAO,GAAGzB,gBAC3ByB,EAAO,GAAGzB,gBAAkB,KAAO/F,EAAK+F,aAAa,GAI3D,CAEA6sH,UAAAA,GACE,IAAIx7H,EAAQ,EACZ,MAAMu7H,EAAQ,GACR4C,EAAc,mBACdwJ,EAC4C,OAAhD5vI,KAAKusI,WAAWvsI,KAAKusI,WAAW9uI,OAAS,GAAcuC,KAAKusI,WAAavsI,KAAKusI,WAAa,KAC7F,IAAIlI,EAAO,KACX,KAAoD,QAA5CA,EAAO+B,EAAYrzB,KAAK68B,KAC9BpM,EAAM1kI,KAAK,CAACulI,EAAK,GAAIp8H,IACrBA,EAAQm+H,EAAY5hE,UAEtB,OAAOg/D,CACT,CAEAE,UAAAA,CAAWF,EAAOlgI,GAKhB,OAJakgI,EAAMtkG,WAAWmlG,GACfA,EAAK,GAAG50H,MAAM,MACb,GAAGmH,eAAiBtT,EAAMsT,eAG5C,CAEAs3H,sBAAAA,CAAuBhxI,EAAM8vI,EAAW1pI,GACtC,MAAMqpI,EAAc3sI,KAAK4sI,0BAA0B1vI,GACnD,IAAKyvI,EACH,MAAM,IAAI3vI,MAAM,6CAA6CE,KAE/D,MAAM2vI,EAAgB7sI,KAAK8sI,2BAA2BH,EAAaK,GACnE,IAAKH,EACH,MAAM,IAAI7vI,MAAM,aAAagwI,wCAAgD9vI,KAE/E,MAAM6wI,EAAmB,qBAEzB,IADeA,EAAiBh7B,KAAK85B,EAAc,IAEjD,MAAM,IAAI7vI,MAAM,aAAagwI,SAAiB9vI,qCAEhD,MAAM8wI,EAAanB,EAAc,GAAG3+H,QAAQ6/H,EAAkB,KAAKzqI,KAKnE,OAHEtD,KAAKusI,WAAWx8H,UAAU,EAAG88H,EAAc,IAC3CmB,EACAhuI,KAAKusI,WAAWx8H,UAAU88H,EAAc,GAAKA,EAAc,GAAGpvI,OAElE,CAEAwxI,qBAAAA,CAAsBp+H,GACpB,MACMg/H,EAAOh/H,EAAK+F,cAAcnH,MAAM,OACtC,GAAIogI,EAAKpyI,OAAS,GAFF,CAAC,KAAM,KAAM,QAAS,KAAM,KAAM,QAEnB0V,SAAS08H,EAAK,IAAK,CAChD,MAAMC,EAAU9vI,KAAK6uI,2BAA2BgB,EAAK,IACrD,IAAKC,EACH,MAAM,IAAI9yI,MAAM,4DAElB,MAAM+yI,EAAoB,uCAE1B,IADeA,EAAkBh9B,KAAK+8B,EAAQ,IAE5C,MAAM,IAAI9yI,MAAM,2DAElB,MAAMgzI,EAAaF,EAAQ,GAAG5hI,QAAQ6hI,EAAmB,OAAYl/H,GAKrE,OAHE7Q,KAAKusI,WAAWx8H,UAAU,EAAG+/H,EAAQ,IACrCE,EACAhwI,KAAKusI,WAAWx8H,UAAU+/H,EAAQ,GAAKA,EAAQ,GAAGryI,OAEtD,CACA,MAAM,IAAIT,MAAM,kCAAkC6T,KACpD,CAEA20H,eAAAA,CAAgBtoI,EAAMoG,GACpB,IAAIijI,GAAWn8H,EAAAA,EAAAA,qBAAoB9G,EAAO,QAAStD,KAAKqjI,QAAS,CAAEh5H,YAAY,IAC/E,OAAOrK,KAAKkuI,uBAAuBhxI,EAAM,QAASqpI,EACpD,CAEAb,eAAAA,CAAgBxoI,EAAMoG,EAAOgxE,GAC3B,IAAIiyD,GAAWn8H,EAAAA,EAAAA,qBAAoB9G,EAAO,QAAStD,KAAKqjI,QAAS,CAAEh5H,YAAY,IAC3Ey6F,EAAS,GAAGyhC,IAKhB,YAJqB,IAAVjyD,IAETwwB,EAAS,GAAGyhC,MADGn8H,EAAAA,EAAAA,qBAAoBkqE,EAAO,QAASt0E,KAAKqjI,QAAS,CAAEh5H,YAAY,OAG1ErK,KAAKkuI,uBAAuBhxI,EAAM,QAAS4nG,EACpD,CAEA8gC,iBAAAA,CAAkB1oI,EAAM4oB,GACtB,IAAImqH,EAAgBjwI,KAAK+sI,mBAAmB7vI,EAAM,SAClD,IAAK+yI,EAAcr5H,cAAcyH,WAAW,QAC1C,MAAM,IAAIrhB,MAAM,iDAElB,IAAIsX,EAAS27H,EAAclgI,UAAUkgI,EAAczyI,QAAQ,KAAO,EAAGyyI,EAAczyI,QAAQ,MAAMiS,MAAM,KACvG,GAAI6E,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAazC,EAAmB58G,GAAa,CACzE,IACIxiB,EAAQ,QADItD,KAAKolI,kBAAkB9wH,EAAQwR,EAAY48G,GAC7BvsH,KAAK,QACnC,OAAOnW,KAAKkuI,uBAAuBhxI,EAAM,QAASoG,EACpD,CACA,MAAM,IAAItG,MAAM,4FAClB,CAEA8oI,kBAAAA,CAAmB5oI,EAAM4oB,GACvB,IAAImqH,EAAgBjwI,KAAK+sI,mBAAmB7vI,EAAM,SAClD,IAAK+yI,EAAcr5H,cAAcyH,WAAW,SAC1C,MAAM,IAAIrhB,MAAM,kDAElB,IAAIsX,EAAS27H,EAAclgI,UAAUkgI,EAAczyI,QAAQ,KAAO,EAAGyyI,EAAczyI,QAAQ,MAAMiS,MAAM,KACvG,GAAI6E,EAAO7W,OAAS,GAAKuC,KAAKmlI,aAAa1C,EAAoB38G,GAAa,CAC1E,IACIxiB,EAAQ,SADItD,KAAKolI,kBAAkB9wH,EAAQwR,EAAY28G,GAC5BtsH,KAAK,QACpC,OAAOnW,KAAKkuI,uBAAuBhxI,EAAM,QAASoG,EACpD,CACA,MAAM,IAAItG,MAAM,4FAClB,CAEAkzI,mBAAAA,CAAoBC,EAAoBC,GACtC,IAAI/vI,GAAS,EACTgwI,EAAeF,EAAmBpgI,UAAU,EAAGogI,EAAmB/yI,YAAY,OAGlF,OADAiD,EADiB+vI,EAAiBrgI,UAAU,EAAGqgI,EAAiBhzI,YAAY,OACxDwZ,eAAiBy5H,EAAaz5H,cAC3CvW,CACT,CAEA+sI,gBAAAA,CAAiB/I,GACf,IAAIhkI,GAAS,EACb,IAAK,IAAIxB,EAAI,EAAGA,EAAIktI,EAAWtuI,OAAQoB,IAErC,GADAwB,EAASgkI,EAAKztH,cAAcpZ,QAAQuuI,EAAWltI,GAAG+X,gBAAkB,GACrD,IAAXvW,EAAiB,OAAOA,EAE9B,OAAOA,CACT,CAEA8kI,YAAAA,CAAauB,EAAM5gH,GACjB,IAAI6gH,GAAY,EAChB,IAAK,IAAI78G,KAAShE,EAChB6gH,EAAWvlI,KAAKgoB,IACdu9G,EACAD,EAAKxnG,WAAWt2B,GAASA,GAAQkhB,KAGrC,OAAO68G,CACT,CAEAvB,iBAAAA,CAAkB9wH,EAAQwR,EAAY8gH,EAAa1B,GAajD,OAZa5wH,EAAOvF,KAAI,CAACzL,EAAO2E,KAC9B,IAAI2a,EAA6C,OAAnCkD,EAAW8gH,EAAY3+H,UAA8D,IAAnC6d,EAAW8gH,EAAY3+H,IACvF,MAA0B,aAAtB2+H,EAAY3+H,GACP2a,GAAWsiH,EAAW/xH,SAASmvH,EAAUx8G,EAAW8gH,EAAY3+H,MACnEq6H,EAAUx8G,EAAW8gH,EAAY3+H,KACjC3E,EAAM4F,cAEH0Z,GACHxY,EAAAA,EAAAA,qBAAoB0b,EAAW8gH,EAAY3+H,IAAS,QAASjI,KAAKqjI,QAAS,CAAEh5H,YAAY,IACzF/G,CACN,GAGJ,CAEAyrI,yBAAAA,CAA0Bz6H,GACxB,IAAIjU,GAAS,EAEb,OADAA,EAA0B,GAAjBiU,EAAO7W,QAAgB6W,EAAO7W,OAAS,IAAMuuI,EAAgBh7H,KAAKsD,EAAO,IAC3EjU,CACT,CAEA2uI,gBAAAA,CAAiBlpH,EAAYgpH,GAC3B,IAAIzuI,GAAS,EACb,IAAK,IAAIypB,KAAShE,EAEhB,GADAzlB,EAASyuI,EAActxI,QAAQssB,IAAU,GACpCzpB,EAAQ,OAAOA,EAEtB,OAAOA,CACT,CAEAstI,mBAAAA,CAAoB1iH,EAAqByiH,GACvC,MAAM9vH,EAAO5d,KAAKswI,eAAerlH,GAC3BslH,EAAmBvwI,KAAKwwI,qBAAqB5yH,GAEnD,IAAK2yH,EACH,MAAM,IAAIvzI,MACR,+BAA+B4gB,EAAK1gB,+HAIxC,IAAImD,EAASL,KAAKusI,WAClB,MAAMkE,EAAYF,EAAiB,GACnC,GAAIE,GAAaA,EAAUC,KAAM,CAC/B,MAAMC,EAAiB3wI,KAAK4wI,mBAAmBH,EAAW/C,GAC1D,IAAK,MAAMmD,KAAOF,EAChB,GAAIE,EAAIvuI,GAAKuuI,EAAItuI,EAAG,CAClB,MAAMuuI,EAAY9wI,KAAK+wI,8BACrBN,EAAUO,QACVP,EAAUQ,QACVJ,EAAIvuI,EACJuuI,EAAItuI,EACJqb,EAAKszH,WAEDC,EAAS,CAAE7uI,EAAGwuI,EAAUxuI,EAAIsb,EAAKtb,EAAGC,EAAGuuI,EAAUvuI,EAAIqb,EAAKrb,GAC1D6uI,EAAUpxI,KAAKqxI,gBAAgBzzH,EAAKszH,UAAWL,EAAIS,aAAe,GAAIH,EAAO7uI,EAAG6uI,EAAO5uI,EAAG,IAChGlC,EAASL,KAAKuxI,kBAAkBlxI,EAAQ8wI,EAAO7uI,EAAG6uI,EAAO5uI,EAAG6uI,EAAQ9uI,EAAG8uI,EAAQ7uI,GAC/ElC,EAASL,KAAKwxI,cAAcnxI,EAAQ+wI,EAAQ9uI,EAAG8uI,EAAQ7uI,EACzD,CAEJ,CAEAvC,KAAKusI,WAAalsI,CACpB,CAEAutI,cAAAA,CAAe3iH,EAAqBwmH,EAAe/D,EAAOD,GACxD,MAAMd,EAAc3sI,KAAK4sI,0BAA0B3hH,GACnD,IAAK0hH,EACH,MAAM,IAAI3vI,MAAM,wBAA0BiuB,EAAsB,eAElE,IAAIrN,EAAO5d,KAAKswI,eAAerlH,GAC/B,MAAMymH,EAAahzI,OAAOkM,OAAO,CAAC,EAAGgT,GAC/B2yH,EAAmBvwI,KAAKwwI,qBAAqB5yH,GAEnD,IAAK2yH,EACH,MAAM,IAAIvzI,MACR,+BAA+B00I,EAAWx0I,+HAI9C,IAAImD,EAAS,GACb,MAAMsxI,EAAoBpB,EAAiB,GACrCqB,EAAoB5xI,KAAKssI,WAAWmF,GAE1C,GAAIG,EAAmB,CAErB,GADAh0H,EAAK1gB,KAAO00I,EAAkBC,WAC1BnE,EAAO,CACT,MAAMoE,EAAqB9xI,KAAK+wI,8BAC9BY,EAAkBX,QAClBW,EAAkBV,QAClBW,EAAkBZ,QAClBY,EAAkBX,QAClBrzH,EAAKszH,WAEPtzH,EAAKtb,EAAIovI,EAAWpvI,EAAIwvI,EAAmBxvI,EAC3Csb,EAAKrb,EAAImvI,EAAWnvI,EAAIuvI,EAAmBvvI,CAC7C,MACEqb,EAAKtb,EAAIovI,EAAWpvI,EAAItC,KAAKqvI,WAAWuC,EAAkBZ,QAASW,EAAkBX,SACrFpzH,EAAKrb,EAAImvI,EAAWnvI,EAAIvC,KAAKqvI,WAAWuC,EAAkBX,QAASU,EAAkBV,SAGvF,MAAM3C,EAAY3B,EAAY,GAAG,GAAGz+H,QAClC+9H,EACA,KAAKruH,EAAK1gB,SAAS0gB,EAAKtb,MAAMsb,EAAKrb,MAAMqb,EAAKszH,eAGhD7wI,EACEL,KAAKusI,WAAWx8H,UAAU,EAAG48H,EAAY,GAAG,IAC5C2B,EACAtuI,KAAKusI,WAAWx8H,UAAU48H,EAAY,GAAG,GAAKA,EAAY,GAAG,GAAGlvI,QAElEgwI,GAAmB,CACrB,KAAO,CACL,IAAyB,IAArBA,EAaF,MAAM,IAAIzwI,MACR,kBAAkBy0I,GAAgC,sDAdvB,CAE7B,MAAMM,EAAc,QAAQL,EAAWpvI,KAAKovI,EAAWnvI,mDACrDkvI,GAAgC,2CAE5BnD,EAAY3B,EAAY,GAAG,GAAGz+H,QAAQ+9H,EAAe8F,GAC3D1xI,EACEL,KAAKusI,WAAWx8H,UAAU,EAAG48H,EAAY,GAAG,IAC5C2B,EACAtuI,KAAKusI,WAAWx8H,UACd48H,EAAYA,EAAYlvI,OAAS,GAAG,GAAKkvI,EAAYA,EAAYlvI,OAAS,GAAG,GAAGA,OAEtF,CAKF,CAGA,OADAuC,KAAKusI,WAAalsI,EACXotI,CACT,CAEAI,eAAAA,CAAgB5iH,EAAqBwmH,EAAe/D,GAClD,MAAM9vH,EAAO5d,KAAKswI,eAAerlH,GAGjC,IAFyBjrB,KAAKwwI,qBAAqB5yH,GAGjD,MAAM,IAAI5gB,MACR,+BAA+B4gB,EAAK1gB,+HAIxC,IAAImD,EAASL,KAAKusI,WAClB,MAAMkE,EAAYzwI,KAAKssI,WAAWmF,GAClC,GAAIhB,GAAaA,EAAUC,KAAM,CAC/B,MAAMC,EAAiB3wI,KAAK4wI,mBAAmBH,EAAW/C,GAC1D,IAAK,MAAMmD,KAAOF,EAChB,GAAIE,EAAIvuI,GAAKuuI,EAAItuI,GAAKsuI,EAAImB,WAAY,CACpC,MAAMlB,EAAY9wI,KAAK+wI,8BACrBN,EAAUO,QACVP,EAAUQ,QACVJ,EAAIvuI,EACJuuI,EAAItuI,EACJqb,EAAKszH,WAEDC,EAAS,CAAE7uI,EAAGwuI,EAAUxuI,EAAIsb,EAAKtb,EAAGC,EAAGuuI,EAAUvuI,EAAIqb,EAAKrb,GAC1D6uI,EAAUpxI,KAAKqxI,gBAAgBzzH,EAAKszH,UAAWL,EAAIS,aAAe,GAAIH,EAAO7uI,EAAG6uI,EAAO5uI,EAAG,IAChGlC,EAASL,KAAKiyI,eAAe5xI,EAAQ8wI,EAAO7uI,EAAG6uI,EAAO5uI,EAAG6uI,EAAQ9uI,EAAG8uI,EAAQ7uI,GAC5ElC,EAASL,KAAKkyI,WAAW7xI,EAAQ+wI,EAAQ9uI,EAAG8uI,EAAQ7uI,EAAGmrI,EAAMmD,EAAImB,YACnE,CAEJ,CAEAhyI,KAAKusI,WAAalsI,CACpB,CAEAuwI,kBAAAA,CAAmBuB,EAAazE,GAC9B,MAAM0E,EAAW1zI,OAAOC,KAAK+uI,GAK7B,OAJuByE,EAAYzB,KAAKnvI,QAAQ+B,GACvCA,EAAM0uI,YAAcI,EAASj/H,SAAS7P,EAAM0uI,aAIvD,CAEA1B,cAAAA,CAAerlH,GACb,MAAM0hH,EAAc3sI,KAAK4sI,0BAA0B3hH,GACnD,IAAK0hH,EACH,MAAM,IAAI3vI,MAAM,wBAA0BiuB,EAAsB,eAElE,MAAM5S,EAAS4zH,EAAcl5B,KAAK45B,EAAY,GAAG,IACjD,IAAKt0H,EACH,MAAM,IAAIrb,MAAM,2FAUlB,MAPa,CACXE,KAAMmb,EAAO,GACb/V,EAAGoN,SAAS2I,EAAO,IACnB9V,EAAGmN,SAAS2I,EAAO,IACnB64H,UAAW74H,EAAO,GAItB,CAEAm4H,oBAAAA,CAAqB5yH,GACnB,IAAI2yH,EAAmB7xI,OAAOyQ,QAAQnP,KAAKwsI,gBAAgB56H,MAAMirG,GACxDA,EAAS,GAAGg1B,aAAej0H,EAAK1gB,OAEzC,IAAKqzI,EAAkB,CACrB,GAAIvwI,KAAKwsI,iBAAmBxsI,KAAKssI,WAC/B,MAAM,IAAItvI,MACR,+BAA+B4gB,EAAK1gB,uLAMtC,GAHAqzI,EAAmB7xI,OAAOyQ,QAAQnP,KAAKssI,YAAY16H,MAAMirG,GAChDA,EAAS,GAAGg1B,aAAej0H,EAAK1gB,QAEpCqzI,EACH,MAAM,IAAIvzI,MACR,+BAA+B4gB,EAAK1gB,6FAI5C,CACA,OAAOqzI,CACT,CAEAQ,6BAAAA,CAA8BsB,EAAOC,EAAOC,EAAMC,EAAMlB,GACtD,MAAMmB,EAAkB,CACtBC,GAAI,CAAEpwI,EAAG,EAAGC,EAAG,GACfowI,IAAK,CAAErwI,GAAI,EAAGC,EAAG,GACjBqwI,KAAM,CAAEtwI,GAAI,EAAGC,GAAI,GACnBswI,KAAM,CAAEvwI,EAAG,EAAGC,GAAI,GAClBuwI,GAAI,CAAExwI,GAAI,EAAGC,EAAG,GAChBwwI,IAAK,CAAEzwI,EAAG,EAAGC,EAAG,GAChBywI,KAAM,CAAE1wI,EAAG,EAAGC,GAAI,GAClB0wI,KAAM,CAAE3wI,GAAI,EAAGC,GAAI,IASf2wI,EAAQX,EAAOF,EACfc,EAAQX,EAAOF,EACrB,IAAIc,EAAa,CAAE9wI,EAAGiqD,IAAKhqD,EAAGgqD,KAC9B,KAA6B+kF,KAAjBmB,GAIV,MAAM,IAAIz1I,MACR,iCAAmCs0I,EAAc,qDAGrD,OAPE8B,EAAW9wI,EAAI4wI,EAAQT,EAAgBnB,GAAahvI,EACpD8wI,EAAW7wI,EAAI4wI,EAAQV,EAAgBnB,GAAa/uI,EAM/C6wI,CACT,CAEA/B,eAAAA,CAAgBgC,EAAeC,EAAcC,EAAKC,EAAK/1I,GACrD,MAUMg2I,EAVkB,CACtBf,GAAI,CAAEpwI,EAAG,EAAGC,EAAG,GACfowI,IAAK,CAAErwI,GAAI,EAAGC,EAAG,GACjBqwI,KAAM,CAAEtwI,GAAI,EAAGC,GAAI,GACnBswI,KAAM,CAAEvwI,EAAG,EAAGC,GAAI,GAClBuwI,GAAI,CAAExwI,GAAI,EAAGC,EAAG,GAChBwwI,IAAK,CAAEzwI,EAAG,EAAGC,EAAG,GAChBywI,KAAM,CAAE1wI,EAAG,EAAGC,GAAI,GAClB0wI,KAAM,CAAE3wI,GAAI,EAAGC,GAAI,IAEY8wI,GAC3BK,EACa,QAAjBJ,EACI,CAAEhxI,EAAG,EAAGC,GAAI9E,GACK,WAAjB61I,EACA,CAAEhxI,EAAG,EAAGC,EAAG9E,GACM,SAAjB61I,EACA,CAAEhxI,GAAI7E,EAAQ8E,EAAG,GACA,UAAjB+wI,EACA,CAAEhxI,EAAG7E,EAAQ8E,EAAG,GAChB,CAAED,EAAG,EAAGC,EAAG,GAEjB,MAAO,CACLD,EAAGixI,EAAMG,EAAYpxI,EAAImxI,EAASnxI,EAClCC,EAAGixI,EAAME,EAAYnxI,EAAIkxI,EAASlxI,EAEtC,CAEAgvI,iBAAAA,CAAkB9E,EAAW7qI,EAAIC,EAAIC,EAAIC,GACvC,MAAM4xI,EAAQ,6EACd,IAAIC,EACJ,KAAQA,EAAUD,EAAM5gC,KAAK05B,IAAa,CACxC,MAAM7hH,EAAwC,OAA/B6hH,EAAUkH,EAAMnvE,WAAsB,EAAI,EACzD,GACEpjE,KAAKgB,MAAM6R,WAAW2/H,EAAQ,OAASxyI,KAAKgB,MAAMR,IAClDR,KAAKgB,MAAM6R,WAAW2/H,EAAQ,OAASxyI,KAAKgB,MAAMP,IAClDT,KAAKgB,MAAM6R,WAAW2/H,EAAQ,OAASxyI,KAAKgB,MAAMN,IAClDV,KAAKgB,MAAM6R,WAAW2/H,EAAQ,OAASxyI,KAAKgB,MAAML,GAElD,OAAO0qI,EAAU18H,UAAU,EAAG6jI,EAAQ3rI,OAASwkI,EAAU18H,UAAU4jI,EAAMnvE,UAAY55C,EAEzF,CACA,OAAO6hH,CACT,CAEAwF,cAAAA,CAAexF,EAAW7qI,EAAIC,EAAIC,EAAIC,GACpC,MAAMsgI,EAAMoK,EAAU71H,cAAcpZ,QAAQ,YAC5C,GAAI6kI,EAAM,EAAG,CACX,MAAMwR,EAAmC,OAAvBpH,EAAUpK,EAAM,GAAc,KAAO,OACvD,OACEoK,EAAU18H,UAAU,EAAGsyH,EAAM,GAAK,QAAQzgI,KAAMC,KAAMC,KAAMC,IAAK8xI,IAAcpH,EAAU18H,UAAUsyH,EAAM,EAE7G,CACA,OAAOoK,CACT,CAEA+E,aAAAA,CAAc/E,EAAWnqI,EAAGC,GAC1B,MAAMoxI,EAAQ,uDACd,IAAIC,EACJ,KAAQA,EAAUD,EAAM5gC,KAAK05B,IAAa,CACxC,MAAM7hH,EAAwC,OAA/B6hH,EAAUkH,EAAMnvE,WAAsB,EAAI,EACzD,GACEpjE,KAAKgB,MAAM6R,WAAW2/H,EAAQ,OAASxyI,KAAKgB,MAAME,IAClDlB,KAAKgB,MAAM6R,WAAW2/H,EAAQ,OAASxyI,KAAKgB,MAAMG,GAElD,OAAOkqI,EAAU18H,UAAU,EAAG6jI,EAAQ3rI,OAASwkI,EAAU18H,UAAU4jI,EAAMnvE,UAAY55C,EAEzF,CACA,OAAO6hH,CACT,CAEAyF,UAAAA,CAAWzF,EAAWnqI,EAAGC,EAAGuxI,GAC1B,MAAMzR,EAAMoK,EAAU71H,cAAcpZ,QAAQ,YAC5C,GAAI6kI,EAAM,EAAG,CACX,MAAMwR,EAAmC,OAAvBpH,EAAUpK,EAAM,GAAc,KAAO,OACvD,OAAOoK,EAAU18H,UAAU,EAAGsyH,EAAM,GAAK,QAAQ//H,KAAKC,KAAKuxI,IAAWD,IAAcpH,EAAU18H,UAAUsyH,EAAM,EAChH,CACA,OAAOoK,CACT,4BC10BF,MAAMsH,EAAkB,SACtBC,EACAC,EACAC,EACAC,GAGA,IAAI5M,EAA6C,GACjDA,EAAcA,EAAY1mH,OAAOmzH,GACjC,IAAK,IAAIn1I,EAAI,EAAGA,EAAIo1I,EAAWx2I,OAAQoB,IAAK,CAC1C,MAAM+J,EAAOqrI,EAAWp1I,GACxB,IAAIu1I,GAAS,EACb,IAAK,IAAI71H,EAAI,EAAGA,EAAIgpH,EAAY9pI,OAAQ8gB,IAAK,KAAA81H,EAC3C,IAAIzrI,aAAI,EAAJA,EAAM6O,aAA2B,QAAnB48H,EAAK9M,EAAYhpH,UAAE,IAAA81H,OAAA,EAAdA,EAAgB58H,UAAU,CAC/C28H,GAAS,EACT,MAAMx2H,EAAO2pH,EAAYhpH,GACrBX,GAAQA,EAAK/M,MAAQ+M,EAAK/M,KAAKrT,QAAQ02I,IAAc,IACvDt2H,EAAK/M,KAAOqjI,EAAY,IAAMC,EAC9B5M,EAAYhpH,GAAKX,GAEnB,KACF,CACF,EACKw2H,GAAUxrI,GACb2+H,EAAYzoI,KAAK8J,EAErB,CACA,OAAO2+H,CACT,EAEOj9F,eAAegqG,EACpB7pG,EACA08F,EACAjnI,EACAknI,EACAC,EACAC,EACAiN,EACAC,GAEA,IAAI3pG,EAAqC,GACzC,MAAM4pG,EAAgD,GAChD50B,EAA0DC,EAChE,IAAID,EAuCF,KAAM,mCAvCQ,CACd,IAAI60B,GAAoB,EACxB,MAAMxqG,EAAa,IACd,IAAI89F,IACL9nI,EAAMk0B,OAAO7R,WAAWmT,sBAAsB3mB,KAAKnG,GAC1CA,EAAKyiB,UAIlB,IAAK,IAAIxsB,EAAI,EAAGA,EAAIqrC,EAAWzsC,OAAQoB,IAAK,CAC1C,MAAMwsB,EAAgB6e,EAAWrrC,GAC7BghH,QAA2C,IAAtBA,EAAWx0F,GAClCopH,EAAe31I,KAAK,CAAE2Y,SAAU4T,EAAOxa,KAAM,YAE7C6jI,GAAoB,CAExB,CACA,GAAIA,EAAmB,CACrB,MAAMC,EA0BZrqG,eACEi9F,EACA1nB,EACA3/G,EACAmnI,EACAC,EACAF,GAEA,MAAMuN,EAAuC,CAAC,EAC5CC,GAAcpmG,EAAAA,EAAAA,QAAOC,EAAAA,QAAIC,QAAUpuC,EAAAA,QAAgBg6C,iBAAkBgtF,EAAiBD,GACtFp6G,EAAkB/sB,EAAMsb,QAAQ+G,WAAW0K,gBAC3CzC,EAAoBtqB,EAAMsb,QAAQiH,WAAW+H,kBAC7CpF,EAAQ6H,EAAgBxvB,OAC1B,IAAIsxC,EAGJA,QAAgBq4F,EAAat4F,SAAS,GAAG8lG,cAAwBxvH,aAAkB,QACnFuvH,EAAkBr0I,EAAAA,QAAgBu5C,aAAaC,OAAS,CACtDtrC,MAAO,EACPqC,KAAM,MACN3T,KAAM,iBACNgS,KAAM,CAAE2lI,KAAkB,OAAZ9lG,GAAoBA,EAAQtxC,OAAS,EAAGsxC,QAASA,IAEjEA,QAAgBq4F,EAAat4F,SAAS,GAAG8lG,iBAA2BxvH,aAAkB,QACtFuvH,EAAkBr0I,EAAAA,QAAgBu5C,aAAaE,UAAY,CACzDvrC,MAAO,EACPqC,KAAM,MACN3T,KAAM,oBACNgS,KAAM,CAAE2lI,KAAkB,OAAZ9lG,GAAoBA,EAAQtxC,OAAS,EAAGsxC,QAASA,IAEjEA,QAAgBq4F,EAAat4F,SAAS,GAAG8lG,qBAA+BxvH,aAAkB,QAC1FuvH,EAAkBr0I,EAAAA,QAAgBu5C,aAAaG,cAAgB,CAC7DxrC,MAAO,EACPqC,KAAM,MACN3T,KAAM,wBACNgS,KAAM,CAAE2lI,KAAkB,OAAZ9lG,GAAoBA,EAAQtxC,OAAS,EAAGsxC,QAASA,IAIjE,IAAK,IAAIlwC,EAAI,EAAGA,EAAIumB,EAAOvmB,IAAK,KAAAi2I,EAC9B,MAAM5V,EAAYjyG,EAAgBpuB,GAChCk2I,EAAUvqH,EAAkB3rB,GAC5BusB,EAAoB8zG,EAAUttG,YAAYvG,MAC1Cjf,EAAsB8yH,EAAU1kH,eAAetM,QAAQ,KAAM,IAC7DO,GAAYsT,EAAAA,EAAAA,IAASm9G,EAAUr+H,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,MACtEhE,EAAcg1H,EAAUh1H,YACxB6lB,EAAUmvG,EAAU9+H,KAAK8iB,OAAS,EAClC1U,EAAQ3P,EAAI,EACd,IAAI3B,EACA,QAAUgN,EAAc,KAAMqvH,EAAAA,EAAAA,uBAAsB9qH,IAAa8qH,EAAAA,EAAAA,uBAAsBntH,GACzF4+F,EAAO4pC,EAAc,YAAapb,EAAAA,EAAAA,yBAAwB/qH,IAAa8qH,EAAAA,EAAAA,uBAAsBntH,GAE/F,GAAIA,IAAwB9L,EAAAA,QAAgB0vB,mBAAmBmB,iBACpC,IAArB4jH,EAAQllH,GAAGvsB,QAAe8tB,EAAAA,EAAAA,gBAAe2jH,EAAQjlH,GAAGxsB,QACtD0nG,GAAQ,UACR9tG,GAAQ,YACCk0B,EAAAA,EAAAA,gBAAe2jH,EAAQnlH,GAAGtsB,QACnC0nG,GAAQ,YACR9tG,GAAQ,cAER8tG,GAAQ,QACR9tG,GAAQ,cAGV,GAAMkP,IAAwB9L,EAAAA,QAAgB0vB,mBAAmBO,iBAAmB,CAClF,MAAMykH,EAAajlH,EAAU,OAAS,GACtCi7E,GAAQgqC,EACR93I,GAAQ83I,CACV,CAIFhqC,GAAQ,OAGR9tG,GAAQ,KAAO2iH,GAAcA,EAAWz0F,GAAkC,QAAxB0pH,EAAGj1B,EAAWz0F,UAAU,IAAA0pH,OAAA,EAArBA,EAAuBG,gBAAkB,IAE9FlmG,QAAgBq4F,EAAat4F,SAASk8D,EAAM,QAC5C2pC,EAAkB,MAAQnmI,GAAS,CACjCA,MAAOA,EACPqC,KAAM,MACN3T,KAAMA,EAAO,OACbgS,KAAM,CAAE2lI,KAAkB,OAAZ9lG,GAAoBA,EAAQtxC,OAAS,EAAGsxC,QAASA,IAEjEA,QAAgBq4F,EAAat4F,SAAS,GAAG8lG,2BAAsC,QAC/ED,EAAkB,MAAQnmI,GAAS,CACjCA,MAAOA,EACPqC,KAAM,MACN3T,KAAMA,EAAO,OACbgS,KAAM,CAAE2lI,KAAkB,OAAZ9lG,GAAoBA,EAAQtxC,OAAS,EAAGsxC,QAASA,GAEnE,CACA,OAAO4lG,CACT,CAvHgCO,CACxBT,EACA50B,EACA3/G,EACAmnI,EACAC,EACAF,GAEFv8F,EAiHN,SACE8pG,EACA90B,EACA3/G,EACAinI,GAEA,MAAM9mI,EAA8B,GAC9B80I,EAAqD,CAAC,EAC5D,IAAI3xH,GAAS,EAUb,GARA9kB,OAAOC,KAAKg2I,GAAmB7kI,SAAStI,IACtC,MAAM4tI,EAAuCT,EAAkBntI,GAC/Dgc,EAASA,GAAqC,OAA3B4xH,EAAkBlmI,MAAiBkmI,EAAkBlmI,KAAK2lI,KAC7E,MAAMQ,EACuB,OAA3BD,EAAkBlmI,MAAoD,OAAnCkmI,EAAkBlmI,KAAK6/B,QAAmBqmG,EAAkBlmI,KAAK6/B,QAAU,GAChHomG,EAAyB3tI,GAAO,IAAIqgI,EAA6BhoB,EAAYw1B,EAAS,IAGpF7xH,EAAQ,EA2Gd,SAA2B2xH,EAAoDj1I,GAC7E,MAAMkoI,EAAqBloI,EAAMsb,QAAQ+G,WAAW8Q,aAAaq/D,sBACjE,GAA2B,OAAvB01C,GAA+BA,EAAmB3qI,OAAS,EAAG,KAAA63I,EAAAC,EAAAC,EAChE,MAAMxkD,EAAWo3C,EAAmB,GAAGv1C,sBAAsBpB,WAAWN,WAAWv1D,QAC7Ey1D,EAAW+2C,EAAmB,GAAGv1C,sBAAsBpB,WAAWN,WAAWx1D,QAC7E85G,EAAUrN,EAAmB,GAAGv1C,sBAAsBpB,WAAWN,WAAWzvC,UAG5EipF,GAAc35C,EAAWK,GAAY,EAGrCw5C,GAAoBx5C,EAAWL,GAAY,EAEW,QAA5DskD,EAAAH,EAAyB70I,EAAAA,QAAgBu5C,aAAaC,cAAM,IAAAw7F,GAA5DA,EAA8D3P,wBAAwB,MAAO,CAC3F/6G,OAAQ+/G,EACRI,cAAeF,EACfnpF,UAAW+zF,IAEkD,QAA/DF,EAAAJ,EAAyB70I,EAAAA,QAAgBu5C,aAAaE,iBAAS,IAAAw7F,GAA/DA,EAAiE5P,wBAAwB,SAAU,CACjG/6G,OAAQ+/G,EACRI,cAAeF,EACfnpF,UAAW+zF,IAEsD,QAAnED,EAAAL,EAAyB70I,EAAAA,QAAgBu5C,aAAaG,qBAAa,IAAAw7F,GAAnEA,EAAqE3P,yBAAyB,MAAO,CACnGmF,SAAUL,EACVM,UAAW55C,EACX65C,UAAW,EACXC,SAAU,KACVC,SAAU,KACVC,WAAY,EACZC,OAAQ,GAEZ,CACF,CAzIIoK,CAAkBP,EAA0Bj1I,GAsFhD,SAAoCi1I,EAAoDj1I,GAAyB,IAAAy1I,EAAAC,EAAAC,EACnD,QAA5DF,EAAAR,EAAyB70I,EAAAA,QAAgBu5C,aAAaC,cAAM,IAAA67F,GAA5DA,EAA8D1Q,iBAAiB,CAC7E3C,UAAW,SACXiG,OAAQ,IACRnhF,eAAgBlnD,EAAMsb,QAAQ6G,eAAe2kC,qBAAqBI,eAClEL,cAAe7mD,EAAMsb,QAAQ6G,eAAe2kC,qBAAqBD,gBAEJ,QAA/D6uF,EAAAT,EAAyB70I,EAAAA,QAAgBu5C,aAAaE,iBAAS,IAAA67F,GAA/DA,EAAiEvQ,oBAAoB,CACnF/C,UAAW,SACXiG,OAAQ,IACRnhF,eAAgBlnD,EAAMsb,QAAQ6G,eAAe2kC,qBAAqBI,eAClEL,cAAe7mD,EAAMsb,QAAQ6G,eAAe2kC,qBAAqBD,gBAEA,QAAnE8uF,EAAAV,EAAyB70I,EAAAA,QAAgBu5C,aAAaG,qBAAa,IAAA67F,GAAnEA,EAAqEvQ,wBAAwB,CAC3FkD,SAAUpnI,KAAKgoB,OAAOlpB,EAAMsb,QAAQ6G,eAAeqsD,WAEvD,CAnGIonE,CAA2BX,EAA0Bj1I,GAwIzD,SACEi1I,EACAj1I,EACA2/G,GAEA,CACEv/G,EAAAA,QAAgBu5C,aAAaC,MAC7Bx5C,EAAAA,QAAgBu5C,aAAaE,SAC7Bz5C,EAAAA,QAAgBu5C,aAAaG,cAC7BlqC,SAAStI,IAAQ,IAAAuuI,EACjB,IAAIC,EAAgD,QAAhCD,EAAGZ,EAAyB3tI,UAAI,IAAAuuI,OAAA,EAA7BA,EAA+BtJ,UAClDuJ,IACFA,EAAmBA,EAAiB9nI,QAAQ,OAAQhO,EAAMk0B,OAAO7R,WAAWjI,OAAOjR,YACnF2sI,EAAmBA,EAAiB9nI,QAAQ,OAAQhO,EAAMk0B,OAAO7R,WAAWhI,QAAQlR,YACpF2sI,EAAmBA,EAAiB9nI,QAClC,UACChO,EAAMsb,QAAQ+G,WAAWwI,mBAAqB7qB,EAAMk0B,OAAO7R,WAAWjI,OAAS,EAAI,GAAGjR,YAEzF8rI,EAAyB3tI,GAAO,IAAIqgI,EAA6BhoB,EAAYm2B,GAC/E,GAEJ,CA1JIC,CAAsBd,EAA0Bj1I,EAAO2/G,GAEvD,MAAM5yF,EAAkB/sB,EAAMsb,QAAQ+G,WAAW0K,gBAC/CzC,EAAoBtqB,EAAMsb,QAAQiH,WAAW+H,kBAE/C,IAAK,MAAM5hB,KAAQ+rI,EACjB,GAAIj2I,OAAOiJ,UAAUgL,eAAeC,KAAK+hI,EAAmB/rI,GAAO,CACjE,MAAMstI,EAAgBvB,EAAkB/rI,GAClCutI,EAAkBhB,EAAyBvsI,GACjD,GAAIstI,GAAiBA,EAAc1nI,MAAQ,EAAG,CAE5C,MAAM4wH,EAAcnyG,EAAgBipH,EAAc1nI,MAAQ,GACxDk6H,EAAgBl+G,EAAkB0rH,EAAc1nI,MAAQ,GACxD4c,EAAYg0G,EAAYxtG,YAAYvG,MACpCjf,EAAsBgzH,EAAY5kH,eAAetM,QAAQ,KAAM,IAC/DO,GAAYsT,EAAAA,EAAAA,IAASq9G,EAAYv+H,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,MACxEuiI,EAAY5wB,EAAWz0F,GAEzB,GAA2B,QAAvB8qH,EAAcrlI,KAAgB,CAChC,MAAMo4H,EAAkBP,EAAgBQ,EAAmBR,GAAiB,CAAC,EAE7E,IAAK,MAAM9/H,KAAQqgI,EACjB,GAAIvqI,OAAOiJ,UAAUgL,eAAeC,KAAKq2H,EAAiBrgI,GAAO,CAC/D,MAAMugI,EAAYF,EAAgBrgI,GAC9BugI,IACFgN,SAAAA,EAAiBlI,sBACfrlI,EACA,QACqB,iBAAdugI,GACH/+H,EAAAA,EAAAA,qBAAoB++H,EAAW,QAAS,EAAG,CAAE9+H,YAAY,IACzD8+H,GAGV,CAGF,GAAIsH,EAAW,CACb,MAAM/C,EAAQ,CAAE,QAAS,KAAM,QAAS,MACxCyI,SAAAA,EAAiB5I,aAAa,KAAMniH,GAAW,EAAMsiH,EACvD,CACF,KAAO,CACL,MAAM+C,EAAY5wB,EAAWz0F,GACzB+qH,GAAmB1F,IACrB0E,EAAyBvsI,GAAQwtI,EAC/BD,EAAgB1J,UAChBgE,EAAUwE,gBACVxmI,EACArC,EACAyzG,GAGN,CACF,MAEMs2B,IACFhB,EAAyBvsI,GAAQytI,EAC/BF,EAAgB1J,UAChBx/G,EACAzC,EACAq1F,GAIR,CAIFnhH,OAAOC,KAAKw2I,GAA0BrlI,SAAStI,IAAQ,IAAA8uI,EACrD,MAAMlB,EAAuCT,EAAkBntI,GAC/DnH,EAAOvB,KAAK,CACV5B,KAAMk4I,EAAkBl4I,KACxBoG,MAAoC,QAA/BgzI,EAAEnB,EAAyB3tI,UAAI,IAAA8uI,OAAA,EAA7BA,EAA+B7J,UACtCl8F,SAA2B,QAAjB42F,EAAyB,uBAAyB,UAC5Dt2H,KAAM,WACN,GAEN,CACA,OAAOxQ,CACT,CA1NsBk2I,OAA6B5B,EAAmB90B,EAAY3/G,EAAOinI,EACrF,CACAt8F,EAAgBA,EAAchqB,OAoYlC,SACEqpB,EACAsqG,EACAC,EACA+B,EACArP,EACAoN,GAEA,MAAMl0I,EAA8B,GAE9BknI,EAAcwM,EAAgBS,EAAcC,EAAgB,UAAW,WACvEgC,EAAevsG,EAAW3oC,QAAQ6pB,GAI/B,MAHYm8G,EAAY31H,MAAK,SAAUhJ,GAC5C,OAAOA,EAAK6O,WAAa2T,CAC3B,MAGIsrH,EAAeD,EAAah5I,OAAS,EAIrCk5I,OAAiCntI,IAHf+9H,EAAY31H,MAAK,SAAUhJ,GACjD,OAAQA,EAAKiI,KAAKsC,SAAS,UAC7B,IAEA,GAAIujI,EAAc,CAEhB,MAAME,EAAkB,yBACxB,IAAIC,EAAqBtC,EAAYnrI,EAAE,4CAA4CC,WAGnF,IAAK,IAAIwkB,EAAI,EAAGA,EAAI4oH,EAAah5I,OAAQowB,IACvCgpH,GAAsB,OAASJ,EAAa5oH,GAG9CxtB,EAAOvB,KAAK,CAAE5B,KAAM05I,EAAiBtzI,MAAOuzI,EAAoBtmG,SAAU,GAAI1/B,KAAM,WACtF,MACE,IAAK2lI,EAAY,CAGf,MAAMI,EAAkBD,EAAa,qBAAuB,aAC5D,IAAIE,EAAqBF,EACrBpC,EAAYnrI,EAAE,sCAAsCC,WACpDkrI,EAAYnrI,EAAE,iDAAiDC,WAGnE,IAAK,IAAIwkB,EAAI,EAAGA,EAAI05G,EAAY9pI,OAAQowB,IAAK,KAAAipH,EAAAC,EAC3CF,GAAsB,QAAuB,QAAjBC,EAAGvP,EAAY15G,UAAE,IAAAipH,OAAA,EAAdA,EAAgBr/H,UAAW,MAAqB,QAAjBs/H,EAAGxP,EAAY15G,UAAE,IAAAkpH,OAAA,EAAdA,EAAgBlmI,KACnF,CAEAxQ,EAAOvB,KAAK,CACV5B,KAAM05I,EACNtzI,MAAOuzI,EACPtmG,SAA2B,QAAjB42F,EAAyB,cAAgB,GACnDt2H,KAAM,WAEV,CAEF,OAAOxQ,CACT,CA3bM22I,CACE9sG,EACAsqG,EACAC,EACkB,OAAlB5pG,GAA0BA,EAAcptC,OAAS,EACjD0pI,EACAoN,GAGN,CAGA,OAAO1pG,CACT,CAwRA,SAASurG,EACPa,EACAv4H,EACAjQ,EACA+L,EACAqlG,GAEA,IAAIm2B,EAAmBiB,EAIvB,OAHAjB,EAAmBA,EAAiB9nI,QAAQ,eAAgBwQ,GAC5Ds3H,EAAmBA,EAAiB9nI,QAAQ,eAAeqrH,EAAAA,EAAAA,uBAAsB9qH,IACjFunI,EAAmBA,EAAiB9nI,QAAQ,oBAAoBqrH,EAAAA,EAAAA,uBAAsB/+G,IAC/E,IAAIqtH,EAA6BhoB,EAAYm2B,EACtD,CAEA,SAASK,EACPY,EACAhqH,EACAzC,EACAq1F,GAEA,IAAIm2B,EAAmBiB,EACvB,MAAM7xH,EAAQ6H,EAAgBxvB,OAC9B,IAAK,IAAIoB,EAAI,EAAGA,EAAIumB,EAAOvmB,IAAK,CAC9B,MAAMqgI,EAAYjyG,EAAgBpuB,GAChCk2I,EAAUvqH,EAAkB3rB,GAC5BusB,EAAY2pH,aAAO,EAAPA,EAAS1pH,MAAMnuB,KAC3BkP,EAAsB8yH,aAAS,EAATA,EAAW1kH,eAAetM,QAAQ,KAAM,IAC9DO,GAAYsT,EAAAA,EAAAA,IAASm9G,aAAS,EAATA,EAAWr+H,WAAWkP,UAAU,IAAI7B,QAAQ,KAAM,MAEzE,IAAIhR,EACF,SAFcgiI,aAAS,EAATA,EAAWh1H,aAED,KAAMqvH,EAAAA,EAAAA,uBAAsB9qH,IAAa8qH,EAAAA,EAAAA,uBAAsBntH,GAErFA,IAAwB9L,EAAAA,QAAgB0vB,mBAAmBmB,iBACzD4jH,IACuB,IAArBA,EAAQllH,GAAGvsB,QAAe8tB,EAAAA,EAAAA,gBAAe2jH,EAAQjlH,GAAGxsB,OAAQpG,GAAQ,WAC/Dk0B,EAAAA,EAAAA,gBAAe2jH,EAAQnlH,GAAGtsB,OAAQpG,GAAQ,YAC9CA,GAAQ,SAGTkP,IAAwB9L,EAAAA,QAAgB0vB,mBAAmBO,mBAC/DrzB,IAAQgiI,aAAS,EAATA,EAAW9+H,KAAK8iB,QAAS,EAAI,OAAS,IAElD,MAAMutH,EAAY5wB,EAAWz0F,GACzBqlH,IACFvzI,GAAQ,IAAMuzI,EAAUoB,WAAW10I,MAAM,GACzC64I,EAAmBA,EAAiB9nI,QAAQ,gBAAkBrP,EAAI,GAAK,0BAA2B3B,GAEtG,CACA,OAAO,IAAI2qI,EAA6BhoB,EAAYm2B,EACtD,CAEA,SAAS9M,EAAmB37G,GAC1B,MAAM07G,EAAmD,CAAC,EA0B1D,OAzBI17G,EAAQxhB,IAA2B,OAArBwhB,EAAQxhB,GAAGzI,QAC3B2lI,EAAoB,GAAI17G,EAAQxhB,GAAGzI,OAAS,IAE1CiqB,EAAQlhB,IAA2B,OAArBkhB,EAAQlhB,GAAG/I,QAC3B2lI,EAAoB,GAAI17G,EAAQlhB,GAAG/I,OAAS,IAE1CiqB,EAAQhhB,IAA2B,OAArBghB,EAAQhhB,GAAGjJ,QAC3B2lI,EAAoB,GAAI17G,EAAQhhB,GAAGjJ,OAAS,IAE1CiqB,EAAQ9gB,IAA2B,OAArB8gB,EAAQ9gB,GAAGnJ,QAC3B2lI,EAAoB,GAAI17G,EAAQ9gB,GAAGnJ,OAAS,IAE1CiqB,EAAQqC,IAA2B,OAArBrC,EAAQqC,GAAGtsB,SAAmB8tB,EAAAA,EAAAA,gBAAe7D,EAAQqC,GAAGtsB,SACxE2lI,EAAoB,GAAI17G,EAAQqC,GAAGtsB,OAAS,IAE1CiqB,EAAQsC,IAA2B,OAArBtC,EAAQsC,GAAGvsB,OAAkBiqB,EAAQuC,IAA2B,OAArBvC,EAAQuC,GAAGxsB,OAa1E,SAAuBiqB,GACrB,OAAyB,OAArBA,EAAQsC,GAAGvsB,OAAuC,OAArBiqB,EAAQuC,GAAGxsB,SACtCiqB,EAAQ/S,iBAAmBla,EAAAA,QAAgB0vB,mBAAmBO,mBAEvDhD,EAAQ/S,iBAAmBla,EAAAA,QAAgB0vB,mBAAmBmB,iBACzC,IAArB5D,EAAQsC,GAAGvsB,QAAe8tB,EAAAA,EAAAA,gBAAe7D,EAAQuC,GAAGxsB,QAEpD8tB,EAAAA,EAAAA,gBAAe7D,EAAQsC,GAAGvsB,QAA+B,IAArBiqB,EAAQuC,GAAGxsB,OAI9D,CAxB4FslI,CAAcr7G,KACtG07G,EAAoB,GAAI17G,EAAQsC,GAAGvsB,OAAS,GAC5C2lI,EAAoB,GAAI17G,EAAQuC,GAAGxsB,OAAS,IAE1CiqB,EAAQ0pB,IAA2B,OAArB1pB,EAAQ0pB,GAAG3zC,QAC3B2lI,EAAoB,GAAI17G,EAAQ0pB,GAAG3zC,OAAS,IAE1CiqB,EAAQgrB,IAA2B,OAArBhrB,EAAQgrB,GAAGj1C,QAC3B2lI,EAAoB,GAAI17G,EAAQgrB,GAAGj1C,OAAS,IAEvC2lI,CACT,gCCneO,SAASiO,EAAgBppC,EAAQ5wG,GACtCmR,QAAQi1B,KAAKpmC,GACb,IAAImD,EAASytG,IAEb,OADAz/F,QAAQs1B,QAAQzmC,GACTmD,CACT,0JCMO,SAAS0iB,EAAuBzf,EAAeuN,EAAcC,GAClE,OAAOsS,EAAmB9f,EAAOuN,EAAMC,EACzC,CAOO,SAASsS,EAAmB9f,EAAeuN,EAAcC,GAC9D,IAAIzQ,GAAS,EACT0Q,EAAU,IACd,OAAQF,GACN,KAAKvQ,EAAAA,QAAgBkD,WAAWg3C,aAC9BzpC,EAAU,iBACV1Q,EAAS0Q,EAAQC,KAAK1N,EAAM+F,YAC5B,MACF,KAAK/I,EAAAA,QAAgBkD,WAAWi3C,SAC9B1pC,EAAU,cACV1Q,EAAS0Q,EAAQC,KAAK1N,EAAM+F,YAC5B,MACF,KAAK/I,EAAAA,QAAgBkD,WAAWwmB,QAC9BjZ,EAAU,YACV1Q,EAAS0Q,EAAQC,KAAK1N,EAAM+F,YACxBhJ,IACFA,GAAUkT,MAAM3P,OAAON,KAEzB,MACF,KAAKhD,EAAAA,QAAgBkD,WAAWC,eAC9BsN,EAAU,qBACV1Q,EAAS0Q,EAAQC,KAAK1N,EAAM+F,YACxBhJ,IACFA,GAAUkT,MAAM3P,OAAON,KAEzB,MACF,KAAKhD,EAAAA,QAAgBkD,WAAWK,YAAa,CAC3C,MAAMszI,EAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnE3mD,EAAQltF,EAAM+F,WACpB,GAAImnF,EAAM/yF,OAAS,EAAG,CACpB,IAAI25I,GAAgB,EACpB,MAAM75I,EAASizF,EAAMzgF,UAAUygF,EAAM/yF,OAAS,EAAG+yF,EAAM/yF,QACvD,IAAK,IAAIoB,EAAI,EAAGA,EAAIs4I,EAAS15I,OAAQoB,IAC/Bs4I,EAASt4I,KAAOtB,IAClB65I,GAAgB,GAGfA,IACC7jI,MAAM3P,OAAOrG,KAGXgW,MAAM3P,OAAO4sF,OAFjBnwF,GAAS,GAOT+2I,GACE7jI,MAAM3P,OAAO4sF,EAAMzgF,UAAU,EAAGygF,EAAM/yF,OAAS,OACjD4C,GAAS,EAGf,MACMkT,MAAM3P,OAAO4sF,MACfnwF,GAAS,GAGoB,KAA7BiD,EAAM4K,QAAQ,MAAO,MACvB7N,GAAS,GAEX,KACF,CACA,KAAKC,EAAAA,QAAgBkD,WAAWk3C,OAC1B5pC,IACFC,EAAUD,EACVzQ,EAAS0Q,EAAQC,KAAK1N,EAAM+F,aAGhC,KAAK/I,EAAAA,QAAgBkD,WAAWm3C,UAKlC,OAAOt6C,CACT,gCC7Fe,SAASg3I,EAAcn0H,GAII,mBAA7BA,EAAOtlB,YAAY05I,OAC5Bp0H,EAAOtlB,YAAY05I,OAEvB,CCcO,SAASC,EAAoBC,GAClC,OAAO,WAAoB,QAAAC,EAAA55I,UAAAJ,OAAR++C,EAAM,IAAAn9B,MAAAo4H,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAANl7F,EAAMk7F,GAAA75I,UAAA65I,GAEvB,OCbG,SAA2BC,GAChC,IAAKz0H,EAAQ1b,EAAKirC,GAAQklG,EAE1B,OAC0B,IAAxBA,EAAal6I,QACK,iBAAXylB,GACI,OAAXA,GACe,iBAAR1b,IACW,iBAATirC,GACE,OAATA,GACA,eAAgBA,GAChB,iBAAkBA,QACTjpC,IAATipC,EAEN,CAGSmlG,CADoBD,EDHRn7F,ICxBrB,SAA2Bm7F,GACzB,IAAKz0H,GAAUy0H,EAEf,OAC0B,IAAxBA,EAAal6I,QACK,mBAAXylB,GACP,cAAeA,IACdA,EAAO20H,qBAEZ,CAmB4CC,CAAkBH,GDHjDH,KAAMh7F,GAEN,mBAAAu7F,EAAAl6I,UAAAJ,OAAIg1C,EAAI,IAAApzB,MAAA04H,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJvlG,EAAIulG,GAAAn6I,UAAAm6I,GAAA,OAAKR,KAAM/kG,EAAM+J,EAAO,ECAtC,IAAsBm7F,CDE3B,CACF,CAmBO,SAASM,EAA4BT,EAAIt6I,GAC9C,OAAO,WAAoB,QAAAg7I,EAAAr6I,UAAAJ,OAAR++C,EAAM,IAAAn9B,MAAA64H,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAN37F,EAAM27F,GAAAt6I,UAAAs6I,GAMvB,OAAO,mBAAAC,EAAAv6I,UAAAJ,OAAIg1C,EAAI,IAAApzB,MAAA+4H,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJ5lG,EAAI4lG,GAAAx6I,UAAAw6I,GAAA,OAAKb,KAAM/kG,EAAM+J,EAAO,CACzC,CACF,CEuDA,SAAS87F,EAAuBC,GAC9B,OAAON,GAA4B,CAAC/0H,EAAQs1H,KAQ1C,GAFAnB,EAAcn0H,EAAOvb,WAEjB4wI,KAAYr1H,EAAOvb,UAAW,CAChC,IAAI8wI,EAAev1H,EAAOvb,UAAU4wI,GACpCC,EAAWp9H,WAAWq9H,EACxB,CAIA,OAFAv1H,EAAOvb,UAAU4wI,GAAYC,EAEtBt1H,CAAM,GAEjB,qCAxGyBq0H,GAAoB,SAACr0H,EAAQ1b,EAAKirC,GAAsB,IAAhB+J,EAAM3+C,UAAAJ,OAAA,QAAA+L,IAAA3L,UAAA,GAAAA,UAAA,GAAG,GAcxE,GAFAw5I,EAAcn0H,IAETA,EAAOvQ,eAAe,qBAAsB,CAC/C,IAAI+lI,EAAcx1H,EAAOy1H,kBACzBz1H,EAAOy1H,kBAAoBt5H,MAAMC,QAAQo5H,GAAeA,EAAYv7I,QAAU,EAChF,CAEA,IAAIy7I,EAAUp8F,EAAO,GAAK,GAAGh1C,KAAOg1C,EAAO,KAAOh1C,EAUlD,OARA0b,EAAOy1H,kBAAkB75I,KAAK85I,GAE1BnmG,IAGFA,EAAK7oC,cAAe,GAGf6oC,CACT,IAwByB8kG,GAAoB,SAACr0H,EAAQ1b,EAAKirC,GAAsB,IAAhB+J,EAAM3+C,UAAAJ,OAAA,QAAA+L,IAAA3L,UAAA,GAAAA,UAAA,GAAG,GAcxE,GAFAw5I,EAAcn0H,IAETA,EAAOvQ,eAAe,qBAAsB,CAC/C,IAAI+lI,EAAcx1H,EAAO21H,kBACzB31H,EAAO21H,kBAAoBx5H,MAAMC,QAAQo5H,GAAeA,EAAYv7I,QAAU,EAChF,CAEA,IAAIy7I,EAAUp8F,EAAO/+C,OAAS,EAAI,GAAG+J,KAAOg1C,EAAOrmC,KAAK,OAAS3O,EAUjE,OARA0b,EAAO21H,kBAAkB/5I,KAAK85I,GAE1BnmG,IAGFA,EAAK7oC,cAAe,GAGf6oC,CACT,IAiC0B6lG,EAAuB,cAahBA,EAAuB,qBAavBA,EAAuB,qBA1BjD,MAsCMQ,EAAUb,GAA4B,CAAC/0H,EAAQs5B,KAC1D,IAAKs8F,GAAWt8F,EAahB,OAFAt5B,EAAOvb,UAAUmxI,QAAUA,EAEpB51H,CAAM,IAwBF61H,EAAS,mBAAAtB,EAAA55I,UAAAJ,OAAI++C,EAAM,IAAAn9B,MAAAo4H,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAANl7F,EAAMk7F,GAAA75I,UAAA65I,GAAA,OAAKx0H,IACnC,IAAKmyH,GAAY74F,EAiBjB,OADAt5B,EAAOvb,UAAUoxI,OAAS1D,EACnBnyH,CAAM,CACd,6EChMD,SAAe81H,EAAAA,EAAAA,qBAAmB,KAAM,CACtCC,cAAcA,EAAAA,EAAAA,cAAuF,OAAiB,CACpHC,qBAAqB,IAEvBC,cAAAA,GAAkB,EAClBC,eAAAA,CAAgBC,EAAQnnI,EAAOs4B,GAG5B,IAFD8uG,YAAa9B,KAAOv3I,GAAK,MACzBs5I,GACD/uG,EACCgtG,EAAGtlI,EAASjS,EAAMs5I,EACpB,EACAC,cAAAA,GAAkB,EAClBC,eAAAA,GAAmB,KACjB,oFC1DJ,MAAMC,GAIKt6I,WAAAA,GAAA9C,EAAW,QAAsBo9I,QAkE5C,GAAeV,EAAAA,EAAAA,qBAAmB,KAAM,CACtCC,cAAyFA,EAAAA,EAAAA,cAAa,OAAQ,CAC5GC,qBAAqB,IAIvBC,eAAcA,KACL,CACLjnI,QAAS,OAGbknI,eAAAA,CAAgB/uB,EAAOn4G,EAASjS,GAE9BoqH,EAAMn4G,QAAUA,EAKdjS,EAAKq5I,WAAWxpI,SAAQ,SACxB7P,EAAKs5I,OAAS76I,OAAO4V,OAAOrU,EAAKs5I,MAErC,EACAC,cAAAA,CAAchvG,EAEXvqC,GAAM,IAFM,QACbiS,GACDs4B,GACMgtG,KAAO8B,GAAcr5I,EAAKq5I,WAK7Br5I,EAAKq5I,WAAWxpI,SAAQ,SACxB7P,EAAKs5I,OAAS76I,OAAO4V,OAAOrU,EAAKs5I,OACjCG,GAAQ,KACNlC,EAAGtlI,EAASonI,EAAYr5I,EAAKs5I,MAAM,GAKzC,EACAE,eAAAA,GAAmB,KACjB,oFCvEJ,SAAeT,EAAAA,EAAAA,qBAAmB,KAAM,CACtCC,cAAcA,EAAAA,EAAAA,cAAuF,OAAiB,CACpHC,qBAAqB,IAEvBC,eAAcA,KACL,CACLjnI,QAAS,OAGbknI,eAAAA,CAAgB/uB,EAAOn4G,GACrBm4G,EAAMn4G,QAAUA,CAClB,EACAsnI,cAAAA,GAAkB,EAClBC,eAAAA,CAAejvG,EAEZvqC,GAAM,IAFO,QACdiS,GACDs4B,GACMgtG,KAAO8B,GAAcr5I,EAAKq5I,WAC/B9B,EAAGtlI,EAASonI,EAAYr5I,EAAKs5I,MAC/B,KACE,wEC5DW,MAAMI,EAKnB/7I,WAAAA,CAAYg8I,EAAOC,EAAMC,IAAOh8I,EAAAA,EAAAA,GAAA,YAJzB,IAACA,EAAAA,EAAAA,GAAA,cACC,IAACA,EAAAA,EAAAA,GAAA,YACH,GAGLkC,KAAK45I,MAAQA,EACb55I,KAAK65I,KAAOA,EACZ75I,KAAK85I,MAAQA,EACb95I,KAAK85I,MAAQA,GAAS,IAAIC,GAC5B,CAEA5jE,GAAAA,CAAI3uE,GACF,IAAIlE,EAAQtD,KAAK85I,MAAM3jE,IAAI3uE,GAE3B,OAAIxH,KAAK85I,MAAME,IAAIxyI,IACjBxH,KAAKi6I,OACEj6I,KAAK85I,MAAM3jE,IAAI3uE,KAEtBxH,KAAKk6I,SACL52I,EAAQtD,KAAKwhC,IAAIh6B,EAAKxH,KAAK65I,KAAKryI,IAG3BlE,EACT,CAEAk+B,GAAAA,CAAIh6B,EAAKlE,GAMP,OALItD,KAAK45I,MAAQ55I,KAAKm6I,OACpBn6I,KAAKm6I,OACLn6I,KAAK85I,MAAMt4G,IAAIh6B,EAAKlE,IAGfA,CACT,CAEA82I,KAAAA,GACEp6I,KAAK85I,MAAMO,QACXr6I,KAAKm6I,KAAO,EACZn6I,KAAKi6I,KAAO,EACZj6I,KAAKk6I,OAAS,CAChB,ECrBF,MAAMI,EAA0B,QAE1BC,GADyB,IAAIZ,EAAM,KAAMnyI,IAAOgzI,OA6E3Bl9I,EA7EsCkK,EA8ExDizI,EAAiBtkE,IAAI74E,IA9EwC4Q,QAAQosI,EAAyB,KA6EhG,IAAoBh9I,CA7EgF,IAC1E,uBAC3Bo9I,EAA2B,iBAI3BC,GAHiB,IAAIhB,EAAM,KAAMnyI,GAAOA,EAAI0G,QAAQqsI,GAA0B,CAACK,EAAQC,EAAYC,IAAQA,EAAMA,EAAI5xI,cAAgB,KAAIgF,QAAQwsI,GAA2BliI,GAE7KA,EAAM5B,kBACsB,gBAC3BmkI,EAA2B,yBAC3BC,EAA2B,oBAgB3BC,GAfiB,IAAItB,EAAM,KAAMr8I,IACrC,MAAM49I,EAAWA,CAACN,EAAQC,EAAYC,IAAQA,EAAM,IAAIA,EAAI5xI,gBAAkB,GAExEiyI,EAAWA,CAACP,EAAQQ,EAAaP,EAAYC,IAAQM,GAAeN,EAAMA,EAAI5xI,cAAgB,IAE9FkF,EAAQ9Q,EAAImS,MAAM,KAExB,IAAK,IAAI5Q,EAAI,EAAGA,EAAIuP,EAAM3Q,OAAQoB,IAChCuP,EAAMvP,GAAKuP,EAAMvP,GAAGqP,QAAQysI,EAA0BO,GAAUhtI,QAAQ6sI,EAA0BI,GAGpG,OAAO/sI,EAAM+H,KAAK,KAAKjI,QAAQ8sI,GAA2BxiI,GAErDA,EAAMtP,eAAc,IAEQ,sBAC7BmyI,EAA6B,UAC7BC,EAAmB,IAAI3B,EAAM,KAAMr8I,GAAOA,EAAI4Q,QAAQ+sI,EAA4B,SAAS/sI,QAAQmtI,EAA4B,KAAKzkI,gBACpI2kI,EAA2B,8BAI3BC,GAHmB,IAAI7B,EAAM,KAAMr8I,GAAOA,EAAI4Q,QAAQqtI,GAA2B/iI,GAElFA,EAAMtP,kBACsB,qBAC3BuxI,EAAmB,IAAId,EAAM,KAAMr8I,GAAOA,EAAI4Q,QAAQstI,EAA0B,SAAS5kI,gBAuIxF,SAAS6kI,EAAWn+I,GACzB,OAAOg+I,EAAiBnlE,IAAI74E,EAC9B,4KC7LA,SAASQ,EAAgBisB,EAAGpgB,EAAGP,GAAK,OAAQO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,EAAG2gB,CAAG,CAKpK,MAAMgyH,UAAgCxuC,KACnD3vG,WAAAA,GACEoP,SAAMnP,WACNC,EAAgBkC,KAAM,cAAe,IAAIg8I,SACzCl+I,EAAgBkC,KAAM,eAAgB,EACxC,CACAi8I,QAAAA,CAASC,GAA+B,IAAxBnvI,EAAKlP,UAAAJ,OAAA,QAAA+L,IAAA3L,UAAA,GAAAA,UAAA,IAAGkuG,EAAAA,EAAAA,UAAS/rG,MAC3Bm8I,EAAQn8I,KAAKo8I,YAAYjmE,IAAI+lE,GAMjC,OALa,MAATC,IACFA,EAAQ,UAAUn8I,KAAKq8I,eACvBr8I,KAAKo8I,YAAY56G,IAAI06G,EAAOC,GAC5BpvI,EAAMkvI,SAAS,aAAaE,IAASD,IAEhCC,CACT,kFClBF,IAAIG,EAGFA,GAAOl9I,WAAAA,GAAA9C,EAAc,QAKvB,IAAI,6BACFigJ,EAA4B,2BAC5BC,EAA0B,MAC1BC,EAAK,aACLC,GACEJ,EAICC,IACHA,EAA+B,SAAUj5I,GACvC,OAAOA,aAAiBo5I,CAC1B,2BChBK,SAASC,EAAoBr5I,EAAOs5I,GACzC,MAAqB,iBAAVt5I,EAeb,SAAsBpG,EAAM0/I,GAS1B,ODKK,SAA0C1/I,EAAM6P,GACrD,IAAI8vI,EAZN,SAAyB9vI,GACvB,IAAI8vI,EAAW9vI,EAAMi/F,OAAO,iBAAiB8wC,iBAC7C,GAAID,EACF,OAAOA,EAET,IAAIE,EAAQr+I,OAAOyQ,QAAQpC,EAAMiwI,cAAcC,OAAOrrI,MAAKmY,GAAKA,EAAE,GAAG1L,WAAW,6BAChF,GAAI0+H,EACF,OAAOA,EAAM,GAAGF,SAASA,SAE3B,MAAM,IAAI7/I,MAAM,6EAClB,CAEiBkgJ,CAAgBnwI,GAC/B,GAA8C,mBAAnC8vI,EAASM,sBAAsC,CACxD,IAAIC,EAASP,EAASM,sBAAsBjgJ,EAAuB6P,GACnE,GAAc,MAAVqwI,EACF,OAAO,IAAIZ,EAA2BK,EAASt8G,QAAQ68G,GAAS,KAEpE,CAMA,IADyBP,EAASQ,gBAAgBngJ,EAAM6P,GAEtD,MAAM,IAAI/P,MAAM,0BAA0BE,uDAE5C,OAAOu/I,EAAM,EAAGv/I,EAAM6P,EAAO,CAC3BwsI,MAAO,CAAC,EACRD,WAAY,IAEhB,CCzBSgE,CAAiCpgJ,GAD5B6uG,EAAAA,EAAAA,UAAS6wC,GAEvB,CAxBWW,CAAaj6I,EAAOs5I,IAClBL,EAA6Bj5I,GAC/BA,EAMX,CACO,MAAMk6I,UAAkCC,KAC7CC,OAAAA,CAAOlzG,GAAU,IAARlnC,GAAMknC,EACb,OAAOmyG,EAAoBr5I,EAAOtD,KACpC,4ECsKa,MAAM29I,EASnB//I,WAAAA,CAAYmP,EAAO9M,GAlMrB,IAAyB8pB,EAAGpgB,EAAGP,EAAN2gB,EA2NL/pB,KA3NWoJ,OA2NG,GA3NUO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAApBnyI,EA2NF,WA3N4CogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,EA+NzKpJ,KAAKC,KAAOA,GACZ29I,EAAAA,EAAAA,UAAS59I,KAAM+M,EACjB,CACA,gBAAIk6B,GACF,OAAOA,EAAAA,EAAAA,GAAajnC,KACtB,CACA,eAAIujC,GACF,OAAOA,EAAAA,EAAAA,GAAYvjC,KACrB,CAKAytG,WAAAA,GAAe,kFC3OV,MAAMxmE,EAAe42G,IAAAA,cACft6G,EAAcs6G,IAAAA,sJCM3B,MAAM,aACJC,EAAY,cACZC,GACEC,EACEC,GAEJhF,EAAAA,EAAAA,cAAa,OAAQ,CACrBiF,YAAY,EACZC,yBAAyB,EACzBC,YAAY,IAaR3pG,EAAiBopG,IAAAA,QAUjBQ,EAA4BR,IAAAA,oBAQlC,MAAMS,UCrCS,SAA8BV,EAAU7xC,EAAUktC,GAC/D,OAAO,MACL,aAAO15I,CAAOg/I,GAEZ,OAAO,IAAIv+I,KADC+rG,EAASwyC,GAEvB,CACA3gJ,WAAAA,CAAYmP,GAjBhB,IAAyBgd,EAAGpgB,EAAGP,EAAN2gB,EAkBH/pB,KAlBSoJ,EAkBa6vI,GAlBAtvI,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAApBnyI,EAkBA,mBAlB0CogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,EAmBvKw0I,EAAS59I,KAAM+M,EACjB,CACAyxI,eAAAA,CAAgBC,EAAgBx+I,GAI9B,OAAO,IAAIw+I,EAAe1yC,EAAS/rG,MAAOC,EAAKs5I,MACjD,CACA3oB,UAAAA,CAAW8tB,GACT,OAAOA,CACT,EAEJ,CDiB2CC,CAAqBf,EAAAA,SAAU7xC,EAAAA,SAAUkyC,IAClFO,eAAAA,CAAgBC,EAAgBx+I,GAC9B,MAAMy+I,EAAY1xI,MAAMwxI,gBAAgBC,EAAgBx+I,GAMxD,OAJEo+I,EAAmBK,GAAW,KAC5BA,EAAUjxC,aAAa,IAGpBixC,CACT,CACAE,gBAAAA,CAAiBF,GACfjqG,EAAQiqG,EACV,EAiBF,gKEnEA,IAAIG,WAAmBC,GAwCrBC,EAAAA,EAAAA,sBAAoBhyI,GACX,IAAIiyI,EAAAA,EAAwBjyI,IAClC8xI,GAIL,gFCvDI,MAAM,OAAEI,EAAM,QAAEzxI,GAAY0xI,yGCDzB,MAAMC,EAAgB,kBAChBC,EAAwB,kCACxBC,EAAY,cCMlB,SAASC,EAAWC,GAAc,IAAXxsE,EAAIl1E,UAAAJ,OAAA,QAAA+L,IAAA3L,UAAA,GAAAA,UAAA,GAAG,CAAC,EACpC,MAAMkkH,EAAUhkH,EAAAA,QAAOyhJ,IAAIz9B,QAI3B,IAAI09B,EAAc1sE,EAAK0sE,aAAe1sE,EAAK2sE,QACvCC,EAAU5sE,EAAK4sE,SAAW5sE,EAAK6sE,YAE/BpnI,EAAQ,KAgBZ,OAdIinI,IACE1sE,EAAK8sE,eACPrnI,EAAQupG,EAAQvpG,MAAM4mI,IAGnB5mI,IACHA,EAAQupG,EAAQvpG,MAAM2mI,KAItBQ,IACFnnI,EAAQupG,EAAQvpG,MAAM6mI,IAGjB7mI,EAAQA,EAAM,GAAKupG,CAC5B,CAEA,SAAerlE,EAAAA,EAAAA,QAAO4iG,yFChCtB,IAAIpiJ,EAAM6kH,EACNhkH,EAAAA,QAAOyhJ,MACTtiJ,EAAOa,EAAAA,QAAOyhJ,IAAItiJ,KAClB6kH,EAAUhkH,EAAAA,QAAOyhJ,IAAIz9B,SAGvB,SACE7kH,KAAM,cACNy/C,WCTa,SAA4Bz/C,EAAM6kH,GAC/C,IAAI+9B,GAAa,EAEjB,OAAO,YACAA,GAAc5iJ,GAAQ6kH,IACzBg+B,EAAAA,UAAU9D,SAAS/+I,EAAM6kH,GACzB+9B,GAAa,EAEjB,CACF,CDAcE,CAAmB9iJ,EAAM6kH,gEEkBvC,SACE7kH,KAAM,oBAENy/C,UAAAA,CAAWggB,GACT,GAAwB,oBAAbt9D,SAA0B,CACnC,IAAI4gJ,EAA4BtjF,EAASujF,kBAEzCvjF,EAASujF,kBAAoB,YA3B5B,WACL,IAAIla,EAAU3wH,SAASC,eAAe,uBAClC6qI,EAAY9qI,SAASC,eAAe,qBAExC,GAAI0wH,GAAWma,EAAW,CACxB,IAAIC,EAAe/qI,SAASoB,iBAAiB,6BACzC4pI,EAAoB,GACxB,IAAI,IAAIxhJ,EAAE,EAAGA,EAAIuhJ,EAAa3iJ,OAAQoB,IACpCwhJ,EAAkBvhJ,KAAKshJ,EAAavhJ,IAEtC,IACIyhJ,EADAC,EAASva,EAAQ3zH,cAErB,GACEiuI,EAAWta,EAAQwa,YACnBD,EAAOE,YAAYza,GACnBA,EAAUsa,QACHA,GAAYA,IAAaH,GAAaE,EAAkB7iJ,QAAQ8iJ,GAAY,GACrFH,EAAU9tI,cAAcouI,YAAYN,EACtC,CACF,CASQO,GACAT,EAA0BlxF,MAAM4N,EAAU9+D,UAC5C,CACF,CACF,yHClCF,MAEA,QAAe8iJ,GAAAA,OAAoB,CACjCnmI,eAAgB,WAChB0nB,UAAU55B,EAAAA,EAAAA,UAEVs4I,SAAS52F,EAAAA,EAAAA,WAAS,WAChB,OAAO+hD,EAAAA,EAAAA,UAAS/rG,MAAM6gJ,oBAAoB,qBAC5C,IAEAC,yBAAyBC,EAAAA,EAAAA,MAAK,oCAE9BC,eAAeh3F,EAAAA,EAAAA,WAAS,WACtB,OAAOmsB,EAAAA,EAAAA,KAAIn2E,KAAM,kCAbW,GAc9B,IAEAihJ,WAAWC,EAAAA,EAAAA,UAAS,qBACpBC,UAAUD,EAAAA,EAAAA,UAAS,oBAEnBE,MAAAA,CAAOp2C,GACL,IAAI70B,EAAAA,EAAAA,KAAIn2E,KAAM,uBAAwB,CACpC,IAAIguG,GAAW73B,EAAAA,EAAAA,KAAIn2E,KAAM,aACrBqhJ,GAAclrE,EAAAA,EAAAA,KAAIn2E,KAAM,QAG5B,GAFqBqhJ,GAAsC,IAAvBA,EAAY5jJ,QAIxB4jJ,KADtBr2C,EAAOhrG,KAAKshJ,UAAUt2C,IAGD,CACnB,IACIu2C,EAAc,MADPprE,EAAAA,EAAAA,KAAIn2E,KAAM,mBACSgrG,IAE9BgD,EAASwzC,WAAaxhJ,KAAKm2E,IAAI,iBAC/B63B,EAASH,QAAQrsE,IAAI,WAAY+/G,EACnC,EAIEprE,EAAAA,EAAAA,KAAIn2E,KAAM,4BACZguG,EAASH,QAAQrsE,IAAI,kBAAmBwpE,EAE5C,CAEAhrG,KAAKyhJ,UAAU5jJ,UACjB,4IC3CF,MAAM6jJ,EAAgBC,IAAAA,OAAe,CACnCt2F,IAAAA,GACErrD,KAAKyhJ,UAAU5jJ,WAEf,IAAIoxG,EAAUjvG,KAAKivG,eACZjvG,KAAKivG,QAEZjvG,KAAK8tG,OAASmB,EAAQnB,OACtB9tG,KAAK0yG,KAAOzD,EAAQyD,KACpB1yG,KAAK4hJ,QAAU3yC,EAAQ2yC,QACvB5hJ,KAAK6tG,QAAUoB,EAAQpB,QACvB7tG,KAAK6hJ,YAAc5yC,EAAQ4yC,YAC3B7hJ,KAAKgrG,KAAOiE,EAAQjE,KACpBhrG,KAAKgiI,SAAW/yB,EAAQ+yB,SACxBhiI,KAAK8hJ,MAAQ,WACX,OAAO7yC,EAAQgzB,MACjB,CACF,EAEAA,MAAMj4E,EAAAA,EAAAA,WAAS,WACb,OAAOhqD,KAAK8hJ,OACd,MAGIC,EAAUJ,IAAAA,OAAe,CAC7BK,GAAAA,CAAIx6I,EAAKlE,GAIP,IAAI2+I,EAAejiJ,KAAKm2E,IAAI,0BACvB8rE,EAAaC,UAAWD,EAAaC,QAAU,CAAC,GAErDD,EAAaC,QAAQ16I,GAAOlE,CAC9B,EAEA6+I,QAAAA,CAAS36I,GACP,GAAIxH,KAAKm2E,IAAI,uBAAwB,CACnC,IAAI+rE,EAAUliJ,KAAKm2E,IAAI,kCACvB,IAAK+rE,EAAW,OAEhB,OAAOA,EAAQ16I,EACjB,CAEA,IAAI46I,EAAcpiJ,KAAKm2E,IAAI3uE,GAC3B,GAAI46I,EAAe,OAAOA,EAE1B,IAAIC,EAAKhtI,SAASmqB,cAAc,YAAYh4B,KAC5C,IAAK66I,EAAM,OACX,IAAIC,EAAcD,EAAGE,YACrB,OAAKD,GAELF,EAAc3vI,KAAKC,MAAM4vI,GACzBtiJ,KAAKwhC,IAAIh6B,EAAK46I,GAEPA,QALP,CAMF,IAiDF,EA9CwB70C,IAAAA,OAAe,CACrCr5D,WAAgC,oBAAb70C,SAEnBmjJ,YAAYx4F,EAAAA,EAAAA,WAAS,WAKrB,IAEAqB,IAAAA,GACErrD,KAAKyhJ,UAAU5jJ,WAEf,IAAIqkJ,EAAUH,EAAQxiJ,OAAO,CAAE2iC,SAAUliC,OACzCA,KAAKwhC,IAAI,UAAW0gH,EACtB,EAEAl0C,UAAUkzC,EAAAA,EAAAA,UAAS,0BACnBuB,UAAUvB,EAAAA,EAAAA,UAAS,0BAEnBjyC,SAASjlD,EAAAA,EAAAA,WAAS,WAChB,OAAKhqD,KAAKk0C,WACHwtG,EAAcniJ,OAAO,CAAE0vG,SAAS94B,EAAAA,EAAAA,KAAIn2E,KAAM,2BADpB,IAE/B,IAGA0iJ,eAAe14F,EAAAA,EAAAA,UAAS,CACtBmsB,GAAAA,GACE,OAAIn2E,KAAK2iJ,eACA3iJ,KAAK2iJ,gBAGP52C,EAAAA,EAAAA,UAAS/rG,MAAMgsG,OAAO,iBAC/B,EACAxqE,GAAAA,CAAIk2G,EAAMp0I,GAER,OADAtD,KAAK2iJ,eAAiBr/I,EACfA,CACT,IAGFs/I,cAAAA,CAAeC,GAEb7iJ,KAAK0iJ,cAAcE,eAAeC,EACpC,4IC3GsD,IAEnCC,GAAWz6I,GAC7BC,EAAAA,EAAAA,QAAQ,aAAYrB,EADR,cAA0BpH,EAAAA,EAAUjC,WAAAA,GAAA,SAAAC,YAAA0K,EAAAA,EAAAA,GAAA,aAAAC,EAAA,QAElDA,GAAAd,EAAAA,EAAAA,GAAAT,EAAAU,UAAA,SAAAU,GAAA,CAAAuB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAA7M,YAAA,OAAAgK,IAEDJ,EAAAA,EAAAA,sBAAqBkyI,EAAAA,QAAQ+J,yFCR7B,SAAAjmJ,WAAAA,uBADuB,CAAC,GAAK,WAAW,MAAQ,iUAAiW,WAAa,gMAAgM,cAAe,QCCzmBwL,EAAMpB,EAAQuB,aAElB,SAAS1K,EAAgBisB,EAAGpgB,EAAGP,GAAK,OAAQO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,EAAG2gB,CAAG,CAOnL,IAAIg5H,GAAc16I,GAAOC,EAAAA,EAAAA,QAAQ,aAAcrB,EAAS,cAAyBpH,EAAAA,EAC/EjC,WAAAA,GATF,IAA0C+L,EAUtCqD,SAASnP,YAV6B8L,EAWOnB,IAXM9J,OAAOihC,eAW/B3/B,KAAM,WAX8C,CAAE6J,WAAYF,EAAEE,WAAYD,aAAcD,EAAEC,aAAcE,SAAUH,EAAEG,SAAUxG,MAAOqG,EAAE1M,YAAc0M,EAAE1M,YAAY2V,KAW1I5S,WAXoJ,IAkB9MlC,EAAgBkC,KAAM,wBAAwB,GAK9ClC,EAAgBkC,KAAM,cAAeA,KAAKC,KAAK+iJ,aAAehjJ,KAAKqV,SAAS4tI,MACxEjjJ,KAAKkjJ,sBACPljJ,KAAKmjJ,eAET,CAMAA,aAAAA,GACE,GAAInjJ,KAAKojJ,cACP,OAIF,IAAI/tI,EAAWrV,KAAKqV,SAChBguI,EAAYhuI,EAASmqB,cAAc,qCACnC8jH,EAAUjuI,EAASmqB,cAAc,mCACrC,GAAI6jH,GAAaC,EAAS,CACxB,IAAIjB,EAAKgB,EAAU7C,YACnB,KAAO6B,GAAMA,IAAOiB,GAClBjuI,EAAS4tI,KAAKxC,YAAY4B,GAC1BA,EAAKgB,EAAU7C,YAEjBnrI,EAAS4tI,KAAKxC,YAAY4C,GAC1BhuI,EAAS4tI,KAAKxC,YAAY6C,EAC5B,CACF,CACAF,WAAAA,GACE,MAA2B,oBAAb/jJ,QAChB,GAlDiCR,EAmDQoI,EAAOU,UAnDZoiB,EAmDuB,WAnDpBpgB,EAmDgC,CAACtB,GAnD9ByzD,EAmDqC,CAC/ElyD,cAAc,EACdC,YAAY,EACZC,UAAU,EACV7M,YAAa,MAvDyC4vC,EAAI,CAAC,EAAUnuC,OAAOC,KAAKm9D,GAAGhsD,SAAQ,SAAUjR,GAAKguC,EAAEhuC,GAAKi9D,EAAEj9D,EAAI,IAAIguC,EAAEhjC,aAAegjC,EAAEhjC,WAAYgjC,EAAEjjC,eAAiBijC,EAAEjjC,cAAe,UAAWijC,GAAKA,EAAE5vC,eAAiB4vC,EAAE/iC,UAAW,GAAK+iC,EAAIljC,EAAExM,QAAQ+4D,UAAUtmD,QAAO,SAAUjG,EAAGmyD,GAAK,OAAOA,EAAEj9D,EAAGkrB,EAAGpgB,IAAMA,CAAG,GAAGkjC,GAmD/TrkC,OAnDwb,IAAWqkC,EAAE5vC,aAAeyB,OAAOihC,eAAe9gC,EAAGkrB,EAAG8iB,GAAI,MAAQA,EAwD3f5lC,GAxDJ,IAAmCpI,EAAGkrB,EAAGpgB,EAAGmyD,EAAYjvB,GAyDvBhmC,EAAAA,EAAAA,sBAAAC,EAAAi8I,+DC/DjC,SACE7lJ,KAAM,eACNy/C,UAAAA,GAGE,uFCJW,MAAM4mG,UAAiBh2C,0HCAtC,SAAA1wG,WAAAA,uBADuB,CAAC,GAAK,WAAW,MAAQ,6cAA6f,WAAa,6NAA6N,cAAe,ICOtyB,IAAc2mJ,EAKZA,GAAkB,EAEpB,QAAe3jJ,IAAAA,OAAiB,CAC9Bk5I,OAAM,EACN0K,WAAY,CAAC,iBACb5K,kBAAmB,CAAC,qBAEpB,UAAY7uF,EAAAA,EAAAA,WAAS,WAEnB,OAAO2yF,EAAAA,EAAAA,QAdP+G,EAcqC1jJ,KACvC,qGCnBF,QAAeH,IAAAA,OAAiB,CAC9Bi5I,QAAS,IACT2K,WAAY,CAAC,mBACb5K,kBAAmB,CAAC,qBAEpBF,kBAAmB,CAAC,OAAQ,8BAC5BjrG,KAAM,IACNi2G,cAAc35F,EAAAA,EAAAA,UAAS,UAAU,WAC/B,OAAOmsB,EAAAA,EAAAA,KAAIn2E,KAAM,UAAY,OAAS,OACxC,IACA6kH,KAAAA,CAAM96F,GACJA,EAAE65H,iBACF5jJ,KAAKm2E,IAAI,WAATn2E,EACF,mICfF,SAAAnD,WAAAA,uBADuB,CAAC,GAAK,WAAW,MAAQ,oYAAgb,WAAa,wNAAwN,cAAe,ICQptB,IAAIgnJ,EAIFA,GAAmB,EAErB,QAAehkJ,IAAAA,OAAiB,CAC9Bk5I,OAAM,EACN+K,cAAcx7I,EAAAA,EAAAA,UACdy7I,eAAeC,EAAAA,EAAAA,KAAI,mBAAoB,WACvC3tI,UAAU,EACVwtI,kBAPmB,EAQnB95B,MAAO,KAGP05B,WAAY,CAAC,YACb5K,kBAAmB,CAAC,iCAAkC,2BAEtD37I,MAAM+mJ,EAAAA,EAAAA,QAAO,aACbC,YAAYl6F,EAAAA,EAAAA,UAAS,QAAQ,WAC3B,MAAM9sD,EAAO8C,KAAKm2E,IAAI,QACtB,OAAOn2E,KAAKm2E,IAAI,sBAAsBj5E,IACxC,IACAinJ,QAAQjD,EAAAA,EAAAA,UAAS,qBACjBkD,UAAUC,EAAAA,EAAAA,KAAI,UACdC,cAAe,KACfC,SAAS,EACTC,eAAAA,GACExkJ,KAAKyhJ,UAAU5jJ,gBAGU2L,IAArBxJ,KAAKm2E,IAAI,SACXn2E,KAAKwhC,IAAI,4BAA6BxhC,KAAKm2E,IAAI,QAEnD,EAEAsuE,gBAAAA,GACEzkJ,KAAKyhJ,UAAU5jJ,YACf6mJ,EAAAA,EAAAA,cAAa,eAAe,KAC1B,IAAI36B,EAAQ/pH,KAAKm2E,IAAI,SACjB4zC,GACF/pH,KAAKm2E,IAAI,cAAc30C,IAAI,QAASuoF,EACtC,GAEJ,EAEA46B,SAAAA,GAAa,EACbC,QAAS,CACPC,YAAAA,GACE,GAAI7kJ,KAAKm2E,IAAI,YACX,OAEF,IAAIj5E,EAAO8C,KAAKm2E,IAAI,QACpBn2E,KAAKm2E,IAAI,gBAAgB2uE,OAAO5nJ,GAChC8C,KAAK2kJ,UAAUznJ,EACjB,mGC9DJ,SAAAL,WAAAA,uBADuB,CAAC,GAAK,WAAW,MAAQ,0KAA8L,WAAa,yNAAyN,cAAe,ICIne,EAAegD,IAAAA,OAAiB,CAC9Bk5I,OAAM,EACN0K,WAAY,YACZsB,WAAW,EACXR,SAAS,EACTS,WAAW,EACX9nJ,MAAM+mJ,EAAAA,EAAAA,QAAO,4ICLf,MAAMgB,EAAQ75F,IAAAA,OAAmB,CAC/BluD,KAAM,KACNgoJ,gBAAgB,EAChBC,cAAc,EACdC,YAAY,EACZjB,QAAQn6F,EAAAA,EAAAA,UAAS,iBAAkB,eAAgB,cAAc,WAC/D,OAAIhqD,KAAKm2E,IAAI,cACJn2E,KAAKm2E,IAAI,gBAETn2E,KAAKm2E,IAAI,iBAEpB,IACAouE,SAAS,EACTx6B,MAAO,OAEHs7B,EAAWj6F,IAAAA,OAAmB,CAClCC,IAAAA,GACErrD,KAAKyhJ,UAAU5jJ,WACfmC,KAAKrB,MAAOwnF,EAAAA,EAAAA,GAAE,GAChB,EACAm/D,eAAAA,CAAgBpoJ,GACd,GAAa,uBAATA,EAGF,OAEF,MAAMmtH,EAAQ46B,EAAM1lJ,SAIpB,OAHAS,KAAKm2E,IAAI,QAAQovE,UAAUroJ,GAC3B8C,KAAKwhC,IAAItkC,EAAMmtH,GAERA,CACT,EAEAr3G,KAAAA,GACEhT,KAAKm2E,IAAI,QAAQh5E,QAChB2S,SAAQtI,WACAxH,KAAKwH,EAAI,IAElBxH,KAAKm2E,IAAI,QAAQkkE,OACnB,IAEF,EAAe9sC,IAAAA,OAAe,CAC5BliD,IAAAA,GACErrD,KAAKyhJ,UAAU5jJ,WACfmC,KAAKwlJ,UAAYH,EAAS9lJ,QAC5B,EACA8qH,OAAO62B,EAAAA,EAAAA,UAAS,aAChBuE,SAAAA,CAAUvoJ,GACR,OAAO8C,KAAKm2E,IAAI,SAASj5E,IAC3B,EACAwoJ,SAAS17F,EAAAA,EAAAA,UAAS,iBAAiB,WACjC,MAAMrrD,EAAOqB,KAAKm2E,IAAI,cACpBk0C,EAAQrqH,KAAKm2E,IAAI,SACnB,OAAOx3E,EAAKiR,QAAO,CAACvP,EAAQmH,IACnBnH,EAAOklJ,UAAUl7B,EAAMl0C,IAAI3uE,MACjC2+E,EAAAA,EAAAA,GAAE,IACP,IACAw/D,cAAAA,CAAezoJ,GACb,OAAO8C,KAAKm2E,IAAI,WAAWyvE,SAAS,aAAc1oJ,EACpD,EACA2oJ,IAAAA,CAAK3oJ,GACH,MAAM4oJ,EAAQ9lJ,KAAKylJ,UAAUvoJ,GAC3B6sH,EAAQ+7B,EAAM3vE,IAAI,SAChB4zC,GAASA,EAAM5zC,IAAI,cAGrBn2E,KAAK+lJ,SAASh8B,EAAM5zC,IAAI,SAE1B2vE,EAAMtkH,IAAI,gBAAgB,GAC1BskH,EAAMtkH,IAAI,cAAc,EAC1B,EACApgB,KAAAA,CAAMlkB,GACJ8C,KAAKylJ,UAAUvoJ,GAAMskC,IAAI,gBAAgB,GACzCxhC,KAAKylJ,UAAUvoJ,GAAMskC,IAAI,cAAc,EACzC,EACAsjH,MAAAA,CAAO5nJ,GAEL,OADY8C,KAAKylJ,UAAUvoJ,GACdi5E,IAAI,UAAYn2E,KAAKohB,MAAMlkB,GAAQ8C,KAAK6lJ,KAAK3oJ,EAC5D,EACA8oJ,OAAAA,CAAQj8B,GACN/pH,KAAK2lJ,eAAe57B,GAAOj6G,SAAQg2I,IACjCA,EAAMtkH,IAAI,gBAAgB,GAC1BskH,EAAMtkH,IAAI,cAAc,EAAK,GAEjC,EACAukH,QAAAA,CAASh8B,GACP/pH,KAAK2lJ,eAAe57B,GAAOj6G,SAAQg2I,IACjCA,EAAMtkH,IAAI,gBAAgB,GAC1BskH,EAAMtkH,IAAI,cAAc,EAAK,GAEjC,oFCjFF,cAAeykH,GAAAA,OAAa,CAW1BxwF,KAAM,OCrBR,SAASywF,EAAMryB,EAAKsyB,EAAMC,EAAMC,GAE9B,GAAmB,iBAARxyB,GAA4B,OAARA,EAC7B,OAAOA,EAGT,IAAIyyB,EAAKpuI,EAGT,GAAIiuI,IAASjuI,EAAMkuI,EAAK5oJ,QAAQq2H,KAAS,EACvC,OAAOwyB,EAAOnuI,GAShB,GANIiuI,GACFC,EAAKtnJ,KAAK+0H,GAKRx0G,MAAMC,QAAQu0G,IAGhB,GAFAyyB,EAAMzyB,EAAI12H,QAENgpJ,EAIF,IAHAE,EAAOvnJ,KAAKwnJ,GACZpuI,EAAMouI,EAAI7oJ,SAEDya,GAAO,GACdouI,EAAIpuI,GAAOguI,EAAMI,EAAIpuI,GAAMiuI,EAAMC,EAAMC,QAGtC,GAAIE,EAASC,OAAO3yB,GACzByyB,EAAMzyB,EAAIp+D,KAAK0wF,EAAMC,EAAMC,GACvBF,GACFE,EAAOvnJ,KAAKwnJ,QAET,GAAIzyB,aAAe11G,KACxBmoI,EAAM,IAAInoI,KAAK01G,EAAIzmB,WACf+4C,GACFE,EAAOvnJ,KAAKwnJ,OAET,CAWL,IAAI9+I,EACJ,IAAKA,KANL8+I,EAAM,CAAC,EACHH,GACFE,EAAOvnJ,KAAKwnJ,GAIFzyB,EAELn1H,OAAOiJ,UAAUgL,eAAeC,KAAKihH,EAAKrsH,IAMnB,OAAxBA,EAAIuI,UAAU,EAAG,KAIrBu2I,EAAI9+I,GAAO2+I,EAAOD,EAAMryB,EAAIrsH,GAAM2+I,EAAMC,EAAMC,GAAUxyB,EAAIrsH,GAEhE,CAEA,OAAO8+I,CACT,CAkBe,SAAS7wF,EAAKo+D,EAAKsyB,GAEhC,MAAI,iBAAoBtyB,GAAe,OAARA,EACtBA,GAGJx0G,MAAMC,QAAQu0G,IAAQ0yB,EAASC,OAAO3yB,GAClCA,EAAIp+D,KAAK0wF,GAGXD,EAAMryB,EAAKsyB,EAAMA,EAAO,GAAK,KAAMA,EAAO,GAAK,KACxD,kECtGIl/I,EAAQuB,4CAUZ,IAAIi+I,GAAoBx/I,EAAS,cAA+Bw2I,KAC9D7/I,WAAAA,GAVF,IAA0C+L,EAYtCqD,SAASnP,YAZ6B8L,EAeGnB,IAfU9J,OAAOihC,eAe/B3/B,KAAM,OAf8C,CAAE6J,WAAYF,EAAEE,WAAYD,aAAcD,EAAEC,aAAcE,SAAUH,EAAEG,SAAUxG,MAAOqG,EAAE1M,YAAc0M,EAAE1M,YAAY2V,KAe9I5S,WAfwJ,IAClN,SAAyB+pB,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAe/KtL,CAAgBkC,KAAM,cAAc,GACpCA,KAAKmJ,KAAKu9I,gBAAgB1mJ,KAAK2mJ,UAAW3mJ,KAC5C,CACA09I,OAAAA,CAAOlzG,EAA6Bo8G,GAAc,IAAzCtjJ,EAAOujJ,GAAkBr8G,EAChC,MAAMpyB,EAAUyuI,EAAoBnoJ,OAAOkM,OAAO,CAAC,EAAGi8I,EAAmBD,GAAgBA,EACzF,OAAIz+B,EAAAA,EAAAA,SAAQ7kH,MACN8U,aAAO,EAAPA,EAAS0uI,aAAc9mJ,KAAK8mJ,YACvB,GAYJ9mJ,KAAKmJ,KAAK49I,WAAWzjJ,EAAO8U,EACrC,GAhCiCvZ,EAiCQoI,EAAOU,UAjCZoiB,EAiCuB,OAjCpBpgB,EAiC4B,CAACrB,EAAAA,QAjC1BwzD,EAiCoC,CAC9ElyD,cAAc,EACdC,YAAY,EACZC,UAAU,EACV7M,YAAa,MArCyC4vC,EAAI,CAAC,EAAUnuC,OAAOC,KAAKm9D,GAAGhsD,SAAQ,SAAUjR,GAAKguC,EAAEhuC,GAAKi9D,EAAEj9D,EAAI,IAAIguC,EAAEhjC,aAAegjC,EAAEhjC,WAAYgjC,EAAEjjC,eAAiBijC,EAAEjjC,cAAe,UAAWijC,GAAKA,EAAE5vC,eAAiB4vC,EAAE/iC,UAAW,GAAK+iC,EAAIljC,EAAExM,QAAQ+4D,UAAUtmD,QAAO,SAAUjG,EAAGmyD,GAAK,OAAOA,EAAEj9D,EAAGkrB,EAAGpgB,IAAMA,CAAG,GAAGkjC,GAiC/TrkC,OAjCwb,IAAWqkC,EAAE5vC,aAAeyB,OAAOihC,eAAe9gC,EAAGkrB,EAAG8iB,GAAI,MAAQA,EAsC3f5lC,GAtCJ,IAAmCpI,EAAGkrB,EAAGpgB,EAAGmyD,EAAYjvB,kECLpD5lC,EAAQuB,4CAUZ,IAAIw+I,GAAoB//I,EAAS,cAA+Bw2I,KAC9D7/I,WAAAA,GAVF,IAA0C+L,EAYtCqD,SAASnP,YAZ6B8L,EAeGnB,IAfU9J,OAAOihC,eAe/B3/B,KAAM,OAf8C,CAAE6J,WAAYF,EAAEE,WAAYD,aAAcD,EAAEC,aAAcE,SAAUH,EAAEG,SAAUxG,MAAOqG,EAAE1M,YAAc0M,EAAE1M,YAAY2V,KAe9I5S,WAfwJ,IAClN,SAAyB+pB,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAe/KtL,CAAgBkC,KAAM,cAAc,GACpCA,KAAKmJ,KAAKu9I,gBAAgB1mJ,KAAK2mJ,UAAW3mJ,KAC5C,CACA09I,OAAAA,CAAOlzG,EAA6Bo8G,GAAc,IAAzCtjJ,EAAOujJ,GAAkBr8G,EAChC,MAAMpyB,EAAUyuI,EAAoBnoJ,OAAOkM,OAAO,CAAC,EAAGi8I,EAAmBD,GAAgBA,EACzF,IAAIz+B,EAAAA,EAAAA,SAAQ7kH,GAAQ,CAClB,IAAI8U,aAAO,EAAPA,EAAS0uI,aAAc9mJ,KAAK8mJ,WAC9B,MAAO,GAET,QAAqB,IAAVxjJ,EACT,MAAM,IAAItG,MAAM,2CAEpB,CACA,OAAOgD,KAAKmJ,KAAK89I,WAAW3jJ,EAAO8U,EACrC,GA1BiCvZ,EA2BQoI,EAAOU,UA3BZoiB,EA2BuB,OA3BpBpgB,EA2B4B,CAACrB,EAAAA,QA3B1BwzD,EA2BoC,CAC9ElyD,cAAc,EACdC,YAAY,EACZC,UAAU,EACV7M,YAAa,MA/ByC4vC,EAAI,CAAC,EAAUnuC,OAAOC,KAAKm9D,GAAGhsD,SAAQ,SAAUjR,GAAKguC,EAAEhuC,GAAKi9D,EAAEj9D,EAAI,IAAIguC,EAAEhjC,aAAegjC,EAAEhjC,WAAYgjC,EAAEjjC,eAAiBijC,EAAEjjC,cAAe,UAAWijC,GAAKA,EAAE5vC,eAAiB4vC,EAAE/iC,UAAW,GAAK+iC,EAAIljC,EAAExM,QAAQ+4D,UAAUtmD,QAAO,SAAUjG,EAAGmyD,GAAK,OAAOA,EAAEj9D,EAAGkrB,EAAGpgB,IAAMA,CAAG,GAAGkjC,GA2B/TrkC,OA3Bwb,IAAWqkC,EAAE5vC,aAAeyB,OAAOihC,eAAe9gC,EAAGkrB,EAAG8iB,GAAI,MAAQA,EAgC3f5lC,GAhCJ,IAAmCpI,EAAGkrB,EAAGpgB,EAAGmyD,EAAYjvB,kECLpD5lC,EAAQuB,4CAUZ,IAAI0+I,GAAuBjgJ,EAAS,cAAkCw2I,KACpE7/I,WAAAA,GAVF,IAA0C+L,EAYtCqD,SAASnP,YAZ6B8L,EAeGnB,IAfU9J,OAAOihC,eAe/B3/B,KAAM,OAf8C,CAAE6J,WAAYF,EAAEE,WAAYD,aAAcD,EAAEC,aAAcE,SAAUH,EAAEG,SAAUxG,MAAOqG,EAAE1M,YAAc0M,EAAE1M,YAAY2V,KAe9I5S,WAfwJ,IAClN,SAAyB+pB,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAe/KtL,CAAgBkC,KAAM,cAAc,GACpCA,KAAKmJ,KAAKu9I,gBAAgB1mJ,KAAK2mJ,UAAW3mJ,KAC5C,CACA09I,OAAAA,CAAOlzG,EAA6Bo8G,GAAc,IAAzCtjJ,EAAOujJ,GAAkBr8G,EAChC,MAAMpyB,EAAUyuI,EAAoBnoJ,OAAOkM,OAAO,CAAC,EAAGi8I,EAAmBD,GAAgBA,EACzF,IAAIz+B,EAAAA,EAAAA,SAAQ7kH,GAAQ,CAClB,IAAI8U,aAAO,EAAPA,EAAS0uI,aAAc9mJ,KAAK8mJ,WAC9B,MAAO,GAET,QAAqB,IAAVxjJ,EACT,MAAM,IAAItG,MAAM,8CAEpB,CACA,OAAOgD,KAAKmJ,KAAKg+I,cAAc7jJ,EAAO8U,EACxC,GA1BiCvZ,EA2BQoI,EAAOU,UA3BZoiB,EA2BuB,OA3BpBpgB,EA2B4B,CAACrB,EAAAA,QA3B1BwzD,EA2BoC,CAC9ElyD,cAAc,EACdC,YAAY,EACZC,UAAU,EACV7M,YAAa,MA/ByC4vC,EAAI,CAAC,EAAUnuC,OAAOC,KAAKm9D,GAAGhsD,SAAQ,SAAUjR,GAAKguC,EAAEhuC,GAAKi9D,EAAEj9D,EAAI,IAAIguC,EAAEhjC,aAAegjC,EAAEhjC,WAAYgjC,EAAEjjC,eAAiBijC,EAAEjjC,cAAe,UAAWijC,GAAKA,EAAE5vC,eAAiB4vC,EAAE/iC,UAAW,GAAK+iC,EAAIljC,EAAExM,QAAQ+4D,UAAUtmD,QAAO,SAAUjG,EAAGmyD,GAAK,OAAOA,EAAEj9D,EAAGkrB,EAAGpgB,IAAMA,CAAG,GAAGkjC,GA2B/TrkC,OA3Bwb,IAAWqkC,EAAE5vC,aAAeyB,OAAOihC,eAAe9gC,EAAGkrB,EAAG8iB,GAAI,MAAQA,EAgC3f5lC,GAhCJ,IAAmCpI,EAAGkrB,EAAGpgB,EAAGmyD,EAAYjvB,kECLpD5lC,EAAQuB,4CAUZ,IAAI4+I,GAAsBngJ,EAAS,cAAiCw2I,KAClE7/I,WAAAA,GAVF,IAA0C+L,EAYtCqD,SAASnP,YAZ6B8L,EAeGnB,IAfU9J,OAAOihC,eAe/B3/B,KAAM,OAf8C,CAAE6J,WAAYF,EAAEE,WAAYD,aAAcD,EAAEC,aAAcE,SAAUH,EAAEG,SAAUxG,MAAOqG,EAAE1M,YAAc0M,EAAE1M,YAAY2V,KAe9I5S,WAfwJ,IAClN,SAAyB+pB,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAe/KtL,CAAgBkC,KAAM,cAAc,GACpCA,KAAKmJ,KAAKu9I,gBAAgB1mJ,KAAK2mJ,UAAW3mJ,KAC5C,CACA09I,OAAAA,CAAOlzG,EAA6Bo8G,GAAc,IAAzCtjJ,EAAOujJ,GAAkBr8G,EAChC,MAAMpyB,EAAUyuI,EAAoBnoJ,OAAOkM,OAAO,CAAC,EAAGi8I,EAAmBD,GAAgBA,EACzF,IAAIz+B,EAAAA,EAAAA,SAAQ7kH,GAAQ,CAClB,IAAI8U,aAAO,EAAPA,EAAS0uI,aAAc9mJ,KAAK8mJ,WAC9B,MAAO,GAET,QAAqB,IAAVxjJ,EACT,MAAM,IAAItG,MAAM,6CAEpB,CACA,OAAOgD,KAAKmJ,KAAKk+I,aAAa/jJ,EAAO8U,EACvC,GA1BiCvZ,EA2BQoI,EAAOU,UA3BZoiB,EA2BuB,OA3BpBpgB,EA2B4B,CAACrB,EAAAA,QA3B1BwzD,EA2BoC,CAC9ElyD,cAAc,EACdC,YAAY,EACZC,UAAU,EACV7M,YAAa,MA/ByC4vC,EAAI,CAAC,EAAUnuC,OAAOC,KAAKm9D,GAAGhsD,SAAQ,SAAUjR,GAAKguC,EAAEhuC,GAAKi9D,EAAEj9D,EAAI,IAAIguC,EAAEhjC,aAAegjC,EAAEhjC,WAAYgjC,EAAEjjC,eAAiBijC,EAAEjjC,cAAe,UAAWijC,GAAKA,EAAE5vC,eAAiB4vC,EAAE/iC,UAAW,GAAK+iC,EAAIljC,EAAExM,QAAQ+4D,UAAUtmD,QAAO,SAAUjG,EAAGmyD,GAAK,OAAOA,EAAEj9D,EAAGkrB,EAAGpgB,IAAMA,CAAG,GAAGkjC,GA2B/TrkC,OA3Bwb,IAAWqkC,EAAE5vC,aAAeyB,OAAOihC,eAAe9gC,EAAGkrB,EAAG8iB,GAAI,MAAQA,EAgC3f5lC,GAhCJ,IAAmCpI,EAAGkrB,EAAGpgB,EAAGmyD,EAAYjvB,kECLpD5lC,EAAQuB,4CAUZ,IAAI8+I,GAAwBrgJ,EAAS,cAAmCw2I,KACtE7/I,WAAAA,GAVF,IAA0C+L,EAYtCqD,SAASnP,YAZ6B8L,EAeGnB,IAfU9J,OAAOihC,eAe/B3/B,KAAM,OAf8C,CAAE6J,WAAYF,EAAEE,WAAYD,aAAcD,EAAEC,aAAcE,SAAUH,EAAEG,SAAUxG,MAAOqG,EAAE1M,YAAc0M,EAAE1M,YAAY2V,KAe9I5S,WAfwJ,IAClN,SAAyB+pB,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAe/KtL,CAAgBkC,KAAM,cAAc,GACpCA,KAAKmJ,KAAKu9I,gBAAgB1mJ,KAAK2mJ,UAAW3mJ,KAC5C,CACA09I,OAAAA,CAAOlzG,EAA6Bo8G,GAAc,IAAzCtjJ,EAAOujJ,GAAkBr8G,EAChC,MAAMpyB,EAAUyuI,EAAoBnoJ,OAAOkM,OAAO,CAAC,EAAGi8I,EAAmBD,GAAgBA,EACzF,IAAIz+B,EAAAA,EAAAA,SAAQ7kH,GAAQ,CAClB,IAAI8U,aAAO,EAAPA,EAAS0uI,aAAc9mJ,KAAK8mJ,WAC9B,MAAO,GAET,QAAqB,IAAVxjJ,EACT,MAAM,IAAItG,MAAM,+CAEpB,CACA,OAAOgD,KAAKmJ,KAAKo+I,eAAejkJ,EAAO8U,EACzC,GA1BiCvZ,EA2BQoI,EAAOU,UA3BZoiB,EA2BuB,OA3BpBpgB,EA2B4B,CAACrB,EAAAA,QA3B1BwzD,EA2BoC,CAC9ElyD,cAAc,EACdC,YAAY,EACZC,UAAU,EACV7M,YAAa,MA/ByC4vC,EAAI,CAAC,EAAUnuC,OAAOC,KAAKm9D,GAAGhsD,SAAQ,SAAUjR,GAAKguC,EAAEhuC,GAAKi9D,EAAEj9D,EAAI,IAAIguC,EAAEhjC,aAAegjC,EAAEhjC,WAAYgjC,EAAEjjC,eAAiBijC,EAAEjjC,cAAe,UAAWijC,GAAKA,EAAE5vC,eAAiB4vC,EAAE/iC,UAAW,GAAK+iC,EAAIljC,EAAExM,QAAQ+4D,UAAUtmD,QAAO,SAAUjG,EAAGmyD,GAAK,OAAOA,EAAEj9D,EAAGkrB,EAAGpgB,IAAMA,CAAG,GAAGkjC,GA2B/TrkC,OA3Bwb,IAAWqkC,EAAE5vC,aAAeyB,OAAOihC,eAAe9gC,EAAGkrB,EAAG8iB,GAAI,MAAQA,EAgC3f5lC,GAhCJ,IAAmCpI,EAAGkrB,EAAGpgB,EAAGmyD,EAAYjvB,kECLpD5lC,EAAQuB,4CAUZ,IAAIg/I,GAAoBvgJ,EAAS,cAA+Bw2I,KAC9D7/I,WAAAA,GAVF,IAA0C+L,EAYtCqD,SAASnP,YAZ6B8L,EAeGnB,IAfU9J,OAAOihC,eAe/B3/B,KAAM,OAf8C,CAAE6J,WAAYF,EAAEE,WAAYD,aAAcD,EAAEC,aAAcE,SAAUH,EAAEG,SAAUxG,MAAOqG,EAAE1M,YAAc0M,EAAE1M,YAAY2V,KAe9I5S,WAfwJ,IAClN,SAAyB+pB,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAe/KtL,CAAgBkC,KAAM,cAAc,GACpCA,KAAKmJ,KAAKu9I,gBAAgB1mJ,KAAK2mJ,UAAW3mJ,KAC5C,CACA09I,OAAAA,CAAOlzG,EAA6Bo8G,GAAc,IAAzCtjJ,EAAOujJ,GAAkBr8G,EAChC,MAAMpyB,EAAUyuI,EAAoBnoJ,OAAOkM,OAAO,CAAC,EAAGi8I,EAAmBD,GAAgBA,EACzF,IAAIz+B,EAAAA,EAAAA,SAAQ7kH,GAAQ,CAClB,IAAI8U,aAAO,EAAPA,EAAS0uI,aAAc9mJ,KAAK8mJ,WAC9B,MAAO,GAET,QAAqB,IAAVxjJ,EACT,MAAM,IAAItG,MAAM,2CAEpB,CACA,OAAOgD,KAAKmJ,KAAKs+I,WAAWnkJ,EAAO8U,EACrC,GA1BiCvZ,EA2BQoI,EAAOU,UA3BZoiB,EA2BuB,OA3BpBpgB,EA2B4B,CAACrB,EAAAA,QA3B1BwzD,EA2BoC,CAC9ElyD,cAAc,EACdC,YAAY,EACZC,UAAU,EACV7M,YAAa,MA/ByC4vC,EAAI,CAAC,EAAUnuC,OAAOC,KAAKm9D,GAAGhsD,SAAQ,SAAUjR,GAAKguC,EAAEhuC,GAAKi9D,EAAEj9D,EAAI,IAAIguC,EAAEhjC,aAAegjC,EAAEhjC,WAAYgjC,EAAEjjC,eAAiBijC,EAAEjjC,cAAe,UAAWijC,GAAKA,EAAE5vC,eAAiB4vC,EAAE/iC,UAAW,GAAK+iC,EAAIljC,EAAExM,QAAQ+4D,UAAUtmD,QAAO,SAAUjG,EAAGmyD,GAAK,OAAOA,EAAEj9D,EAAGkrB,EAAGpgB,IAAMA,CAAG,GAAGkjC,GA2B/TrkC,OA3Bwb,IAAWqkC,EAAE5vC,aAAeyB,OAAOihC,eAAe9gC,EAAGkrB,EAAG8iB,GAAI,MAAQA,EAgC3f5lC,GAhCJ,IAAmCpI,EAAGkrB,EAAGpgB,EAAGmyD,EAAYjvB,kECLpD5lC,EAAQuB,4CAUZ,IAAIk/I,GAAWzgJ,EAAS,cAAsBw2I,KAC5C7/I,WAAAA,GAVF,IAA0C+L,EAYtCqD,SAASnP,YAZ6B8L,EAeGnB,IAfU9J,OAAOihC,eAe/B3/B,KAAM,OAf8C,CAAE6J,WAAYF,EAAEE,WAAYD,aAAcD,EAAEC,aAAcE,SAAUH,EAAEG,SAAUxG,MAAOqG,EAAE1M,YAAc0M,EAAE1M,YAAY2V,KAe9I5S,WAfwJ,IAClN,SAAyB+pB,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAe/KtL,CAAgBkC,KAAM,cAAc,GACpCA,KAAKmJ,KAAKu9I,gBAAgB1mJ,KAAK2mJ,UAAW3mJ,KAC5C,CACA09I,OAAAA,CAAOlzG,EAA6Bo8G,GAAc,IAAzCtjJ,EAAOujJ,GAAkBr8G,EAChC,MAAMpyB,EAAUyuI,EAAoBnoJ,OAAOkM,OAAO,CAAC,EAAGi8I,EAAmBD,GAAgBA,EACzF,IAAIz+B,EAAAA,EAAAA,SAAQ7kH,GAAQ,CAClB,IAAI8U,aAAO,EAAPA,EAAS0uI,aAAc9mJ,KAAK8mJ,WAC9B,MAAO,GAET,QAAqB,IAAVxjJ,EACT,MAAM,IAAItG,MAAM,iCAEpB,CACA,OAAOgD,KAAKmJ,KAAKC,EAAE9F,EAAO8U,EAC5B,GA1BiCvZ,EA2BQoI,EAAOU,UA3BZoiB,EA2BuB,OA3BpBpgB,EA2B4B,CAACrB,EAAAA,QA3B1BwzD,EA2BoC,CAC9ElyD,cAAc,EACdC,YAAY,EACZC,UAAU,EACV7M,YAAa,MA/ByC4vC,EAAI,CAAC,EAAUnuC,OAAOC,KAAKm9D,GAAGhsD,SAAQ,SAAUjR,GAAKguC,EAAEhuC,GAAKi9D,EAAEj9D,EAAI,IAAIguC,EAAEhjC,aAAegjC,EAAEhjC,WAAYgjC,EAAEjjC,eAAiBijC,EAAEjjC,cAAe,UAAWijC,GAAKA,EAAE5vC,eAAiB4vC,EAAE/iC,UAAW,GAAK+iC,EAAIljC,EAAExM,QAAQ+4D,UAAUtmD,QAAO,SAAUjG,EAAGmyD,GAAK,OAAOA,EAAEj9D,EAAGkrB,EAAGpgB,IAAMA,CAAG,GAAGkjC,GA2B/TrkC,OA3Bwb,IAAWqkC,EAAE5vC,aAAeyB,OAAOihC,eAAe9gC,EAAGkrB,EAAG8iB,GAAI,MAAQA,EAgC3f5lC,GAhCJ,IAAmCpI,EAAGkrB,EAAGpgB,EAAGmyD,EAAYjvB,wJCFxD,iBCKe,MAAM86G,EACnB,WAAIvvI,GACF,MAAO,EACT,EAXF,IAAyB2R,EAAGpgB,EAAGP,EAAN2gB,EAaT49H,EAbev+I,OAaQ,GAbKO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAApBnyI,EAaG,WAbuCogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,ECQ9J,MAAMw+I,UAAmBC,EACtCz2B,MAAAA,CAAOjoH,GAAwB,QAAAsuI,EAAA55I,UAAAJ,OAAA+sC,EAAA,IAAAnrB,MAAAo4H,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAAltG,EAAAktG,EAAA,GAAA75I,UAAA65I,GAAA,IAAdp0I,EAAOwkJ,GAAKt9G,EAC3B,OAAOrhC,EAAK49I,WAAWzjJ,EAAOwkJ,EAChC,GAXF,SAAyB/9H,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAanLtL,CAAgB8pJ,EAAY,OAAQ,QCJrB,MAAMG,UAAmBF,EACtCz2B,MAAAA,CAAOjoH,GAAwB,QAAAsuI,EAAA55I,UAAAJ,OAAA+sC,EAAA,IAAAnrB,MAAAo4H,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAAltG,EAAAktG,EAAA,GAAA75I,UAAA65I,GAAA,IAAdp0I,EAAOwkJ,GAAKt9G,EAC3B,OAAOrhC,EAAK89I,WAAW3jJ,EAAOwkJ,EAChC,GAZF,SAAyB/9H,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAcnLtL,CAAgBiqJ,EAAY,OAAQ,uBCRpC,MAAMC,EAAU,CACd,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,UAEDC,EAAe,YACfC,EAAgB,aAwCP,MAAMC,UAAsBN,EAMzCz2B,MAAAA,CAAOjoH,EAAMi/I,EAAchwI,GACzB,MAAMiwI,EAAajwI,GAAWA,EAAQqwB,SAChC6/G,EAAiBD,EArC3B,SAAuBE,GACrB,GAAsB,iBAAXA,EACT,OAEF,MAAMC,EAAc,CAAC,EAmBrB,OAlBA9pJ,OAAOC,KAAK4pJ,GAAQz4I,SAAQtI,IAC1B,MAAMlE,EAAQilJ,EAAO/gJ,IACjB6gJ,EAAAA,EAAAA,YAAW/kJ,GAObklJ,EAAYhhJ,GAAOlE,EAAMmlJ,SAGzBD,EAAYhhJ,GAFc,iBAAVlE,EAvBtB,SAA0BA,GACxB,OAAK2kJ,EAAaj3I,KAAK1N,GAGhBA,EAAM4K,QAAQg6I,GAAeQ,GAC3BV,EAAQU,KAHRplJ,CAKX,CAkByBqlJ,CAAiBrlJ,GAGjBA,CACrB,IAEKklJ,CACT,CAawCI,CAAcxwI,GAAWA,EACvDq6B,EAAO21G,GAAwC,iBAAjBA,EAA4BA,EAAe,CAC7Ep2I,GAAIo2I,EACJS,eAAgBT,GAEZ/nJ,EAAS8I,EAAKg+I,cAAc10G,EAAM61G,EAAgB,CACtDQ,WAAW,IAEb,OAAOT,GAAa5/G,EAAAA,EAAAA,UAASpoC,GAAUA,CACzC,GAzEF,SAAyB0pB,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CA2EnLtL,CAAgBqqJ,EAAe,OAAQ,WClExB,MAAMY,UAAqBlB,EACxCz2B,MAAAA,CAAOjoH,GAAwB,QAAAsuI,EAAA55I,UAAAJ,OAAA+sC,EAAA,IAAAnrB,MAAAo4H,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAAltG,EAAAktG,EAAA,GAAA75I,UAAA65I,GAAA,IAAdp0I,EAAOwkJ,GAAKt9G,EAC3B,OAAOrhC,EAAKk+I,aAAa/jJ,EAAOwkJ,EAClC,GAZF,SAAyB/9H,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAcnLtL,CAAgBirJ,EAAc,OAAQ,UCKvB,MAAMC,UAAuBnB,EAC1Cz2B,MAAAA,CAAOjoH,EAAM7F,EAAO2lJ,GAElB,MAAM,OACJ73B,GACE63B,EACJ,IAAI3+I,EAAO2+I,EAAc3+I,KACrBw9I,EAAOmB,EAKX,OAJK3+I,GAAQ8mH,GAAUjoH,EAAK+/I,QAAQC,WAAarB,EAAO3+I,EAAK+/I,QAAQC,SAAS/3B,MAC5E9mH,EAAOw9I,EAAKx9I,MAGPnB,EAAKigJ,mBAAmB9lJ,EAAOgH,EAAMw9I,EAC9C,GAhCF,SAAyB/9H,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAkCnLtL,CAAgBkrJ,EAAgB,OAAQ,YCzBzB,MAAMK,UAAmBxB,EACtCz2B,MAAAA,CAAOjoH,GAAwB,QAAAsuI,EAAA55I,UAAAJ,OAAA+sC,EAAA,IAAAnrB,MAAAo4H,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAAltG,EAAAktG,EAAA,GAAA75I,UAAA65I,GAAA,IAAdp0I,EAAOwkJ,GAAKt9G,EAC3B,OAAOrhC,EAAKs+I,WAAWnkJ,EAAOwkJ,EAChC,GAZF,SAAyB/9H,EAAGpgB,EAAGP,IAAaO,EAC5C,SAAwBP,GAAK,IAAIvK,EACjC,SAAsBuK,EAAGO,GAAK,GAAI,iBAAmBP,IAAMA,EAAG,OAAOA,EAAG,IAAI2gB,EAAI3gB,EAAEsyI,OAAOC,aAAc,QAAI,IAAW5xH,EAAG,CAAE,IAAIlrB,EAAIkrB,EAAEnX,KAAKxJ,EAAGO,UAAiB,GAAI,iBAAmB9K,EAAG,OAAOA,EAAG,MAAM,IAAI+8I,UAAU,+CAAiD,CAAE,OAAyBhjB,OAAiBxvH,EAAI,CADlRyyI,CAAazyI,GAAc,MAAO,iBAAmBvK,EAAIA,EAAIA,EAAI,EAAI,CAD1Di9I,CAAenyI,MAAOogB,EAAIrrB,OAAOihC,eAAe5V,EAAGpgB,EAAG,CAAErG,MAAO8F,EAAGS,YAAY,EAAID,cAAc,EAAIE,UAAU,IAAQigB,EAAEpgB,GAAKP,CAAM,CAcnLtL,CAAgBurJ,EAAY,OAAQ,YCdzBC,ECAAC,EAwCAC,aAQJ,SAASC,EAAiBpH,GAC7B,OAAOA,EAAGxxI,OAAS04I,EAAKG,OAC5B,CACO,SAASC,EAAkBtH,GAC9B,OAAOA,EAAGxxI,OAAS04I,EAAKK,QAC5B,CACO,SAASC,EAAgBxH,GAC5B,OAAOA,EAAGxxI,OAAS04I,EAAKttG,MAC5B,CACO,SAAS6tG,EAAczH,GAC1B,OAAOA,EAAGxxI,OAAS04I,EAAKvtG,IAC5B,CACO,SAAS+tG,EAAc1H,GAC1B,OAAOA,EAAGxxI,OAAS04I,EAAKjmH,IAC5B,CACO,SAAS0mH,EAAgB3H,GAC5B,OAAOA,EAAGxxI,OAAS04I,EAAKpxH,MAC5B,CACO,SAAS8xH,EAAgB5H,GAC5B,OAAOA,EAAGxxI,OAAS04I,EAAKW,MAC5B,CACO,SAASC,EAAe9H,GAC3B,OAAOA,EAAGxxI,OAAS04I,EAAKa,KAC5B,CACO,SAASC,EAAahI,GACzB,OAAOA,EAAGxxI,OAAS04I,EAAKe,GAC5B,CACO,SAASC,EAAiBlI,GAC7B,SAAUA,GAAoB,iBAAPA,GAAmBA,EAAGxxI,OAAS24I,EAAcvtG,OACxE,CACO,SAASuuG,EAAmBnI,GAC/B,SAAUA,GAAoB,iBAAPA,GAAmBA,EAAGxxI,OAAS24I,EAAciB,SACxE,ED/EA,SAAWnB,GAEPA,EAAUA,EAAyC,8BAAI,GAAK,gCAE5DA,EAAUA,EAA0B,eAAI,GAAK,iBAE7CA,EAAUA,EAA8B,mBAAI,GAAK,qBAEjDA,EAAUA,EAAgC,qBAAI,GAAK,uBAEnDA,EAAUA,EAAiC,sBAAI,GAAK,wBAEpDA,EAAUA,EAAiC,sBAAI,GAAK,wBAEpDA,EAAUA,EAAmC,wBAAI,GAAK,0BAEtDA,EAAUA,EAAsC,2BAAI,GAAK,6BAEzDA,EAAUA,EAAkC,uBAAI,GAAK,yBAErDA,EAAUA,EAAqC,0BAAI,IAAM,4BAEzDA,EAAUA,EAA4C,iCAAI,IAAM,mCAEhEA,EAAUA,EAA0C,+BAAI,IAAM,iCAE9DA,EAAUA,EAA+C,oCAAI,IAAM,sCAEnEA,EAAUA,EAAgD,qCAAI,IAAM,uCAEpEA,EAAUA,EAA2C,gCAAI,IAAM,kCAE/DA,EAAUA,EAA2C,gCAAI,IAAM,kCAE/DA,EAAUA,EAAoD,yCAAI,IAAM,2CAKxEA,EAAUA,EAAoD,yCAAI,IAAM,2CAExEA,EAAUA,EAA4C,iCAAI,IAAM,mCAKhEA,EAAUA,EAA8C,mCAAI,IAAM,qCAIlEA,EAAUA,EAA8C,mCAAI,IAAM,qCAElEA,EAAUA,EAAgC,qBAAI,IAAM,uBAEpDA,EAAUA,EAAuB,YAAI,IAAM,cAE3CA,EAAUA,EAA4B,iBAAI,IAAM,mBAEhDA,EAAUA,EAAiC,sBAAI,IAAM,wBAErDA,EAAUA,EAAwB,aAAI,IAAM,cAC/C,CA7DD,CA6DGA,IAAcA,EAAY,CAAC,IC7D9B,SAAWC,GAIPA,EAAKA,EAAc,QAAI,GAAK,UAI5BA,EAAKA,EAAe,SAAI,GAAK,WAI7BA,EAAKA,EAAa,OAAI,GAAK,SAI3BA,EAAKA,EAAW,KAAI,GAAK,OAIzBA,EAAKA,EAAW,KAAI,GAAK,OAIzBA,EAAKA,EAAa,OAAI,GAAK,SAI3BA,EAAKA,EAAa,OAAI,GAAK,SAK3BA,EAAKA,EAAY,MAAI,GAAK,QAI1BA,EAAKA,EAAU,IAAI,GAAK,KAC3B,CAtCD,CAsCGA,IAASA,EAAO,CAAC,IAEpB,SAAWC,GACPA,EAAcA,EAAsB,OAAI,GAAK,SAC7CA,EAAcA,EAAwB,SAAI,GAAK,UAClD,CAHD,CAGGA,IAAkBA,EAAgB,CAAC,IC3C/B,IAAIkB,EAAwB,+CCI/BC,EAAkB,4KAOf,SAASC,EAAsBC,GAClC,IAAIxqJ,EAAS,CAAC,EA0Gd,OAzGAwqJ,EAAS38I,QAAQy8I,GAAiB,SAAUnyI,GACxC,IAAIsrF,EAAMtrF,EAAM/a,OAChB,OAAQ+a,EAAM,IAEV,IAAK,IACDnY,EAAOyqJ,IAAc,IAARhnD,EAAY,OAAiB,IAARA,EAAY,SAAW,QACzD,MAEJ,IAAK,IACDzjG,EAAOkuH,KAAe,IAARzqB,EAAY,UAAY,UACtC,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,MAAM,IAAIinD,WAAW,gEAEzB,IAAK,IACL,IAAK,IACD,MAAM,IAAIA,WAAW,8CAEzB,IAAK,IACL,IAAK,IACD1qJ,EAAOmuH,MAAQ,CAAC,UAAW,UAAW,QAAS,OAAQ,UAAU1qB,EAAM,GACvE,MAEJ,IAAK,IACL,IAAK,IACD,MAAM,IAAIinD,WAAW,2CACzB,IAAK,IACD1qJ,EAAOouH,IAAM,CAAC,UAAW,WAAW3qB,EAAM,GAC1C,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACD,MAAM,IAAIinD,WAAW,6DAEzB,IAAK,IACD1qJ,EAAO2qJ,QAAkB,IAARlnD,EAAY,OAAiB,IAARA,EAAY,SAAW,QAC7D,MACJ,IAAK,IACD,GAAIA,EAAM,EACN,MAAM,IAAIinD,WAAW,iDAEzB1qJ,EAAO2qJ,QAAU,CAAC,QAAS,OAAQ,SAAU,SAASlnD,EAAM,GAC5D,MACJ,IAAK,IACD,GAAIA,EAAM,EACN,MAAM,IAAIinD,WAAW,iDAEzB1qJ,EAAO2qJ,QAAU,CAAC,QAAS,OAAQ,SAAU,SAASlnD,EAAM,GAC5D,MAEJ,IAAK,IACDzjG,EAAO4qJ,QAAS,EAChB,MACJ,IAAK,IACL,IAAK,IACD,MAAM,IAAIF,WAAW,8DAEzB,IAAK,IACD1qJ,EAAO6qJ,UAAY,MACnB7qJ,EAAOw7C,KAAO,CAAC,UAAW,WAAWioD,EAAM,GAC3C,MACJ,IAAK,IACDzjG,EAAO6qJ,UAAY,MACnB7qJ,EAAOw7C,KAAO,CAAC,UAAW,WAAWioD,EAAM,GAC3C,MACJ,IAAK,IACDzjG,EAAO6qJ,UAAY,MACnB7qJ,EAAOw7C,KAAO,CAAC,UAAW,WAAWioD,EAAM,GAC3C,MACJ,IAAK,IACDzjG,EAAO6qJ,UAAY,MACnB7qJ,EAAOw7C,KAAO,CAAC,UAAW,WAAWioD,EAAM,GAC3C,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACD,MAAM,IAAIinD,WAAW,oEAEzB,IAAK,IACD1qJ,EAAOy7C,OAAS,CAAC,UAAW,WAAWgoD,EAAM,GAC7C,MAEJ,IAAK,IACDzjG,EAAO07C,OAAS,CAAC,UAAW,WAAW+nD,EAAM,GAC7C,MACJ,IAAK,IACL,IAAK,IACD,MAAM,IAAIinD,WAAW,8DAEzB,IAAK,IACD1qJ,EAAO8qJ,aAAernD,EAAM,EAAI,QAAU,OAC1C,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,MAAM,IAAIinD,WAAW,wEAE7B,MAAO,EACX,IACO1qJ,CACX,CCvHO,IAAI+qJ,EAAoB,wCC8B3BC,EAA2B,mCAC3BC,EAA8B,wBAC9BC,EAAsB,0BACtBC,EAA8B,SAClC,SAASC,EAA0BnuJ,GAC/B,IAAI+C,EAAS,CAAC,EA6Bd,MA5B4B,MAAxB/C,EAAIA,EAAIG,OAAS,GACjB4C,EAAOqrJ,iBAAmB,gBAEG,MAAxBpuJ,EAAIA,EAAIG,OAAS,KACtB4C,EAAOqrJ,iBAAmB,iBAE9BpuJ,EAAI4Q,QAAQo9I,GAA6B,SAAU/L,EAAGoM,EAAIC,GAoBtD,MAlBkB,iBAAPA,GACPvrJ,EAAOwrJ,yBAA2BF,EAAGluJ,OACrC4C,EAAOyrJ,yBAA2BH,EAAGluJ,QAGzB,MAAPmuJ,EACLvrJ,EAAOwrJ,yBAA2BF,EAAGluJ,OAGtB,MAAVkuJ,EAAG,GACRtrJ,EAAOyrJ,yBAA2BH,EAAGluJ,QAIrC4C,EAAOwrJ,yBAA2BF,EAAGluJ,OACrC4C,EAAOyrJ,yBACHH,EAAGluJ,QAAwB,iBAAPmuJ,EAAkBA,EAAGnuJ,OAAS,IAEnD,EACX,IACO4C,CACX,CACA,SAAS0rJ,EAAUzuJ,GACf,OAAQA,GACJ,IAAK,YACD,MAAO,CACH0uJ,YAAa,QAErB,IAAK,kBACL,IAAK,KACD,MAAO,CACHC,aAAc,cAEtB,IAAK,cACL,IAAK,KACD,MAAO,CACHD,YAAa,UAErB,IAAK,yBACL,IAAK,MACD,MAAO,CACHA,YAAa,SACbC,aAAc,cAEtB,IAAK,mBACL,IAAK,KACD,MAAO,CACHD,YAAa,cAErB,IAAK,8BACL,IAAK,MACD,MAAO,CACHA,YAAa,aACbC,aAAc,cAEtB,IAAK,aACL,IAAK,KACD,MAAO,CACHD,YAAa,SAG7B,CACA,SAASE,EAAyCC,GAE9C,IAAI9rJ,EAaJ,GAZgB,MAAZ8rJ,EAAK,IAA0B,MAAZA,EAAK,IACxB9rJ,EAAS,CACL+rJ,SAAU,eAEdD,EAAOA,EAAKhvJ,MAAM,IAED,MAAZgvJ,EAAK,KACV9rJ,EAAS,CACL+rJ,SAAU,cAEdD,EAAOA,EAAKhvJ,MAAM,IAElBkD,EAAQ,CACR,IAAI2rJ,EAAcG,EAAKhvJ,MAAM,EAAG,GAShC,GARoB,OAAhB6uJ,GACA3rJ,EAAO2rJ,YAAc,SACrBG,EAAOA,EAAKhvJ,MAAM,IAEG,OAAhB6uJ,IACL3rJ,EAAO2rJ,YAAc,aACrBG,EAAOA,EAAKhvJ,MAAM,KAEjBquJ,EAA4Bx6I,KAAKm7I,GAClC,MAAM,IAAInvJ,MAAM,6CAEpBqD,EAAOgsJ,qBAAuBF,EAAK1uJ,MACvC,CACA,OAAO4C,CACX,CACA,SAASisJ,EAAqBC,GAG1B,OADeR,EAAUQ,IADZ,CAAC,CAMlB,CAIO,SAASC,EAAoBC,GAEhC,IADA,IAAIpsJ,EAAS,CAAC,EACLqsJ,EAAK,EAAGC,EAAWF,EAAQC,EAAKC,EAASlvJ,OAAQivJ,IAAM,CAC5D,IAAIziC,EAAQ0iC,EAASD,GACrB,OAAQziC,EAAMkiC,MACV,IAAK,UACL,IAAK,IACD9rJ,EAAOytC,MAAQ,UACf,SACJ,IAAK,QACDztC,EAAOytC,MAAQ,UACfztC,EAAOusJ,MAAQ,IACf,SACJ,IAAK,WACDvsJ,EAAOytC,MAAQ,WACfztC,EAAO87C,SAAW8tE,EAAM7xG,QAAQ,GAChC,SACJ,IAAK,YACL,IAAK,KACD/X,EAAOwsJ,aAAc,EACrB,SACJ,IAAK,oBACL,IAAK,IACDxsJ,EAAOg8C,sBAAwB,EAC/B,SACJ,IAAK,eACL,IAAK,OACDh8C,EAAOytC,MAAQ,OACfztC,EAAOiK,KAAqB2/G,EAAM7xG,QAAQ,GArJ1ClK,QAAQ,UAAW,IAsJnB,SACJ,IAAK,gBACL,IAAK,IACD7N,EAAO+rJ,SAAW,UAClB/rJ,EAAOysJ,eAAiB,QACxB,SACJ,IAAK,eACL,IAAK,KACDzsJ,EAAO+rJ,SAAW,UAClB/rJ,EAAOysJ,eAAiB,OACxB,SACJ,IAAK,aACDzsJ,GAAS0sJ,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,UAAS,CAAC,EAAG1sJ,GAAS,CAAE+rJ,SAAU,eAAiBniC,EAAM7xG,QAAQxI,QAAO,SAAUk5B,EAAKyjH,GAAO,OAAQQ,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,UAAS,CAAC,EAAGjkH,GAAMwjH,EAAqBC,GAAQ,GAAG,CAAC,IAC9L,SACJ,IAAK,cACDlsJ,GAAS0sJ,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,UAAS,CAAC,EAAG1sJ,GAAS,CAAE+rJ,SAAU,gBAAkBniC,EAAM7xG,QAAQxI,QAAO,SAAUk5B,EAAKyjH,GAAO,OAAQQ,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,UAAS,CAAC,EAAGjkH,GAAMwjH,EAAqBC,GAAQ,GAAG,CAAC,IAC/L,SACJ,IAAK,kBACDlsJ,EAAO+rJ,SAAW,WAClB,SAEJ,IAAK,oBACD/rJ,EAAO2sJ,gBAAkB,eACzB3sJ,EAAO4sJ,YAAc,SACrB,SACJ,IAAK,mBACD5sJ,EAAO2sJ,gBAAkB,OACzB3sJ,EAAO4sJ,YAAc,QACrB,SACJ,IAAK,uBACD5sJ,EAAO2sJ,gBAAkB,OACzB3sJ,EAAO4sJ,YAAc,OACrB,SACJ,IAAK,sBACD5sJ,EAAO2sJ,gBAAkB,SACzB,SACJ,IAAK,QACD3sJ,EAAOusJ,MAAQ34I,WAAWg2G,EAAM7xG,QAAQ,IACxC,SACJ,IAAK,sBACD/X,EAAO6sJ,aAAe,QACtB,SACJ,IAAK,wBACD7sJ,EAAO6sJ,aAAe,OACtB,SACJ,IAAK,qBACD7sJ,EAAO6sJ,aAAe,QACtB,SACJ,IAAK,mBACD7sJ,EAAO6sJ,aAAe,SACtB,SACJ,IAAK,0BACD7sJ,EAAO6sJ,aAAe,WACtB,SACJ,IAAK,0BACD7sJ,EAAO6sJ,aAAe,YACtB,SACJ,IAAK,wBACD7sJ,EAAO6sJ,aAAe,aACtB,SAEJ,IAAK,gBACD,GAAIjjC,EAAM7xG,QAAQ3a,OAAS,EACvB,MAAM,IAAIstJ,WAAW,4DAEzB9gC,EAAM7xG,QAAQ,GAAGlK,QAAQq9I,GAAqB,SAAUhM,EAAGoM,EAAIC,EAAIuB,EAAIC,EAAIC,GACvE,GAAI1B,EACAtrJ,EAAOgsJ,qBAAuBT,EAAGnuJ,WAEhC,IAAI0vJ,GAAMC,EACX,MAAM,IAAIpwJ,MAAM,sDAEf,GAAIqwJ,EACL,MAAM,IAAIrwJ,MAAM,mDACpB,CACA,MAAO,EACX,IACA,SAGR,GAAIwuJ,EAA4Bx6I,KAAKi5G,EAAMkiC,MACvC9rJ,EAAOgsJ,qBAAuBpiC,EAAMkiC,KAAK1uJ,YAG7C,GAAI4tJ,EAAyBr6I,KAAKi5G,EAAMkiC,MAAxC,CAII,GAAIliC,EAAM7xG,QAAQ3a,OAAS,EACvB,MAAM,IAAIstJ,WAAW,iEAEzB9gC,EAAMkiC,KAAKj+I,QAAQm9I,GAA0B,SAAU9L,EAAGoM,EAAIC,EAAIuB,EAAIC,EAAIC,GAkBtE,MAhBW,MAAPzB,EACAvrJ,EAAO+7C,sBAAwBuvG,EAAGluJ,OAG7B0vJ,GAAgB,MAAVA,EAAG,GACd9sJ,EAAOg8C,sBAAwB8wG,EAAG1vJ,OAG7B2vJ,GAAMC,GACXhtJ,EAAO+7C,sBAAwBgxG,EAAG3vJ,OAClC4C,EAAOg8C,sBAAwB+wG,EAAG3vJ,OAAS4vJ,EAAG5vJ,SAG9C4C,EAAO+7C,sBAAwBuvG,EAAGluJ,OAClC4C,EAAOg8C,sBAAwBsvG,EAAGluJ,QAE/B,EACX,IACA,IAAI8uJ,EAAMtiC,EAAM7xG,QAAQ,GAEZ,MAARm0I,EACAlsJ,GAAS0sJ,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,UAAS,CAAC,EAAG1sJ,GAAS,CAAEitJ,oBAAqB,mBAE1Df,IACLlsJ,GAAS0sJ,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,UAAS,CAAC,EAAG1sJ,GAASorJ,EAA0Bc,IAG1E,MAEA,GAAIjB,EAA4Bt6I,KAAKi5G,EAAMkiC,MACvC9rJ,GAAS0sJ,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,UAAS,CAAC,EAAG1sJ,GAASorJ,EAA0BxhC,EAAMkiC,WAD5E,CAIA,IAAIoB,EAAWxB,EAAU9hC,EAAMkiC,MAC3BoB,IACAltJ,GAAS0sJ,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,UAAS,CAAC,EAAG1sJ,GAASktJ,IAE5C,IAAIC,EAAsCtB,EAAyCjiC,EAAMkiC,MACrFqB,IACAntJ,GAAS0sJ,EAAAA,EAAAA,WAASA,EAAAA,EAAAA,UAAS,CAAC,EAAG1sJ,GAASmtJ,GAP5C,CASJ,CACA,OAAOntJ,CACX,CCzTO,ICFHotJ,EDEOC,GAAW,CAClB,MAAO,CACH,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KACA,KAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,KACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KACA,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,KACA,KACA,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,IACA,KACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,IACA,KACA,KACA,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,KACA,MAEJ,GAAM,CACF,IACA,MAEJ,GAAM,CACF,KAEJ,GAAM,CACF,KAEJ,GAAM,CACF,IACA,KACA,IACA,MAEJ,GAAM,CACF,IACA,IACA,MAEJ,GAAM,CACF,I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pBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,KACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,KAC7B,CEvvCA,SAASqtJ,GAAcC,GACnBA,EAAIjnJ,SAAQ,SAAUuyI,GAElB,UADOA,EAAG9xG,SACNy5G,EAAgB3H,IAAO4H,EAAgB5H,GACvC,IAAK,IAAIx0H,KAAKw0H,EAAGjqI,eACNiqI,EAAGjqI,QAAQyV,GAAG0iB,SACrBumH,GAAczU,EAAGjqI,QAAQyV,GAAGvqB,YAG3BumJ,EAAgBxH,IAAOkI,EAAiBlI,EAAGv0G,SAG1Cg8G,EAAczH,IAAO0H,EAAc1H,KACzCmI,EAAmBnI,EAAGv0G,cAHfu0G,EAAGv0G,MAAMyC,SAMX85G,EAAahI,IAClByU,GAAczU,EAAGjwI,SAEzB,GACJ,CACO,SAASM,GAAMyO,EAAS2mI,QACd,IAATA,IAAmBA,EAAO,CAAC,GAC/BA,GAAOiF,EAAAA,EAAAA,UAAS,C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AAKA,GAAG,EAAG,IAAM,IAAFA,EAAQ,GAAI,CAIrJ,IA4FIs4M,GAAsBjN,GA5FEgN,GAAO,CAElC,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAGA,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAEA,QACA,MACA,IACA,QACA,QACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,QACA,SACA,MACA,SAEA,IACA,SACA,SACA,MACA,QACA,QACA,MACA,IACA,MACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,QACA,SACA,SACA,QACA,QAGA,EACA,SACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAKGnE,GAAO,CACV,EAAM,SACN,EAAM,UACN,GAAM,UACN,GAAM,QACN,GAAM,SACN,GAAM,QACN,GAAM,OACN,GAAM,gBACN,IAAM,SAGHqE,GAAQ,CACX,SAAiB,EACjB,UAAiB,EACjB,UAAiB,GACjB,QAAiB,GACjB,SAAiB,GACjB,QAAiB,GACjB,OAAiB,GACjB,gBAAiB,GACjB,QAAiB,KAGdC,GAAgB,CACnB,yBACA,kBACA,mBACA,gBACA,iBACA,iBACA,mBACA,qBACA,iBACA,kBACA,sBACA,wBACA,oBACA,yBAOGC,GAAgC,CAEnC,6EAA8E,YAC9E,uDAAwD,YACxD,0DAA2D,YAC3D,uDAAwD,YACxD,gFAAiF,YAGjF,4EAA6E,SAC7E,qCAAsC,SACtC,sCAAuC,OAGvC,6EAA8E,SAC9E,sCAAuC,SAGvC,0CAA2C,SAC3C,sCAAuC,SACvC,0CAA2C,OAC3C,sCAAuC,OAGvC,8EAA+E,UAC/E,uCAAwC,UAGxC,gFAAiF,OACjF,yCAA0C,OAG1C,yEAA0E,SAC1E,kCAAmC,SAGnC,6DAA8D,YAC9D,sEAAuE,YACvE,wEAAyE,WAGzE,wEAAyE,OACzE,6EAA8E,OAG9E,2EAA4E,WAC5E,oCAAqC,WACrC,gDAAiD,mBACjD,sCAAuC,SAGvC,g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MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,cAAeyB,EAAE80J,GAC7B,IAAQ,CAAEv2J,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,cAAeyB,EA7N5B,SAA2B2wC,EAAMzwG,EAAQqqJ,GACxC,GAAIA,EAAKgpE,QAAQrzN,EAAS,IAA1B,CACA,IAAIuU,EAAKk8F,EAAK6tF,WAAW,GAKzB,OAJA7tF,EAAKlN,GAAK,GACVkN,EAAKlN,GAAK,EACVkN,EAAKlN,GAAK,EAEH,CAAChvF,EADCk8F,EAAK6tF,WAAWt+L,EAAS,GAAI,QALF,CAOrC,GAsNC,KAAQ,CAAEq+D,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,KAAQ,CAAEA,EAAE,MACZ,MAAQ,CAAEA,EAAE,MACZ,MAAQ,CAAEA,EAAE,MACZ,MAAQ,CAAEA,EAAE,MACZ,MAAQ,CAAEA,EAAE,MACZ,MAAQ,CAAEA,EAAE,KAITw0J,EAAa,CAChB,EAAM,YACN,EAAM,SACN,EAAM,SACN,EAAM,WACN,GAAM,iBACN,GAAM,cACN,GAAM,cACN,GAAM,WAGN,GAAQ,OACR,GAAQ,iBACR,GAAQ,cACR,GAAQ,mBACR,IAAQ,gCACR,IAAQ,KACR,IAAQ,QACR,IAAQ,SAGT,SAASK,EAAcnwK,GACtB,IAAIshK,EAAMthK,EAAEu7I,WAAW,GACnBD,EAAQt7I,EAAEu7I,WAAW,GAEzB,GAAY,GAATD,EAAY,KAAM,+BAAiCA,EAAMzyL,SAAS,IACrE,OAAOm3C,EAAEu7I,WAAW+lB,EAAK,YAC1B,CAoLA,MAAO,CACN6Q,aAr+BD,SAAsBzb,EAAkBpvD,GACvC,IAAI75B,EAAI65B,GAAQ,CAAC,EAEjB,IADI75B,EAAE62F,UAAY,GAAGx1B,GAAQrhE,EAAE62F,UAClB,UAAV72F,EAAEp9G,KAAkB,MAAM,IAAI7T,MAAM,iCACvC,IAAI43M,EAAKP,KACT,IAAI6C,EAAG,QAAS,MAAM,IAAIl6M,MAAM,oCAChC,IA+EIqvB,EA/EA8iD,EAAQmnI,GAAkBY,EAAG,SAC7BD,EAAuB,MAAfC,EAAG,SACXp8L,EAAO,GAEX83M,GAAehe,EAAI,GAAoB,MA2EnCvoL,EAAMq0K,GAAQ,IACdhF,YAAY,EA5EuB,MA6EhCrvK,IA5EPumM,GAAehe,EAAI,EA+HpB,SAAqBzlI,GACpB,IAAI9iD,EAAMq0K,GAAQ,GAKlB,OAJAr0K,EAAIqvK,YAAY,EAAGvsH,EAAM3vD,EAAE/V,GAC3B4iB,EAAIqvK,YAAY,EAAGvsH,EAAM3vD,EAAE7V,GAC3B0iB,EAAIqvK,YAAY,EAAGvsH,EAAMplD,EAAEtgB,GAC3B4iB,EAAIqvK,YAAY,EAAGvsH,EAAMplD,EAAEpgB,GACpB0iB,CACR,CAtI0BwmM,CAAY1jJ,IAErC,IADA,IAAI2jJ,EAAQ1xN,KAAK8+C,IAAIivB,EAAMplD,EAAEpgB,EAAG,MACxB+pG,EAAIvkC,EAAM3vD,EAAE/V,EAAGiqG,GAAKvkC,EAAMplD,EAAEtgB,IAAKiqG,EAAG54F,EAAK44F,GAAK8hG,GAAW9hG,GACjE,IAAI,IAAIovB,EAAI3zD,EAAM3vD,EAAE7V,EAAGm5H,GAAKgwF,IAAShwF,EAAG,CACvC,IAAI+zD,EAAK0e,GAAWzyE,GACpB,IAAIpvB,EAAIvkC,EAAM3vD,EAAE/V,EAAGiqG,GAAKvkC,EAAMplD,EAAEtgB,IAAKiqG,EAAG,CACvC,IAAIqhG,EAAOkC,GAASC,EAAG,SAASp0E,IAAI,IAAIpvB,GAAKwjG,EAAGp8L,EAAK44F,GAAKmjF,GAC1D,GAAIke,GAAkB,KAAVA,EAAK3rM,EAEjB,OAAO2rM,EAAK3rM,GACZ,IAAK,KACO,EAAP2rM,EAAK10K,IAAM00K,EAAK10K,GAAK00K,EAAK10K,IAAM,OAAS00K,EAAK10K,GAAK,MAAOuyL,GAAehe,EAAI,GAAM4c,EAAc1uF,EAAGpvB,EAAGqhG,IACtG6d,GAAehe,EAAI,GAAM6c,EAAa3uF,EAAGpvB,EAAGqhG,IACjD,MACD,IAAK,IACJ,IAAIvpF,EAAK+oE,GAAQwgB,EAAK10K,IACf,EAAHmrF,IAAOA,GAAMA,IAAO,OAASA,GAAM,MAAOonG,GAAehe,EAAI,GAAM4c,EAAc1uF,EAAGpvB,EAAG,CAACtqG,EAAE,IAAKi3B,EAAEmrF,EAAI72C,EAAEogI,EAAKpgI,GAAK29G,EAAU,OAC1HsgC,GAAehe,EAAI,GAAM6c,EAAa3uF,EAAGpvB,EAAG,CAACtqG,EAAE,IAAKi3B,EAAEmrF,EAAI72C,EAAEogI,EAAKpgI,GAAK29G,EAAU,OACrF,MACD,QAECsgC,GAAehe,EAAI,GAAM2c,EAAYzuF,EAAGpvB,EAD9B6iG,GAAYxB,GACyB53M,MAAM,EAAG,OAE1D,CACD,CAGA,OADAy1N,GAAehe,EAAI,GACZA,EAAG/vH,KACX,EA+7BCkuI,YA77BD,SAAqBrU,EAAiB52D,GACrC,IAAI75B,EAAI65B,GAAQ,CAAC,EAEjB,IADI75B,EAAE62F,UAAY,GAAGx1B,GAAQrhE,EAAE62F,UAClB,UAAV72F,EAAEp9G,KAAkB,MAAM,IAAI7T,MAAM,iCACvC,IAAI43M,EAAKP,KAETue,GAAehe,EAAI,EA2CpB,SAAuB8J,GACtB,IAAIryL,EAAMq0K,GAAQ,IAClBr0K,EAAIqvK,YAAY,EAAG,MACnBrvK,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,GAEnB,IADA,IAAI/9K,EAAO,EAAG7C,EAAO,EAAGk4M,EAAQ,EACxBn0N,EAAI,EAAGA,EAAI6/M,EAAG7H,WAAWp5M,SAAUoB,EAAG,CAC7C,IAAI3B,EAAOwhN,EAAG7H,WAAWh4M,GACrBq4M,EAAKwH,EAAG5H,OAAO55M,GACnB,GAAIg6M,GAAOA,EAAG,QAAd,GACE8b,EACF,IAAI7jJ,EAAQ2mI,GAAaoB,EAAG,SACzBv5L,EAAOwxD,EAAMplD,EAAEpgB,IAAGgU,EAAOwxD,EAAMplD,EAAEpgB,GACjCmR,EAAOq0D,EAAMplD,EAAEtgB,IAAGqR,EAAOq0D,EAAMplD,EAAEtgB,EAJL,CAKhC,CAWA,OAVGkU,EAAO,OAAMA,EAAO,MACvB0O,EAAIqvK,YAAY,EAAG/9K,GACnB0O,EAAIqvK,YAAY,EAAGs3B,GACnB3mM,EAAIqvK,YAAY,EAAG5gL,GACnBuR,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,GACZrvK,CACR,CArE0B4mM,CAAcvU,IAEvC,IAAI,IAAI7/M,EAAI,EAAG8hM,EAAM,EAAG9hM,EAAI6/M,EAAG7H,WAAWp5M,SAAUoB,GAAO6/M,EAAG5H,OAAO4H,EAAG7H,WAAWh4M,KAAO,CAAC,GAAG,SAAS+zN,GAAehe,EAAI,GAAM0d,EAAwB5T,EAAG7H,WAAWh4M,GAAI8hM,MAE1K,IAAIqxB,EAAQ,EACZ,IAAInzN,EAAI,EAAGA,EAAI6/M,EAAG7H,WAAWp5M,SAAUoB,EAAG,CACzC,IAAIq4M,EAAKwH,EAAG5H,OAAO4H,EAAG7H,WAAWh4M,IACjC,GAAIq4M,GAAOA,EAAG,QAAd,CAKA,IAJA,IAAI/nI,EAAQmnI,GAAkBY,EAAG,SAC7BD,EAAuB,MAAfC,EAAG,SACXp8L,EAAO,GACPg4M,EAAQ1xN,KAAK8+C,IAAIivB,EAAMplD,EAAEpgB,EAAG,MACxBm5H,EAAI3zD,EAAM3vD,EAAE7V,EAAGm5H,GAAKgwF,IAAShwF,EAEpC,IADA,IAAI+zD,EAAK0e,GAAWzyE,GACZpvB,EAAIvkC,EAAM3vD,EAAE/V,EAAGiqG,GAAKvkC,EAAMplD,EAAEtgB,IAAKiqG,EAAG,CACxCovB,IAAM3zD,EAAM3vD,EAAE7V,IAAGmR,EAAK44F,GAAK8hG,GAAW9hG,IACzC,IAAIpnF,EAAMxR,EAAK44F,GAAKmjF,EAChBke,EAAOkC,GAASC,EAAG,SAASp0E,IAAI,IAAIpvB,GAAKwjG,EAAG5qL,GAC5CyoL,GAAkB,KAAVA,EAAK3rM,IAEJ,KAAV2rM,EAAK3rM,EACPwpN,GAAehe,EAAI,GAAMsd,EAAgBpvF,EAAGpvB,EAAGs+G,EAAOjd,EAAK10K,IAI3DuyL,GAAehe,EAAI,GAAMmd,EAAejvF,EAAGpvB,EAAGs+G,EAFpCzb,GAAYxB,GAEmC53M,MAAM,EAAG,OAEpE,GAEC60N,CAtB6B,CAuBhC,CAGA,OADAY,GAAehe,EAAI,GACZA,EAAG/vH,KACX,EAs5BCygI,YA5oCD,SAA2BnmN,EAAe2oJ,GACzC,OAAOA,EAAKj3I,MACX,IAAK,SAAU,OAAOg/M,EAAsB9+B,EAAIf,EAAc7wL,IAAK2oJ,GACnE,IAAK,SAAU,OAAO+nE,EAAsB9+B,EAAI5xL,GAAI2oJ,GACpD,IAAK,SACL,IAAK,QAAS,OAAO+nE,EAAsB1wN,EAAG2oJ,GAE/C,KAAM,oBAAsBA,EAAKj3I,IAClC,EAsoCD,CA9pCwB,GAm3CpBqiN,GAAe,mBAgEfC,GArrLJ,SAAuB71N,EAAkB2wH,GAExC,IAAIkqF,GAAQ,EAGZ,OAH4B,MAALlqF,IAAakqF,GAAQ,EAAMlqF,EAAIyyE,GAAQ,GAAK,EAAIpjM,EAAI8L,EAAE3L,SAC7EwwH,EAAEytE,YAAY,EAAG,GACjBwc,GAAmB56M,EAAI8L,EAAG6kH,GACnBkqF,EAAQlqF,EAAE9wH,MAAM,EAAG8wH,EAAEjtB,GAAKitB,CAClC,EAw3LA,SAASmlG,GAAsCC,GAC9C,IAAuBC,EAEez0N,EAFlC00N,EAAW,EACXC,EAjML,SAAkBl2N,GACjB,QAAuB,IAAbqxL,EAA0B,OAAOA,EAASwb,MAAM0B,OAAO5c,EAAc3xL,GAE/E,IADA,IAAI2wH,EAAsB,GAAIslF,EAAKj2M,EAAImS,MAAM,IACrC5Q,EAAI,EAAGA,EAAI00M,EAAG91M,SAAUoB,EAAGovH,EAAEpvH,GAAK00M,EAAG10M,GAAG6wJ,WAAW,GAC3D,OAAOzhC,CACR,CA4LuBwlG,CAASJ,GAC3BvvH,EAAM0vH,EAAgB/1N,OAAS,EAInC,KAFA61N,EAAgB5iC,EAAY5sF,IACd,GAAK0vH,EAAgB/1N,OAC/BoB,EAAI,EAAGA,GAAKilG,IAAOjlG,EAAGy0N,EAAcz0N,GAAK20N,EAAgB30N,EAAE,GAC/D,IAAIA,EAAIilG,EAAI,EAAGjlG,GAAK,IAAKA,EAKxB00N,IAH6B,MAAXA,EAAqC,EAAJ,GAClCA,GAAY,EAAK,OAFnBD,EAAcz0N,GAM9B,OAAkB,MAAX00N,CACR,CAwNA,SAASG,GAAQnZ,GAChB,IAAI,IAAI17M,EAAE,EAAEovH,EAAE,EAAM,GAAHpvH,IAAQA,EAAGovH,EAAM,IAAFA,GAASssF,EAAI17M,GAAG,IAAI,IAAI07M,EAAI17M,GAAG,EAAE,EAAE07M,EAAI17M,IACvE,OAAOovH,EAAE5kH,SAAS,IAAIH,cAAc/L,MAAM,EAC3C,CA8CA,IAA4Cw2N,GAA9B,EACd,SAAS3G,GAAS7qN,GAAS,OAAOf,KAAK+3D,OAAQh3D,EAASf,KAAKgB,MAAM,IAAIuxN,IAAM,KAAOA,GAAO,CAC3F,SAAS1G,GAAQ2G,GAAM,OAAQxyN,KAAK+3D,OAAOy6J,EAAK,GAAGD,GAAM,IAAM,IAAM,GAAK,CAC1E,SAASE,GAAW/4E,GAAO,OAAQ15I,KAAKgB,OAAO04I,EAAM64E,GAAM,GAAGA,GAAI,KAAM,GAAK,CAsB7E,SAAStH,GAAYyH,GACjBA,EAAK3xN,OACP2xN,EAAK/G,IAAMC,GAAS8G,EAAK3xN,OACzB2xN,EAAK1O,IAAM6H,GAAQ6G,EAAK/G,KACxB+G,EAAKH,IAAMA,IACFG,EAAK/G,KACd+G,EAAK1O,IAAM6H,GAAQ6G,EAAK/G,KACxB+G,EAAK3xN,MAAQ0xN,GAAWC,EAAK1O,KAC7B0O,EAAKH,IAAMA,IACiB,iBAAZG,EAAK1O,MACrB0O,EAAK3xN,MAAQ0xN,GAAWC,EAAK1O,KAC7B0O,EAAK/G,IAAMC,GAAS8G,EAAK3xN,OACzB2xN,EAAKH,IAAMA,IAETG,EAAKC,oBAAoBD,EAAKC,WAClC,CAEA,IAAkBC,GAAJ,GACd,SAAS9G,GAAM0G,GAAM,OAAY,GAALA,EAAUI,EAAK,CAC3C,SAAS5H,GAAMnjI,GAAM,OAAOA,EAAK+qI,GAAM,EAAI,CAoc3C,SAASC,GAAap1N,EAAc0+D,EAAc0wD,GAC7CA,IAAGA,EAAIyyE,GAAQ,EAAI,EAAInjI,EAAE9/D,SAC7BwwH,EAAEytE,YAAY,EAAG78L,GACjBq5M,GAAmB36I,EAAG0wD,GACtB,IAAI5hG,EAAO4hG,EAAExwH,OAASwwH,EAAEjtB,EAAKitB,EAAE9wH,MAAM,EAAG8wH,EAAEjtB,GAAKitB,EAE/C,OADU,MAAPA,EAAEjtB,IAAWitB,EAAEjtB,EAAIitB,EAAExwH,QACjB4uB,CACR,CAsEA,IAqBI6nM,GArBAC,GAAkB,CACrB,OACA,QACA,aACA,WACA,YACA,iBACA,eACA,WACA,SACA,WACA,cACA,kBACA,gBACA,YACA,UACA,YACA,eACA,UACA,YAIGC,GAAgBhgB,GACpB,SAASigB,GAAcziC,EAAM3jE,GACxBA,IAAGA,EAAIyyE,GAAQ,KACfwzB,KAAqBA,GAAuBvnB,GAAMwnB,KACtD,IAAIG,EAAiBJ,GAAoBtiC,EAAK2iC,aACpC,MAAPD,IAAaA,EAAM,IACtBrmG,EAAEytE,YAAY,EAAG44B,GACjB,IAAI/1M,EAAI,EACR,GAAU,IAAP+1M,EAMF,IAJApa,GAAe,CAACC,KAAK,GAAIlsF,GAEzBisF,GAAe,CAACC,KAAK,GAAIlsF,GAEnB1vG,EAAI,KAAMA,EAAG0vG,EAAEytE,YAAY,EAAG,OAC9B,CACN,KAAMn9K,EAAI,IAAKA,EAAG0vG,EAAEytE,YAAY,EAAG,GAEnC,KAAMn9K,EAAI,KAAMA,EAAG0vG,EAAEytE,YAAY,EAAG,EASrC,CACA,OAAOztE,EAAExwH,OAASwwH,EAAEjtB,EAAIitB,EAAE9wH,MAAM,EAAG8wH,EAAEjtB,GAAKitB,CAC3C,CAUA,SAASumG,GAAYtlN,EAAMm0M,EAAOp1F,GAcjC,OAbIA,IAAGA,EAAIyyE,GAAQ,KACnBzyE,EAAEytE,YAAY,EAAG2nB,GAAO,GACxBp1F,EAAEytE,YAAY,EAAGxsL,EAAKwnM,UAAU,GAChCzoF,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GAEjBztE,EAAEytE,YAAY,EADH,GAEXztE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACVztE,CACR,CAGA,SAASwmG,GAAWvlN,EAAM++G,GAMzB,OALIA,IAAGA,EAAIyyE,GAAQ,KACnBzyE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACVztE,CACR,CAEA,IAAIymG,GAAkBtgB,GA4MtB,SAASugB,GAAcjW,EAAI52D,GAC1B,IAAI8sD,EAAKP,KAcT,OAbAM,GAAaC,EAAI,KA/GlB,SAAwBA,EAAIggB,GAC3B,GAAIA,EAAJ,CACA,IAAIj0B,EAAM,EACV,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAO,GAAgB,MAAM7wL,SAAQ,SAASnG,GAEpE,IAAI,IAAI9K,EAAI8K,EAAE,GAAI9K,GAAK8K,EAAE,KAAM9K,EAAe,MAAT+1N,EAAG/1N,MAAc8hM,CACvD,IAEU,GAAPA,IACHgU,GAAaC,EAAI,IAA2BmD,GAAepX,IAC3D,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAO,GAAgB,MAAM7wL,SAAQ,SAASnG,GAEpE,IAAI,IAAI9K,EAAI8K,EAAE,GAAI9K,GAAK8K,EAAE,KAAM9K,EAAe,MAAT+1N,EAAG/1N,IAAY81M,GAAaC,EAAI,GAAqBqf,GAAap1N,EAAG+1N,EAAG/1N,IAC9G,IACA81M,GAAaC,EAAI,KAbH,CAcf,CAiGCigB,CAAejgB,EAAI8J,EAAGoW,KA/FvB,SAAyBlgB,GAIxBD,GAAaC,EAAI,IAA4BmD,GAHnC,IAIVpD,GAAaC,EAAI,GArOlB,SAAuBmgB,EAAc9mG,GAChCA,IAAGA,EAAIyyE,GAAQ,MACnBzyE,EAAEytE,YAAY,EAAa,GAAVq5B,EAAK/4B,IAh+MvB,SAAyB+4B,EAAM9mG,GACzBA,IAAGA,EAAIyyE,GAAQ,IACpB,IAAIs0B,GACFD,EAAKE,OAAS,EAAO,IACrBF,EAAKG,OAAS,EAAO,IACrBH,EAAKI,QAAU,GAAO,IACtBJ,EAAKK,OAAS,GAAO,IACrBL,EAAKM,SAAW,GAAO,IACvBN,EAAKxvJ,OAAS,IAAO,GACvB0oD,EAAEytE,YAAY,EAAGs5B,GACjB/mG,EAAEytE,YAAY,EAAG,EAElB,CAq9MC45B,CAAgBP,EAAM9mG,GACtBA,EAAEytE,YAAY,EAAGq5B,EAAKQ,KAAO,IAAS,KACtC,IAAIC,EAAM,EACW,eAAlBT,EAAKU,UAA4BD,EAAM,EAChB,aAAlBT,EAAKU,YAA0BD,EAAM,GAC7CvnG,EAAEytE,YAAY,EAAG85B,GACjBvnG,EAAEytE,YAAY,EAAGq5B,EAAKW,WAAa,GACnCznG,EAAEytE,YAAY,EAAGq5B,EAAKY,QAAU,GAChC1nG,EAAEytE,YAAY,EAAGq5B,EAAKa,SAAW,GACjC3nG,EAAEytE,YAAY,EAAG,GACjBwe,GAAe6a,EAAKn1B,MAAO3xE,GAC3B,IAAI4nG,EAAS,EAKb,MAJkB,SAAfd,EAAKc,SAAmBA,EAAS,GAClB,SAAfd,EAAKc,SAAmBA,EAAS,GACpC5nG,EAAEytE,YAAY,EAAGm6B,GACjB3d,GAAmB6c,EAAK73N,KAAM+wH,GACvBA,EAAExwH,OAASwwH,EAAEjtB,EAAIitB,EAAE9wH,MAAM,EAAG8wH,EAAEjtB,GAAKitB,CAC3C,CAiNwC6nG,CAAc,CACpD95B,GAAG,GACH4D,MAAO,CAACwa,MAAM,GACdl9M,KAAM,UACNy4N,OAAQ,EACRE,OAAQ,WAGTlhB,GAAaC,EAAI,IAClB,CAkFCmhB,CAAgBnhB,GAhFjB,SAAyBA,GAIxBD,GAAaC,EAAI,IAA4BmD,GAHnC,IAIVpD,GAAaC,EAAI,GAAsByf,GAAc,CAACE,YAAY,UAClE5f,GAAaC,EAAI,GAAsByf,GAAc,CAACE,YAAY,aAElE5f,GAAaC,EAAI,IAClB,CAwECohB,CAAgBphB,GAtEjB,SAA2BA,GAC1B,IA3IgC3mF,EA8IhC0mF,GAAaC,EAAI,IAA8BmD,GAHrC,IAIVpD,GAAaC,EAAI,IA9Ib3mF,IAAGA,EAAIyyE,GAAQ,KACnBzyE,EAAEytE,YAAY,EAAG,GACjB+4B,GAAW,EAAMxmG,GACjBwmG,GAAW,EAAMxmG,GACjBwmG,GAAW,EAAMxmG,GACjBwmG,GAAW,EAAMxmG,GACjBwmG,GAAW,EAAMxmG,GACVA,EAAExwH,OAASwwH,EAAEjtB,EAAIitB,EAAE9wH,MAAM,EAAG8wH,EAAEjtB,GAAKitB,IAyI1C0mF,GAAaC,EAAI,IAClB,CA+DCqhB,CAAkBrhB,GA7DnB,SAAgCA,GAE/BD,GAAaC,EAAI,IAAmCmD,GAD1C,IAEVpD,GAAaC,EAAI,GAAoB4f,GAAY,CAChD9d,SAAU,EACVwf,OAAU,EACVC,OAAU,EACVC,SAAU,GACR,QAEHzhB,GAAaC,EAAI,IAClB,CAmDCyhB,CAAuBzhB,GAjDxB,SAA2BA,EAAI1lM,GAC9BylM,GAAaC,EAAI,IAA8BmD,GAAe7oM,EAAKzR,SACnEyR,EAAKY,SAAQ,SAASrG,GAAKkrM,GAAaC,EAAI,GAAoB4f,GAAY/qN,EAAE,GAAK,IAEnFkrM,GAAaC,EAAI,IAClB,CA6CC0hB,CAAkB1hB,EAAI9sD,EAAKyuE,SA3C5B,SAA0B3hB,GACzB,IA7JuB9mK,EAAOmgF,EA+J9B0mF,GAAaC,EAAI,IAA6BmD,GAFpC,IAGVpD,GAAaC,EAAI,IAhKM9mK,EAgKgC,CACtD0oL,KAAK,EACLC,UAAU,EACVv5N,KAAK,UAlKF+wH,IAAGA,EAAIyyE,GAAQ,KACnBzyE,EAAEytE,YAAY,EAAG5tJ,EAAM0oL,MACvBvoG,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,GAAI5tJ,EAAM2oL,WACxBxoG,EAAEytE,YAAY,EAAG,GACjByd,GAA2BrrK,EAAM5wC,MAAQ,GAAI+wH,GACtCA,EAAExwH,OAASwwH,EAAEjtB,EAAIitB,EAAE9wH,MAAM,EAAG8wH,EAAEjtB,GAAKitB,IA+J1C0mF,GAAaC,EAAI,IAClB,CAiCC8hB,CAAiB9hB,GA/BlB,SAAwBA,GAGvBD,GAAaC,EAAI,IAA2BmD,GAFlC,IAIVpD,GAAaC,EAAI,IAClB,CA0BC+hB,CAAe/hB,GAxBhB,SAA+BA,GAtK/B,IACK3mF,EAwKJ0mF,GAAaC,EAAI,MAxKb3mF,EAAIyyE,GAAQ,OACdhF,YAAY,EAqKJ,GApKVyd,GAsKkF,oBAtKxClrF,GAC1CkrF,GAqKuG,oBArK7DlrF,GACnCA,EAAExwH,OAASwwH,EAAEjtB,EAAIitB,EAAE9wH,MAAM,EAAG8wH,EAAEjtB,GAAKitB,IAsK1C0mF,GAAaC,EAAI,IAClB,CAmBCgiB,CAAsBhiB,GAGtBD,GAAaC,EAAI,KACVA,EAAG/vH,KACX,CA2GA,SAASgyI,GAAYC,EAAQhvE,GAC5B,GAAGA,GAAQA,EAAKivE,UAAW,OAAOjvE,EAAKivE,UACvC,GAAGD,GAA+B,iBAAdA,EAAOt2B,IAAiB,OAAOs2B,EAAOt2B,IAC1D,IAAIvyE,EAAI,CAAC2hF,IAsKT,OArKA3hF,EAAEA,EAAExwH,QAAU,gGACdwwH,EAAEA,EAAExwH,QAAW,oBAEfwwH,EAAEA,EAAExwH,QAAY,8BAChBwwH,EAAEA,EAAExwH,QAAa,+DACjBwwH,EAAEA,EAAExwH,QAAa,2DACjBwwH,EAAEA,EAAExwH,QAAa,2CACjBwwH,EAAEA,EAAExwH,QAAa,2CACjBwwH,EAAEA,EAAExwH,QAAa,mDACjBwwH,EAAEA,EAAExwH,QAAa,mDACjBwwH,EAAEA,EAAExwH,QAAa,mDACjBwwH,EAAEA,EAAExwH,QAAa,mDACjBwwH,EAAEA,EAAExwH,QAAa,mDACjBwwH,EAAEA,EAAExwH,QAAa,mDACjBwwH,EAAEA,EAAExwH,QAAa,+CACjBwwH,EAAEA,EAAExwH,QAAa,qDACjBwwH,EAAEA,EAAExwH,QAAY,iBAEhBwwH,EAAEA,EAAExwH,QAAY,+BAChBwwH,EAAEA,EAAExwH,QAAa,gBACjBwwH,EAAEA,EAAExwH,QAAc,gCAClBwwH,EAAEA,EAAExwH,QAAc,sBAClBwwH,EAAEA,EAAExwH,QAAc,sBAClBwwH,EAAEA,EAAExwH,QAAc,8CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,wCAClBwwH,EAAEA,EAAExwH,QAAc,0CAClBwwH,EAAEA,EAAExwH,QAAc,qDAClBwwH,EAAEA,EAAExwH,QAAc,qDAClBwwH,EAAEA,EAAExwH,QAAc,4CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,4CAClBwwH,EAAEA,EAAExwH,QAAc,4CAClBwwH,EAAEA,EAAExwH,QAAc,+CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,8CAClBwwH,EAAEA,EAAExwH,QAAc,0DAClBwwH,EAAEA,EAAExwH,QAAc,wDAClBwwH,EAAEA,EAAExwH,QAAc,wDAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAc,4CAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,uDAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAc,+CAClBwwH,EAAEA,EAAExwH,QAAc,kDAClBwwH,EAAEA,EAAExwH,QAAc,qDAClBwwH,EAAEA,EAAExwH,QAAc,qDAClBwwH,EAAEA,EAAExwH,QAAc,sDAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAa,iBACjBwwH,EAAEA,EAAExwH,QAAa,gBACjBwwH,EAAEA,EAAExwH,QAAc,gCAClBwwH,EAAEA,EAAExwH,QAAc,sBAClBwwH,EAAEA,EAAExwH,QAAc,sBAClBwwH,EAAEA,EAAExwH,QAAc,8CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,wCAClBwwH,EAAEA,EAAExwH,QAAc,0CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,4CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,4CAClBwwH,EAAEA,EAAExwH,QAAc,4CAClBwwH,EAAEA,EAAExwH,QAAc,8CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,8CAClBwwH,EAAEA,EAAExwH,QAAc,0DAClBwwH,EAAEA,EAAExwH,QAAc,wDAClBwwH,EAAEA,EAAExwH,QAAc,wDAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAc,4CAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,uDAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAc,+CAClBwwH,EAAEA,EAAExwH,QAAc,kDAClBwwH,EAAEA,EAAExwH,QAAc,qDAClBwwH,EAAEA,EAAExwH,QAAc,2CAClBwwH,EAAEA,EAAExwH,QAAc,sDAClBwwH,EAAEA,EAAExwH,QAAc,6CAClBwwH,EAAEA,EAAExwH,QAAa,iBACjBwwH,EAAEA,EAAExwH,QAAY,kBAEhBwwH,EAAEA,EAAExwH,QAAY,8BAChBwwH,EAAEA,EAAExwH,QAAa,mBACjBwwH,EAAEA,EAAExwH,QAAc,wDAClBwwH,EAAEA,EAAExwH,QAAc,gCAClBwwH,EAAEA,EAAExwH,QAAe,YACnBwwH,EAAEA,EAAExwH,QAAgB,4GACpBwwH,EAAEA,EAAExwH,QAAgB,gHACpBwwH,EAAEA,EAAExwH,QAAgB,iHACpBwwH,EAAEA,EAAExwH,QAAe,aACnBwwH,EAAEA,EAAExwH,QAAe,qCACnBwwH,EAAEA,EAAExwH,QAAc,gBAClBwwH,EAAEA,EAAExwH,QAAc,gCAClBwwH,EAAEA,EAAExwH,QAAe,YACnBwwH,EAAEA,EAAExwH,QAAgB,oIACpBwwH,EAAEA,EAAExwH,QAAgB,wIACpBwwH,EAAEA,EAAExwH,QAAe,aACnBwwH,EAAEA,EAAExwH,QAAe,qCACnBwwH,EAAEA,EAAExwH,QAAc,gBAClBwwH,EAAEA,EAAExwH,QAAa,oBACjBwwH,EAAEA,EAAExwH,QAAa,iBACjBwwH,EAAEA,EAAExwH,QAAc,mMAClBwwH,EAAEA,EAAExwH,QAAc,yIAClBwwH,EAAEA,EAAExwH,QAAc,yIAClBwwH,EAAEA,EAAExwH,QAAa,kBACjBwwH,EAAEA,EAAExwH,QAAa,qBACjBwwH,EAAEA,EAAExwH,QAAc,kBAClBwwH,EAAEA,EAAExwH,QAAe,gBACnBwwH,EAAEA,EAAExwH,QAAgB,oJACpBwwH,EAAEA,EAAExwH,QAAe,iBACnBwwH,EAAEA,EAAExwH,QAAc,mBAClBwwH,EAAEA,EAAExwH,QAAc,kBAClBwwH,EAAEA,EAAExwH,QAAe,gBACnBwwH,EAAEA,EAAExwH,QAAgB,oJACpBwwH,EAAEA,EAAExwH,QAAe,iBACnBwwH,EAAEA,EAAExwH,QAAc,mBAClBwwH,EAAEA,EAAExwH,QAAc,kBAClBwwH,EAAEA,EAAExwH,QAAe,gBACnBwwH,EAAEA,EAAExwH,QAAgB,oJACpBwwH,EAAEA,EAAExwH,QAAe,iBACnBwwH,EAAEA,EAAExwH,QAAe,6LACnBwwH,EAAEA,EAAExwH,QAAe,mDACnBwwH,EAAEA,EAAExwH,QAAc,mBAClBwwH,EAAEA,EAAExwH,QAAa,sBACjBwwH,EAAEA,EAAExwH,QAAa,qBACjBwwH,EAAEA,EAAExwH,QAAc,wDAClBwwH,EAAEA,EAAExwH,QAAc,gCAClBwwH,EAAEA,EAAExwH,QAAe,YACnBwwH,EAAEA,EAAExwH,QAAgB,4GACpBwwH,EAAEA,EAAExwH,QAAgB,sIACpBwwH,EAAEA,EAAExwH,QAAgB,kHACpBwwH,EAAEA,EAAExwH,QAAe,aACnBwwH,EAAEA,EAAExwH,QAAe,2FACnBwwH,EAAEA,EAAExwH,QAAc,gBAClBwwH,EAAEA,EAAExwH,QAAc,gCAClBwwH,EAAEA,EAAExwH,QAAe,YACnBwwH,EAAEA,EAAExwH,QAAgB,4GACpBwwH,EAAEA,EAAExwH,QAAgB,kHACpBwwH,EAAEA,EAAExwH,QAAe,aACnBwwH,EAAEA,EAAExwH,QAAe,yFACnBwwH,EAAEA,EAAExwH,QAAc,gBAClBwwH,EAAEA,EAAExwH,QAAa,sBACjBwwH,EAAEA,EAAExwH,QAAY,iBAChBwwH,EAAEA,EAAExwH,QAAW,qBAEfwwH,EAAEA,EAAExwH,QAAW,qBACfwwH,EAAEA,EAAExwH,QAAY,YAChBwwH,EAAEA,EAAExwH,QAAa,mSACjBwwH,EAAEA,EAAExwH,QAAY,aAChBwwH,EAAEA,EAAExwH,QAAY,YAChBwwH,EAAEA,EAAExwH,QAAa,mSACjBwwH,EAAEA,EAAExwH,QAAY,aAChBwwH,EAAEA,EAAExwH,QAAW,sBACfwwH,EAAEA,EAAExwH,QAAW,yBACfwwH,EAAEA,EAAExwH,QAAU,aACPwwH,EAAE93G,KAAK,GACf,CAgcA,SAAS6gN,GAAU/Y,EAAgBr/L,EAAUs4L,GAC5C,IAAI+f,EAAQ,CAAC,MAAO,OAEhBC,EAAO,CAAC,SAASD,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAG,OAAO9gN,KAAK,KACjE83G,EAAI,CACP+iF,GAAU,MAAO,KAAM,CAAE,UAAWU,GAAOrxK,EAAG,UAAWqxK,GAAOzjF,EAAG,UAAWyjF,GAAOpvM,EAAG,WAAYovM,GAAO3T,KAAM7vL,QAAQ,MAAM,KAC/H8iM,GAAU,gBAAiBA,GAAU,UAAW,KAAM,CAAC,QAAQ,OAAQ,KAAOiN,IAAO,CAAC,QAAQ,UAG3FkZ,EAAW,MAAQlZ,EAEnBmZ,EAAYx4M,GAAY,GAQ5B,OAPGw4M,EAAU35N,OAAS,GAAGwwH,EAAEnvH,KAAKkyM,GAAU,cAAe,CACxDA,GAAU,WAAY,KAAM,CAACqmB,UAAU,UACvCrmB,GAAU,SAAU,KAAM,CAACsmB,gBAAgB,IAAK,gBAAgB,UAC/DnhN,KAAK,IAAK,CAACnE,GAAG,cAAeulN,UAAUN,EAAM9gN,KAAK,KAAM,QAAQ,IAAK60F,KAAKksH,KAE5EE,EAAUtnN,SAAQ,SAASxN,KAAO60N,EAAUlpG,EAAEnvH,KAK/C,SAA2BwD,EAAG60N,EAAUjgB,GACvC,IAAIztM,EAAIosM,GAAYvzM,EAAE,IAClBk1N,EAAkB,CAAC,OAAS,UAAW,KAAO,YAC9B,YAAjBA,EAAS3mN,OAAoB2mN,EAASC,MAAQ,QACjD,IAAIC,EAA4B,YAAjBF,EAAS3mN,KAAqBmgM,GAAU,SAAU,KAAM,CAACngM,KAAK,mBAAoB,QAAQ,SAAW,KAChH8mN,EAAU3mB,GAAU,SAAU0mB,EAAUF,GAI5C,MAAO,CACP,WAAazmB,GAAW,CACvB/+L,GAAG,WAAamlN,EAChBtmN,KAAK,eACLi9B,MAAM,yFAA2FxrC,EAAE,GAAG2pN,OAAS,qBAAuB,IACtI2L,UAAU,UACVC,YAAY,YACR,IACJF,EACA3mB,GAAU,WAAY,KAXR,CAAC7tC,GAAG,IAAK,SAAW,MAYlC6tC,GAAU,SAAU,KAAM,CAAC,gBAAgB,SAC3C,6DACA,mCACC,qBACA,qBAEAF,GAAS,WAAY,CAACrnM,EAAEA,EAAE,EAAG,EAAGA,EAAEE,EAAE,EAAG,EAAGF,EAAEA,EAAE,EAAG,GAAIA,EAAEE,EAAE,EAAG,IAAIwM,KAAK,MACrE26L,GAAS,aAAc,SACvBA,GAAS,QAASl4E,OAAOnvH,EAAEE,IAC3BmnM,GAAS,WAAYl4E,OAAOnvH,EAAEA,IAC9BnH,EAAE,GAAG2pN,OAAS,GAAK,eACpB,kBACD,cACE91M,KAAK,GACR,CAtCoD2hN,CAAkBx1N,EAAG60N,GAAY,IACpFlpG,EAAEnvH,KAAK,UACAmvH,EAAE93G,KAAK,GACf,CA0GA,SAAS4hN,GAAmB7oN,GAC3B,IAAI++G,EAAI,CAAC2hF,GAAYoB,GAAU,WAAY,KAAM,CAAE,MAASS,GAAW,MAEnEumB,EAA4B,GA0ChC,OAzCA/pG,EAAEnvH,KAAK,aACPoQ,EAAKY,SAAQ,SAASxN,GAAKA,EAAE,GAAGwN,SAAQ,SAAStN,GAAK,IAAIqqC,EAAImjK,GAAUxtM,EAAEqqC,IAC/C,GAAvBmrL,EAAQx6N,QAAQqvC,KAClBmrL,EAAQl5N,KAAK+tC,GACbohF,EAAEnvH,KAAK,WAAa+tC,EAAI,cAEtBrqC,EAAEioH,GAAKjoH,EAAEy1N,KAAwC,GAAlCD,EAAQx6N,QAAQ,MAAQgF,EAAEy1N,MAC3CD,EAAQl5N,KAAK,MAAQ0D,EAAEy1N,IACvBhqG,EAAEnvH,KAAK,cAAqB0D,EAAEy1N,GAAK,aAErC,GAAI,IACiB,GAAlBD,EAAQv6N,SAAeu6N,EAAQl5N,KAAK,WAAYmvH,EAAEnvH,KAAK,6BAC1DmvH,EAAEnvH,KAAK,cACPmvH,EAAEnvH,KAAK,iBACPoQ,EAAKY,SAAQ,SAAS3Q,GAErB,IAAI+4N,EAAa,EAAGC,EAAK,GAAIC,EAAO,EAOpC,GANGj5N,EAAE,GAAG,IAAMA,EAAE,GAAG,GAAGsrH,GAAKtrH,EAAE,GAAG,GAAG84N,KAAIC,EAAaF,EAAQx6N,QAAQ,MAAQ2B,EAAE,GAAG,GAAG84N,KACpF94N,EAAE,GAAG2Q,SAAQ,SAASrG,GAClBA,EAAEojC,IAAGqrL,EAAaF,EAAQx6N,QAAQwyM,GAAUvmM,EAAEojC,KAC9CpjC,EAAEghH,KAAK2tG,EACVD,EAAGr5N,KAAY,MAAP2K,EAAEL,EAAY,GAAK4mM,GAAUvmM,EAAEL,GACxC,IACY,IAATgvN,EACFj5N,EAAE,GAAG2Q,SAAQ,SAASrG,GACrBwkH,EAAEnvH,KAAK,iBAAmBK,EAAE,GAAK,eAAiB64N,EAAQx6N,QAAQwyM,GAAUvmM,EAAEojC,IAAM,YACpFohF,EAAEnvH,KAAKgyM,GAAS,IAAY,MAAPrnM,EAAEL,EAAY,GAAK4mM,GAAUvmM,EAAEL,KACpD6kH,EAAEnvH,KAAK,oBACR,QACM,CACHK,EAAE,GAAG,IAAMA,EAAE,GAAG,GAAGsrH,GAAKtrH,EAAE,GAAG,GAAG84N,KAAIC,EAAaF,EAAQx6N,QAAQ,MAAQ2B,EAAE,GAAG,GAAG84N,KAEpFhqG,EAAEnvH,KAAK,iBAAmBK,EAAE,GAAK,eAAiB+4N,EAAa,YAE/D,IADA,IAAI9uN,EAAI,iBAAoB+uN,EAAG,GAAM,KAC7Bt5N,EAAI,EAAGA,EAAIs5N,EAAG16N,SAAUoB,EAAGuK,GAAK,eAAiB+uN,EAAGt5N,GAAK,KACjEovH,EAAEnvH,KAAKgyM,GAAS,IAAKd,GAAU5mM,KAC/B6kH,EAAEnvH,KAAK,oBACR,CACD,IACAmvH,EAAEnvH,KAAK,kBACJmvH,EAAExwH,OAAO,IAAKwwH,EAAEA,EAAExwH,QAAW,cAAgBwwH,EAAE,GAAGA,EAAE,GAAG//G,QAAQ,KAAK,MAChE+/G,EAAE93G,KAAK,GACf,CAyCA,SAASkiN,GAAgBz5M,EAAU05M,EAAQxwE,GAC1C,IAAI75B,EAAI,CAAC2hF,GAAYoB,GAAU,mBAAoB,KAAM,CAAE,MAASE,GAAMM,QAAStjM,QAAQ,QAAS,MAkBpG,OAjBA0Q,EAAS9O,SAAQ,SAASyoN,GACzB,IAAIC,EAAS,IACZD,EAAK,IAAM,IAAIzoN,SAAQ,SAASrG,EAAGwrL,GACnC,GAAIxrL,EAAEghH,EAAN,CACGhhH,EAAEojC,IAA6B,GAAxByrL,EAAO96N,QAAQiM,EAAEojC,IAAUyrL,EAAOx5N,KAAK2K,EAAEojC,GACnD,IAAI4rL,EAAS,CACZnsM,IAAKisM,EAAK,GACVvmN,GAAI,6BAA+B,eAAiB81I,EAAK4wE,QAAQv7N,OAAO,IAAM,KAErE,GAAP83L,EAAUujC,EAASC,EAAOzmN,GACxBymN,EAAOE,SAAWH,EACvB/uN,EAAEwuN,GAAKQ,EAAOzmN,GACXvI,EAAEojC,IAAG4rL,EAAOG,SAAW,6BAA+B,eAAiBN,EAAO96N,QAAQiM,EAAEojC,IAAI1vC,OAAO,IAAM,KAC5G8wH,EAAEnvH,KAAKkyM,GAAU,kBAAmBF,GAAS,OAAQrnM,EAAEL,GAAG,IAAKqvN,GAV/B,aAAdhvN,EAAEwuN,EAWrB,GACD,IACAhqG,EAAEnvH,KAAK,uBACAmvH,EAAE93G,KAAK,GACf,CA+BA,SAAS0iN,GAAiBP,GACzB,IAAIrqG,EAAI,CAAC2hF,GAAYoB,GAAU,aAAc,KAAM,CAClD,MAASE,GAAMM,MACf,UAAWC,GAAW,KACpBvjM,QAAQ,QAAS,MAUpB,OATAoqN,EAAOxoN,SAAQ,SAASgpN,EAAQ7jC,GAC/BhnE,EAAEnvH,KAAKkyM,GAAU,SAAU,KAAM,CAChC+nB,YAAaD,EACb9mN,GAAI,6BAA+B,eAAiBijL,GAAK93L,OAAO,IAAM,IACtEs7C,OAAQqgL,EACRE,WAAY,SAEd,IACA/qG,EAAEnvH,KAAK,iBACAmvH,EAAE93G,KAAK,GACf,CAuBA,IAAI8iN,GAAyBjhB,GAC7B,SAASkhB,GAAuBhqN,GAAQ,OAAOgpM,GAAmBhpM,EAAK/R,MAAM,EAAG,IAAM,CA0CtF,SAASg8N,GAAmBjqN,GAC3B,IAAI0lM,EAAKP,KACL2jB,EAA4B,GAmChC,OAlCArjB,GAAaC,EAAI,KAEjBD,GAAaC,EAAI,KACjB1lM,EAAKY,SAAQ,SAASi8C,GACrBA,EAAQ,GAAGj8C,SAAQ,SAASrG,GACxBuuN,EAAQx6N,QAAQiM,EAAEojC,IAAM,IAC3BmrL,EAAQl5N,KAAK2K,EAAEojC,EAAE1vC,MAAM,EAAE,KACzBw3M,GAAaC,EAAI,IAA+BskB,GAAuBzvN,EAAEojC,IACtEpjC,EAAEghH,GAAKhhH,EAAEwuN,KAAwC,GAAlCD,EAAQx6N,QAAQ,MAAQiM,EAAEwuN,MAC3CD,EAAQl5N,KAAK,MAAQ2K,EAAEwuN,IACvBtjB,GAAaC,EAAI,IAA+BskB,GAAuB,MAAQzvN,EAAEwuN,MAEnF,GACD,IACAtjB,GAAaC,EAAI,KAEjBD,GAAaC,EAAI,KACjB1lM,EAAKY,SAAQ,SAASi8C,GACrBA,EAAQ,GAAGj8C,SAAQ,SAASrG,GAC3B,IAAI2vN,GAAO,EACR3vN,EAAEwuN,KAAImB,EAAMpB,EAAQx6N,QAAQ,MAAQiM,EAAEwuN,MAC9B,GAARmB,GAAartK,EAAQ,GAAG,GAAG0+D,GAAK1+D,EAAQ,GAAG,GAAGksK,KAAImB,EAAMpB,EAAQx6N,QAAQ,MAAQuuD,EAAQ,GAAG,GAAGksK,MACtF,GAARmB,IAAWA,EAAMpB,EAAQx6N,QAAQiM,EAAEojC,IACtCpjC,EAAEuuN,QAAUoB,EACZ,IAzkQ2B97N,EAAkB2wH,EAE3CkqF,EAukQEhpI,EAAQ,CAAC3vD,EAAEq2L,GAAY9pJ,EAAQ,IAAIhiC,EAAE8rL,GAAY9pJ,EAAQ,KAC7D4oJ,GAAaC,EAAI,IAnFpB,SAA+B1lM,EAAM++G,GAQpC,OAPQ,MAALA,IAAWA,EAAIyyE,GAAQ,KAC1BzyE,EAAEytE,YAAY,EAAGxsL,EAAK,GAAG8oN,SACzBje,GAAoB7qM,EAAK,GAAa++G,GACtCA,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACjBztE,EAAEytE,YAAY,EAAG,GACVztE,CACR,CA0EkDorG,CAAsB,CAAClqJ,EAAO1lE,KAC1EA,EAAEL,GAAKK,EAAEL,EAAE3L,OAAS,GAAGk3M,GAAaC,EAAI,KA3kQhBt3M,EA2kQkEmM,EAzkQ3F0uM,GAAQ,EAAgB,MAALlqF,IAAakqF,GAAQ,EAAMlqF,EAAIyyE,GAAQ,GAAK,EAAIpjM,EAAI8L,EAAE3L,SAC7EwwH,EAAEytE,YAAY,EAAG,GACjBwc,GAAmB56M,EAAI8L,EAAG6kH,GAC1BA,EAAEytE,YAAY,EAAG,GAzClB,SAAsBzqB,EAAKhjD,GACrBA,IAAGA,EAAIyyE,GAAQ,IACpBzyE,EAAEytE,YAAY,EAAGzqB,EAAIonC,KAAO,GAC5BpqF,EAAEytE,YAAY,EAAGzqB,EAAIqnC,MAAQ,EAE9B,CAqCCghB,CAAa,CAAEjhB,IAAK,EAAGC,KAAM,GAAKrqF,GAC3BkqF,EAAQlqF,EAAE9wH,MAAM,EAAG8wH,EAAEjtB,GAAKitB,IAqkQ/B0mF,GAAaC,EAAI,YACVnrM,EAAEuuN,OACV,GACD,IACArjB,GAAaC,EAAI,KAEjBD,GAAaC,EAAI,KACVA,EAAG/vH,KACX,CAqBA,IAAI00I,GAAU,CAAC,OAAQ,OAAQ,OAAQ,QAAS,OAO5ClO,GAAyB,WAC5B,IAAImO,EAAU,gFACVC,EAAmB,CAAC9vN,EAAE,EAAEF,EAAE,GAC9B,SAASiwN,EAAOtkC,EAAGC,EAAGC,EAAGC,GACxB,IAAIyf,GAAO,EAAOC,GAAO,EAET,GAAb3f,EAAG73L,OAAaw3M,GAAO,EACF,KAAhB3f,EAAGzvE,OAAO,KAAaovF,GAAO,EAAM3f,EAAKA,EAAGn4L,MAAM,GAAI,IAE9C,GAAbo4L,EAAG93L,OAAau3M,GAAO,EACF,KAAhBzf,EAAG1vE,OAAO,KAAamvF,GAAO,EAAMzf,EAAKA,EAAGp4L,MAAM,GAAI,IAE9D,IAAI2lI,EAAIwyD,EAAG73L,OAAO,EAAkB,EAAhBiS,SAAS4lL,EAAG,IAAM,EAAG5hF,EAAI6hF,EAAG93L,OAAO,EAAkB,EAAhBiS,SAAS6lL,EAAG,IAAM,EAI3E,OAFGyf,EAAMthG,GAAK+lH,EAAOhwN,IAAUiqG,EAC5BuhG,EAAMnyE,GAAK22F,EAAO9vN,IAAUm5H,EACxBuyD,GAAM2f,EAAO,GAAK,KAAOQ,GAAW9hG,IAAMuhG,EAAO,GAAK,KAAOM,GAAWzyE,EAChF,CACA,OAAO,SAAkB62F,EAAiBv/H,GAEzC,OADAq/H,EAASr/H,EACFu/H,EAAKzrN,QAAQsrN,EAASE,EAC9B,CACD,CAtB6B,GAwBzBE,GAAY,uGAChB,IACCA,GAAY,gLACb,CAAC,MAAM7vM,GAAG,CACV,IAAIwiM,GAAyB,WAC5B,OAAO,SAAkBoN,EAAiBv/H,GACzC,OAAOu/H,EAAKzrN,QAAQ0rN,IAAW,SAASC,EAAIxkC,EAAIC,EAAIC,EAAIukC,EAAIC,GAC3D,IAAItwN,EAAIksM,GAAWpgB,IAAOD,EAAK,EAAIl7F,EAAK3wF,GACpCE,EAAI8rM,GAAWskB,IAAOD,EAAK,EAAI1/H,EAAKzwF,GAGxC,OAAO0rL,EAAK,KAFE,KAANykC,EAAanwN,EAAE,EAAW,GAALA,EAAS,GAAK,IAAMA,EAAI,KAE/B,KADR,KAAN2rL,EAAa7rL,EAAE,EAAW,GAALA,EAAS,GAAK,IAAMA,EAAI,IAEtD,GACD,CACD,CAV6B,GAa7B,SAASsiN,GAAkBxuJ,EAAc+4C,GACxC,OAAO/4C,EAAErvD,QAAQ0rN,IAAW,SAASC,EAAIxkC,EAAIC,EAAIC,EAAIukC,EAAIC,GACxD,OAAO1kC,GAAQ,KAAJC,EAAUA,EAAGC,EAAKigB,GAAWG,GAAWpgB,GAAIj/E,EAAM7sG,KAAS,KAAJqwN,EAAUA,EAAGC,EAAKxkB,GAAWE,GAAWskB,GAAMzjH,EAAM3sG,GACvH,GACD,CAiBA,SAASqwN,GAAW9rH,GAAQA,EAAKlN,GAAG,CAAW,CAG/C,SAASi5H,GAAc/rH,EAAMzwG,GAC5B,IAAIgM,EAAIykG,EAAK6tF,WAAqB,GAAVt+L,EAAc,EAAI,GAC1C,MAAO,CAAK,MAAJgM,EAAaA,GAAK,GAAM,EAAIA,GAAK,GAAM,EAChD,CAGA,SAASywN,GAAehsH,EAAMzwG,EAAQqqJ,GACrC,IAAItlJ,EAAI,EACR,GAAGslJ,EAAM,CACR,GAAGA,EAAKotD,MAAQ,GAAKptD,EAAKotD,MAAQ,EAAG,OAAOilB,GAAqBjsH,GAC5C,IAAb45C,EAAKotD,OAAY1yM,EAAI,EAC9B,CACA,IAAImH,EAAEukG,EAAK6tF,WAAWv5L,GAAIsgI,EAAE50B,EAAK6tF,WAAWv5L,GACxCiH,EAAEwwN,GAAc/rH,EAAM,GACtBwF,EAAEumH,GAAc/rH,EAAM,GAC1B,MAAO,CAAE1uF,EAAE,CAAC7V,EAAKF,EAAEA,EAAE,GAAIurM,KAAKvrM,EAAE,GAAIwrM,KAAKxrM,EAAE,IAAKsgB,EAAE,CAACpgB,EAAEm5H,EAAGr5H,EAAEiqG,EAAE,GAAIshG,KAAKthG,EAAE,GAAIuhG,KAAKvhG,EAAE,IACnF,CAEA,SAASymH,GAAqBjsH,GAC7B,IAAIvkG,EAAEswN,GAAc/rH,EAAM,GAAI40B,EAAEm3F,GAAc/rH,EAAM,GAChDzkG,EAAEykG,EAAK6tF,WAAW,GAClBroF,EAAExF,EAAK6tF,WAAW,GACtB,MAAO,CAAEv8K,EAAE,CAAC7V,EAAEA,EAAE,GAAIF,EAAEA,EAAGurM,KAAKrrM,EAAE,GAAIsrM,KAAKtrM,EAAE,IAAKogB,EAAE,CAACpgB,EAAEm5H,EAAE,GAAIr5H,EAAEiqG,EAAGshG,KAAKlyE,EAAE,GAAImyE,KAAKnyE,EAAE,IACnF,CAYA,SAASs3F,GAAclsH,EAAMzwG,EAAQqqJ,GACpC,GAAGA,GAAQA,EAAKotD,MAAQ,GAAKptD,EAAKotD,MAAQ,EAAG,OAK9C,SAA6BhnG,GAC5B,IAAIvkG,EAAIswN,GAAc/rH,EAAM,GACxBzkG,EAAIykG,EAAK6tF,WAAW,GACxB,MAAO,CAACpyL,EAAEA,EAAE,GAAIF,EAAEA,EAAGurM,KAAKrrM,EAAE,GAAIsrM,KAAKtrM,EAAE,GACxC,CATqD0wN,CAAoBnsH,GACxE,IAAIvkG,EAAIukG,EAAK6tF,WAAWj0C,GAAqB,IAAbA,EAAKotD,KAAa,EAAI,GAClDzrM,EAAIwwN,GAAc/rH,EAAM,GAC5B,MAAO,CAACvkG,EAAEA,EAAGF,EAAEA,EAAE,GAAIurM,KAAKvrM,EAAE,GAAIwrM,KAAKxrM,EAAE,GACxC,CAQA,SAAS6wN,GAAiBpsH,GACzB,IAAIvkG,EAAIukG,EAAK6tF,WAAW,GACpBtyL,EAAIykG,EAAK6tF,WAAW,GACxB,MAAO,CAACpyL,EAAEA,EAAGF,EAAM,IAAJA,EAAU8wN,WAAe,MAAJ9wN,GAAaurM,KAAKvrM,GAAG,GAAIwrM,KAAKxrM,GAAG,GACtE,CA8EA,SAAS+wN,GAAoBtsH,GAC5B,IAAIusH,EAA2B,EAAjBvsH,EAAKA,EAAKlN,EAAE,GAG1B,OADAkN,EAAKlN,GAAK,EACH,CAACy5H,EAFQ,EAGjB,CAyCA,SAASC,GAAuBxsH,GAE/B,MAAO,CADIA,EAAK6tF,WAAW,GAAU7tF,EAAK6tF,WAAW,GAEtD,CA4FA,SAAS4+B,GAAYzsH,EAAMgnG,GAC1B,IAAIrjM,EAAM,CAACq8F,EAAK6tF,WAAW,IAC3B,GAAW,IAARmZ,EAAY,OAAOrjM,EAAI,IACzB,KAAK,EAAMA,EAAI,GAAK,EAAM,MAC1B,KAAK,EAAMA,EAAI,GAAK,GAAM,MAC1B,KAAK,EAAMA,EAAI,GAAK,EAAM,MAC1B,KAAK,EAAMA,EAAI,GAAK,EAErB,OAAOA,EAAI,IACV,KAAK,EACJA,EAAI,GA/sNP,SAAmBq8F,EAAMzwG,GAAqB,OAAmC,IAA5BywG,EAAK6tF,WAAWt+L,EAAiB,CA+sN1Em9N,CAAU1sH,EAAM,GAAK,OAAS,QAC5B,IAARgnG,IAAYhnG,EAAKlN,GAAK,GAAG,MAC7B,KAAK,GACL,KAAK,GACJnvF,EAAI,GAAK2kM,GAAKtoG,EAAKA,EAAKlN,IACxBkN,EAAKlN,GAAe,IAARk0G,EAAc,EAAI,EAAI,MACnC,KAAK,EACJhnG,EAAKlN,GAAK,EAAG,MACd,KAAK,EACJnvF,EAAI,GAAKmoM,GAAW9rG,GAAU,MAC/B,KAAK,EACJr8F,EAAI,GA3nNP,SAAgCq8F,EAAMzwG,EAAQqqJ,GAC7C,GAAGA,EAAKotD,KAAO,EAAG,OAPnB,SAA+BhnG,EAAMzwG,EAAQqqJ,GAC5C,IAAIg6D,EAAM5zG,EAAK6tF,WAAWj0C,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,GACvD,OAAW,IAAR4M,GAAa5zG,EAAKlN,IAAY,IAflC,SAAoCkN,EAAM4zG,EAAKh6D,GAE9C,GAAGA,EAAM,CACR,GAAGA,EAAKotD,MAAQ,GAAKptD,EAAKotD,MAAQ,EAAG,OAAOhnG,EAAK6tF,WAAW+lB,EAAK,SACjE,GAAGh6D,EAAKotD,MAAQ,GAAI,OAAOhnG,EAAK6tF,WAAW+lB,EAAK,YACjD,CAIA,OAFe,IADC5zG,EAAK6tF,WAAW,GACH7tF,EAAK6tF,WAAW+lB,EAAK,aAClC5zG,EAAK6tF,WAAW+lB,EAAK,YAEtC,CAMQ+Y,CAA2B3sH,EAAM4zG,EAAKh6D,EAC9C,CAG0BgzE,CAAsB5sH,EAAMzwG,EAAQqqJ,GAC7D,IAAIg6D,EAAM5zG,EAAK6tF,WAAW,GAC1B,OAAW,IAAR+lB,GAAa5zG,EAAKlN,IAAY,IAC1BkN,EAAK6tF,WAAW+lB,EAAMh6D,EAAKotD,MAAQ,IAAMhnG,EAAKslG,KAAS,QAAU,YACzE,CAsnNYunB,CAAuB7sH,EAAM,EAAG,CAACgnG,KAAKA,EAAO,GAAKA,EAAO,EAAI,EAAIA,IAAQ,MACnF,QAAS,MAAM,IAAIl4M,MAAM,cAAgB6U,EAAI,IAE9C,OAAOA,CACR,CAGA,SAASmpN,GAAkB9sH,EAAM+sH,EAAKnzE,GAGrC,IAFA,IAAI1iI,EAAQ8oF,EAAK6tF,WAAyB,IAAbj0C,EAAKotD,KAAc,EAAI,GAChD7oL,EAAuB,GACnBxtB,EAAI,EAAGA,GAAKumB,IAASvmB,EAAGwtB,EAAIvtB,MAAoB,IAAbgpJ,EAAKotD,KAAc4E,GAAqB6I,IAAaz0G,EAAM,IACtG,OAAO7hF,CACR,CAGA,SAAS6uM,GAAoBhtH,EAAMzwG,EAAQqqJ,GAC1C,IAAInqI,EAAO,EAAG7C,EAAO,EACL,IAAbgtI,EAAKotD,MACPv3L,EAAOuwF,EAAK6tF,WAAW,GACvBjhL,EAAOozF,EAAK6tF,WAAW,KAEvBjhL,EAAO,EAAIozF,EAAK6tF,WAAW,GAC3Bp+K,EAAO,EAAIuwF,EAAK6tF,WAAW,IAEzBj0C,EAAKotD,MAAQ,GAAKptD,EAAKotD,KAAO,MAAOv3L,EAAmB,KAAR7C,IAAWA,EAAO,MAErE,IAAI,IAAIjc,EAAI,EAAGovH,EAA0B,GAAIpvH,GAAK8e,IAASswG,EAAEpvH,GAAK,MAAOA,EACxE,IAAI,IAAI0f,EAAI,EAAGA,GAAKzD,IAAQyD,EAAG0vG,EAAEpvH,GAAG0f,GAAKo8M,GAAYzsH,EAAM45C,EAAKotD,MACjE,OAAOjnF,CACR,CA6EA,SAASktG,GAAgBjtH,EAAMzwG,EAAQqqJ,GAEtC,OADA55C,EAAKlN,GAAK,EACH,CAACs5H,GAAiBpsH,GAC1B,CACA,SAASktH,GAAiBltH,GAEzB,OADAA,EAAKlN,GAAK,EACH,EACR,CAUA,SAASq6H,GAAgBntH,GAExB,OADAA,EAAKlN,GAAK,EACH,CAAC0gH,GAAYxzG,GAA4B,EAArBA,EAAK6tF,WAAW,GAC5C,CAEA,IAWIu/B,GAAY,CACf,OACA,MACA,UACA,KACA,SACA,KACA,eACA,KACA,SACA,KACA,KACA,KACA,cACA,KACA,KACA,KACA,YA6CGC,GAAW,CACd,EAAM,CAAEz/J,EAAE,SAAUyB,EAxPrB,SAAsB2wC,EAAMzwG,EAAQqqJ,GAEnC,OADA55C,EAAKlN,IACF8mD,GAAqB,IAAbA,EAAKotD,KAAmB,CAAChnG,EAAK6tF,WAAW,EAAG,KAAM,GAGtD,CAFG7tF,EAAK6tF,WAAW,GAChB7tF,EAAK6tF,WAAWj0C,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,GAExD,GAmPC,EAAM,CAAEp5I,EAAE,SAAUyB,EAnGF62I,IAoGlB,EAAM,CAAEt4I,EAAE,SAAUyB,EAAEy8J,IACtB,EAAM,CAAEl+J,EAAE,SAAUyB,EAAEy8J,IACtB,EAAM,CAAEl+J,EAAE,SAAUyB,EAAEy8J,IACtB,EAAM,CAAEl+J,EAAE,SAAUyB,EAAEy8J,IACtB,EAAM,CAAEl+J,EAAE,WAAYyB,EAAEy8J,IACxB,EAAM,CAAEl+J,EAAE,YAAayB,EAAEy8J,IACzB,EAAM,CAAEl+J,EAAE,QAASyB,EAAEy8J,IACrB,GAAM,CAAEl+J,EAAE,QAASyB,EAAEy8J,IACrB,GAAM,CAAEl+J,EAAE,QAASyB,EAAEy8J,IACrB,GAAM,CAAEl+J,EAAE,QAASyB,EAAEy8J,IACrB,GAAM,CAAEl+J,EAAE,QAASyB,EAAEy8J,IACrB,GAAM,CAAEl+J,EAAE,QAASyB,EAAEy8J,IACrB,GAAM,CAAEl+J,EAAE,WAAYyB,EAAEy8J,IACxB,GAAM,CAAEl+J,EAAE,WAAYyB,EAAEy8J,IACxB,GAAM,CAAEl+J,EAAE,WAAYyB,EAAEy8J,IACxB,GAAM,CAAEl+J,EAAE,WAAYyB,EAAEy8J,IACxB,GAAM,CAAEl+J,EAAE,YAAayB,EAAEy8J,IACzB,GAAM,CAAEl+J,EAAE,aAAcyB,EAAEy8J,IAC1B,GAAM,CAAEl+J,EAAE,WAAYyB,EAAEy8J,IACxB,GAAM,CAAEl+J,EAAE,aAAcyB,EAAEy8J,IAC1B,GAAM,CAAEl+J,EAAE,SAAUyB,EAzPrB,SAAsB2wC,EAAMzwG,EAAQqqJ,GAAkB,OAAV55C,EAAKlN,IAAY6gH,GAA2B3zG,EAAMzwG,EAAUqqJ,EAAO,GA0P9G,GAAM,CAAEhsF,EAAE,WAAYyB,EAlDvB,SAAwB2wC,EAAMzwG,EAAQqqJ,GAIrC,OAHA55C,EAAKlN,GAAK,EACVkN,EAAKlN,GAAK,EACVkN,EAAKlN,GAAmB,GAAb8mD,EAAKotD,KAAY,EAAI,EACzB,CAAC,WACT,GA8CC,GAAM,CAAEp5I,EAAE,cAAeyB,EA7C1B,SAA2B2wC,EAAMzwG,EAAQqqJ,GAExC,OADA55C,EAAKlN,GAAmB,GAAb8mD,EAAKotD,KAAY,EAAI,EACzB,CAAC,cACT,GA2CC,GAAM,CAAEp5I,EAAE,SAAUyB,EAxQrB,SAAsB2wC,GAAkB,OAAVA,EAAKlN,IAAYw1G,GAAKtoG,EAAK6tF,WAAW,GAAK,GAyQxE,GAAM,CAAEjgI,EAAE,UAAWyB,EAnQtB,SAAuB2wC,GAAkB,OAAVA,EAAKlN,IAAiC,IAArBkN,EAAK6tF,WAAW,EAAO,GAoQtE,GAAM,CAAEjgI,EAAE,SAAUyB,EAvQrB,SAAsB2wC,GAAkB,OAAVA,EAAKlN,IAAYkN,EAAK6tF,WAAW,EAAI,GAwQlE,GAAM,CAAEjgI,EAAE,SAAUyB,EAlQrB,SAAsB2wC,GAAkB,OAAVA,EAAKlN,IAAYg5G,GAAW9rG,EAAU,GAmQnE,GAAM,CAAEpyC,EAAE,WAAYyB,EAhZvB,SAAwB2wC,EAAMzwG,EAAQqqJ,GACrC,IAAIj3I,GAAyB,GAAjBq9F,EAAKA,EAAKlN,OAAgB,EAEtC,OADAkN,EAAKlN,GAAkB,GAAb8mD,EAAKotD,KAAY,EAAiB,IAAbptD,EAAKotD,KAAa,GAAK,EAC/C,CAACrkM,EACT,GA6YC,GAAM,CAAEirD,EAAE,UAAWyB,EA9StB,SAAuB2wC,EAAMzwG,EAAQqqJ,GAEpC,IAAIj3I,GAAuB,GAAfq9F,EAAKA,EAAKlN,KAAY,EAClCkN,EAAKlN,GAAK,EACV,IAAIw6H,EAAQttH,EAAK6tF,WAAWj0C,GAAQA,EAAKotD,MAAQ,EAAI,EAAI,GACzD,MAAO,CAACumB,GAASD,GAAQE,GAAKF,GAAQ3qN,EACvC,GAySC,GAAM,CAAEirD,EAAE,aAAcyB,EAvSzB,SAA0B2wC,EAAMzwG,EAAQqqJ,GACvC,IAAIj3I,EAAOq9F,EAAKA,EAAKlN,KACjB26H,EAAUztH,EAAK6tF,WAAW,GAAI/5K,EAAM8lI,GAAQA,EAAKotD,MAAQ,EAAI,CAAU,IAARrkM,GAAgB,EAAI,EAAIq9F,EAAK6tF,WAAW,IAI5G,SAAkB7tF,GACjB,MAAO,CAACA,EAAKA,EAAKlN,EAAE,IAAI,EAAwB,MAArBkN,EAAK6tF,WAAW,GAC5C,CANiH6/B,CAAS1tH,GACzH,MAAO,CAACytH,GAAqB,IAAX35M,EAAI,GAAW05M,GAAOG,IAAO75M,EAAI,IACpD,GAoSC,GAAM,CAAE85C,EAAE,UAAWyB,EA1MtB,SAAuB2wC,EAAMzwG,EAAQqqJ,GACpC,IAAIj3I,EAAQq9F,EAAK6tF,WAAW,KAAO,EAAK,EACpCv5L,GAAMslJ,GAASA,EAAKotD,MAAQ,EAAM,EAAI,EACtC4mB,EAAY5tH,EAAK6tF,WAAWv5L,GAChC,OAAOslJ,EAAKotD,MACX,KAAK,EAAGhnG,EAAKlN,GAAK,EAAG,MACrB,KAAK,EAAG,KAAK,EAAGkN,EAAKlN,GAAK,EAAG,MAC7B,KAAK,EAAGkN,EAAKlN,GAAK,GAEnB,MAAO,CAACnwF,EAAM,EAAGirN,EAClB,GAiMC,GAAM,CAAEhgK,EAAE,SAAUyB,EA7UrB,SAAsB2wC,EAAMzwG,EAAQqqJ,GAEnC,IAAIj3I,GAAuB,GAAfq9F,EAAKA,EAAKlN,KAAY,EAGlC,OAFAkN,EAAKlN,GAAK,EAEH,CAACnwF,EADEupN,GAAclsH,EAAM,EAAG45C,GAElC,GAwUC,GAAM,CAAEhsF,EAAE,UAAWyB,EAnctB,SAAuB2wC,EAAMzwG,EAAQqqJ,GAGpC,MAAO,EAFsB,GAAjB55C,EAAKA,EAAKlN,OAAgB,EAC3Bk5H,GAAehsH,EAAM45C,EAAKotD,MAAQ,GAAKptD,EAAKotD,KAAmBptD,GAE3E,GAgcC,GAAM,CAAEhsF,EAAE,aAAcyB,EA/KzB,SAA0B2wC,EAAMzwG,EAAQqqJ,GACvC,IAAIj3I,EAAQq9F,EAAK6tF,WAAW,KAAO,EAAK,EAGxC,OAFA7tF,EAAKlN,GAAM8mD,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,EAEjC,CAACrkM,EADEq9F,EAAK6tF,WAAWj0C,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,GAExD,GA2KC,GAAM,CAAEp5I,EAAE,YAAayB,EA1IF62I,IA2IrB,GAAM,CAAEt4I,EAAE,cAAeyB,EAzIF62I,IA0IvB,GAAM,CAAEt4I,EAAE,aAAcyB,EA1KzB,SAA0B2wC,EAAMzwG,EAAQqqJ,GAGvC,MAAO,CAFK55C,EAAK6tF,WAAW,KAAO,EAAK,EAC9B7tF,EAAK6tF,WAAWj0C,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,GAExD,GAuKC,GAAM,CAAEp5I,EAAE,YAAayB,EAnKxB,SAAyB2wC,EAAMzwG,EAAQqqJ,GACtC,IAAIj3I,EAAQq9F,EAAK6tF,WAAW,KAAO,EAAK,EAIxC,OAHA7tF,EAAKlN,GAAK,EACP8mD,EAAKotD,KAAO,GAAGhnG,EAAKlN,IACP,IAAb8mD,EAAKotD,OAAYhnG,EAAKlN,GAAK,GACvB,CAACnwF,EACT,GA8JC,GAAM,CAAEirD,EAAE,aAAcyB,EArbzB,SAA0B2wC,EAAMzwG,EAAQqqJ,GACvC,IAAIj3I,GAAyB,GAAjBq9F,EAAKA,EAAKlN,OAAgB,EAEtC,OADAkN,EAAKlN,GAAK8mD,GAASA,EAAKotD,KAAO,EAAK,GAAMptD,EAAKotD,KAAO,EAAI,EAAI,EACvD,CAACrkM,EACT,GAkbC,GAAM,CAAEirD,EAAE,UAAWyB,EA5UtB,SAAuB2wC,EAAMzwG,EAAQqqJ,GACpC,IAAIj3I,GAAuB,GAAfq9F,EAAKA,EAAKlN,KAAY,EAClCkN,EAAKlN,GAAK,EACV,IAAI9oF,EAvJL,SAA0Bg2F,EAAMzwG,EAAQqqJ,GACvC,IAAIotD,EAAOptD,GAAQA,EAAKotD,KAAOptD,EAAKotD,KAAO,EAC3C,GAAGA,GAAQ,GAAKA,GAAQ,EAAG,OAS5B,SAAgChnG,GAC/B,IAAI6tH,EAAK7tH,EAAK6tF,WAAW,GACrBtyL,EAAIykG,EAAK6tF,WAAW,GACpBkZ,GAAa,MAAL8mB,IAAgB,GAAI/mB,GAAa,MAAL+mB,IAAgB,GAIxD,OAHAA,GAAM,MACK,GAAR9mB,GAAa8mB,GAAM,OAAQA,GAAU,OAC7B,GAAR/mB,GAAavrM,GAAK,MAAMA,GAAQ,KAC5B,CAACE,EAAEoyN,EAAGtyN,EAAEA,EAAEurM,KAAKA,EAAKC,KAAKA,EACjC,CAjBmC+mB,CAAuB9tH,GACzD,IAAIvkG,EAAIukG,EAAK6tF,WAAWmZ,GAAQ,GAAK,EAAI,GACrC+mB,EAAK/tH,EAAK6tF,WAAW,GACrBiZ,GAAa,MAALinB,IAAgB,GAAIhnB,GAAa,MAALgnB,IAAgB,GAExD,GADAA,GAAM,MACK,GAARhnB,EAAW,KAAMtrM,EAAI,QAASA,GAAK,QACtC,GAAW,GAARqrM,EAAW,KAAMinB,EAAK,MAAQA,GAAU,MAC3C,MAAO,CAACtyN,EAAIF,EAAEwyN,EAAGjnB,KAAKA,EAAKC,KAAKA,EACjC,CA6IWinB,CAAiBhuH,EAAM,EAAG45C,GACpC,MAAO,CAACj3I,EAAMqH,EACf,GAwUC,GAAM,CAAE4jD,EAAE,WAAYyB,EApavB,SAAwB2wC,EAAMzwG,EAAQqqJ,GACrC,IAAIj3I,GAAyB,GAAjBq9F,EAAKA,EAAKlN,OAAgB,EAClC79F,EA5FL,SAA2B+qG,EAAMzwG,EAAQqqJ,GACxC,GAAGA,EAAKotD,KAAO,EAAG,OAAOilB,GAAqBjsH,GAC9C,IAAIvkG,EAAEukG,EAAK6tF,WAAwB,IAAbj0C,EAAKotD,KAAa,EAAI,GAAIpyE,EAAE50B,EAAK6tF,WAAwB,IAAbj0C,EAAKotD,KAAa,EAAI,GACpFzrM,EAAEwwN,GAAc/rH,EAAM,GACtBwF,EAAEumH,GAAc/rH,EAAM,GAC1B,MAAO,CAAE1uF,EAAE,CAAC7V,EAAEA,EAAGF,EAAEA,EAAE,GAAIurM,KAAKvrM,EAAE,GAAIwrM,KAAKxrM,EAAE,IAAKsgB,EAAE,CAACpgB,EAAKF,EAAEiqG,EAAE,GAAIshG,KAAKthG,EAAE,GAAIuhG,KAAKvhG,EAAE,IACnF,CAsFYyoH,CAAkBjuH,EAAMzwG,EAAYqqJ,GAC/C,MAAO,CAACj3I,EAAM1N,EACf,GAiaC,GAAM,CAAE24D,EAAE,cAAeyB,EA5D1B,SAA2B2wC,GAG1B,MAAO,CAFKA,EAAK6tF,WAAW,KAAO,EAAK,EAC9B7tF,EAAK6tF,WAAW,GAE3B,GAyDC,GAAM,CAAEjgI,EAAE,eAAgByB,EAxD3B,SAA4B2wC,GAG3B,MAAO,CAFKA,EAAK6tF,WAAW,KAAO,EAAK,EAC9B7tF,EAAK6tF,WAAW,GAE3B,GAqDC,GAAM,CAAEjgI,EAAE,WAAYyB,EA1MvB,SAAwB2wC,EAAMzwG,EAAQqqJ,GACrC,OAAgB,GAAbA,EAAKotD,KAMT,SAA8BhnG,GAC7B,IAAIr9F,EAAQq9F,EAAK6tF,WAAW,KAAO,EAAK,EACpCqgC,EAAOluH,EAAK6tF,WAAW,EAAG,KAC9B7tF,EAAKlN,GAAK,EACV,IAAI86H,EAAY5tH,EAAK6tF,WAAW,GAEhC,OADA7tF,EAAKlN,GAAK,GACH,CAACnwF,EAAMurN,EAAMN,EACrB,CAb2BO,CAAqBnuH,GAIxC,CAHKA,EAAK6tF,WAAW,KAAO,EAAK,EAC7B7tF,EAAK6tF,WAAW,GACX7tF,EAAK6tF,WAAW,GAEjC,GAqMC,GAAM,CAAEjgI,EAAE,WAAYyB,EAzUvB,SAAwB2wC,EAAMzwG,EAAQqqJ,GACrC,IAAIj3I,GAAuB,GAAfq9F,EAAKA,EAAKlN,KAAY,EAClCkN,EAAKlN,GAAK,EACV,IAAIo7H,EAAOluH,EAAK6tF,WAAW,GAG3B,OAFGj0C,GAAqB,GAAbA,EAAKotD,OAAWhnG,EAAKlN,GAAK,IAE9B,CAACnwF,EAAMurN,EADJhC,GAAclsH,EAAM,EAAG45C,GAElC,GAmUC,GAAM,CAAEhsF,EAAE,YAAayB,EAzcxB,SAAyB2wC,EAAMzwG,EAAQqqJ,GACtC,IAAIj3I,GAAyB,GAAjBq9F,EAAKA,EAAKlN,OAAgB,EAClCo7H,EAAOluH,EAAK6tF,WAAW,EAAG,KAE9B,GAAGj0C,GACG,IADUA,EAAKotD,KACZhnG,EAAKlN,GAAK,GAInB,MAAO,CAACnwF,EAAMurN,EADHlC,GAAehsH,EAAM1rG,EAAGslJ,GAEpC,GAgcC,GAAM,CAAEhsF,EAAE,cAAeyB,EAnK1B,SAA2B2wC,EAAMzwG,EAAQqqJ,GACxC,IAAIj3I,GAAyB,GAAjBq9F,EAAKA,EAAKlN,OAAgB,EAClCo7H,EAAOluH,EAAK6tF,WAAW,GACvBv5L,EAAI,EACR,GAAGslJ,EAAM,OAAOA,EAAKotD,MACpB,KAAK,EAAG1yM,EAAI,GAAI,MAChB,KAAK,GAAIA,EAAI,EAGd,OADA0rG,EAAKlN,GAAKx+F,EACH,CAACqO,EAAMurN,EACf,GA0JC,GAAM,CAAEtgK,EAAE,eAAgByB,EAxb3B,SAA4B2wC,EAAMzwG,EAAQqqJ,GACzC,IAAIj3I,GAAyB,GAAjBq9F,EAAKA,EAAKlN,OAAgB,EAClCo7H,EAAOluH,EAAK6tF,WAAW,GACvBv5L,EAAI,EACR,GAAGslJ,EAAM,OAAOA,EAAKotD,MACpB,KAAK,EAAGhnG,EAAKlN,GAAK,GAAIx+F,EAAI,EAAG,MAC7B,KAAK,GAAIA,EAAI,GAGd,OADA0rG,EAAKlN,GAAKx+F,EACH,CAACqO,EAAMurN,EACf,GA+aC,IAAM,CAAC,GAGJE,GAAW,CACd,GAAM,GAAM,GAAM,GAClB,GAAM,GAAM,GAAM,GAClB,GAAM,GAAM,GAAM,GAClB,GAAM,GAAM,GAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,IAGfC,GAAQ,CACX,EAAM,CAAEzgK,EAAE,YAAayB,EAAE89J,IACzB,EAAM,CAAEv/J,EAAE,WAAYyB,EApJF49J,IAqJpB,EAAM,CAAEr/J,EAAE,YAAayB,EAxKF49J,IAyKrB,EAAM,CAAEr/J,EAAE,YAAayB,EApJF49J,IAqJrB,EAAM,CAAEr/J,EAAE,aAAcyB,EApKF49J,IAqKtB,GAAM,CAAEr/J,EAAE,gBAAiByB,EA9JF49J,IA+JzB,GAAM,CAAEr/J,EAAE,iBAAkByB,EA3JF69J,IA4J1B,GAAM,CAAEt/J,EAAE,aAAcyB,EA3KF69J,IA4KtB,GAAM,CAAEt/J,EAAE,cAAeyB,EA1KF69J,IA2KvB,GAAM,CAAEt/J,EAAE,mBAAoByB,EAhKF89J,IAiK5B,GAAM,CAAEv/J,EAAE,UAAWyB,EArItB,SAAuB2wC,GACtBA,EAAKlN,GAAK,EACV,IAAIo7H,EAAOluH,EAAK6tF,WAAW,GACvBD,EAAQ5tF,EAAK6tF,WAAW,GACxB9G,EAAM/mF,EAAK6tF,WAAW,GACtBtyL,EAAIykG,EAAK6tF,WAAW,GACpBroF,EAAIxF,EAAK6tF,WAAW,GAExB,MAAO,CAACqgC,KAAMA,EAAMI,QAAe,EAAN1gC,EAAY2gC,GADhCnB,GAAWx/B,GAAS,EAAK,IACc7G,IAAIA,EAAKxrL,EAAEA,EAAGiqG,EAAEA,EACjE,GA6HC,GAAM,CAAE53C,EAAE,YAAayB,EA3HxB,SAAyB2wC,GAExB,OADAA,EAAKlN,GAAK,EACH,CAACkN,EAAK6tF,WAAW,GACzB,GAyHC,IAAM,CAAC,GAEJ2gC,GAAQ,CACX,EAAM,CAAE5gK,EAAE,cAAeyB,EArG1B,SAA2B2wC,GAE1B,OADAA,EAAKlN,GAAK,EACH,CAAC,EAAG,EACZ,GAmGC,EAAM,CAAEllC,EAAE,cAAeyB,EApa1B,SAA2B2wC,EAAMzwG,EAAQqqJ,GACxC,IAAI2yE,EAA4B,IAAjBvsH,EAAKA,EAAKlN,EAAE,GAAa,EAAI,EAE5C,OADAkN,EAAKlN,GAAK8mD,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,EAChC,CAACulB,EACT,GAiaC,EAAM,CAAE3+J,EAAE,YAAayB,EAnbxB,SAAyB2wC,EAAMzwG,EAAQqqJ,GACtC,IAAI60E,EAA0B,IAAjBzuH,EAAKA,EAAKlN,EAAE,GAAa,EAAI,EAE1C,OADAkN,EAAKlN,GAAK,EACH,CAAC27H,EAAOzuH,EAAK6tF,WAAWj0C,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,GAC7D,GAgbC,EAAM,CAAEp5I,EAAE,gBAAiByB,EArc5B,SAA6B2wC,EAAMzwG,EAAQqqJ,GAC1C55C,EAAKlN,GAAI,EAIT,IAHA,IAAIp2E,EAASsjF,EAAK6tF,WAAWj0C,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,GACtDjnF,EAAsB,GAElBpvH,EAAI,EAAGA,GAAK+rB,IAAU/rB,EAAGovH,EAAEnvH,KAAKovG,EAAK6tF,WAAWj0C,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,IACrF,OAAOjnF,CACR,GA+bC,EAAM,CAAEnyD,EAAE,cAAeyB,EA5b1B,SAA2B2wC,EAAMzwG,EAAQqqJ,GACxC,IAAI80E,EAA4B,IAAjB1uH,EAAKA,EAAKlN,EAAE,GAAa,EAAI,EAE5C,OADAkN,EAAKlN,GAAK,EACH,CAAC47H,EAAS1uH,EAAK6tF,WAAWj0C,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,GAC/D,GAybC,GAAM,CAAEp5I,EAAE,aAAcyB,EAhWzB,SAA0B2wC,EAAMzwG,EAAQqqJ,GACvC55C,EAAKlN,GAAK8mD,GAAqB,GAAbA,EAAKotD,KAAY,EAAI,CACxC,GA+VC,GAAM,CAAEp5I,EAAE,gBAAiByB,EAAEi9J,IAC7B,GAAM,CAAE1+J,EAAE,gBAAiByB,EAAEi9J,IAC7B,GAAM,CAAE1+J,EAAE,eAAgByB,EA9Z3B,SAA4B2wC,GAE3B,OADAA,EAAK6tF,WAAW,GACT2+B,GAAuBxsH,EAC/B,GA4ZC,GAAM,CAAEpyC,EAAE,mBAAoByB,EAzZ/B,SAAgC2wC,GAE/B,OADAA,EAAK6tF,WAAW,GACT2+B,GAAuBxsH,EAC/B,GAuZC,IAAM,CAAEpyC,EAAE,iBAAkByB,EApb7B,SAA8B2wC,GAC7B,IAAIyuH,EAA0B,IAAjBzuH,EAAKA,EAAKlN,EAAE,GAAa,EAAI,EAE1C,OADAkN,EAAKlN,GAAK,EACH,CAAC27H,EAAOzuH,EAAK6tF,WAAW,GAChC,GAibC,IAAM,CAAC,GAIR,SAAS8gC,GAAe3uH,EAAMzwG,EAAQq/N,EAAMh1E,GAC3C,GAAGA,EAAKotD,KAAO,EAAG,OAAOd,GAAUlmG,EAAMzwG,GAGzC,IAFA,IAAIylB,EAASgrF,EAAKlN,EAAIvjG,EAClBwwH,EAAI,GACApvH,EAAI,EAAGA,IAAMi+N,EAAKr/N,SAAUoB,EACnC,OAAOi+N,EAAKj+N,GAAG,IACd,IAAK,WACJi+N,EAAKj+N,GAAG,GAAKq8N,GAAoBhtH,EAAM,EAAG45C,GAC1C75B,EAAEnvH,KAAKg+N,EAAKj+N,GAAG,IACf,MACD,IAAK,aACJi+N,EAAKj+N,GAAG,GAAKm8N,GAAkB9sH,EAAM4uH,EAAKj+N,GAAG,GAAIipJ,GACjD75B,EAAEnvH,KAAKg+N,EAAKj+N,GAAG,IACf,MACD,IAAK,SACDipJ,GAAqB,IAAbA,EAAKotD,OACf4nB,EAAKj+N,GAAG,GAAG,GAAKqvG,EAAK6tF,WAAW,GAChC9tE,EAAEnvH,KAAKg+N,EAAKj+N,GAAG,KACd,MACH,IAAK,UACL,IAAK,iBACL,IAAK,aACL,IAAK,cACJ,KAAM,eAAiBi+N,EAAKj+N,GAAG,GAQlC,OADc,IAHdpB,EAASylB,EAASgrF,EAAKlN,IAGNitB,EAAEnvH,KAAKs1M,GAAUlmG,EAAMzwG,IACjCwwH,CACR,CAiBA,SAAS8uG,GAAgBx/J,GAExB,IADA,IAAI0wD,EAAsB,GAClBpvH,EAAI,EAAGA,EAAI0+D,EAAE9/D,SAAUoB,EAAG,CAEjC,IADA,IAAIyD,EAAIi7D,EAAE1+D,GAAI8K,EAAsB,GAC5B4U,EAAI,EAAGA,EAAIjc,EAAE7E,SAAU8gB,EAAG,CACjC,IAAIhc,EAAID,EAAEic,GACPhc,EAEG,IAFOA,EAAE,GAIboH,EAAE7K,KAAK,IAAMyD,EAAE,GAAG2L,QAAQ,KAAK,MAAQ,KAC/BvE,EAAE7K,KAAKyD,EAAE,IACZoH,EAAE7K,KAAK,GACf,CACAmvH,EAAEnvH,KAAK6K,EAAEwM,KAAK,KACf,CACA,OAAO83G,EAAE93G,KAAK,IACf,CAGA,IAAI6mN,GAAW,CACdC,OAAQ,IACRC,UAAW,IACXC,OAAQ,IACRC,MAAO,IACPC,MAAO,KACPC,MAAO,IACPC,MAAO,KACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,SAAU,IACVC,OAAQ,KAYT,SAASC,GAAaC,EAAU1B,EAAiBt0E,GAChD,IAAIg2E,EAAU,MAAO,cACrB,GAAGh2E,EAAKotD,KAAO,KAAO4oB,EAASC,MAAQD,EAASC,IAAI3B,IAAQ,OAAO0B,EAASjnB,WAAWulB,GACvF,IAAI0B,EAASC,IAAK,MAAO,cACzB,IAAIA,EAAMD,EAASC,IAAI3B,GACvB,GAAGt0E,EAAKotD,KAAO,EAGd,OAFGknB,EAAO,MAAOA,GAAO,OACrBA,EAAO,IAAGA,GAAQA,GACN,GAARA,EAAY,GAAK0B,EAASC,IAAI3B,EAAO,GAE7C,IAAI2B,EAAK,MAAO,cAChB,IAAI9vG,EAAI,GACR,GAAG65B,EAAKotD,KAAO,EAAG,OAAO4oB,EAASC,EAAI,IAAI,IACzC,KAAK,IAEJ,OADA9vG,GAAe,GAAX8vG,EAAI,GAAW,OAASD,EAASjnB,WAAWknB,EAAI,IAC7CA,EAAI,IAAMA,EAAI,GAAK9vG,EAAIA,EAAI,IAAM6vG,EAASjnB,WAAWknB,EAAI,IACjE,KAAK,IACJ,OAAe,MAAZj2E,EAAKk2E,IAAoBF,EAASjnB,WAAW/uD,EAAKk2E,KAC9C,cAAgBF,EAASC,EAAI,IAAI,GAGzC,QAAS,MAAO,aAAeD,EAASC,EAAI,IAAI,GAEjD,OAAOD,EAASC,EAAI,IAAI,GAAG,IAC1B,KAAK,KAEJ,OADA9vG,GAAe,GAAX8vG,EAAI,GAAW,OAAUD,EAASjnB,WAAWknB,EAAI,KAAO,cACrDA,EAAI,IAAMA,EAAI,GAAK9vG,EAAIA,EAAI,IAAM6vG,EAASjnB,WAAWknB,EAAI,IACjE,KAAK,MAAQ,OAAOD,EAASC,EAAI,IAAI5gO,MAAM,GAAG4R,KAAI,SAAS7R,GAAQ,OAAOA,EAAKg2G,IAAM,IAAG/8F,KAAK,MAC7F,QACC,OAAI2nN,EAASC,EAAI,IAAI,GAAG,IACxB9vG,GAAe,GAAX8vG,EAAI,GAAW,OAAUD,EAASC,EAAI,IAAI,GAAG,GAAGA,EAAI,KAAO,cACxDA,EAAI,IAAMA,EAAI,GAAK9vG,EAAIA,EAAI,IAAM6vG,EAASC,EAAI,IAAI,GAAG,GAAGA,EAAI,KAFhC,cAItC,CACA,SAASE,GAASH,EAAU1B,EAAiBt0E,GAC5C,IAAIo2E,EAAUL,GAAaC,EAAU1B,EAAMt0E,GAC3C,MAAkB,QAAXo2E,EAAoBA,EAAU9nB,GAAyB8nB,EAASp2E,EACxE,CACA,SAASq2E,GAAkBzS,EAAuBv8I,EAAO4lI,EAAc+oB,EAAUh2E,GAChF,IAEkC8nC,EAAIC,EAAgBpmL,EAAsCE,EAFxFurM,EAAQptD,GAAQA,EAAKotD,MAAS,EAC9BoC,EAAqC,CAAC93L,EAAE,CAAC/V,EAAE,EAAGE,EAAE,GAAGogB,EAAE,CAACtgB,EAAE,EAAGE,EAAE,IAC7DgyJ,EAA0B,GAA2CygE,EAAK,EAAGgC,EAAQ,EAAM/nB,EAAM,GACrG,IAAIqV,EAAQ,KAAOA,EAAQ,GAAG,GAAI,MAAO,GAEzC,IADA,IAnDsB9qN,EAAOikF,EACzBrlE,EAA4BuK,EAkD5Bs0M,GAAW,EAAGC,EAAK,GACf5nC,EAAK,EAAG6nC,EAAQ7S,EAAQ,GAAGjuN,OAAQi5L,EAAK6nC,IAAS7nC,EAAI,CAC5D,IAAIn5H,EAAImuJ,EAAQ,GAAGh1B,GACnB,OAAOn5H,EAAE,IACR,IAAK,YACJo+F,EAAM78J,KAAK,IAAM68J,EAAMvlG,OAAQ,MAChC,IAAK,WACJulG,EAAM78J,KAAK,IAAM68J,EAAMvlG,OAAQ,MAChC,IAAK,aACJulG,EAAM78J,KAAK68J,EAAMvlG,MAAQ,KAAM,MAEhC,IAAK,SACL,IAAK,YACL,IAAK,SACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,WACL,IAAK,SAEJ,GADAw5H,EAAKj0B,EAAMvlG,MAAOy5H,EAAKl0B,EAAMvlG,MAC1BioK,GAAW,EAAG,CAChB,OAAO3S,EAAQ,GAAG2S,GAAS,GAAG,IAC7B,KAAK,EAEJC,EAAK1sC,GAAK,IAAK85B,EAAQ,GAAG2S,GAAS,GAAG,IAAK,MAC5C,KAAK,EAEJC,EAAK1sC,GAAK,KAAM85B,EAAQ,GAAG2S,GAAS,GAAG,IAAK,MAC7C,QAGC,GAFAC,EAAK,GAEFx2E,EAAKk3D,IAAK,MAAM,IAAIhiN,MAAM,+BAAiC0uN,EAAQ,GAAG2S,GAAS,GAAG,IAEvFxuC,GAAUyuC,EACVD,GAAW,CACZ,CACA1iE,EAAM78J,KAAK+wL,EAAGmtC,GAASz/J,EAAE,IAAIqyH,GAC7B,MAED,IAAK,WACJA,EAAKj0B,EAAMvlG,MAAOy5H,EAAKl0B,EAAMvlG,MAC7BulG,EAAM78J,KAAK+wL,EAAG,IAAID,GAClB,MACD,IAAK,WACJA,EAAKj0B,EAAMvlG,MAAOy5H,EAAKl0B,EAAMvlG,MAC7BulG,EAAM78J,KAAK+wL,EAAG,IAAID,GAClB,MACD,IAAK,WACJA,EAAKj0B,EAAMvlG,MAAOy5H,EAAKl0B,EAAMvlG,MAC7BulG,EAAM78J,MAxGoB+lF,EAwGE+qG,OAvG3BpwK,OAA4BuK,EAA5BvK,GADkB5e,EAwGMivL,GAvGdzyL,YAAY,KAAM2sB,EAAI86D,EAAIznF,YAAY,MAC3C,GAANoiB,IAAiB,GAANuK,EAAgBnpB,EAAQ,IAAMikF,EACzCrlE,EAAI,GAAKuK,EAAI,GAAKnpB,EAAMzD,MAAM,EAAGqiB,GAAG5I,eAAiBiuE,EAAI1nF,MAAM,EAAG4sB,GAAGnT,cAAsBhW,EAAQ,IAAMikF,EAAI1nF,MAAM4sB,EAAE,IACxH1b,QAAQwX,MAAM,uBAAwBjlB,EAAOikF,GACtCjkF,EAAQ,IAAMikF,KAoGlB,MAED,IAAK,gBAEL,IAAK,cAEL,IAAK,YAEL,IAAK,iBA2DL,IAAK,gBACL,IAAK,cA+FL,IAAK,aASL,IAAK,SAGL,IAAK,YAkBL,IAAK,cACL,IAAK,eACL,IAAK,cACL,IAAK,WACL,IAAK,cAGL,IAAK,aAEL,IAAK,cACJ,MA/LD,IAAK,SACkBp7E,EAAIqrM,GAAgBv3I,EAAE,GAAG,GAAa+5I,EAAQxvD,GACpE6T,EAAM78J,KAAKs2M,GAAgB3rM,EAAGyrM,IAC9B,MACD,IAAK,UACkBzrM,EAAIsrM,EAAOD,GAAgBv3I,EAAE,GAAG,GAAaw3I,EAAMjtD,GAASvqF,EAAE,GAAG,GACvFo+F,EAAM78J,KAAKs2M,GAAgB3rM,EAAGyrM,IAC9B,MACD,IAAK,WACkBknB,EAAoB7+J,EAAE,GAAG,GAAW9zD,EAAIqrM,GAAgBv3I,EAAE,GAAG,GAAa+5I,EAAQxvD,GACxGuuD,EAAQ4nB,GAASH,EAAU1B,EAAMt0E,GAEjC6T,EAAM78J,KAAKu3M,EAAQ,IAAMjB,GAAgB3rM,EAAGyrM,IAC5C,MAED,IAAK,UACL,IAAK,aAEJ,IAAIqd,EAAmBh1J,EAAE,GAAG,GAAas8E,EAAmBt8E,EAAE,GAAG,GAC7Dg1J,IAAMA,EAAO,GAEjB,IAAItyN,EAAe,IADnBsyN,GAAQ,KACe,GAAK52D,EAAMx+J,OAAOo1N,GACzC52D,EAAMl+J,QAAU80N,EACJ,SAAT14E,IAAiBA,EAAO55I,EAAKsiL,SAChC5mB,EAAM78J,KAAK+6I,EAAO,IAAM55I,EAAKkW,KAAK,KAAO,KACzC,MAED,IAAK,UACJwlJ,EAAM78J,KAAKy+D,EAAE,GAAK,OAAS,SAAU,MACtC,IAAK,SAOL,IAAK,SACJo+F,EAAM78J,KAAkBy+D,EAAE,IAAY,MANvC,IAAK,SACJo+F,EAAM78J,KAAK85H,OAAOr7D,EAAE,KAAM,MAC3B,IAAK,SAEJo+F,EAAM78J,KAAK,IAAMy+D,EAAE,GAAGrvD,QAAQ,KAAM,MAAQ,KAAM,MAGnD,IAAK,WACkBvE,EAAIwrM,GAAgB53I,EAAE,GAAG,GAAIw3I,EAAO,CAACv1L,EAAEu1L,GAAQuC,EAAQxvD,GAC7E6T,EAAM78J,KAAKw2M,GAAkB3rM,EAAYm+I,IACzC,MACD,IAAK,UACkBn+I,EAAIwrM,GAAgB53I,EAAE,GAAG,GAAI+5I,EAAQxvD,GAC3D6T,EAAM78J,KAAKw2M,GAAkB3rM,EAAYm+I,IACzC,MACD,IAAK,YACkBs0E,EAAoB7+J,EAAE,GAAG,GAAW5zD,EAAI4zD,EAAE,GAAG,GACnE84I,EAAQ4nB,GAASH,EAAU1B,EAAMt0E,GACjC6T,EAAM78J,KAAKu3M,EAAQ,IAAMf,GAAkB3rM,EAAYm+I,IACvD,MACD,IAAK,aACJ6T,EAAM78J,KAAK,OAAS68J,EAAMvlG,MAAQ,KAClC,MAMD,IAAK,UAEJgoK,EAAW7gK,EAAE,GAAG,GAChB,IAAIihK,GAAOV,EAASW,OAAO,IAAIL,EAAQ,KAAON,EAAS,IAAI,IAAIM,GAC3DlhO,EAAOshO,EAAMA,EAAItrH,KAAO,cAAgB0lB,OAAOwlG,GAEhDlhO,GAA2B,UAAnBA,EAAKC,MAAM,EAAE,KAAmB2qJ,EAAK42E,OAAMxhO,EAAOA,EAAKC,MAAM,IACxEw+J,EAAM78J,KAAK5B,GACX,MAED,IAAK,WAEJ,IAA6EyhO,EAAzEC,EAAsBrhK,EAAE,GAAG,GAE/B,GAF4C6gK,EAAW7gK,EAAE,GAAG,KAEzDuqF,EAAKotD,MAAQ,GAGT,CACN,IAAIjnF,EAAI,GAQR,GAP0C,SAArC6vG,EAASc,IAAU,IAAI,IAAI,IAAI,KACW,QAArCd,EAASc,IAAU,IAAI,IAAI,IAAI,GACrCd,EAASc,GAASR,IAAYN,EAASc,GAASR,GAASS,KAAO,IAClE5wG,EAAI6vG,EAASjnB,WAAWinB,EAASc,GAASR,GAASS,KAAK,GAAK,KAG1D5wG,EAAI6vG,EAASjnB,WAAWunB,EAAQ,GAAI,KACtCN,EAASc,IAAYd,EAASc,GAASR,GAAUnwG,GAAK6vG,EAASc,GAASR,GAASlrH,UAC/E,GAAG4qH,EAAS,IAAMA,EAAS,GAAGM,GAAUnwG,GAAK6vG,EAAS,GAAGM,GAASlrH,SAClE,CACJ,IAAI4rH,GAAYjB,GAAaC,EAAUc,EAAS92E,IAAO,IAAIr4I,MAAM,MAC9DqvN,EAASV,EAAU,GAAInwG,EAAI6wG,EAASV,EAAU,GAC5CnwG,GAAK,aACX,CACA0tC,EAAM78J,KAAKmvH,GACX,KACD,CApBI2wG,EAAU,IAAGA,GAAWA,GACxBd,EAASc,KAAUD,EAAab,EAASc,GAASR,IAoBlDO,IAAYA,EAAa,CAACzrH,KAAM,gBACpCyoD,EAAM78J,KAAK6/N,EAAWzrH,MACtB,MAED,IAAK,WACJ,IAAI6rH,EAAK,IAAKC,EAAK,IACnB,GAAGX,GAAW,EAAG,CAEhB,OADAC,EAAK,GACE5S,EAAQ,GAAG2S,GAAS,GAAG,IAE7B,KAAK,EAAGU,EAAKntC,GAAK,IAAK85B,EAAQ,GAAG2S,GAAS,GAAG,IAAMU,EAAI,MAExD,KAAK,EAAGA,EAAKntC,GAAK,KAAM85B,EAAQ,GAAG2S,GAAS,GAAG,IAAMU,EAAI,MAEzD,KAAK,EAAGC,EAAKptC,GAAK,IAAK85B,EAAQ,GAAG2S,GAAS,GAAG,IAAMW,EAAI,MAExD,KAAK,EAAGA,EAAKptC,GAAK,KAAM85B,EAAQ,GAAG2S,GAAS,GAAG,IAAMW,EAAI,MACzD,QAEC,GAAGl3E,EAAKk3D,IAAK,MAAM,IAAIhiN,MAAM,+BAAiC0uN,EAAQ,GAAG2S,GAAS,GAAG,IAEvFA,GAAW,CACZ,CACA1iE,EAAM78J,KAAKigO,EAAKpjE,EAAMvlG,MAAQ4oK,GAAK,MAEpC,IAAK,YAGL,IAAK,cA+CL,IAAK,aAGL,IAAK,eACJrjE,EAAM78J,KAAK,SAAU,MAhDtB,IAAK,SACJ2K,EAAI,CAACA,EAAG8zD,EAAE,GAAG,GAAY5zD,EAAG4zD,EAAE,GAAG,IACjC,IAAIqB,EAAK,CAACn1D,EAAGsrM,EAAKtrM,EAAGE,EAAEorM,EAAKprM,GAC5B,GAAGm0N,EAASmB,QAAQ5pB,GAAY5rM,IAAK,CACpC,IAAIy1N,EAAWpB,EAASmB,QAAQ5pB,GAAY5rM,IAC5CkyJ,EAAM78J,KAAKq/N,GAAkBe,EAAS5nB,EAAQ14I,EAAGk/J,EAAUh2E,GAC5D,KAAO,CACN,IAAIq3E,GAAM,EACV,IAAIvvC,EAAG,EAAEA,GAAIkuC,EAASsB,OAAO3hO,SAAUmyL,EAGtC,GADAC,EAAKiuC,EAASsB,OAAOxvC,KAClBnmL,EAAEA,EAAIomL,EAAG,GAAGrwK,EAAE/V,GAAKA,EAAEA,EAAIomL,EAAG,GAAG9lK,EAAEtgB,GACjCA,EAAEE,EAAIkmL,EAAG,GAAGrwK,EAAE7V,GAAKF,EAAEE,EAAIkmL,EAAG,GAAG9lK,EAAEpgB,GAApC,CACAgyJ,EAAM78J,KAAKq/N,GAAkBtuC,EAAG,GAAIynB,EAAQ14I,EAAGk/J,EAAUh2E,IACzDq3E,GAAM,EACN,KAH+C,CAK5CA,GAAKxjE,EAAM78J,KAAkBy+D,EAAE,GACpC,CACA,MAED,IAAK,WACJo+F,EAAM78J,KAAK,IAAMi+N,GAAuBx/J,EAAE,IAAkB,KAC5D,MAMD,IAAK,eACL,IAAK,mBACJ8gK,EAAU3nC,EACV,MAQD,IAAK,aACJ/6B,EAAM78J,KAAK,IACX,MAQD,IAAK,UAEJ68J,EAAM78J,KAAK,QAAUy+D,EAAE,GAAG03H,IAAM,KAAO13H,EAAE,GAAGk/J,GAAK,KACjD,MAcD,IAAK,YACL,IAAK,aACL,IAAK,cACL,IAAK,aACL,IAAK,YACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,WACL,IAAK,YACJ,MAAM,IAAIz/N,MAAM,oBAIjB,QAAS,MAAM,IAAIA,MAAM,+BAAiC47H,OAAOr7D,IAGlE,GAAgB,GAAbuqF,EAAKotD,MAAcmpB,GAAW,IAA+C,GAD/D,CAAC,eAAgB,mBAAoB,eACL7gO,QAAQkuN,EAAQ,GAAGh1B,GAAI,IAAW,CAElF,IAAI2oC,GAAQ,EACZ,QAFA9hK,EAAImuJ,EAAQ,GAAG2S,IAEN,GAAG,IAEX,KAAK,EAAGgB,GAAQ,EAEhB,KAAK,EAEJf,EAAK1sC,GAAK,IAAKr0H,EAAE,GAAG,IAAK,MAC1B,KAAK,EAAG8hK,GAAQ,EAEhB,KAAK,EAEJf,EAAK1sC,GAAK,KAAMr0H,EAAE,GAAG,IAAK,MAC3B,QAGC,GAFA+gK,EAAK,GAEFx2E,EAAKk3D,IAAK,MAAM,IAAIhiN,MAAM,+BAAiCugE,EAAE,GAAG,IAErEo+F,EAAM78J,MAAMugO,EAAQf,EAAK,IAAM3iE,EAAMvlG,OAASipK,EAAQ,GAAKf,IAC3DD,GAAW,CACZ,CACD,CACA,GAAG1iE,EAAMl+J,OAAS,GAAKqqJ,EAAKk3D,IAAK,MAAM,IAAIhiN,MAAM,qBACjD,MAAe,QAAZ2+J,EAAM,IAA0C,SAAZA,EAAM,IACtCA,EAAM,EACd,CA2GA,SAAS2jE,GAAwBpwN,EAAMzR,EAAQqqJ,GAC9C,IAAImzE,EAAM/rN,EAAK6sL,WAAW,GACtB+gC,EAjgBL,SAAoB5uH,EAAMzwG,EAAQqqJ,GAGjC,IAFA,IACIhlB,EAAG9wH,EADHkR,EAASgrF,EAAKlN,EAAIvjG,EACX8hO,EAAO,GACZr8M,GAAUgrF,EAAKlN,GACpBvjG,EAASylB,EAASgrF,EAAKlN,EACvBhvF,EAAKk8F,EAAKA,EAAKlN,GACf8hC,EAAIy4F,GAASvpN,IAAOupN,GAASe,GAAStqN,IAC5B,KAAPA,GAAsB,KAAPA,IAAa8wH,GAAY,KAAP9wH,EAAcuqN,GAAQG,IAAOxuH,EAAKA,EAAKlN,EAAI,KAC3E8hC,GAAMA,EAAEvlE,EACLgiK,EAAKzgO,KAAK,CAACgkI,EAAEhnE,EAAGgnE,EAAEvlE,EAAE2wC,EAAMzwG,EAAQqqJ,KADVssD,GAAUlmG,EAAMzwG,GAGhD,OAAO8hO,CACR,CAqfYC,CAAWtwN,EAAM+rN,EAAKnzE,GAC7BpxI,EAAKxH,EAAK6sL,WAAW,GAEzB,MAAO,CAAC+gC,EADGpmN,EAAK,EAAImmN,GAAe3tN,EAAMwH,EAAIomN,EAAMh1E,GAAQ,KAE5D,CAGA,IAAI23E,GAA+BH,GAE/BI,GAA8BJ,GAM9BK,GAA8BL,GAE9BM,GAAgCN,GAGpC,SAASO,GAAqBhuN,GAC7B,IAAU,EAANA,IAAYA,GAAOA,EAAMzQ,KAAKwlD,IAAI,EAAE,KAAO/0C,GAAO,EAAG,CACxD,IAAIiuN,EAAOp/B,GAAQ,IAKnB,OAJAo/B,EAAKpkC,YAAY,EAAG,GACpBokC,EAAKpkC,YAAY,EAAG,IACpBokC,EAAKpkC,YAAY,EAAG7pL,GACpBiuN,EAAKpkC,YAAY,EAAG,GACbokC,CACR,CAEA,IAAIpnG,EAAMgoE,GAAQ,IAKlB,OAJAhoE,EAAIgjE,YAAY,EAAG,IACnBhjE,EAAIgjE,YAAY,EAAG,IACnBhjE,EAAIgjE,YAAY,EAAG7pL,GACnB6mH,EAAIgjE,YAAY,EAAG,GACZhjE,CACR,CA2LA,IAAIqnG,GAdJ,SAA2BluN,EAAuB6sM,GACjD,GAAiB,iBAAP7sM,EAAiB,OAAOguN,GAAqBhuN,GACvD,GAAiB,kBAAPA,EAAkB,OApK7B,SAA+BA,GAC9B,IAAIiuN,EAAOp/B,GAAQ,IAKnB,OAJAo/B,EAAKpkC,YAAY,EAAG,GACpBokC,EAAKpkC,YAAY,EAAG,IACpBokC,EAAKpkC,YAAY,EAAG7pL,EAAI,EAAE,GAC1BiuN,EAAKpkC,YAAY,EAAG,GACbokC,CACR,CA6JoCE,CAAsBnuN,GACzD,GAAG,+DAA+Db,KAAKa,GAAM,OA9K9E,SAA8BA,GAC7B,IAAIiuN,EAAOp/B,GAAQ,IAKnB,OAJAo/B,EAAKpkC,YAAY,EAAG,GACpBokC,EAAKpkC,YAAY,EAAG,IACpBokC,EAAKpkC,YAAY,EAAG7pL,GACpBiuN,EAAKpkC,YAAY,EAAG,GACbokC,CACR,CAuKqFG,EAAsBplB,GAAMhpM,IAChH,GAAGA,EAAI2G,MAAM,+IAAgJ,OA3IzJu8L,EAAOc,GADkBv4M,EA4I4JuU,IA1IrLwa,EAAMq0K,GAAQ,KACdhF,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,IACnBrvK,EAAIqvK,YAAY,EAAGqZ,EAAKprM,GACxB0iB,EAAIqvK,YAAY,EAAGqZ,EAAKtrM,GAAuB,KAAjBnM,EAAIuoH,OAAO,GAAY,EAAI,IAAI,IAAQvoH,EAAIkb,MAAM,QAAU,EAAI,IAAI,IACjG6T,EAAIqvK,YAAY,EAAG,GAEZrvK,EATR,IAA8B/uB,EACzBy3M,EACA1oL,EA2IJ,GAAGxa,EAAI2G,MAAM,yRAA0R,OA3FxS,SAAgC0nN,GAC/B,IAAI9xN,EAAQ8xN,EAAKzwN,MAAM,KAAMnS,EAAM8Q,EAAM,GAErCie,EAAMq0K,GAAQ,IAClBr0K,EAAIqvK,YAAY,EAAG,IAGH,IAAIqZ,EAAOc,GAA3Bv4M,EAAM8Q,EAAM,IAkBZ,OAjBAie,EAAIqvK,YAAY,EAAG,IACnBrvK,EAAIqvK,YAAY,EAAGqZ,EAAKprM,GACxB0iB,EAAIqvK,YAAY,EAAGqZ,EAAKtrM,GAAuB,KAAjBnM,EAAIuoH,OAAO,GAAY,EAAI,IAAI,IAAQvoH,EAAIkb,MAAM,QAAU,EAAI,IAAI,IACjG6T,EAAIqvK,YAAY,EAAG,GAGHqZ,EAAOc,GAAvBv4M,EAAM8Q,EAAM,IACZie,EAAIqvK,YAAY,EAAG,IACnBrvK,EAAIqvK,YAAY,EAAGqZ,EAAKprM,GACxB0iB,EAAIqvK,YAAY,EAAGqZ,EAAKtrM,GAAuB,KAAjBnM,EAAIuoH,OAAO,GAAY,EAAI,IAAI,IAAQvoH,EAAIkb,MAAM,QAAU,EAAI,IAAI,IACjG6T,EAAIqvK,YAAY,EAAG,GAGnBrvK,EAAIqvK,YAAY,EAAG,IAEnBrvK,EAAIqvK,YAAY,EAAG,GAEZrvK,CACR,CAiE+S8zM,CAAuBtuN,GACrU,GAAGA,EAAI2G,MAAM,8RAA+R,OA9B7S,SAAiC0nN,EAAMxhB,GACtC,IAAI0hB,EAAWF,EAAK9iO,YAAY,KAC5Bi5M,EAAQ6pB,EAAK/iO,MAAM,EAAGijO,GAC1BF,EAAOA,EAAK/iO,MAAMijO,EAAS,GACL,KAAnB/pB,EAAMxwF,OAAO,KAAWwwF,EAAQA,EAAMl5M,MAAM,GAAI,GAAG+Q,QAAQ,MAAO,MACrE,IAAIihE,EAAQ2mI,GAAaoqB,GAErB7zM,EAAMq0K,GAAQ,IAYlB,OAXAr0K,EAAIqvK,YAAY,EAAG,IAEnBrvK,EAAIqvK,YAAY,EAAG,IACnBrvK,EAAIqvK,YAAY,EAAG,EAAIgjB,EAAG7H,WAAW9nM,KAAI,SAAS+sD,GAAK,OAAOA,EAAEllD,aAAe,IAAGpZ,QAAQ64M,EAAMz/L,gBAChGyV,EAAIqvK,YAAY,EAAGvsH,EAAM3vD,EAAE7V,GAC3B0iB,EAAIqvK,YAAY,EAAGvsH,EAAMplD,EAAEpgB,GAC3B0iB,EAAIqvK,YAAY,EAAGvsH,EAAM3vD,EAAE/V,GAC3B4iB,EAAIqvK,YAAY,EAAGvsH,EAAMplD,EAAEtgB,GAE3B4iB,EAAIqvK,YAAY,EAAG,GAEZrvK,CACR,CAUoTg0M,CAAwBxuN,EAAK6sM,GAChV,GAAG7sM,EAAI2G,MAAM,gNAAiN,OAlI/N,SAAgClb,EAAKohN,GACpC,IAAI0hB,EAAW9iO,EAAIF,YAAY,KAC3Bi5M,EAAQ/4M,EAAIH,MAAM,EAAGijO,GAErBrrB,EAAOc,GADXv4M,EAAMA,EAAIH,MAAMijO,EAAS,IAEH,KAAnB/pB,EAAMxwF,OAAO,KAAWwwF,EAAQA,EAAMl5M,MAAM,GAAI,GAAG+Q,QAAQ,MAAO,MAErE,IAAIme,EAAMq0K,GAAQ,IAQlB,OAPAr0K,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,IACnBrvK,EAAIqvK,YAAY,EAAG,EAAIgjB,EAAG7H,WAAW9nM,KAAI,SAAS+sD,GAAK,OAAOA,EAAEllD,aAAe,IAAGpZ,QAAQ64M,EAAMz/L,gBAChGyV,EAAIqvK,YAAY,EAAGqZ,EAAKprM,GACxB0iB,EAAIqvK,YAAY,EAAGqZ,EAAKtrM,GAAuB,KAAjBnM,EAAIuoH,OAAO,GAAY,EAAI,IAAI,IAAQvoH,EAAIkb,MAAM,QAAU,EAAI,IAAI,IACjG6T,EAAIqvK,YAAY,EAAG,GAEZrvK,CACR,CAkHsOi0M,CAAuBzuN,EAAK6sM,GACjQ,GAAG7sM,EAAI2G,MAAM,0VAA2V,OAjEzW,SAAkC0nN,EAAMxhB,GACvC,IAAI0hB,EAAWF,EAAK9iO,YAAY,KAC5Bi5M,EAAQ6pB,EAAK/iO,MAAM,EAAGijO,GAC1BF,EAAOA,EAAK/iO,MAAMijO,EAAS,GACL,KAAnB/pB,EAAMxwF,OAAO,KAAWwwF,EAAQA,EAAMl5M,MAAM,GAAI,GAAG+Q,QAAQ,MAAO,MACrE,IAAIE,EAAQ8xN,EAAKzwN,MAAM,KAEnB4c,EAAMq0K,GAAQ,IAClBr0K,EAAIqvK,YAAY,EAAG,IAGnB,IAAIp+L,EAAM8Q,EAAM,GAAI2mM,EAAOc,GAAYv4M,GAkBvC,OAjBA+uB,EAAIqvK,YAAY,EAAG,IACnBrvK,EAAIqvK,YAAY,EAAG,EAAIgjB,EAAG7H,WAAW9nM,KAAI,SAAS+sD,GAAK,OAAOA,EAAEllD,aAAe,IAAGpZ,QAAQ64M,EAAMz/L,gBAChGyV,EAAIqvK,YAAY,EAAGqZ,EAAKprM,GACxB0iB,EAAIqvK,YAAY,EAAGqZ,EAAKtrM,GAAuB,KAAjBnM,EAAIuoH,OAAO,GAAY,EAAI,IAAI,IAAQvoH,EAAIkb,MAAM,QAAU,EAAI,IAAI,IAGjFu8L,EAAOc,GAAvBv4M,EAAM8Q,EAAM,IACZie,EAAIqvK,YAAY,EAAG,IACnBrvK,EAAIqvK,YAAY,EAAG,EAAIgjB,EAAG7H,WAAW9nM,KAAI,SAAS+sD,GAAK,OAAOA,EAAEllD,aAAe,IAAGpZ,QAAQ64M,EAAMz/L,gBAChGyV,EAAIqvK,YAAY,EAAGqZ,EAAKprM,GACxB0iB,EAAIqvK,YAAY,EAAGqZ,EAAKtrM,GAAuB,KAAjBnM,EAAIuoH,OAAO,GAAY,EAAI,IAAI,IAAQvoH,EAAIkb,MAAM,QAAU,EAAI,IAAI,IAGjG6T,EAAIqvK,YAAY,EAAG,IAEnBrvK,EAAIqvK,YAAY,EAAG,GAEZrvK,CACR,CAmCgXk0M,CAAyB1uN,EAAK6sM,GAC7Y,GAAG,2EAA2E1tM,KAAKa,GAAM,OAjH1F,SAAmCvU,EAAKohN,GACvC,IAAI0hB,EAAW9iO,EAAIF,YAAY,KAC3Bi5M,EAAQ/4M,EAAIH,MAAM,EAAGijO,GACzB9iO,EAAMA,EAAIH,MAAMijO,EAAS,GACH,KAAnB/pB,EAAMxwF,OAAO,KAAWwwF,EAAQA,EAAMl5M,MAAM,GAAI,GAAG+Q,QAAQ,MAAO,MAErE,IAAIme,EAAMq0K,GAAQ,IAQlB,OAPAr0K,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,IACnBrvK,EAAIqvK,YAAY,EAAG,EAAIgjB,EAAG7H,WAAW9nM,KAAI,SAAS+sD,GAAK,OAAOA,EAAEllD,aAAe,IAAGpZ,QAAQ64M,EAAMz/L,gBAChGyV,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,GACnBrvK,EAAIqvK,YAAY,EAAG,GAEZrvK,CACR,CAkGiGm0M,CAA0B3uN,EAAK6sM,GAC/H,GAAG,SAAS1tM,KAAKa,GAAM,OAlKxB,SAA8BA,GAC7B,IAAI+6M,EAAWlsB,GAAQ,GACvBksB,EAASlxB,YAAY,EAAG,EAAI,EAAI7pL,EAAIpU,QACpCmvN,EAASlxB,YAAY,EAAG,IACxBkxB,EAASlxB,YAAY,EAAG7pL,EAAIpU,QAE5B,IAAIi1G,EAAOguF,GAAQ,EAAI7uL,EAAIpU,QAC3Bi1G,EAAKgpF,YAAY,EAAI7pL,EAAIpU,OAAQoU,EAAK,WAEtC,IAAI4uN,EAAY//B,GAAQ,GAGxB,OAFA+/B,EAAU/kC,YAAY,EAAG,GAElBtK,EAAQ,CAACw7B,EAAUl6G,EAAM+tH,GACjC,CAqJ+BC,CAAqB7uN,GACnD,GAAG,YAAYb,KAAKa,GAAM,OAAOguN,GAAqBnwN,SAASmC,EAAK,KACpE,KAAM,YAAcA,EAAM,0BAC3B,EAEIgqN,GAAQ,CACV,EAAG,OACH,EAAG,OACH,EAAG,aACH,EAAG,YACH,EAAG,OACH,EAAG,UACH,EAAG,cACH,EAAG,aACH,EAAG,QACH,EAAG,gBACH,GAAI,OACJ,GAAI,aACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,GAAI,OACJ,GAAI,QACJ,GAAI,MACJ,GAAI,iBACJ,GAAI,mBACJ,GAAI,iBACJ,GAAI,oBACJ,GAAI,OACJ,GAAI,UACJ,GAAI,mBACJ,GAAI,YACJ,GAAI,UACJ,GAAI,gBACJ,GAAI,cACJ,GAAI,YACJ,GAAI,UACJ,GAAI,cACJ,GAAI,eACJ,GAAI,eACJ,GAAI,OACJ,GAAI,cACJ,GAAI,QACJ,GAAI,gBACJ,GAAI,YACJ,GAAI,QACJ,GAAI,SACJ,GAAI,kBACJ,GAAI,eACJ,GAAI,OACJ,GAAI,MACJ,GAAI,OACJ,GAAI,QACJ,GAAI,QACJ,GAAI,gBACJ,GAAI,cACJ,GAAI,SACJ,GAAI,aACJ,GAAI,YACJ,GAAI,cACJ,GAAI,eACJ,GAAI,eACJ,GAAI,eACJ,GAAI,mBACJ,GAAI,mBACJ,GAAI,eACJ,GAAI,cACJ,GAAI,iBACJ,GAAI,eACJ,GAAI,cACJ,GAAI,kBACJ,GAAI,cACJ,GAAI,YACJ,GAAI,cACJ,GAAI,YACJ,GAAI,gBACJ,GAAI,OACJ,GAAI,SACJ,GAAI,cACJ,GAAI,YACJ,GAAI,eACJ,GAAI,mBACJ,GAAI,WACJ,GAAI,aACJ,GAAI,UACJ,GAAI,QACJ,GAAI,gBACJ,GAAI,cACJ,GAAI,cACJ,GAAI,QACJ,GAAI,UACJ,GAAI,OACJ,GAAI,SACJ,GAAI,YACJ,GAAI,UACJ,GAAI,eACJ,GAAI,gBACJ,GAAI,iBACJ,IAAK,iBACL,IAAK,oBACL,IAAK,oBACL,IAAK,WACL,IAAK,gBACL,IAAK,gBACL,IAAK,gBACL,IAAK,gBACL,IAAK,eACL,IAAK,SACL,IAAK,cACL,IAAK,gBACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,MACL,IAAK,cACL,IAAK,iBACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,eACL,IAAK,aACL,IAAK,cACL,IAAK,cACL,IAAK,kBACL,IAAK,YACL,IAAK,iBACL,IAAK,cACL,IAAK,eACL,IAAK,eACL,IAAK,YACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,gBACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,gBACL,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,OACL,IAAK,cACL,IAAK,UACL,IAAK,YACL,IAAK,iBACL,IAAK,cACL,IAAK,oBACL,IAAK,gBACL,IAAK,eACL,IAAK,iBACL,IAAK,kBACL,IAAK,cACL,IAAK,qBACL,IAAK,SACL,IAAK,cACL,IAAK,WACL,IAAK,WACL,IAAK,eACL,IAAK,eACL,IAAK,iBACL,IAAK,eACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,YACL,IAAK,YACL,IAAK,gBACL,IAAK,cACL,IAAK,eACL,IAAK,kBACL,IAAK,oBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,cACL,IAAK,UACL,IAAK,SACL,IAAK,cACL,IAAK,UACL,IAAK,oBACL,IAAK,kBACL,IAAK,QACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,mBACL,IAAK,oBACL,IAAK,cACL,IAAK,cACL,IAAK,mBACL,IAAK,eACL,IAAK,aACL,IAAK,eACL,IAAK,gBACL,IAAK,aACL,IAAK,cACL,IAAK,cACL,IAAK,iBACL,IAAK,YACL,IAAK,cACL,IAAK,eACL,IAAK,aACL,IAAK,aACL,IAAK,gBACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,qBACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,kBACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,cACL,IAAK,iBACL,IAAK,qBACL,IAAK,YACL,IAAK,oBACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,WACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,eACL,IAAK,cACL,IAAK,YACL,IAAK,kBACL,IAAK,oBACL,IAAK,iBACL,IAAK,YACL,IAAK,aACL,IAAK,oBACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,mBACL,IAAK,qBACL,IAAK,yBACL,IAAK,cACL,IAAK,aACL,IAAK,mBACL,IAAK,sBACL,IAAK,eACL,IAAK,eACL,IAAK,gBACL,IAAK,cACL,IAAK,kBACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,2BACL,IAAK,eACL,IAAK,iBACL,IAAK,aACL,IAAK,iBACL,IAAK,YACL,IAAK,mBACL,IAAK,cACL,IAAK,wBACL,IAAK,kBACL,IAAK,qBACL,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,iBACL,IAAK,eACL,IAAK,mBACL,IAAK,aACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,iBACL,IAAK,uBACL,IAAK,0BACL,IAAK,iBACL,IAAK,eACL,IAAK,YACL,IAAK,cACL,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ACL,IAAK,UACL,IAAK,QACL,IAAK,WACL,IAAK,SACL,IAAK,OACL,IAAK,YACL,IAAK,YACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,gBACL,IAAK,iBACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,iBACL,IAAK,aACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,WACL,IAAK,UACL,IAAK,OACL,IAAK,UACL,IAAK,YACL,IAAK,UACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,OACL,IAAK,WACL,IAAK,gBACL,IAAK,aACL,IAAK,eACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,OACL,IAAK,SACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,YACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,SACL,IAAK,aACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,WACL,IAAK,OACL,IAAK,QACL,IAAK,aACL,IAAK,KACL,IAAK,QACL,IAAK,SACL,IAAK,YACL,IAAK,cACL,IAAK,iBACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,cACL,IAAK,WACL,IAAK,iBACL,IAAK,aACL,IAAK,YACL,IAAK,eACL,IAAK,eACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,eACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,YACL,IAAK,UACL,IAAK,SACL,IAAK,SACL,IAAK,aACL,IAAK,YACL,IAAK,OACL,IAAK,YACL,IAAK,QACL,IAAK,OACL,IAAK,SACL,IAAK,YACL,IAAK,QACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,cACL,IAAK,SACL,IAAK,eACL,IAAK,WACL,IAAK,YACL,IAAK,UACL,IAAK,WACL,IAAK,cACL,IAAK,MACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,QACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,YACL,IAAK,cACL,IAAK,QACL,IAAK,iBACL,IAAK,kBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,oBACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,QACL,IAAK,cACL,IAAK,cACL,IAAK,WACL,IAAK,eACL,IAAK,YACL,IAAK,WACL,IAAK,WACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,WACL,IAAK,gBACL,IAAK,YACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,mBACL,IAAK,cACL,IAAK,gBACL,IAAK,cACL,IAAK,WACL,IAAK,MACL,IAAK,YACL,IAAK,aACL,IAAK,qBACL,IAAK,mBACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,aACL,IAAK,cACL,IAAK,YACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,SACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,OACL,IAAK,OACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,WACL,IAAK,OACL,IAAK,YACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,aACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,cACL,IAAK,UACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,MACL,IAAK,cACL,IAAK,MACL,IAAK,aACL,IAAK,gBACL,IAAK,UACL,IAAK,eACL,IAAK,UACL,IAAK,WACL,IAAK,SACL,IAAK,YACL,IAAK,cAEHD,GAAW,CACb,EAAG,EACH,EAAG,EACH,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,MAAO,GAk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AM,KAAM,MAAO,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,SAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,QAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,SAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,SAAY,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,QAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,SAAY,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,SAAY,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,SAAY,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,SAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,SAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KA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CP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,YAAa,iBACb,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,UACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,aAAc,MACd,IAAO,KACP,QAAS,MACT,QAAS,MACT,YAAa,iBACb,aAAc,mBACd,QAAS,MACT,YAAa,MACb,QAAS,KACT,UAAW,gBACX,WAAY,KACZ,QAAS,MACT,QAAS,MACT,QAAS,MACT,QAAS,MACT,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,GAAM,KACN,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,GAAM,KACN,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,SAAU,KACV,YAAa,KACb,SAAU,KACV,aAAc,KACd,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,QACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,YAAa,MACb,YAAa,MACb,SAAU,MACV,YAAa,MACb,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,GAAM,UACN,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,GAAM,MACN,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,QACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,aAAc,SACd,cAAe,MACf,cAAe,MACf,aAAc,MACd,YAAa,MACb,qBAAsB,cACtB,aAAc,MACd,cAAe,MACf,YAAa,MACb,YAAa,MACb,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,KACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,SAAU,KACV,cAAe,UACf,cAAe,UACf,SAAU,MACV,WAAY,KACZ,WAAY,MACZ,SAAU,eACV,aAAc,MACd,SAAU,MACV,WAAY,MACZ,SAAU,MACV,IAAO,KACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,KACP,IAAO,MAEX33W,EAAQ03W,eAAiB,CACrB,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,sCACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,WACP,IAAO,KACP,IAAO,WACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,cACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,+CACP,IAAO,KACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,oBACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,UACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,WACN,IAAO,KACP,IAAO,WACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,QACN,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,QACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,GAAM,QACN,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,cACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,KACN,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,QACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,GAAM,+CACN,IAAO,+CACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IA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ACT,QAAS,aACT,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,GAAM,aACN,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,IAAO,cACP,IAAO,cACP,GAAM,cACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,WAAY,cACZ,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,QAAS,aACT,QAAS,aACT,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,IAAO,cACP,GAAM,aACN,GAAM,aACN,GAAM,cACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,cACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,eACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,QAAS,aACT,UAAW,aACX,QAAS,aACT,QAAS,aACT,QAAS,aACT,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,UAAW,aACX,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,UAAW,aACX,QAAS,aACT,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,WAAY,cACZ,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,SAAU,cACV,WAAY,cACZ,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,QAAS,aACT,UAAW,aACX,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,QAAS,aACT,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,eACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,IAAO,cACP,IAAO,cACP,WAAY,cACZ,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,eACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,SAAU,cACV,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,UAAW,aACX,UAAW,aACX,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,IAAO,cACP,GAAM,aACN,UAAW,aACX,QAAS,aACT,QAAS,aACT,IAAO,cACP,GAAM,aACN,IAAO,cACP,IAAO,cACP,IAAO,aACP,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,aACX,UAAW,cACX,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,cACV,SAAU,aACV,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,cACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,cACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,cACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,SAAU,cACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,cACV,WAAY,cACZ,cAAe,cACf,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,cACV,SAAU,aACV,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,aACf,SAAU,aACV,SAAU,aACV,WAAY,aACZ,cAAe,aACf,cAAe,cACf,cAAe,cACf,cAAe,cACf,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,cAAe,cACf,SAAU,cACV,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,WAAY,aACZ,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,WAAY,aACZ,SAAU,aACV,WAAY,cACZ,SAAU,cACV,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,aACf,cAAe,aACf,cAAe,cACf,cAAe,aACf,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,SAAU,cACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,aACZ,cAAe,cACf,cAAe,cACf,SAAU,aACV,SAAU,aACV,WAAY,aACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,cACZ,WAAY,aACZ,WAAY,eACZ,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,cACV,SAAU,cACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,cACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,WAAY,aACZ,WAAY,aACZ,WAAY,aACZ,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,SAAU,aACV,SAAU,aACV,WAAY,aACZ,SAAU,aACV,SAAU,aACV,WAAY,cACZ,WAAY,cACZ,WAAY,c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G,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,IACHC,EAAG,IACH,IAAK,IACLC,EAAG,IACHC,EAAG,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","sources":["webpack://filter-wizard/webpack/runtime/chunk loaded","webpack://filter-wizard/webpack/runtime/create fake namespace object","webpack://filter-wizard/webpack/runtime/load script","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/-internals/metal","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/application","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/array","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/component/helper","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/component/template-only","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/component","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/controller","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/debug/container-debug-adapter","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/debug","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/destroyable","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/modifier","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/object/compat","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/object/computed","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/object/evented","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/object/events","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/object/internals","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/object/mixin","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/object/observers","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/object","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/owner","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/routing/none-location","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/routing/route","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/routing/router","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/runloop","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/service","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/template","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/template-factory","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/test","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@ember/utils","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@glimmer/runtime","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@glimmer/tracking","webpack://filter-wizard/../../../../../@embroider/ext-cjs/@glimmer/validator","webpack://filter-wizard/../../../../../@embroider/ext-cjs/ember","webpack://filter-wizard/../../../../../@embroider/ext-cjs/jquery","webpack://filter-wizard/../../../../../@embroider/ext-cjs/require","webpack://filter-wizard/../../../../../@embroider/ext-cjs/rsvp","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+ember-aditools-analytics@7.0.2_@ember+string@4.0.0_ember-source@5.12.0_@glimmer+compone_rakyolwprbplhpibosfcumppyq/node_modules/@ebiz/ember-aditools-analytics/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-babel.140595bb/node_modules/ember-cli-babel/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-typescript.02b28984/node_modules/ember-cli-typescript/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-compatibility-helpers.216efe53/node_modules/ember-compatibility-helpers/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@glimmer/component.940cf30e/node_modules/@glimmer/component/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@glimmer/tracking.8b474ccb/node_modules/@glimmer/tracking/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-typescript.0b9fc16a/node_modules/ember-cli-typescript/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-modifier.518b94f7/node_modules/ember-modifier/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+ember-aditools-device-table@6.4.1_@babel+core@7.26.0_@ebiz+aditools-styles@4.1.0_ember-_7hkh5dkhf4togzbdx3pmcx2lsi/node_modules/@ebiz/ember-aditools-device-table/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@ember/string.905e21c8/node_modules/@ember/string/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cache-primitive-polyfill.5ce3f8de/node_modules/ember-cache-primitive-polyfill/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cached-decorator-polyfill.fceef857/node_modules/ember-cached-decorator-polyfill/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+ember-aditools-graph@6.1.2_@babel+core@7.26.0_ember-source@5.12.0_@glimmer+component@1._w2eemdl3ccss6yrwnzwm5zfiqi/node_modules/@ebiz/ember-aditools-graph/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+ember-aditools-ipc@0.2.1/node_modules/@ebiz/ember-aditools-ipc/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-htmlbars.c03fa826/node_modules/ember-cli-htmlbars/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-tracked-storage-polyfill.5ec5c760/node_modules/ember-tracked-storage-polyfill/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/tracked-built-ins@3.3.0/node_modules/tracked-built-ins/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+ember-aditools-page@14.2.3_@babel+core@7.26.0_@ebiz+aditools-styles@4.1.0_ember-intl@6._cvzremzoqbafdl4rj3i5ya5b2u/node_modules/@ebiz/ember-aditools-page/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+ember-aditools-site@4.0.5_@ember+string@4.0.0_ember-source@5.12.0_@glimmer+component@1._y376ilai5gcpzu2ee7dhjx4vpy/node_modules/@ebiz/ember-aditools-site/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@embroider/macros.17b89f60/node_modules/@embroider/macros/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@ember/test-waiters.dfa93a78/node_modules/@ember/test-waiters/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ember+test-helpers@4.0.2_@babel+core@7.26.0_ember-source@5.12.0_@glimmer+component@1.1.2_@ba_n4gkrbphxcwyuocywbtacacwmq/node_modules/@ember/test-helpers/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@embroider/util.c8f16973/node_modules/@embroider/util/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-element-helper@0.8.6_ember-source@5.12.0_@glimmer+component@1.1.2_@babel+core@7.26.0__rsvp@4.8.5_webpack@5.95.0_/node_modules/ember-element-helper/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-modifier@4.2.0_@babel+core@7.26.0_ember-source@5.12.0_@glimmer+component@1.1.2_@babel+c_lrgyqabjua3j5q5m2c5uv5r2vi/node_modules/ember-modifier/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@4.0.2_@babel+core@7.26.0_ember-source@5.12.0_@glimme_33sfvno35biakuwebi4b323kjy/node_modules/ember-lifeline/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-style-modifier@4.4.0_@babel+core@7.26.0_@ember+string@4.0.0_ember-source@5.12.0_@glimme_qzdv6rnw7jj7xrzxgwib5uued4/node_modules/ember-style-modifier/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-functions-as-helper-polyfill.b38b1adf/node_modules/ember-functions-as-helper-polyfill/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-truth-helpers@4.0.3_ember-source@5.12.0_@glimmer+component@1.1.2_@babel+core@7.26.0__rsvp@4.8.5_webpack@5.95.0_/node_modules/ember-truth-helpers/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-basic-dropdown@8.4.0_@ember+string@4.0.0_@ember+test-helpers@4.0.2_@babel+core@7.26.0_e_seodhga7adhrszumefxkocrteq/node_modules/ember-basic-dropdown/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-babel.9f315c4e/node_modules/ember-cli-babel/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-bundle-analyzer.9ce05b65/node_modules/ember-cli-bundle-analyzer/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-concurrency@4.0.2_@babel+core@7.26.0_@glimmer+tracking@1.1.2_ember-source@5.12.0_@glimm_mavy4ek75tj4g5npotwca646pm/node_modules/ember-concurrency/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-focus-trap@1.1.0_ember-source@5.12.0_@glimmer+component@1.1.2_@babel+core@7.26.0__rsvp@4.8.5_webpack@5.95.0_/node_modules/ember-focus-trap/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-page-title@8.2.3_ember-source@5.12.0_@glimmer+component@1.1.2_@babel+core@7.26.0__rsvp@4.8.5_webpack@5.95.0_/node_modules/ember-page-title/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-assign-helper@0.5.0_ember-source@5.12.0_@glimmer+component@1.1.2_@babel+core@7.26.0__rsvp@4.8.5_webpack@5.95.0_/node_modules/ember-assign-helper/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-power-select@8.4.0_@babel+core@7.26.0_@ember+test-helpers@4.0.2_@babel+core@7.26.0_embe_wrtp5duz7fe44kdevkhg6kl42i/node_modules/ember-power-select/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-test-loader.9b9ebb99/node_modules/ember-cli-test-loader/-embroider-implicit-modules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-qunit@8.1.1_@ember+test-helpers@4.0.2_@babel+core@7.26.0_ember-source@5.12.0_@glimmer+c_hqnz2yxtgg4pngxaw3zddcx3ci/node_modules/ember-qunit/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-inject-live-reload.2fb4cb49/node_modules/ember-cli-inject-live-reload/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-fastboot.72ff984d/node_modules/ember-cli-fastboot/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-auto-import.4d5bb334/node_modules/ember-auto-import/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-htmlbars.671edc37/node_modules/ember-cli-htmlbars/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@ebiz/ember-aditools-deployment.a365dc99/node_modules/@ebiz/ember-aditools-deployment/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@ember/jquery.0ac491e8/node_modules/@ember/jquery/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@ember/optional-features.0a8ebc72/node_modules/@ember/optional-features/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-modifier-manager-polyfill.2bbf9651/node_modules/ember-modifier-manager-polyfill/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@ember/render-modifiers.62f4ce8b/node_modules/@ember/render-modifiers/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-code-coverage.2e8ab65e/node_modules/ember-cli-code-coverage/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-app-version.53ac45ac/node_modules/ember-cli-app-version/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-clean-css.9a947cf6/node_modules/ember-cli-clean-css/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-dependency-checker.11f54a98/node_modules/ember-cli-dependency-checker/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-dependency-lint.b33f15cd/node_modules/ember-cli-dependency-lint/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-test-selectors.e6289e1e/node_modules/ember-test-selectors/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-deprecation-workflow.131a4ff8/node_modules/ember-cli-deprecation-workflow/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-in-element-polyfill.5fe56304/node_modules/ember-in-element-polyfill/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-head.d8f9ed82/node_modules/ember-cli-head/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-sass.050aff50/node_modules/ember-cli-sass/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/broccoli-asset-rev.44507a22/node_modules/broccoli-asset-rev/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-terser.3741ff7e/node_modules/ember-cli-terser/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-sri.585ceedc/node_modules/ember-cli-sri/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-copy.a6b32b47/node_modules/ember-copy/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-exam.6183586a/node_modules/ember-exam/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-cli-typescript.cd58bac2/node_modules/ember-cli-typescript/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-load-initializers.7c78284d/node_modules/ember-load-initializers/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@ember-decorators/utils.45a89f0a/node_modules/@ember-decorators/utils/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@ember-decorators/component.ef295cf0/node_modules/@ember-decorators/component/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/@ember-decorators/object.f3fe7b4a/node_modules/@ember-decorators/object/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-decorators.7077bc06/node_modules/ember-decorators/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-wormhole.a92ad8e0/node_modules/ember-wormhole/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-resolver.67a5be28/node_modules/ember-resolver/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-responsive.1062b5e6/node_modules/ember-responsive/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/ember-source.15bc4829/node_modules/ember-source/-embroider-implicit-modules.js","webpack://filter-wizard/../rewritten-packages/loader.js.00839464/node_modules/loader.js/-embroider-implicit-modules.js","webpack://filter-wizard/./-embroider-implicit-modules.js","webpack://filter-wizard/./templates/application.hbs","webpack://filter-wizard/./templates/head.hbs","webpack://filter-wizard/./templates/index.hbs","webpack://filter-wizard/../rewritten-packages/ember-load-initializers.7c78284d/node_modules/ember-load-initializers/index.js","webpack://filter-wizard/./app.js","webpack://filter-wizard/./assets/filter-wizard.js","webpack://filter-wizard/./breakpoints.js","webpack://filter-wizard/./components/annotations/specifications-magnitude.hbs","webpack://filter-wizard/./components/annotations/specifications-magnitude.ts","webpack://filter-wizard/./components/annotations/specifications-response.hbs","webpack://filter-wizard/./components/annotations/specifications-response.ts","webpack://filter-wizard/./components/annotations/step-response-envelope.hbs","webpack://filter-wizard/./components/annotations/step-response-envelope.ts","webpack://filter-wizard/./components/captioned-button.hbs","webpack://filter-wizard/./components/captioned-button.js","webpack://filter-wizard/./components/circuits/bandpass-inductor-gain.hbs","webpack://filter-wizard/./components/circuits/bandpass-inductor-gain.js","webpack://filter-wizard/./components/circuits/bandpass-inductor.hbs","webpack://filter-wizard/./components/circuits/bandpass-inductor.js","webpack://filter-wizard/./components/circuits/bandpass-multiplefeedback-noposfb.hbs","webpack://filter-wizard/./components/circuits/bandpass-multiplefeedback-noposfb.js","webpack://filter-wizard/./components/circuits/bandpass-multiplefeedback-posfb.hbs","webpack://filter-wizard/./components/circuits/bandpass-multiplefeedback-posfb.js","webpack://filter-wizard/./components/circuits/bandpass-multiplefeedback-posfbnor2.hbs","webpack://filter-wizard/./components/circuits/bandpass-multiplefeedback-posfbnor2.js","webpack://filter-wizard/./components/circuits/bpcap-circuit.hbs","webpack://filter-wizard/./components/circuits/bpcap-circuit.ts","webpack://filter-wizard/./components/circuits/bypass-capacitors-container.hbs","webpack://filter-wizard/./components/circuits/bypass-capacitors-container.ts","webpack://filter-wizard/./components/circuits/device-text.hbs","webpack://filter-wizard/./components/circuits/device-text.ts","webpack://filter-wizard/./components/circuits/highpass-firstorder-gain.hbs","webpack://filter-wizard/./components/circuits/highpass-firstorder-gain.js","webpack://filter-wizard/./components/circuits/highpass-firstorder.hbs","webpack://filter-wizard/./components/circuits/highpass-firstorder.js","webpack://filter-wizard/./components/circuits/highpass-inductor-gain.hbs","webpack://filter-wizard/./components/circuits/highpass-inductor-gain.js","webpack://filter-wizard/./components/circuits/highpass-inductor.hbs","webpack://filter-wizard/./components/circuits/highpass-inductor.js","webpack://filter-wizard/./components/circuits/highpass-multiplefeedback.hbs","webpack://filter-wizard/./components/circuits/highpass-multiplefeedback.js","webpack://filter-wizard/./components/circuits/highpass-sallenkey-gain.hbs","webpack://filter-wizard/./components/circuits/highpass-sallenkey-gain.js","webpack://filter-wizard/./components/circuits/highpass-sallenkey.hbs","webpack://filter-wizard/./components/circuits/highpass-sallenkey.js","webpack://filter-wizard/./components/circuits/input-text.hbs","webpack://filter-wizard/./components/circuits/input-text.js","webpack://filter-wizard/./components/circuits/lowpass-firstorder-gain.hbs","webpack://filter-wizard/./components/circuits/lowpass-firstorder-gain.js","webpack://filter-wizard/./components/circuits/lowpass-firstorder.hbs","webpack://filter-wizard/./components/circuits/lowpass-firstorder.js","webpack://filter-wizard/./components/circuits/lowpass-inductor-gain.hbs","webpack://filter-wizard/./components/circuits/lowpass-inductor-gain.js","webpack://filter-wizard/./components/circuits/lowpass-inductor.hbs","webpack://filter-wizard/./components/circuits/lowpass-inductor.js","webpack://filter-wizard/./components/circuits/lowpass-multiplefeedback.hbs","webpack://filter-wizard/./components/circuits/lowpass-multiplefeedback.js","webpack://filter-wizard/./components/circuits/lowpass-sallenkey-gain.hbs","webpack://filter-wizard/./components/circuits/lowpass-sallenkey-gain.js","webpack://filter-wizard/./components/circuits/lowpass-sallenkey.hbs","webpack://filter-wizard/./components/circuits/lowpass-sallenkey.js","webpack://filter-wizard/./components/circuits/output-text.hbs","webpack://filter-wizard/./components/circuits/output-text.js","webpack://filter-wizard/./components/circuits/part-text.hbs","webpack://filter-wizard/./components/circuits/part-text.ts","webpack://filter-wizard/./components/circuits/reference-circuit.hbs","webpack://filter-wizard/./components/circuits/reference-circuit.ts","webpack://filter-wizard/./components/circuits/spare-dual.hbs","webpack://filter-wizard/./components/circuits/spare-dual.ts","webpack://filter-wizard/./components/circuits/spare-single.hbs","webpack://filter-wizard/./components/circuits/spare-single.ts","webpack://filter-wizard/./components/circuits/spares-container.hbs","webpack://filter-wizard/./components/circuits/spares-container.ts","webpack://filter-wizard/./components/circuits/stage-item.hbs","webpack://filter-wizard/./components/circuits/stage-item.ts","webpack://filter-wizard/./components/circuits/stage-text.hbs","webpack://filter-wizard/./components/circuits/stage-text.ts","webpack://filter-wizard/./components/circuits/tantcap-neg.hbs","webpack://filter-wizard/./components/circuits/tantcap-neg.ts","webpack://filter-wizard/./components/circuits/tantcap-pos.hbs","webpack://filter-wizard/./components/circuits/tantcap-pos.ts","webpack://filter-wizard/./components/dialogs/algorithm-confirmation.hbs","webpack://filter-wizard/./components/dialogs/algorithm-confirmation.ts","webpack://filter-wizard/./components/dialogs/evalboard-confirmation.hbs","webpack://filter-wizard/./components/dialogs/evalboard-confirmation.ts","webpack://filter-wizard/./components/dialogs/evalboard.hbs","webpack://filter-wizard/./components/dialogs/evalboard.ts","webpack://filter-wizard/./components/dialogs/opamps-requirements.hbs","webpack://filter-wizard/./components/dialogs/opamps-requirements.ts","webpack://filter-wizard/../../src/utils/validation.ts","webpack://filter-wizard/../../src/utils/engineering-filter.ts","webpack://filter-wizard/../../src/utils/partial-text-filter.ts","webpack://filter-wizard/../../src/utils/price-filter.ts","webpack://filter-wizard/../../src/utils/multivalue-checkbox-filter.ts","webpack://filter-wizard/../../src/utils/device-table-pst.ts","webpack://filter-wizard/../../src/utils/comment-filter.ts","webpack://filter-wizard/../../src/utils/engineering-range-value-filter.ts","webpack://filter-wizard/./components/dialogs/opamps.hbs","webpack://filter-wizard/./components/dialogs/opamps.ts","webpack://filter-wizard/./components/dialogs/system-lock.hbs","webpack://filter-wizard/./components/dialogs/system-lock.ts","webpack://filter-wizard/./components/dialogs/video.hbs","webpack://filter-wizard/./components/dialogs/video.ts","webpack://filter-wizard/./components/display-context.hbs","webpack://filter-wizard/./components/display-context.ts","webpack://filter-wizard/./components/field-input-text.hbs","webpack://filter-wizard/./components/field-input-text.ts","webpack://filter-wizard/./components/figures-subpanel.hbs","webpack://filter-wizard/./components/figures-subpanel.ts","webpack://filter-wizard/./components/figures/bom.hbs","webpack://filter-wizard/./components/figures/bom.ts","webpack://filter-wizard/./components/figures/errors.hbs","webpack://filter-wizard/./components/figures/errors.ts","webpack://filter-wizard/./components/figures/graph.hbs","webpack://filter-wizard/./components/figures/graph.ts","webpack://filter-wizard/./components/figures/noise.hbs","webpack://filter-wizard/./components/figures/noise.ts","webpack://filter-wizard/./components/figures/power.hbs","webpack://filter-wizard/./components/figures/power.ts","webpack://filter-wizard/./components/figures/schematic.hbs","webpack://filter-wizard/./components/figures/schematic.ts","webpack://filter-wizard/./components/figures/stage-details.hbs","webpack://filter-wizard/./components/figures/stage-details.ts","webpack://filter-wizard/./components/figures/stages.hbs","webpack://filter-wizard/./components/figures/stages.ts","webpack://filter-wizard/./components/figures/voltage-range-details.hbs","webpack://filter-wizard/./components/figures/voltage-range-details.js","webpack://filter-wizard/./components/figures/voltage-range.hbs","webpack://filter-wizard/./components/figures/voltage-range.ts","webpack://filter-wizard/./components/menu-links.hbs","webpack://filter-wizard/./components/menu-links.ts","webpack://filter-wizard/./components/settings/components.hbs","webpack://filter-wizard/./components/settings/components.ts","webpack://filter-wizard/./components/settings/filter-type.hbs","webpack://filter-wizard/./components/settings/filter-type.ts","webpack://filter-wizard/./components/settings/next-steps.hbs","webpack://filter-wizard/./components/settings/next-steps.js","webpack://filter-wizard/./components/settings/specifications.hbs","webpack://filter-wizard/./components/settings/specifications.ts","webpack://filter-wizard/./components/settings/stage.hbs","webpack://filter-wizard/./components/settings/stage.ts","webpack://filter-wizard/./components/settings/tolerances.hbs","webpack://filter-wizard/./components/settings/tolerances.ts","webpack://filter-wizard/./components/tab-button.hbs","webpack://filter-wizard/./components/tab-button.ts","webpack://filter-wizard/./components/tab-panel.hbs","webpack://filter-wizard/./components/tab-panel.js","webpack://filter-wizard/./config/environment.js","webpack://filter-wizard/./controllers/index.js","webpack://filter-wizard/./data/local-parts.js","webpack://filter-wizard/./figure-map.js","webpack://filter-wizard/./filter-constants.ts","webpack://filter-wizard/./formats.js","webpack://filter-wizard/./helpers/format-value.js","webpack://filter-wizard/./initializers/responsive.js","webpack://filter-wizard/./models/advisors/component-selection.ts","webpack://filter-wizard/./models/advisors/individual-stage.ts","webpack://filter-wizard/./models/advisors/noise.ts","webpack://filter-wizard/./models/advisors/specification.ts","webpack://filter-wizard/./models/advisors/tolerance.ts","webpack://filter-wizard/./models/component-selector/op-amp-selection.js","webpack://filter-wizard/./models/component-selector/op-amp-validation.js","webpack://filter-wizard/./models/component-selector/why-not.js","webpack://filter-wizard/./models/components/c1.js","webpack://filter-wizard/./models/components/capacitor.js","webpack://filter-wizard/./models/components/components-factory.js","webpack://filter-wizard/./models/components/inductor.js","webpack://filter-wizard/./models/components/r3.js","webpack://filter-wizard/./models/components/r4.js","webpack://filter-wizard/./models/components/resistor.js","webpack://filter-wizard/./models/filter-response/base-filter-response.js","webpack://filter-wizard/./models/filter-response/bessel-json.js","webpack://filter-wizard/./models/filter-response/bessel.js","webpack://filter-wizard/./models/filter-response/butterworth-bessel.js","webpack://filter-wizard/./models/filter-response/butterworth.js","webpack://filter-wizard/./models/filter-response/chebyshev.js","webpack://filter-wizard/./models/filter-response/filter-response.js","webpack://filter-wizard/./models/filter/band-pass.ts","webpack://filter-wizard/./models/filter/band-pass/narrow-band.ts","webpack://filter-wizard/./models/filter/band-pass/wide-band.ts","webpack://filter-wizard/./models/filter/filter.ts","webpack://filter-wizard/./models/filter/high-pass.ts","webpack://filter-wizard/./models/filter/low-pass.ts","webpack://filter-wizard/./models/formulas/frequency-point.js","webpack://filter-wizard/./models/formulas/noise.js","webpack://filter-wizard/./models/formulas/time-axis.js","webpack://filter-wizard/./models/formulas/voltage-range.js","webpack://filter-wizard/./models/gestures/filter-response-gesture.ts","webpack://filter-wizard/./models/gestures/gain-unit-gesture.ts","webpack://filter-wizard/./models/gestures/optimization.js","webpack://filter-wizard/./models/implementation/base-implementation.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/circuit-limits-utils.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/circuit.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/component-feedbacks/no-positive-feedback.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/component-feedbacks/positive-feedback.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/main.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-group.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-source.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-sources/r2.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-sources/r3.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-sources/r4.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/noise-sources/r5.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/band-pass/reverse-implementation.js","webpack://filter-wizard/./models/implementation/deliyannis-friend/deliyannis-friend.js","webpack://filter-wizard/./models/implementation/first-order/common/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/first-order/common/big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/first-order/common/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/first-order/common/circuit-limits-utils.js","webpack://filter-wizard/./models/implementation/first-order/common/circuit.js","webpack://filter-wizard/./models/implementation/first-order/common/main.js","webpack://filter-wizard/./models/implementation/first-order/common/reverse-implementation.js","webpack://filter-wizard/./models/implementation/first-order/first-order.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/circuit.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/main.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/noise-group.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/noise-source.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/noise-sources/r3.js","webpack://filter-wizard/./models/implementation/first-order/high-pass/noise-sources/r4.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/circuit.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/main.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/noise-group.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/noise-source.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/noise-sources/r3.js","webpack://filter-wizard/./models/implementation/first-order/low-pass/noise-sources/r4.js","webpack://filter-wizard/./models/implementation/implementation-common/base-actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/implementation-common/base-big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/implementation-common/base-main.js","webpack://filter-wizard/./models/implementation/implementation-common/base-noise-group.js","webpack://filter-wizard/./models/implementation/implementation-common/base-pie-wedge.js","webpack://filter-wizard/./models/implementation/implementation-common/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/implementation.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/circuit-limits-utils.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/circuit.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/main.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/noise-group.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/noise-source.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/inductor/band-pass/reverse-implementation.js","webpack://filter-wizard/./models/implementation/inductor/common/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/circuit-limits-utils.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/circuit.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/main.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/noise-group.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/noise-source.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/inductor/high-pass/reverse-implementation.js","webpack://filter-wizard/./models/implementation/inductor/inductor.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/circuit-limits-utils.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/circuit.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/main.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/noise-group.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/noise-source.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/inductor/low-pass/reverse-implementation.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/circuit-limits-utils.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/circuit.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/main.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/noise-group.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/noise-source.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/noise-sources/r2.js","webpack://filter-wizard/./models/implementation/multiple-feedback/high-pass/reverse-implementation.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/circuit-limits-utils.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/circuit.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/main.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-group.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-source.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-sources/r2.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-sources/r3.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-sources/r4.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/noise-sources/r5.js","webpack://filter-wizard/./models/implementation/multiple-feedback/low-pass/reverse-implementation.js","webpack://filter-wizard/./models/implementation/multiple-feedback/multiple-feedback.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/circuit-limits-utils.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/circuit.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/main.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/noise-group.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/noise-source.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/noise-sources/r2.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/noise-sources/r3.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/noise-sources/r4.js","webpack://filter-wizard/./models/implementation/sallen-key/high-pass/reverse-implementation.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/actual-filter-amplitude.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/big-huge-circuit-group.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/big-huge-circuit.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/circuit-limits-utils.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/circuit.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/component-sub-routines/r1-div-r2-is-half-utils.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/component-sub-routines/r1-div-r2-less-than-half-utils.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/component-sub-routines/r1-div-r2-more-than-half-utils.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/ideal-op-amp.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/main.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/noise-group.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/noise-source.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/noise-sources/op-amp-neg-current.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/noise-sources/op-amp-pos-current.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/noise-sources/op-amp-voltage.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/noise-sources/r1.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/noise-sources/r2.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/noise-sources/r3.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/noise-sources/r4.js","webpack://filter-wizard/./models/implementation/sallen-key/low-pass/reverse-implementation.js","webpack://filter-wizard/./models/implementation/sallen-key/sallen-key.js","webpack://filter-wizard/./models/index.js","webpack://filter-wizard/./models/inputs/component-selection.js","webpack://filter-wizard/./models/inputs/component-selection/individual-stage.js","webpack://filter-wizard/./models/inputs/component-selection/slider.js","webpack://filter-wizard/./models/inputs/inputs.js","webpack://filter-wizard/./models/inputs/noise.js","webpack://filter-wizard/./models/inputs/specification.js","webpack://filter-wizard/./models/inputs/tolerance.js","webpack://filter-wizard/./models/optimization/allowed-specific.js","webpack://filter-wizard/./models/optimization/base-optimization.js","webpack://filter-wizard/./models/optimization/noise.js","webpack://filter-wizard/./models/optimization/optimization.js","webpack://filter-wizard/./models/optimization/power.js","webpack://filter-wizard/./models/optimization/recommended-specific.js","webpack://filter-wizard/./models/optimization/voltage-range.js","webpack://filter-wizard/./models/process-data/complex.js","webpack://filter-wizard/./models/process-data/envelope.js","webpack://filter-wizard/./models/process-data/frequency.js","webpack://filter-wizard/./models/process-data/spectral-density.js","webpack://filter-wizard/./models/results/circuit-group-results.js","webpack://filter-wizard/./models/results/circuit-results.js","webpack://filter-wizard/./models/results/component-selection.js","webpack://filter-wizard/./models/results/next-steps.js","webpack://filter-wizard/./models/results/results.js","webpack://filter-wizard/./models/results/specification.js","webpack://filter-wizard/./models/results/sub-results/circuit-details.js","webpack://filter-wizard/./models/results/sub-results/magnitude-db.js","webpack://filter-wizard/./models/results/sub-results/noise.js","webpack://filter-wizard/./models/results/sub-results/power-details.js","webpack://filter-wizard/./models/results/sub-results/power.js","webpack://filter-wizard/./models/results/sub-results/stage-details.js","webpack://filter-wizard/./models/results/sub-results/voltage-range-detail.js","webpack://filter-wizard/./models/results/sub-results/voltage-range.js","webpack://filter-wizard/./models/results/sub-results/voltage-range/rate.js","webpack://filter-wizard/./models/results/sub-results/voltage-range/signal.js","webpack://filter-wizard/./models/results/sub-results/voltage-range/voltage-range-computations-per-stage.js","webpack://filter-wizard/./models/results/tolerance.js","webpack://filter-wizard/./models/stages/actual-first-order.js","webpack://filter-wizard/./models/stages/actual-second-order.js","webpack://filter-wizard/./models/stages/actual-stage.js","webpack://filter-wizard/./models/stages/first-order.js","webpack://filter-wizard/./models/stages/second-order.js","webpack://filter-wizard/./models/stages/signal-range.js","webpack://filter-wizard/./models/stages/target-stage.js","webpack://filter-wizard/./models/stages/tolerance-stage.js","webpack://filter-wizard/./models/step-response/feed-forward.js","webpack://filter-wizard/./models/step-response/roll-off.js","webpack://filter-wizard/./models/tolerances/capacitor-tolerance-utils.js","webpack://filter-wizard/./models/tolerances/inductor-tolerance-utils.js","webpack://filter-wizard/./models/tolerances/resistor-tolerance-utils.js","webpack://filter-wizard/./models/tolerances/series-precision.js","webpack://filter-wizard/./models/tolerances/series.js","webpack://filter-wizard/./models/tolerances/tolerance-utils.js","webpack://filter-wizard/./models/utils/array.js","webpack://filter-wizard/./models/utils/circuit.js","webpack://filter-wizard/./models/utils/conversion.js","webpack://filter-wizard/./models/utils/friendlyFrequencies.js","webpack://filter-wizard/./models/utils/math.ts","webpack://filter-wizard/./models/utils/noise.js","webpack://filter-wizard/./models/utils/permutation.js","webpack://filter-wizard/./models/utils/results.js","webpack://filter-wizard/./models/utils/slider.js","webpack://filter-wizard/./models/utils/stage.js","webpack://filter-wizard/./modifiers/eps-qa-elements.js","webpack://filter-wizard/./modifiers/set-focus.js","webpack://filter-wizard/./router.js","webpack://filter-wizard/./routes/empty.js","webpack://filter-wizard/./routes/index.js","webpack://filter-wizard/./routes/legacy.js","webpack://filter-wizard/./services/assets.js","webpack://filter-wizard/../../../../node_modules/.pnpm/v4-uuid@1.1.0/node_modules/v4-uuid/esm/index.js","webpack://filter-wizard/./services/cdp.js","webpack://filter-wizard/../../src/utils/tab-link.ts","webpack://filter-wizard/./services/channel.js","webpack://filter-wizard/./services/download.js","webpack://filter-wizard/./services/feedback.js","webpack://filter-wizard/./services/logger.js","webpack://filter-wizard/./services/opamps.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-simulation@0.5.55/node_modules/@ebiz/aditools-simulation/src/part-data/adc-custom-database.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-simulation@0.5.55/node_modules/@ebiz/aditools-simulation/src/sim-constants.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-simulation@0.5.55/node_modules/@ebiz/aditools-simulation/src/part-data/in-amp-custom-database.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-simulation@0.5.55/node_modules/@ebiz/aditools-simulation/src/part-data/op-amp-custom-database.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-simulation@0.5.55/node_modules/@ebiz/aditools-simulation/src/part-data/differential-amp-custom-database.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-simulation@0.5.55/node_modules/@ebiz/aditools-simulation/src/part-data/reference-custom-database.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-simulation@0.5.55/node_modules/@ebiz/aditools-simulation/src/part-data/input-protection-custom-database.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-simulation@0.5.55/node_modules/@ebiz/aditools-simulation/src/part-data/sim-part-data.js","webpack://filter-wizard/./services/opamps/loader.js","webpack://filter-wizard/./services/opamps/ratings.js","webpack://filter-wizard/./services/persistence.js","webpack://filter-wizard/./services/persistence/dryer.js","webpack://filter-wizard/./services/persistence/tokenize.js","webpack://filter-wizard/./services/share.js","webpack://filter-wizard/./services/snapshot.ts","webpack://filter-wizard/./utils/analytics.js","webpack://filter-wizard/./utils/common.js","webpack://filter-wizard/./utils/context.js","webpack://filter-wizard/./utils/design-files.js","webpack://filter-wizard/./utils/download.js","webpack://filter-wizard/./utils/error-tracker.js","webpack://filter-wizard/./utils/format.js","webpack://filter-wizard/./utils/materials.js","webpack://filter-wizard/./utils/package-checker.js","webpack://filter-wizard/./utils/resource.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-spice@1.3.8/node_modules/@ebiz/aditools-spice/src/netlists.js","webpack://filter-wizard/./utils/spice-netlists.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-spice@1.3.8/node_modules/@ebiz/aditools-spice/src/schematics.js","webpack://filter-wizard/./utils/spice-schematics.ts","webpack://filter-wizard/./utils/timing.js","webpack://filter-wizard/./utils/validation.ts","webpack://filter-wizard/../rewritten-packages/@ember-decorators/utils.45a89f0a/node_modules/@ember-decorators/utils/collapse-proto.js","webpack://filter-wizard/../rewritten-packages/@ember-decorators/utils.45a89f0a/node_modules/@ember-decorators/utils/decorator.js","webpack://filter-wizard/../rewritten-packages/@ember-decorators/utils.45a89f0a/node_modules/@ember-decorators/utils/-private/class-field-descriptor.js","webpack://filter-wizard/../rewritten-packages/@ember-decorators/component.ef295cf0/node_modules/@ember-decorators/component/index.js","webpack://filter-wizard/../rewritten-packages/@ember/render-modifiers.62f4ce8b/node_modules/@ember/render-modifiers/modifiers/did-insert.js","webpack://filter-wizard/../rewritten-packages/@ember/render-modifiers.62f4ce8b/node_modules/@ember/render-modifiers/modifiers/did-update.js","webpack://filter-wizard/../rewritten-packages/@ember/render-modifiers.62f4ce8b/node_modules/@ember/render-modifiers/modifiers/will-destroy.js","webpack://filter-wizard/../rewritten-packages/@ember/string.905e21c8/node_modules/@ember/string/cache.js","webpack://filter-wizard/../rewritten-packages/@ember/string.905e21c8/node_modules/@ember/string/index.js","webpack://filter-wizard/../rewritten-packages/@embroider/util.c8f16973/node_modules/@embroider/util/services/ensure-registered.js","webpack://filter-wizard/../rewritten-packages/@embroider/util.c8f16973/node_modules/@embroider/util/ember-private-api.js","webpack://filter-wizard/../rewritten-packages/@embroider/util.c8f16973/node_modules/@embroider/util/index.js","webpack://filter-wizard/../rewritten-packages/@glimmer/component.940cf30e/node_modules/@glimmer/component/-private/component.js","webpack://filter-wizard/../rewritten-packages/@glimmer/component.940cf30e/node_modules/@glimmer/component/-private/destroyables.js","webpack://filter-wizard/../rewritten-packages/@glimmer/component.940cf30e/node_modules/@glimmer/component/-private/ember-component-manager.js","webpack://filter-wizard/../rewritten-packages/@glimmer/component.940cf30e/node_modules/@glimmer/component/-private/base-component-manager.js","webpack://filter-wizard/../rewritten-packages/@glimmer/component.940cf30e/node_modules/@glimmer/component/index.js","webpack://filter-wizard/../rewritten-packages/@glimmer/tracking.8b474ccb/node_modules/@glimmer/tracking/index.js","webpack://filter-wizard/../rewritten-packages/ember-cli-app-version.53ac45ac/node_modules/ember-cli-app-version/utils/regexp.js","webpack://filter-wizard/../rewritten-packages/ember-cli-app-version.53ac45ac/node_modules/ember-cli-app-version/_app_/helpers/app-version.js","webpack://filter-wizard/../rewritten-packages/ember-cli-app-version.53ac45ac/node_modules/ember-cli-app-version/_app_/initializers/app-version.js","webpack://filter-wizard/../rewritten-packages/ember-cli-app-version.53ac45ac/node_modules/ember-cli-app-version/initializer-factory.js","webpack://filter-wizard/../rewritten-packages/ember-cli-fastboot.72ff984d/node_modules/ember-cli-fastboot/instance-initializers/clear-double-boot.js","webpack://filter-wizard/../rewritten-packages/ember-cli-fastboot.72ff984d/node_modules/ember-cli-fastboot/locations/none.js","webpack://filter-wizard/../rewritten-packages/ember-cli-fastboot.72ff984d/node_modules/ember-cli-fastboot/services/fastboot.js","webpack://filter-wizard/../rewritten-packages/ember-cli-head.d8f9ed82/node_modules/ember-cli-head/_app_/components/head-content.js","webpack://filter-wizard/../rewritten-packages/ember-cli-head.d8f9ed82/node_modules/ember-cli-head/components/head-layout.hbs","webpack://filter-wizard/../rewritten-packages/ember-cli-head.d8f9ed82/node_modules/ember-cli-head/components/head-layout.js","webpack://filter-wizard/../rewritten-packages/ember-cli-head.d8f9ed82/node_modules/ember-cli-head/_app_/instance-initializers/head-browser.js","webpack://filter-wizard/../rewritten-packages/ember-cli-head.d8f9ed82/node_modules/ember-cli-head/services/head-data.js","webpack://filter-wizard/../rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panel-body/template.hbs","webpack://filter-wizard/../rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panel-body/component.js","webpack://filter-wizard/../rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panel-toggle/component.js","webpack://filter-wizard/../rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panel/template.hbs","webpack://filter-wizard/../rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panel/component.js","webpack://filter-wizard/../rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panels/template.hbs","webpack://filter-wizard/../rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panels/component.js","webpack://filter-wizard/../rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/services/panel-actions.js","webpack://filter-wizard/../rewritten-packages/ember-copy.a6b32b47/node_modules/ember-copy/copyable.js","webpack://filter-wizard/../rewritten-packages/ember-copy.a6b32b47/node_modules/ember-copy/copy.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/helpers/format-date.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/helpers/format-list.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/helpers/format-message.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/helpers/format-number.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/helpers/format-relative.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/helpers/format-time.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/helpers/t.js","webpack://filter-wizard/../../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/formatters/-base.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/formatters/format-date.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/formatters/format-list.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/formatters/format-message.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/formatters/format-number.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/formatters/format-relative.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/formatters/format-time.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.6/node_modules/@formatjs/icu-messageformat-parser/lib/error.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.6/node_modules/@formatjs/icu-messageformat-parser/lib/types.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.6/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.0/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.0/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.0/node_modules/@formatjs/icu-skeleton-parser/lib/number.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.6/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.6/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.6/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.7.6/node_modules/@formatjs/icu-messageformat-parser/lib/index.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+fast-memoize@2.2.0/node_modules/@formatjs/fast-memoize/lib/index.js","webpack://filter-wizard/../../../../node_modules/.pnpm/intl-messageformat@10.5.11/node_modules/intl-messageformat/lib/src/error.js","webpack://filter-wizard/../../../../node_modules/.pnpm/intl-messageformat@10.5.11/node_modules/intl-messageformat/lib/src/formatters.js","webpack://filter-wizard/../../../../node_modules/.pnpm/intl-messageformat@10.5.11/node_modules/intl-messageformat/lib/src/core.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/error.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/utils.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/number.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/relativeTime.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/dateTime.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/plural.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/message.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.18.2/node_modules/@formatjs/ecma402-abstract/lib/utils.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/list.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/displayName.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl@2.10.1_typescript@4.9.5/node_modules/@formatjs/intl/lib/src/create-intl.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/utils/formatjs.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/translations.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/utils/locale.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/utils/translations.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/services/intl.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/utils/hydrate.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/utils/get-dom.js","webpack://filter-wizard/../rewritten-packages/ember-intl.d0f135fa/node_modules/ember-intl/-private/utils/missing-message.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/components/positioned-container.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/modal-dialog.hbs","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/components/modal-dialog.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/helpers/ignore-children.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/instance-initializers/add-modals-container.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/_app_/instance-initializers/add-modals-container.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/_app_/services/modal-dialog.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/basic-dialog.hbs","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/components/basic-dialog.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/in-place-dialog.hbs","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/components/in-place-dialog.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/liquid-dialog.hbs","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/components/liquid-dialog.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/liquid-tether-dialog.hbs","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/components/liquid-tether-dialog.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/tether-dialog.hbs","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/components/tether-dialog.js","webpack://filter-wizard/../rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/utils/config-utils.js","webpack://filter-wizard/../rewritten-packages/ember-modifier.518b94f7/node_modules/ember-modifier/-private/compat.js","webpack://filter-wizard/../rewritten-packages/ember-modifier.518b94f7/node_modules/ember-modifier/-private/class/modifier-manager.js","webpack://filter-wizard/../rewritten-packages/ember-modifier.518b94f7/node_modules/ember-modifier/-private/class/modifier.js","webpack://filter-wizard/../rewritten-packages/ember-modifier.518b94f7/node_modules/ember-modifier/-private/function-based/modifier-manager.js","webpack://filter-wizard/../rewritten-packages/ember-modifier.518b94f7/node_modules/ember-modifier/-private/function-based/modifier.js","webpack://filter-wizard/../rewritten-packages/ember-resolver.67a5be28/node_modules/ember-resolver/container-debug-adapter.js","webpack://filter-wizard/../rewritten-packages/ember-resolver.67a5be28/node_modules/ember-resolver/string/cache.js","webpack://filter-wizard/../rewritten-packages/ember-resolver.67a5be28/node_modules/ember-resolver/string/index.js","webpack://filter-wizard/../rewritten-packages/ember-resolver.67a5be28/node_modules/ember-resolver/index.js","webpack://filter-wizard/../rewritten-packages/ember-resolver.67a5be28/node_modules/ember-resolver/utils/class-factory.js","webpack://filter-wizard/../rewritten-packages/ember-responsive.1062b5e6/node_modules/ember-responsive/helpers/media.js","webpack://filter-wizard/../rewritten-packages/ember-responsive.1062b5e6/node_modules/ember-responsive/_app_/initializers/ember-responsive-breakpoints.js","webpack://filter-wizard/../rewritten-packages/ember-responsive.1062b5e6/node_modules/ember-responsive/null-match-media.js","webpack://filter-wizard/../rewritten-packages/ember-responsive.1062b5e6/node_modules/ember-responsive/_app_/services/media.js","webpack://filter-wizard/../rewritten-packages/ember-responsive.1062b5e6/node_modules/ember-responsive/services/media.js","webpack://filter-wizard/../rewritten-packages/ember-responsive.1062b5e6/node_modules/ember-responsive/initializers/responsive.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/utils/keyboard.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/utils/defaults.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/modifiers/sortable-group.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/modifiers/sortable-handle.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/utils/coordinate.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/system/scroll-container.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/utils/css-calculation.js","webpack://filter-wizard/../rewritten-packages/@ember/test-waiters.dfa93a78/node_modules/@ember/test-waiters/waiter-manager.js","webpack://filter-wizard/../rewritten-packages/@ember/test-waiters.dfa93a78/node_modules/@ember/test-waiters/build-waiter.js","webpack://filter-wizard/../rewritten-packages/@ember/test-waiters.dfa93a78/node_modules/@ember/test-waiters/wait-for-promise.js","webpack://filter-wizard/../rewritten-packages/@ember/test-waiters.dfa93a78/node_modules/@ember/test-waiters/wait-for.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/modifiers/sortable-item.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/system/scroll-parent.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/services/ember-sortable.js","webpack://filter-wizard/../rewritten-packages/ember-sortable.a617e012/node_modules/ember-sortable/utils/constant.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/and.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/equal.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/gt.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/gte.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/is-array.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/is-empty.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/is-equal.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/lt.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/lte.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/not-equal.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/not.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/or.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/helpers/xor.js","webpack://filter-wizard/../rewritten-packages/ember-truth-helpers.676107be/node_modules/ember-truth-helpers/utils/truth-convert.js","webpack://filter-wizard/../rewritten-packages/ember-wormhole.a92ad8e0/node_modules/ember-wormhole/templates/components/ember-wormhole.hbs","webpack://filter-wizard/../rewritten-packages/ember-wormhole.a92ad8e0/node_modules/ember-wormhole/utils/dom.js","webpack://filter-wizard/../rewritten-packages/ember-wormhole.a92ad8e0/node_modules/ember-wormhole/components/ember-wormhole.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-filter@3.2.0/node_modules/@ebiz/aditools-filter/src/e-series.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-filter@3.2.0/node_modules/@ebiz/aditools-filter/src/index.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-filter@3.2.0/node_modules/@ebiz/aditools-filter/src/complex.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-filter@3.2.0/node_modules/@ebiz/aditools-filter/src/internals.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-filter@3.2.0/node_modules/@ebiz/aditools-filter/src/opamp-ratings.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-filter@3.2.0/node_modules/@ebiz/aditools-filter/src/limit-specs.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-filter@3.2.0/node_modules/@ebiz/aditools-filter/src/opamp-top-pick.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-filter@3.2.0/node_modules/@ebiz/aditools-filter/src/recommendations.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+aditools-precisionstudio-menu@1.4.0/node_modules/@ebiz/aditools-precisionstudio-menu/lib/index.js","webpack://filter-wizard/../src/utils/analytics.ts","webpack://filter-wizard/../../src/services/aditools-analytics.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/xlsx@https+++cdn.sheetjs.com+xlsx-0.20.2+xlsx-0.20.2.tgz/node_modules/xlsx/xlsx.mjs","webpack://filter-wizard/../../src/modifiers/aditools-renderer.ts","webpack://filter-wizard/../../src/utils/export-to-excel.ts","webpack://filter-wizard/../../src/utils/download.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/sortablejs@1.15.3/node_modules/sortablejs/modular/sortable.esm.js","webpack://filter-wizard/../../src/slick.core.ts","webpack://filter-wizard/../../src/plugins/slick.cellrangedecorator.ts","webpack://filter-wizard/../../src/slick.interactions.ts","webpack://filter-wizard/../../src/plugins/slick.cellrangeselector.ts","webpack://filter-wizard/../../src/plugins/slick.rowselectionmodel.ts","webpack://filter-wizard/../../src/slick.groupitemmetadataprovider.ts","webpack://filter-wizard/../../src/slick.dataview.ts","webpack://filter-wizard/../../src/slick.editors.ts","webpack://filter-wizard/../../src/slick.grid.ts","webpack://filter-wizard/../../src/components/aditools-device-table.ts","webpack://filter-wizard/../../src/components/aditools-parameter-selector.ts","webpack://filter-wizard/../../src/utils/comparator.ts","webpack://filter-wizard/../../src/components/aditools-graph-hover.ts","webpack://filter-wizard/../../src/components/aditools-graph.ts","webpack://filter-wizard/../../src/components/aditools-minigraph.ts","webpack://filter-wizard/../../src/components/aditools-multiline-graph.ts","webpack://filter-wizard/../../src/helpers/envelope-fill.ts","webpack://filter-wizard/../../src/helpers/envelope-lower.ts","webpack://filter-wizard/../../src/helpers/envelope-upper.ts","webpack://filter-wizard/../../src/helpers/function-line.ts","webpack://filter-wizard/../../src/helpers/math-add.ts","webpack://filter-wizard/../../src/modifiers/on-move-outside.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ticks.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ascending.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/descending.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisector.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisect.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basis.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/array.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/date.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/object.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basisClosed.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/numberArray.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/value.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/round.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/init.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/log.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/nice.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/tickFormat.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionPrefix.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionRound.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionFixed.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/constant.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linear.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/array.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/path.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/point.js","webpack://filter-wizard/../../src/utils/graphUtils.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/line.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/path.js","webpack://filter-wizard/../../src/utils/stringUtils.ts","webpack://filter-wizard/../../src/utils/hoverUtils.ts","webpack://filter-wizard/../../src/components/aditools-card-checkbox.hbs","webpack://filter-wizard/../../src/components/aditools-card-checkbox.ts","webpack://filter-wizard/../../src/components/aditools-card-part-number.hbs","webpack://filter-wizard/../../src/components/aditools-card-part-number.ts","webpack://filter-wizard/../../src/components/aditools-card-tooltip.hbs","webpack://filter-wizard/../../src/components/aditools-card-tooltip.ts","webpack://filter-wizard/../../src/components/aditools-card.hbs","webpack://filter-wizard/../../src/components/aditools-card.ts","webpack://filter-wizard/../../src/components/aditools-confirmation-dialog.hbs","webpack://filter-wizard/../../src/components/aditools-confirmation-dialog.ts","webpack://filter-wizard/../../src/components/aditools-content-wrap.hbs","webpack://filter-wizard/../../src/components/aditools-content-wrap.ts","webpack://filter-wizard/../../src/components/aditools-dialog-load.hbs","webpack://filter-wizard/../../src/components/aditools-dialog-load.ts","webpack://filter-wizard/../../src/components/aditools-dialog-samples.hbs","webpack://filter-wizard/../../src/components/aditools-dialog-samples.ts","webpack://filter-wizard/../../src/components/aditools-dialog-save.hbs","webpack://filter-wizard/../../src/components/aditools-dialog-save.ts","webpack://filter-wizard/../../src/components/aditools-dialog-share.hbs","webpack://filter-wizard/../../src/components/aditools-dialog-share.ts","webpack://filter-wizard/../../src/components/aditools-dialog.hbs","webpack://filter-wizard/../../src/components/aditools-dialog.ts","webpack://filter-wizard/../../src/components/aditools-feedback-dialog.hbs","webpack://filter-wizard/../../src/components/aditools-feedback-dialog.ts","webpack://filter-wizard/../../src/components/aditools-footer.hbs","webpack://filter-wizard/../../src/components/aditools-footer.ts","webpack://filter-wizard/../../src/components/aditools-header.hbs","webpack://filter-wizard/../../src/components/aditools-header.ts","webpack://filter-wizard/../../src/components/aditools-help-dialog.hbs","webpack://filter-wizard/../../src/components/aditools-help-dialog.ts","webpack://filter-wizard/../../src/components/aditools-help-tooltip.hbs","webpack://filter-wizard/../../src/components/aditools-help-tooltip.ts","webpack://filter-wizard/../../src/components/aditools-menubar.hbs","webpack://filter-wizard/../../src/components/aditools-menubar.ts","webpack://filter-wizard/../../src/components/aditools-narrow-menubar.hbs","webpack://filter-wizard/../../src/components/aditools-narrow-menubar.ts","webpack://filter-wizard/../../src/components/aditools-section-header.hbs","webpack://filter-wizard/../../src/components/aditools-section-header.ts","webpack://filter-wizard/../../src/components/aditools-section-subheader.hbs","webpack://filter-wizard/../../src/components/aditools-section-subheader.ts","webpack://filter-wizard/../../src/components/aditools-studio-dropdown.hbs","webpack://filter-wizard/../../src/components/aditools-studio-dropdown.ts","webpack://filter-wizard/../../src/components/aditools-system-dialog.hbs","webpack://filter-wizard/../../src/components/aditools-system-dialog.ts","webpack://filter-wizard/../../src/components/aditools-tab-bar.hbs","webpack://filter-wizard/../../src/components/aditools-tab-bar.ts","webpack://filter-wizard/../../src/utils/fit-text.ts","webpack://filter-wizard/../../src/components/aditools-tight-menubar.hbs","webpack://filter-wizard/../../src/components/aditools-tight-menubar.ts","webpack://filter-wizard/../../src/components/aditools-toolbar-action.hbs","webpack://filter-wizard/../../src/components/aditools-toolbar-action.ts","webpack://filter-wizard/../../src/components/aditools-toolbar-tab.hbs","webpack://filter-wizard/../../src/components/aditools-toolbar-tab.ts","webpack://filter-wizard/../../src/components/aditools-toolbar.hbs","webpack://filter-wizard/../../src/components/aditools-toolbar.ts","webpack://filter-wizard/../../src/components/email-input.hbs","webpack://filter-wizard/../../src/components/email-input.ts","webpack://filter-wizard/../../src/components/input-list.hbs","webpack://filter-wizard/../../src/components/input-list.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/@floating-ui+utils@0.2.7/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","webpack://filter-wizard/../../../../node_modules/.pnpm/@floating-ui+core@1.6.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","webpack://filter-wizard/../../../../node_modules/.pnpm/@floating-ui+utils@0.2.7/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","webpack://filter-wizard/../../../../node_modules/.pnpm/@floating-ui+dom@1.6.10/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","webpack://filter-wizard/../src/events.ts","webpack://filter-wizard/../src/popover-helpers.ts","webpack://filter-wizard/../src/popover.ts","webpack://filter-wizard/../src/index.ts","webpack://filter-wizard/../../src/modifiers/aditools-positioner.ts","webpack://filter-wizard/../../src/components/aditools-menu-context.hbs","webpack://filter-wizard/../../src/components/aditools-menu-context.ts","webpack://filter-wizard/../../src/components/aditools-menu-link.hbs","webpack://filter-wizard/../../src/components/aditools-menu-link.ts","webpack://filter-wizard/../../src/components/aditools-menu-links.hbs","webpack://filter-wizard/../../src/components/aditools-menu-links.ts","webpack://filter-wizard/../../src/components/aditools-menu-tab.hbs","webpack://filter-wizard/../../src/components/aditools-menu-tab.ts","webpack://filter-wizard/../../src/components/aditools-menu-tabs.hbs","webpack://filter-wizard/../../src/components/aditools-menu-tabs.ts","webpack://filter-wizard/../src/constants.ts","webpack://filter-wizard/../../src/utils/aditools-site.ts","webpack://filter-wizard/../../src/services/aditools-site.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/@ebiz+pretty-num@2.3.0/node_modules/@ebiz/pretty-num/pretty-num.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@embroider+macros@1.16.8/node_modules/@embroider/macros/src/addon/es-compat2.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/262.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/GetOption.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/utils.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+ecma402-abstract@1.11.4/node_modules/@formatjs/ecma402-abstract/lib/data.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-getcanonicallocales@1.9.2/node_modules/@formatjs/intl-getcanonicallocales/index.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-getcanonicallocales@1.9.2/node_modules/@formatjs/intl-getcanonicallocales/polyfill.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-getcanonicallocales@1.9.2/node_modules/@formatjs/intl-getcanonicallocales/should-polyfill.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-getcanonicallocales@1.9.2/node_modules/@formatjs/intl-getcanonicallocales/src/aliases.generated.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-getcanonicallocales@1.9.2/node_modules/@formatjs/intl-getcanonicallocales/src/canonicalizer.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-getcanonicallocales@1.9.2/node_modules/@formatjs/intl-getcanonicallocales/src/emitter.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-getcanonicallocales@1.9.2/node_modules/@formatjs/intl-getcanonicallocales/src/likelySubtags.generated.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-getcanonicallocales@1.9.2/node_modules/@formatjs/intl-getcanonicallocales/src/parser.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-getcanonicallocales@1.9.2/node_modules/@formatjs/intl-getcanonicallocales/src/types.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-localematcher@0.2.25/node_modules/@formatjs/intl-localematcher/lib/abstract/BestAvailableLocale.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-localematcher@0.2.25/node_modules/@formatjs/intl-localematcher/lib/abstract/LookupSupportedLocales.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-localematcher@0.2.25/node_modules/@formatjs/intl-localematcher/lib/abstract/UnicodeExtensionValue.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-localematcher@0.2.25/node_modules/@formatjs/intl-localematcher/lib/abstract/ResolveLocale.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-localematcher@0.2.25/node_modules/@formatjs/intl-localematcher/lib/abstract/LookupMatcher.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-localematcher@0.2.25/node_modules/@formatjs/intl-localematcher/lib/abstract/BestFitMatcher.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-localematcher@0.2.25/node_modules/@formatjs/intl-localematcher/lib/abstract/utils.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-localematcher@0.2.25/node_modules/@formatjs/intl-localematcher/lib/index.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-localematcher@0.2.25/node_modules/@formatjs/intl-localematcher/lib/abstract/CanonicalizeLocaleList.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/abstract/GetOperands.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/abstract/InitializePluralRules.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/abstract/ResolvePlural.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/get_internal_slots.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/index.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/locale-data/en.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/locale-data/ja.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/locale-data/zh.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/polyfill.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/should-polyfill.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@formatjs+intl-pluralrules@4.3.3/node_modules/@formatjs/intl-pluralrules/supported-locales.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@messageformat+core@3.3.0/node_modules/@messageformat/core/messageformat.js","webpack://filter-wizard/../../src/helpers/assign.js","webpack://filter-wizard/../../src/utils/scroll-helpers.ts","webpack://filter-wizard/../../src/components/basic-dropdown-content.ts","webpack://filter-wizard/../../src/components/basic-dropdown-trigger.ts","webpack://filter-wizard/../../src/components/basic-dropdown-wormhole.ts","webpack://filter-wizard/../../src/components/basic-dropdown.ts","webpack://filter-wizard/../../src/modifiers/basic-dropdown-trigger.ts","webpack://filter-wizard/../../src/utils/calculate-position.ts","webpack://filter-wizard/../../src/utils/has-moved.ts","webpack://filter-wizard/../../src/-private/helpers.js","webpack://filter-wizard/../../src/helpers/cancel-all.ts","webpack://filter-wizard/../../src/helpers/perform.ts","webpack://filter-wizard/../../src/helpers/task.ts","webpack://filter-wizard/../../src/helpers/element.ts","webpack://filter-wizard/../src/index.js","webpack://filter-wizard/../index.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-focus-trap@1.1.0_ember-source@5.12.0_@glimmer+component@1.1.2_@babel+core@7.26.0__rsvp@4.8.5_webpack@5.95.0_/node_modules/ember-focus-trap/dist/modifiers/focus-trap.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@4.0.2_@babel+core@7.26.0_ember-source@5.12.0_@glimme_33sfvno35biakuwebi4b323kjy/node_modules/ember-lifeline/dist/utils/get-task.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@4.0.2_@babel+core@7.26.0_ember-source@5.12.0_@glimme_33sfvno35biakuwebi4b323kjy/node_modules/ember-lifeline/dist/cancel-task.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@4.0.2_@babel+core@7.26.0_ember-source@5.12.0_@glimme_33sfvno35biakuwebi4b323kjy/node_modules/ember-lifeline/dist/run-task.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@4.0.2_@babel+core@7.26.0_ember-source@5.12.0_@glimme_33sfvno35biakuwebi4b323kjy/node_modules/ember-lifeline/dist/schedule-task.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@4.0.2_@babel+core@7.26.0_ember-source@5.12.0_@glimme_33sfvno35biakuwebi4b323kjy/node_modules/ember-lifeline/dist/poll-task.js","webpack://filter-wizard/../../../../node_modules/.pnpm/ember-lifeline@7.0.0_@ember+test-helpers@4.0.2_@babel+core@7.26.0_ember-source@5.12.0_@glimme_33sfvno35biakuwebi4b323kjy/node_modules/ember-lifeline/dist/debounce-task.js","webpack://filter-wizard/../src/-private/class-based/modifier-manager.ts","webpack://filter-wizard/../src/-private/class-based/modifier.ts","webpack://filter-wizard/../src/-private/function-based/modifier.ts","webpack://filter-wizard/../src/-private/function-based/modifier-manager.ts","webpack://filter-wizard/../../src/helpers/page-title.ts","webpack://filter-wizard/../../src/services/page-title.ts","webpack://filter-wizard/../../src/components/power-select-multiple.ts","webpack://filter-wizard/../../../src/components/power-select-multiple/input.ts","webpack://filter-wizard/../../../src/components/power-select-multiple/trigger.ts","webpack://filter-wizard/../../../../../src/-private/external/scheduler/policies/execution-states.js","webpack://filter-wizard/../../../../src/-private/external/scheduler/refresh.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/state-tracker/state.js","webpack://filter-wizard/../../../../src/-private/external/task-instance/completion-states.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/state-tracker/state-tracker.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/state-tracker/null-state-tracker.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/state-tracker/null-state.js","webpack://filter-wizard/../../../../src/-private/external/scheduler/scheduler.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/policies/unbounded-policy.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/policies/bounded-policy.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/policies/enqueued-policy.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/policies/drop-policy.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/policies/keep-latest-policy.js","webpack://filter-wizard/../../../../../src/-private/external/scheduler/policies/restartable-policy.js","webpack://filter-wizard/../../../../src/-private/external/task/default-state.js","webpack://filter-wizard/../../../../src/-private/external/task-instance/cancelation.js","webpack://filter-wizard/../../../../src/-private/external/task/taskable.js","webpack://filter-wizard/../../../src/-private/external/generator-state.js","webpack://filter-wizard/../../../../src/-private/external/task-instance/initial-state.js","webpack://filter-wizard/../../../src/-private/external/yieldables.js","webpack://filter-wizard/../../../../src/-private/external/task-instance/executor.js","webpack://filter-wizard/../../../../src/-private/external/task/task.js","webpack://filter-wizard/../../../../src/-private/external/task/task-group.js","webpack://filter-wizard/../../../src/-private/external/environment.js","webpack://filter-wizard/../../../src/-private/external/task-factory.js","webpack://filter-wizard/../../../../src/-private/external/task-instance/base.js","webpack://filter-wizard/../../src/-private/tracked-state.js","webpack://filter-wizard/../../src/-private/task-instance.js","webpack://filter-wizard/../../src/-private/taskable-mixin.js","webpack://filter-wizard/../../src/-private/task.js","webpack://filter-wizard/../../src/-private/task-properties.js","webpack://filter-wizard/../../src/-private/task-group.js","webpack://filter-wizard/../../../src/-private/scheduler/ember-scheduler.js","webpack://filter-wizard/../../src/-private/ember-environment.js","webpack://filter-wizard/../../src/-private/task-factory.js","webpack://filter-wizard/../../src/-private/utils.js","webpack://filter-wizard/../../../src/-private/external/task-decorators.js","webpack://filter-wizard/../../src/-private/cancelable-promise-helpers.js","webpack://filter-wizard/../../src/-private/task-decorators.js","webpack://filter-wizard/../../src/components/power-select.ts","webpack://filter-wizard/../../src/-private/async-arrow-runtime.js","webpack://filter-wizard/../../../src/components/power-select/before-options.ts","webpack://filter-wizard/../../../src/components/power-select/label.ts","webpack://filter-wizard/../../../src/components/power-select/no-matches-message.ts","webpack://filter-wizard/../../../src/components/power-select/options.ts","webpack://filter-wizard/../../../src/components/power-select/placeholder.ts","webpack://filter-wizard/../../../src/components/power-select/power-select-group.ts","webpack://filter-wizard/../../../src/components/power-select/search-message.ts","webpack://filter-wizard/../../../src/components/power-select/trigger.ts","webpack://filter-wizard/../../src/helpers/ember-power-select-is-equal.ts","webpack://filter-wizard/../../src/helpers/ember-power-select-is-group.ts","webpack://filter-wizard/../../src/helpers/ember-power-select-is-selected-present.ts","webpack://filter-wizard/../../src/utils/group-utils.ts","webpack://filter-wizard/../../src/modifiers/style.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","webpack://filter-wizard/../../../../node_modules/.pnpm/svg-path-reverse@1.7.0/node_modules/svg-path-reverse/reverse.js","webpack://filter-wizard/../rewritten-packages/ember-tracked-storage-polyfill.5ec5c760/node_modules/ember-tracked-storage-polyfill/index.js","webpack://filter-wizard/../../src/-private/map.ts","webpack://filter-wizard/../../src/-private/set.ts","webpack://filter-wizard/../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js","webpack://filter-wizard/../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js","webpack://filter-wizard/../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js","webpack://filter-wizard/../../src/-private/array.ts","webpack://filter-wizard/../../src/-private/object.js","webpack://filter-wizard/../../src/-private/decorator.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/@babel+runtime@7.23.4/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@babel+runtime@7.23.4/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@babel+runtime@7.23.4/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@babel+runtime@7.23.4/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@babel+runtime@7.23.4/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js","webpack://filter-wizard/../../../../node_modules/.pnpm/@babel+runtime@7.23.4/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://filter-wizard/../src/cache.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js","webpack://filter-wizard/../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js","webpack://filter-wizard/../src/runtime.ts","webpack://filter-wizard/../../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","webpack://filter-wizard/webpack/bootstrap","webpack://filter-wizard/webpack/runtime/compat get default export","webpack://filter-wizard/webpack/runtime/define property getters","webpack://filter-wizard/webpack/runtime/ensure chunk","webpack://filter-wizard/webpack/runtime/get javascript chunk filename","webpack://filter-wizard/webpack/runtime/get mini-css chunk filename","webpack://filter-wizard/webpack/runtime/hasOwnProperty shorthand","webpack://filter-wizard/webpack/runtime/make namespace object","webpack://filter-wizard/webpack/runtime/publicPath","webpack://filter-wizard/webpack/runtime/jsonp chunk loading","webpack://filter-wizard/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\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};","var inProgress = {};\nvar dataWebpackPrefix = \"filter-wizard:\";\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};","\nconst m = window.require(\"@ember/-internals/metal\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/application\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/array\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/component/helper\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/component/template-only\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/component\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/controller\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/debug/container-debug-adapter\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/debug\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/destroyable\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/modifier\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/object/compat\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/object/computed\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/object/evented\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/object/events\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/object/internals\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/object/mixin\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/object/observers\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/object\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/owner\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/routing/none-location\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/routing/route\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/routing/router\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/runloop\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/service\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/template\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/template-factory\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/test\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@ember/utils\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@glimmer/runtime\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@glimmer/tracking\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"@glimmer/validator\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"ember\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"jquery\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.requirejs;\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nconst m = window.require(\"rsvp\");\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-cli-typescript/-embroider-implicit-modules.js\";\nimport \"ember-compatibility-helpers/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-compatibility-helpers/-embroider-implicit-modules.js\";\nimport \"ember-cli-typescript/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"@glimmer/component/-embroider-implicit-modules.js\";\nimport \"@glimmer/tracking/-embroider-implicit-modules.js\";\nimport \"ember-modifier/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-compatibility-helpers/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@glimmer/tracking/-embroider-implicit-modules.js\";\nimport \"ember-cache-primitive-polyfill/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"@glimmer/component/-embroider-implicit-modules.js\";\nimport \"@glimmer/tracking/-embroider-implicit-modules.js\";\nimport \"ember-modifier/-embroider-implicit-modules.js\";\nimport \"@ember/string/-embroider-implicit-modules.js\";\nimport \"ember-cached-decorator-polyfill/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-cli-htmlbars/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-tracked-storage-polyfill/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"tracked-built-ins/-embroider-implicit-modules.js\";\nimport \"@glimmer/component/-embroider-implicit-modules.js\";\nimport \"@glimmer/tracking/-embroider-implicit-modules.js\";\nimport \"ember-modifier/-embroider-implicit-modules.js\";\nimport \"@ember/string/-embroider-implicit-modules.js\";\nimport \"ember-truth-helpers/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\nimport \"@ember/test-waiters/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"@embroider/util/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-modifier/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-cli-typescript/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-functions-as-helper-polyfill/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-element-helper/-embroider-implicit-modules.js\";\nimport \"ember-modifier/-embroider-implicit-modules.js\";\nimport \"ember-lifeline/-embroider-implicit-modules.js\";\nimport \"ember-style-modifier/-embroider-implicit-modules.js\";\nimport \"ember-truth-helpers/-embroider-implicit-modules.js\";\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\nimport \"@embroider/util/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-assign-helper/-embroider-implicit-modules.js\";\nimport \"ember-lifeline/-embroider-implicit-modules.js\";\nimport \"ember-modifier/-embroider-implicit-modules.js\";\nimport \"ember-truth-helpers/-embroider-implicit-modules.js\";\nimport \"@embroider/util/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\nimport \"ember-cli-test-loader/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-auto-import/-embroider-implicit-modules.js\";\nimport \"ember-cli-htmlbars/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-compatibility-helpers/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\nimport \"ember-modifier-manager-polyfill/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"@ember/string/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-cli-htmlbars/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-cli-htmlbars/-embroider-implicit-modules.js\";\nimport \"ember-in-element-polyfill/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\nimport \"ember-cli-htmlbars/-embroider-implicit-modules.js\";\nimport \"@embroider/util/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\nimport \"ember-auto-import/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-auto-import/-embroider-implicit-modules.js\";\nimport \"ember-cli-typescript/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-cli-typescript/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@ember-decorators/utils/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@ember-decorators/utils/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@ember-decorators/component/-embroider-implicit-modules.js\";\nimport \"@ember-decorators/object/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-cli-htmlbars/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\nimport \"ember-cli-htmlbars/-embroider-implicit-modules.js\";\nimport \"@embroider/util/-embroider-implicit-modules.js\";\nimport \"ember-decorators/-embroider-implicit-modules.js\";\nimport \"ember-wormhole/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\nimport \"ember-modifier/-embroider-implicit-modules.js\";\nimport \"@ember/test-waiters/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-auto-import/-embroider-implicit-modules.js\";\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nimport \"@ebiz/ember-aditools-analytics/-embroider-implicit-modules.js\";\nimport \"@ebiz/ember-aditools-device-table/-embroider-implicit-modules.js\";\nimport \"@ebiz/ember-aditools-graph/-embroider-implicit-modules.js\";\nimport \"@ebiz/ember-aditools-ipc/-embroider-implicit-modules.js\";\nimport \"@ebiz/ember-aditools-page/-embroider-implicit-modules.js\";\nimport \"@ebiz/ember-aditools-site/-embroider-implicit-modules.js\";\nimport \"@ember/test-helpers/-embroider-implicit-modules.js\";\nimport \"ember-basic-dropdown/-embroider-implicit-modules.js\";\nimport \"ember-cli-babel/-embroider-implicit-modules.js\";\nimport \"ember-cli-bundle-analyzer/-embroider-implicit-modules.js\";\nimport \"ember-concurrency/-embroider-implicit-modules.js\";\nimport \"ember-focus-trap/-embroider-implicit-modules.js\";\nimport \"ember-modifier/-embroider-implicit-modules.js\";\nimport \"ember-page-title/-embroider-implicit-modules.js\";\nimport \"ember-power-select/-embroider-implicit-modules.js\";\nimport \"ember-qunit/-embroider-implicit-modules.js\";\nimport \"tracked-built-ins/-embroider-implicit-modules.js\";\nimport \"ember-cli-inject-live-reload/-embroider-implicit-modules.js\";\nimport \"ember-cli-fastboot/-embroider-implicit-modules.js\";\nimport \"@embroider/macros/-embroider-implicit-modules.js\";\nimport \"ember-auto-import/-embroider-implicit-modules.js\";\nimport \"ember-cli-htmlbars/-embroider-implicit-modules.js\";\nimport \"@ebiz/ember-aditools-deployment/-embroider-implicit-modules.js\";\nimport \"@glimmer/component/-embroider-implicit-modules.js\";\nimport \"@glimmer/tracking/-embroider-implicit-modules.js\";\nimport \"ember-truth-helpers/-embroider-implicit-modules.js\";\nimport \"@ember/jquery/-embroider-implicit-modules.js\";\nimport \"@ember/optional-features/-embroider-implicit-modules.js\";\nimport \"@ember/render-modifiers/-embroider-implicit-modules.js\";\nimport \"ember-cli-code-coverage/-embroider-implicit-modules.js\";\nimport \"ember-cli-app-version/-embroider-implicit-modules.js\";\nimport \"ember-cli-clean-css/-embroider-implicit-modules.js\";\nimport \"ember-cli-dependency-checker/-embroider-implicit-modules.js\";\nimport \"ember-cli-dependency-lint/-embroider-implicit-modules.js\";\nimport \"ember-test-selectors/-embroider-implicit-modules.js\";\nimport \"ember-cli-deprecation-workflow/-embroider-implicit-modules.js\";\nimport \"ember-cli-head/-embroider-implicit-modules.js\";\nimport \"ember-cli-sass/-embroider-implicit-modules.js\";\nimport \"broccoli-asset-rev/-embroider-implicit-modules.js\";\nimport \"ember-cli-terser/-embroider-implicit-modules.js\";\nimport \"ember-cli-sri/-embroider-implicit-modules.js\";\nimport \"ember-collapsible-panel/-embroider-implicit-modules.js\";\nimport \"ember-copy/-embroider-implicit-modules.js\";\nimport \"ember-exam/-embroider-implicit-modules.js\";\nimport \"ember-intl/-embroider-implicit-modules.js\";\nimport \"ember-load-initializers/-embroider-implicit-modules.js\";\nimport \"ember-modal-dialog/-embroider-implicit-modules.js\";\nimport \"ember-resolver/-embroider-implicit-modules.js\";\nimport \"ember-responsive/-embroider-implicit-modules.js\";\nimport \"ember-sortable/-embroider-implicit-modules.js\";\nimport \"ember-source/-embroider-implicit-modules.js\";\nimport \"loader.js/-embroider-implicit-modules.js\";\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\" \\r\\n {{outlet}}\\r\\n\",{ moduleName: \"filter-wizard/templates/application.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{!-- \\r\\n Add content you wish automatically added to the documents head\\r\\n here. The \\\"model\\\" available in this template can be populated by\\r\\n setting values on the \\\"head-data\\\" service. \\r\\n--}}\\r\\n {{@model.title}}\\r\\n \\r\\n \\r\\n \\r\\n\",{ moduleName: \"filter-wizard/templates/head.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n {{#if (eq this.activeTab \\\"filter-type\\\") }}\\r\\n \\r\\n {{else}}\\r\\n \\r\\n {{#let (component (concat \\\"settings/\\\" this.activeTab)) as |SettingsSubpanel|}}\\r\\n \\r\\n {{/let}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n{{! The following are pop-ups invoked at this level}}\\r\\n{{#if this.helpDialog.enabled}}\\r\\n \\r\\n{{/if}}\\r\\n\\r\\n{{#if this.edgeWarning.enabled}}\\r\\n \\r\\n{{/if}}\\r\\n\\r\\n{{#if this.notificationDialog.enabled}}\\r\\n \\r\\n{{/if}}\\r\\n\\r\\n{{#if this.dialogFlags.orderSamplesEnabled}}\\r\\n\\r\\n{{/if}}\\r\\n\\r\\n{{#if this.dialogFlags.evalBoardEnabled}}\\r\\n \\r\\n{{/if}}\\r\\n\\r\\n{{#if this.dialogFlags.evalBoardConfirmationEnabled}}\\r\\n \\r\\n{{/if}}\\r\\n\\r\\n{{#if this.dialogFlags.mailToColleagueEnabled}}\\r\\n \\r\\n{{/if}}\\r\\n\\r\\n{{#if this.dialogFlags.algorithmEnabled}}\\r\\n \\r\\n{{/if}}\\r\\n\\r\\n\\r\\n\\r\\n{{#if this.pdfFigures.render}}\\r\\n
\\r\\n {{#each this.pdfFigures.components as |item|}}\\r\\n
\\r\\n {{#let (component item.figure) as |PdfFigure|}}\\r\\n \\r\\n {{/let}}\\r\\n
\\r\\n {{/each}}\\r\\n{{/if}}\\r\\n\\r\\n\",{ moduleName: \"filter-wizard/templates/index.hbs\" })","import require from 'require';\nfunction resolveInitializer(moduleName) {\n var module = require(moduleName, null, null, true);\n if (!module) {\n throw new Error(moduleName + ' must export an initializer.');\n }\n var initializer = module['default'];\n if (!initializer) {\n throw new Error(moduleName + ' must have a default export');\n }\n if (!initializer.name) {\n initializer.name = moduleName.slice(moduleName.lastIndexOf('/') + 1);\n }\n return initializer;\n}\nfunction registerInitializers(app, moduleNames) {\n for (var i = 0; i < moduleNames.length; i++) {\n app.initializer(resolveInitializer(moduleNames[i]));\n }\n}\nfunction registerInstanceInitializers(app, moduleNames) {\n for (var i = 0; i < moduleNames.length; i++) {\n app.instanceInitializer(resolveInitializer(moduleNames[i]));\n }\n}\nfunction _endsWith(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n}\n\n/**\n * Configure your application as it boots\n */\nexport default function loadInitializers(app, prefix) {\n var initializerPrefix = prefix + '/initializers/';\n var instanceInitializerPrefix = prefix + '/instance-initializers/';\n var initializers = [];\n var instanceInitializers = [];\n // this is 2 pass because generally the first pass is the problem\n // and is reduced, and resolveInitializer has potential to deopt\n var moduleNames = Object.keys(requirejs._eak_seen);\n for (var i = 0; i < moduleNames.length; i++) {\n var moduleName = moduleNames[i];\n if (moduleName.lastIndexOf(initializerPrefix, 0) === 0) {\n if (!_endsWith(moduleName, '-test')) {\n initializers.push(moduleName);\n }\n } else if (moduleName.lastIndexOf(instanceInitializerPrefix, 0) === 0) {\n if (!_endsWith(moduleName, '-test')) {\n instanceInitializers.push(moduleName);\n }\n }\n }\n registerInitializers(app, initializers);\n registerInstanceInitializers(app, instanceInitializers);\n}","import Application from '@ember/application';\r\nimport Resolver from 'ember-resolver';\r\nimport loadInitializers from 'ember-load-initializers';\r\nimport config from 'filter-wizard/config/environment';\r\n\r\nexport default class App extends Application {\r\n modulePrefix = config.modulePrefix;\r\n podModulePrefix = config.podModulePrefix;\r\n Resolver = Resolver;\r\n}\r\n\r\nloadInitializers(App, config.modulePrefix);\r\n","\nimport { importSync as i, macroCondition, getGlobalConfig } from '@embroider/macros';\nlet w = window;\nlet d = w.define;\n\n\ni(\"./-embroider-implicit-modules.js\");\n\nd(\"filter-wizard/app\", function(){ return i(\"filter-wizard/app.js\");});\nd(\"filter-wizard/breakpoints\", function(){ return i(\"filter-wizard/breakpoints.js\");});\nd(\"filter-wizard/config/environment\", function(){ return i(\"filter-wizard/config/environment.js\");});\nd(\"filter-wizard/data/local-parts\", function(){ return i(\"filter-wizard/data/local-parts.js\");});\nd(\"filter-wizard/figure-map\", function(){ return i(\"filter-wizard/figure-map.js\");});\nd(\"filter-wizard/filter-constants\", function(){ return i(\"filter-wizard/filter-constants.ts\");});\nd(\"filter-wizard/formats\", function(){ return i(\"filter-wizard/formats.js\");});\nd(\"filter-wizard/initializers/responsive\", function(){ return i(\"filter-wizard/initializers/responsive.js\");});\nd(\"filter-wizard/models/advisors/component-selection\", function(){ return i(\"filter-wizard/models/advisors/component-selection.ts\");});\nd(\"filter-wizard/models/advisors/individual-stage\", function(){ return i(\"filter-wizard/models/advisors/individual-stage.ts\");});\nd(\"filter-wizard/models/advisors/noise\", function(){ return i(\"filter-wizard/models/advisors/noise.ts\");});\nd(\"filter-wizard/models/advisors/specification\", function(){ return i(\"filter-wizard/models/advisors/specification.ts\");});\nd(\"filter-wizard/models/advisors/tolerance\", function(){ return i(\"filter-wizard/models/advisors/tolerance.ts\");});\nd(\"filter-wizard/models/component-selector/op-amp-selection\", function(){ return i(\"filter-wizard/models/component-selector/op-amp-selection.js\");});\nd(\"filter-wizard/models/component-selector/op-amp-validation\", function(){ return i(\"filter-wizard/models/component-selector/op-amp-validation.js\");});\nd(\"filter-wizard/models/component-selector/why-not\", function(){ return i(\"filter-wizard/models/component-selector/why-not.js\");});\nd(\"filter-wizard/models/components/c1\", function(){ return i(\"filter-wizard/models/components/c1.js\");});\nd(\"filter-wizard/models/components/capacitor\", function(){ return i(\"filter-wizard/models/components/capacitor.js\");});\nd(\"filter-wizard/models/components/components-factory\", function(){ return i(\"filter-wizard/models/components/components-factory.js\");});\nd(\"filter-wizard/models/components/inductor\", function(){ return i(\"filter-wizard/models/components/inductor.js\");});\nd(\"filter-wizard/models/components/r3\", function(){ return i(\"filter-wizard/models/components/r3.js\");});\nd(\"filter-wizard/models/components/r4\", function(){ return i(\"filter-wizard/models/components/r4.js\");});\nd(\"filter-wizard/models/components/resistor\", function(){ return i(\"filter-wizard/models/components/resistor.js\");});\nd(\"filter-wizard/models/filter-response/base-filter-response\", function(){ return i(\"filter-wizard/models/filter-response/base-filter-response.js\");});\nd(\"filter-wizard/models/filter-response/bessel-json\", function(){ return i(\"filter-wizard/models/filter-response/bessel-json.js\");});\nd(\"filter-wizard/models/filter-response/bessel\", function(){ return i(\"filter-wizard/models/filter-response/bessel.js\");});\nd(\"filter-wizard/models/filter-response/butterworth-bessel\", function(){ return i(\"filter-wizard/models/filter-response/butterworth-bessel.js\");});\nd(\"filter-wizard/models/filter-response/butterworth\", function(){ return i(\"filter-wizard/models/filter-response/butterworth.js\");});\nd(\"filter-wizard/models/filter-response/chebyshev\", function(){ return i(\"filter-wizard/models/filter-response/chebyshev.js\");});\nd(\"filter-wizard/models/filter-response/filter-response\", function(){ return i(\"filter-wizard/models/filter-response/filter-response.js\");});\nd(\"filter-wizard/models/filter/band-pass\", function(){ return i(\"filter-wizard/models/filter/band-pass.ts\");});\nd(\"filter-wizard/models/filter/band-pass/narrow-band\", function(){ return i(\"filter-wizard/models/filter/band-pass/narrow-band.ts\");});\nd(\"filter-wizard/models/filter/band-pass/wide-band\", function(){ return i(\"filter-wizard/models/filter/band-pass/wide-band.ts\");});\nd(\"filter-wizard/models/filter/filter\", function(){ return i(\"filter-wizard/models/filter/filter.ts\");});\nd(\"filter-wizard/models/filter/high-pass\", function(){ return i(\"filter-wizard/models/filter/high-pass.ts\");});\nd(\"filter-wizard/models/filter/low-pass\", function(){ return i(\"filter-wizard/models/filter/low-pass.ts\");});\nd(\"filter-wizard/models/formulas/frequency-point\", function(){ return i(\"filter-wizard/models/formulas/frequency-point.js\");});\nd(\"filter-wizard/models/formulas/noise\", function(){ return i(\"filter-wizard/models/formulas/noise.js\");});\nd(\"filter-wizard/models/formulas/time-axis\", function(){ return i(\"filter-wizard/models/formulas/time-axis.js\");});\nd(\"filter-wizard/models/formulas/voltage-range\", function(){ return i(\"filter-wizard/models/formulas/voltage-range.js\");});\nd(\"filter-wizard/models/gestures/filter-response-gesture\", function(){ return i(\"filter-wizard/models/gestures/filter-response-gesture.ts\");});\nd(\"filter-wizard/models/gestures/gain-unit-gesture\", function(){ return i(\"filter-wizard/models/gestures/gain-unit-gesture.ts\");});\nd(\"filter-wizard/models/gestures/optimization\", function(){ return i(\"filter-wizard/models/gestures/optimization.js\");});\nd(\"filter-wizard/models/implementation/base-implementation\", function(){ return i(\"filter-wizard/models/implementation/base-implementation.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/circuit-limits-utils\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/circuit-limits-utils.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/component-feedbacks/no-positive-feedback\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/component-feedbacks/no-positive-feedback.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/component-feedbacks/positive-feedback\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/component-feedbacks/positive-feedback.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/main\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/main.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r2\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r2.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r3\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r3.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r4\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r4.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r5\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/noise-sources/r5.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/reverse-implementation\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/band-pass/reverse-implementation.js\");});\nd(\"filter-wizard/models/implementation/deliyannis-friend/deliyannis-friend\", function(){ return i(\"filter-wizard/models/implementation/deliyannis-friend/deliyannis-friend.js\");});\nd(\"filter-wizard/models/implementation/first-order/common/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/first-order/common/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/first-order/common/big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/first-order/common/big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/first-order/common/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/first-order/common/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/first-order/common/circuit-limits-utils\", function(){ return i(\"filter-wizard/models/implementation/first-order/common/circuit-limits-utils.js\");});\nd(\"filter-wizard/models/implementation/first-order/common/circuit\", function(){ return i(\"filter-wizard/models/implementation/first-order/common/circuit.js\");});\nd(\"filter-wizard/models/implementation/first-order/common/main\", function(){ return i(\"filter-wizard/models/implementation/first-order/common/main.js\");});\nd(\"filter-wizard/models/implementation/first-order/common/reverse-implementation\", function(){ return i(\"filter-wizard/models/implementation/first-order/common/reverse-implementation.js\");});\nd(\"filter-wizard/models/implementation/first-order/first-order\", function(){ return i(\"filter-wizard/models/implementation/first-order/first-order.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/main\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/main.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/r3\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/r3.js\");});\nd(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/r4\", function(){ return i(\"filter-wizard/models/implementation/first-order/high-pass/noise-sources/r4.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/main\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/main.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/r3\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/r3.js\");});\nd(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/r4\", function(){ return i(\"filter-wizard/models/implementation/first-order/low-pass/noise-sources/r4.js\");});\nd(\"filter-wizard/models/implementation/implementation-common/base-actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/implementation-common/base-actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/implementation-common/base-big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/implementation-common/base-big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/implementation-common/base-main\", function(){ return i(\"filter-wizard/models/implementation/implementation-common/base-main.js\");});\nd(\"filter-wizard/models/implementation/implementation-common/base-noise-group\", function(){ return i(\"filter-wizard/models/implementation/implementation-common/base-noise-group.js\");});\nd(\"filter-wizard/models/implementation/implementation-common/base-pie-wedge\", function(){ return i(\"filter-wizard/models/implementation/implementation-common/base-pie-wedge.js\");});\nd(\"filter-wizard/models/implementation/implementation-common/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/implementation-common/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/implementation\", function(){ return i(\"filter-wizard/models/implementation/implementation.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/circuit-limits-utils\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/circuit-limits-utils.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/main\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/main.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/inductor/band-pass/reverse-implementation\", function(){ return i(\"filter-wizard/models/implementation/inductor/band-pass/reverse-implementation.js\");});\nd(\"filter-wizard/models/implementation/inductor/common/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/inductor/common/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/circuit-limits-utils\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/circuit-limits-utils.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/main\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/main.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/inductor/high-pass/reverse-implementation\", function(){ return i(\"filter-wizard/models/implementation/inductor/high-pass/reverse-implementation.js\");});\nd(\"filter-wizard/models/implementation/inductor/inductor\", function(){ return i(\"filter-wizard/models/implementation/inductor/inductor.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/circuit-limits-utils\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/circuit-limits-utils.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/main\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/main.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/inductor/low-pass/reverse-implementation\", function(){ return i(\"filter-wizard/models/implementation/inductor/low-pass/reverse-implementation.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/circuit-limits-utils\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/circuit-limits-utils.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/main\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/main.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/r2\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/noise-sources/r2.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/high-pass/reverse-implementation\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/high-pass/reverse-implementation.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/circuit-limits-utils\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/circuit-limits-utils.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/main\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/main.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r2\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r2.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r3\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r3.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r4\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r4.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r5\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/noise-sources/r5.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/low-pass/reverse-implementation\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/low-pass/reverse-implementation.js\");});\nd(\"filter-wizard/models/implementation/multiple-feedback/multiple-feedback\", function(){ return i(\"filter-wizard/models/implementation/multiple-feedback/multiple-feedback.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/circuit-limits-utils\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/circuit-limits-utils.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/main\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/main.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/r2\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/r2.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/r3\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/r3.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/r4\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/noise-sources/r4.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/high-pass/reverse-implementation\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/high-pass/reverse-implementation.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/actual-filter-amplitude\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/actual-filter-amplitude.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/big-huge-circuit-group\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/big-huge-circuit-group.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/big-huge-circuit\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/big-huge-circuit.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/circuit-limits-utils\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/circuit-limits-utils.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/circuit\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/circuit.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/component-sub-routines/r1-div-r2-is-half-utils\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/component-sub-routines/r1-div-r2-is-half-utils.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/component-sub-routines/r1-div-r2-less-than-half-utils\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/component-sub-routines/r1-div-r2-less-than-half-utils.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/component-sub-routines/r1-div-r2-more-than-half-utils\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/component-sub-routines/r1-div-r2-more-than-half-utils.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/ideal-op-amp\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/ideal-op-amp.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/main\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/main.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-group\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-group.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-source\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-source.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/op-amp-neg-current\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/op-amp-neg-current.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/op-amp-pos-current\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/op-amp-pos-current.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/op-amp-voltage\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/op-amp-voltage.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/r1\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/r1.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/r2\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/r2.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/r3\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/r3.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/r4\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/noise-sources/r4.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/low-pass/reverse-implementation\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/low-pass/reverse-implementation.js\");});\nd(\"filter-wizard/models/implementation/sallen-key/sallen-key\", function(){ return i(\"filter-wizard/models/implementation/sallen-key/sallen-key.js\");});\nd(\"filter-wizard/models/index\", function(){ return i(\"filter-wizard/models/index.js\");});\nd(\"filter-wizard/models/inputs/component-selection\", function(){ return i(\"filter-wizard/models/inputs/component-selection.js\");});\nd(\"filter-wizard/models/inputs/component-selection/individual-stage\", function(){ return i(\"filter-wizard/models/inputs/component-selection/individual-stage.js\");});\nd(\"filter-wizard/models/inputs/component-selection/slider\", function(){ return i(\"filter-wizard/models/inputs/component-selection/slider.js\");});\nd(\"filter-wizard/models/inputs/inputs\", function(){ return i(\"filter-wizard/models/inputs/inputs.js\");});\nd(\"filter-wizard/models/inputs/noise\", function(){ return i(\"filter-wizard/models/inputs/noise.js\");});\nd(\"filter-wizard/models/inputs/specification\", function(){ return i(\"filter-wizard/models/inputs/specification.js\");});\nd(\"filter-wizard/models/inputs/tolerance\", function(){ return i(\"filter-wizard/models/inputs/tolerance.js\");});\nd(\"filter-wizard/models/optimization/allowed-specific\", function(){ return i(\"filter-wizard/models/optimization/allowed-specific.js\");});\nd(\"filter-wizard/models/optimization/base-optimization\", function(){ return i(\"filter-wizard/models/optimization/base-optimization.js\");});\nd(\"filter-wizard/models/optimization/noise\", function(){ return i(\"filter-wizard/models/optimization/noise.js\");});\nd(\"filter-wizard/models/optimization/optimization\", function(){ return i(\"filter-wizard/models/optimization/optimization.js\");});\nd(\"filter-wizard/models/optimization/power\", function(){ return i(\"filter-wizard/models/optimization/power.js\");});\nd(\"filter-wizard/models/optimization/recommended-specific\", function(){ return i(\"filter-wizard/models/optimization/recommended-specific.js\");});\nd(\"filter-wizard/models/optimization/voltage-range\", function(){ return i(\"filter-wizard/models/optimization/voltage-range.js\");});\nd(\"filter-wizard/models/process-data/complex\", function(){ return i(\"filter-wizard/models/process-data/complex.js\");});\nd(\"filter-wizard/models/process-data/envelope\", function(){ return i(\"filter-wizard/models/process-data/envelope.js\");});\nd(\"filter-wizard/models/process-data/frequency\", function(){ return i(\"filter-wizard/models/process-data/frequency.js\");});\nd(\"filter-wizard/models/process-data/spectral-density\", function(){ return i(\"filter-wizard/models/process-data/spectral-density.js\");});\nd(\"filter-wizard/models/results/circuit-group-results\", function(){ return i(\"filter-wizard/models/results/circuit-group-results.js\");});\nd(\"filter-wizard/models/results/circuit-results\", function(){ return i(\"filter-wizard/models/results/circuit-results.js\");});\nd(\"filter-wizard/models/results/component-selection\", function(){ return i(\"filter-wizard/models/results/component-selection.js\");});\nd(\"filter-wizard/models/results/next-steps\", function(){ return i(\"filter-wizard/models/results/next-steps.js\");});\nd(\"filter-wizard/models/results/results\", function(){ return i(\"filter-wizard/models/results/results.js\");});\nd(\"filter-wizard/models/results/specification\", function(){ return i(\"filter-wizard/models/results/specification.js\");});\nd(\"filter-wizard/models/results/sub-results/circuit-details\", function(){ return i(\"filter-wizard/models/results/sub-results/circuit-details.js\");});\nd(\"filter-wizard/models/results/sub-results/magnitude-db\", function(){ return i(\"filter-wizard/models/results/sub-results/magnitude-db.js\");});\nd(\"filter-wizard/models/results/sub-results/noise\", function(){ return i(\"filter-wizard/models/results/sub-results/noise.js\");});\nd(\"filter-wizard/models/results/sub-results/power-details\", function(){ return i(\"filter-wizard/models/results/sub-results/power-details.js\");});\nd(\"filter-wizard/models/results/sub-results/power\", function(){ return i(\"filter-wizard/models/results/sub-results/power.js\");});\nd(\"filter-wizard/models/results/sub-results/stage-details\", function(){ return i(\"filter-wizard/models/results/sub-results/stage-details.js\");});\nd(\"filter-wizard/models/results/sub-results/voltage-range-detail\", function(){ return i(\"filter-wizard/models/results/sub-results/voltage-range-detail.js\");});\nd(\"filter-wizard/models/results/sub-results/voltage-range\", function(){ return i(\"filter-wizard/models/results/sub-results/voltage-range.js\");});\nd(\"filter-wizard/models/results/sub-results/voltage-range/rate\", function(){ return i(\"filter-wizard/models/results/sub-results/voltage-range/rate.js\");});\nd(\"filter-wizard/models/results/sub-results/voltage-range/signal\", function(){ return i(\"filter-wizard/models/results/sub-results/voltage-range/signal.js\");});\nd(\"filter-wizard/models/results/sub-results/voltage-range/voltage-range-computations-per-stage\", function(){ return i(\"filter-wizard/models/results/sub-results/voltage-range/voltage-range-computations-per-stage.js\");});\nd(\"filter-wizard/models/results/tolerance\", function(){ return i(\"filter-wizard/models/results/tolerance.js\");});\nd(\"filter-wizard/models/stages/actual-first-order\", function(){ return i(\"filter-wizard/models/stages/actual-first-order.js\");});\nd(\"filter-wizard/models/stages/actual-second-order\", function(){ return i(\"filter-wizard/models/stages/actual-second-order.js\");});\nd(\"filter-wizard/models/stages/actual-stage\", function(){ return i(\"filter-wizard/models/stages/actual-stage.js\");});\nd(\"filter-wizard/models/stages/first-order\", function(){ return i(\"filter-wizard/models/stages/first-order.js\");});\nd(\"filter-wizard/models/stages/second-order\", function(){ return i(\"filter-wizard/models/stages/second-order.js\");});\nd(\"filter-wizard/models/stages/signal-range\", function(){ return i(\"filter-wizard/models/stages/signal-range.js\");});\nd(\"filter-wizard/models/stages/target-stage\", function(){ return i(\"filter-wizard/models/stages/target-stage.js\");});\nd(\"filter-wizard/models/stages/tolerance-stage\", function(){ return i(\"filter-wizard/models/stages/tolerance-stage.js\");});\nd(\"filter-wizard/models/step-response/feed-forward\", function(){ return i(\"filter-wizard/models/step-response/feed-forward.js\");});\nd(\"filter-wizard/models/step-response/roll-off\", function(){ return i(\"filter-wizard/models/step-response/roll-off.js\");});\nd(\"filter-wizard/models/tolerances/capacitor-tolerance-utils\", function(){ return i(\"filter-wizard/models/tolerances/capacitor-tolerance-utils.js\");});\nd(\"filter-wizard/models/tolerances/inductor-tolerance-utils\", function(){ return i(\"filter-wizard/models/tolerances/inductor-tolerance-utils.js\");});\nd(\"filter-wizard/models/tolerances/resistor-tolerance-utils\", function(){ return i(\"filter-wizard/models/tolerances/resistor-tolerance-utils.js\");});\nd(\"filter-wizard/models/tolerances/series-precision\", function(){ return i(\"filter-wizard/models/tolerances/series-precision.js\");});\nd(\"filter-wizard/models/tolerances/series\", function(){ return i(\"filter-wizard/models/tolerances/series.js\");});\nd(\"filter-wizard/models/tolerances/tolerance-utils\", function(){ return i(\"filter-wizard/models/tolerances/tolerance-utils.js\");});\nd(\"filter-wizard/models/utils/array\", function(){ return i(\"filter-wizard/models/utils/array.js\");});\nd(\"filter-wizard/models/utils/circuit\", function(){ return i(\"filter-wizard/models/utils/circuit.js\");});\nd(\"filter-wizard/models/utils/conversion\", function(){ return i(\"filter-wizard/models/utils/conversion.js\");});\nd(\"filter-wizard/models/utils/friendlyFrequencies\", function(){ return i(\"filter-wizard/models/utils/friendlyFrequencies.js\");});\nd(\"filter-wizard/models/utils/math\", function(){ return i(\"filter-wizard/models/utils/math.ts\");});\nd(\"filter-wizard/models/utils/noise\", function(){ return i(\"filter-wizard/models/utils/noise.js\");});\nd(\"filter-wizard/models/utils/permutation\", function(){ return i(\"filter-wizard/models/utils/permutation.js\");});\nd(\"filter-wizard/models/utils/results\", function(){ return i(\"filter-wizard/models/utils/results.js\");});\nd(\"filter-wizard/models/utils/slider\", function(){ return i(\"filter-wizard/models/utils/slider.js\");});\nd(\"filter-wizard/models/utils/stage\", function(){ return i(\"filter-wizard/models/utils/stage.js\");});\nd(\"filter-wizard/router\", function(){ return i(\"filter-wizard/router.js\");});\nd(\"filter-wizard/services/assets\", function(){ return i(\"filter-wizard/services/assets.js\");});\nd(\"filter-wizard/services/cdp\", function(){ return i(\"filter-wizard/services/cdp.js\");});\nd(\"filter-wizard/services/channel\", function(){ return i(\"filter-wizard/services/channel.js\");});\nd(\"filter-wizard/services/download\", function(){ return i(\"filter-wizard/services/download.js\");});\nd(\"filter-wizard/services/feedback\", function(){ return i(\"filter-wizard/services/feedback.js\");});\nd(\"filter-wizard/services/logger\", function(){ return i(\"filter-wizard/services/logger.js\");});\nd(\"filter-wizard/services/opamps\", function(){ return i(\"filter-wizard/services/opamps.js\");});\nd(\"filter-wizard/services/opamps/loader\", function(){ return i(\"filter-wizard/services/opamps/loader.js\");});\nd(\"filter-wizard/services/opamps/ratings\", function(){ return i(\"filter-wizard/services/opamps/ratings.js\");});\nd(\"filter-wizard/services/persistence\", function(){ return i(\"filter-wizard/services/persistence.js\");});\nd(\"filter-wizard/services/persistence/dryer\", function(){ return i(\"filter-wizard/services/persistence/dryer.js\");});\nd(\"filter-wizard/services/persistence/tokenize\", function(){ return i(\"filter-wizard/services/persistence/tokenize.js\");});\nd(\"filter-wizard/services/share\", function(){ return i(\"filter-wizard/services/share.js\");});\nd(\"filter-wizard/services/snapshot\", function(){ return i(\"filter-wizard/services/snapshot.ts\");});\nd(\"filter-wizard/utils/analytics\", function(){ return i(\"filter-wizard/utils/analytics.js\");});\nd(\"filter-wizard/utils/common\", function(){ return i(\"filter-wizard/utils/common.js\");});\nd(\"filter-wizard/utils/context\", function(){ return i(\"filter-wizard/utils/context.js\");});\nd(\"filter-wizard/utils/design-files\", function(){ return i(\"filter-wizard/utils/design-files.js\");});\nd(\"filter-wizard/utils/download\", function(){ return i(\"filter-wizard/utils/download.js\");});\nd(\"filter-wizard/utils/error-tracker\", function(){ return i(\"filter-wizard/utils/error-tracker.js\");});\nd(\"filter-wizard/utils/format\", function(){ return i(\"filter-wizard/utils/format.js\");});\nd(\"filter-wizard/utils/materials\", function(){ return i(\"filter-wizard/utils/materials.js\");});\nd(\"filter-wizard/utils/package-checker\", function(){ return i(\"filter-wizard/utils/package-checker.js\");});\nd(\"filter-wizard/utils/resource\", function(){ return i(\"filter-wizard/utils/resource.js\");});\nd(\"filter-wizard/utils/spice-netlists\", function(){ return i(\"filter-wizard/utils/spice-netlists.ts\");});\nd(\"filter-wizard/utils/spice-schematics\", function(){ return i(\"filter-wizard/utils/spice-schematics.ts\");});\nd(\"filter-wizard/utils/timing\", function(){ return i(\"filter-wizard/utils/timing.js\");});\nd(\"filter-wizard/utils/validation\", function(){ return i(\"filter-wizard/utils/validation.ts\");});\nd(\"filter-wizard/services/aditools-analytics\", function(){ return i(\"filter-wizard/services/aditools-analytics.js\");});\nd(\"filter-wizard/services/aditools-site\", function(){ return i(\"filter-wizard/services/aditools-site.js\");});\nd(\"filter-wizard/services/page-title\", function(){ return i(\"filter-wizard/services/page-title.js\");});\nd(\"filter-wizard/instance-initializers/clear-double-boot\", function(){ return i(\"filter-wizard/instance-initializers/clear-double-boot.js\");});\nd(\"filter-wizard/locations/none\", function(){ return i(\"filter-wizard/locations/none.js\");});\nd(\"filter-wizard/services/fastboot\", function(){ return i(\"filter-wizard/services/fastboot.js\");});\nd(\"filter-wizard/component-managers/glimmer\", function(){ return i(\"filter-wizard/component-managers/glimmer.js\");});\nd(\"filter-wizard/services/-ensure-registered\", function(){ return i(\"filter-wizard/services/-ensure-registered.js\");});\nd(\"filter-wizard/initializers/app-version\", function(){ return i(\"filter-wizard/initializers/app-version.js\");});\nd(\"filter-wizard/instance-initializers/head-browser\", function(){ return i(\"filter-wizard/instance-initializers/head-browser.js\");});\nd(\"filter-wizard/services/head-data\", function(){ return i(\"filter-wizard/services/head-data.js\");});\nd(\"filter-wizard/services/panel-actions\", function(){ return i(\"filter-wizard/services/panel-actions.js\");});\nd(\"filter-wizard/services/intl\", function(){ return i(\"filter-wizard/services/intl.js\");});\nd(\"filter-wizard/utils/intl/missing-message\", function(){ return i(\"filter-wizard/utils/intl/missing-message.js\");});\nd(\"filter-wizard/instance-initializers/add-modals-container\", function(){ return i(\"filter-wizard/instance-initializers/add-modals-container.js\");});\nd(\"filter-wizard/services/modal-dialog\", function(){ return i(\"filter-wizard/services/modal-dialog.js\");});\nd(\"filter-wizard/container-debug-adapter\", function(){ return i(\"filter-wizard/container-debug-adapter.js\");});\nd(\"filter-wizard/initializers/ember-responsive-breakpoints\", function(){ return i(\"filter-wizard/initializers/ember-responsive-breakpoints.js\");});\nd(\"filter-wizard/services/media\", function(){ return i(\"filter-wizard/services/media.js\");});\nd(\"filter-wizard/services/ember-sortable-internal-state\", function(){ return i(\"filter-wizard/services/ember-sortable-internal-state.js\");});\nd(\"filter-wizard/components/annotations/specifications-magnitude\", function(){ return i(\"filter-wizard/components/annotations/specifications-magnitude.ts\");});\nd(\"filter-wizard/components/annotations/specifications-response\", function(){ return i(\"filter-wizard/components/annotations/specifications-response.ts\");});\nd(\"filter-wizard/components/annotations/step-response-envelope\", function(){ return i(\"filter-wizard/components/annotations/step-response-envelope.ts\");});\nd(\"filter-wizard/components/captioned-button\", function(){ return i(\"filter-wizard/components/captioned-button.js\");});\nd(\"filter-wizard/components/circuits/bandpass-inductor-gain\", function(){ return i(\"filter-wizard/components/circuits/bandpass-inductor-gain.js\");});\nd(\"filter-wizard/components/circuits/bandpass-inductor\", function(){ return i(\"filter-wizard/components/circuits/bandpass-inductor.js\");});\nd(\"filter-wizard/components/circuits/bandpass-multiplefeedback-noposfb\", function(){ return i(\"filter-wizard/components/circuits/bandpass-multiplefeedback-noposfb.js\");});\nd(\"filter-wizard/components/circuits/bandpass-multiplefeedback-posfb\", function(){ return i(\"filter-wizard/components/circuits/bandpass-multiplefeedback-posfb.js\");});\nd(\"filter-wizard/components/circuits/bandpass-multiplefeedback-posfbnor2\", function(){ return i(\"filter-wizard/components/circuits/bandpass-multiplefeedback-posfbnor2.js\");});\nd(\"filter-wizard/components/circuits/bpcap-circuit\", function(){ return i(\"filter-wizard/components/circuits/bpcap-circuit.ts\");});\nd(\"filter-wizard/components/circuits/bypass-capacitors-container\", function(){ return i(\"filter-wizard/components/circuits/bypass-capacitors-container.ts\");});\nd(\"filter-wizard/components/circuits/device-text\", function(){ return i(\"filter-wizard/components/circuits/device-text.ts\");});\nd(\"filter-wizard/components/circuits/highpass-firstorder-gain\", function(){ return i(\"filter-wizard/components/circuits/highpass-firstorder-gain.js\");});\nd(\"filter-wizard/components/circuits/highpass-firstorder\", function(){ return i(\"filter-wizard/components/circuits/highpass-firstorder.js\");});\nd(\"filter-wizard/components/circuits/highpass-inductor-gain\", function(){ return i(\"filter-wizard/components/circuits/highpass-inductor-gain.js\");});\nd(\"filter-wizard/components/circuits/highpass-inductor\", function(){ return i(\"filter-wizard/components/circuits/highpass-inductor.js\");});\nd(\"filter-wizard/components/circuits/highpass-multiplefeedback\", function(){ return i(\"filter-wizard/components/circuits/highpass-multiplefeedback.js\");});\nd(\"filter-wizard/components/circuits/highpass-sallenkey-gain\", function(){ return i(\"filter-wizard/components/circuits/highpass-sallenkey-gain.js\");});\nd(\"filter-wizard/components/circuits/highpass-sallenkey\", function(){ return i(\"filter-wizard/components/circuits/highpass-sallenkey.js\");});\nd(\"filter-wizard/components/circuits/input-text\", function(){ return i(\"filter-wizard/components/circuits/input-text.js\");});\nd(\"filter-wizard/components/circuits/lowpass-firstorder-gain\", function(){ return i(\"filter-wizard/components/circuits/lowpass-firstorder-gain.js\");});\nd(\"filter-wizard/components/circuits/lowpass-firstorder\", function(){ return i(\"filter-wizard/components/circuits/lowpass-firstorder.js\");});\nd(\"filter-wizard/components/circuits/lowpass-inductor-gain\", function(){ return i(\"filter-wizard/components/circuits/lowpass-inductor-gain.js\");});\nd(\"filter-wizard/components/circuits/lowpass-inductor\", function(){ return i(\"filter-wizard/components/circuits/lowpass-inductor.js\");});\nd(\"filter-wizard/components/circuits/lowpass-multiplefeedback\", function(){ return i(\"filter-wizard/components/circuits/lowpass-multiplefeedback.js\");});\nd(\"filter-wizard/components/circuits/lowpass-sallenkey-gain\", function(){ return i(\"filter-wizard/components/circuits/lowpass-sallenkey-gain.js\");});\nd(\"filter-wizard/components/circuits/lowpass-sallenkey\", function(){ return i(\"filter-wizard/components/circuits/lowpass-sallenkey.js\");});\nd(\"filter-wizard/components/circuits/output-text\", function(){ return i(\"filter-wizard/components/circuits/output-text.js\");});\nd(\"filter-wizard/components/circuits/part-text\", function(){ return i(\"filter-wizard/components/circuits/part-text.ts\");});\nd(\"filter-wizard/components/circuits/reference-circuit\", function(){ return i(\"filter-wizard/components/circuits/reference-circuit.ts\");});\nd(\"filter-wizard/components/circuits/spare-dual\", function(){ return i(\"filter-wizard/components/circuits/spare-dual.ts\");});\nd(\"filter-wizard/components/circuits/spare-single\", function(){ return i(\"filter-wizard/components/circuits/spare-single.ts\");});\nd(\"filter-wizard/components/circuits/spares-container\", function(){ return i(\"filter-wizard/components/circuits/spares-container.ts\");});\nd(\"filter-wizard/components/circuits/stage-item\", function(){ return i(\"filter-wizard/components/circuits/stage-item.ts\");});\nd(\"filter-wizard/components/circuits/stage-text\", function(){ return i(\"filter-wizard/components/circuits/stage-text.ts\");});\nd(\"filter-wizard/components/circuits/tantcap-neg\", function(){ return i(\"filter-wizard/components/circuits/tantcap-neg.ts\");});\nd(\"filter-wizard/components/circuits/tantcap-pos\", function(){ return i(\"filter-wizard/components/circuits/tantcap-pos.ts\");});\nd(\"filter-wizard/components/dialogs/algorithm-confirmation\", function(){ return i(\"filter-wizard/components/dialogs/algorithm-confirmation.ts\");});\nd(\"filter-wizard/components/dialogs/evalboard-confirmation\", function(){ return i(\"filter-wizard/components/dialogs/evalboard-confirmation.ts\");});\nd(\"filter-wizard/components/dialogs/evalboard\", function(){ return i(\"filter-wizard/components/dialogs/evalboard.ts\");});\nd(\"filter-wizard/components/dialogs/opamps-requirements\", function(){ return i(\"filter-wizard/components/dialogs/opamps-requirements.ts\");});\nd(\"filter-wizard/components/dialogs/opamps\", function(){ return i(\"filter-wizard/components/dialogs/opamps.ts\");});\nd(\"filter-wizard/components/dialogs/system-lock\", function(){ return i(\"filter-wizard/components/dialogs/system-lock.ts\");});\nd(\"filter-wizard/components/dialogs/video\", function(){ return i(\"filter-wizard/components/dialogs/video.ts\");});\nd(\"filter-wizard/components/display-context\", function(){ return i(\"filter-wizard/components/display-context.ts\");});\nd(\"filter-wizard/components/field-input-text\", function(){ return i(\"filter-wizard/components/field-input-text.ts\");});\nd(\"filter-wizard/components/figures-subpanel\", function(){ return i(\"filter-wizard/components/figures-subpanel.ts\");});\nd(\"filter-wizard/components/figures/bom\", function(){ return i(\"filter-wizard/components/figures/bom.ts\");});\nd(\"filter-wizard/components/figures/errors\", function(){ return i(\"filter-wizard/components/figures/errors.ts\");});\nd(\"filter-wizard/components/figures/graph\", function(){ return i(\"filter-wizard/components/figures/graph.ts\");});\nd(\"filter-wizard/components/figures/noise\", function(){ return i(\"filter-wizard/components/figures/noise.ts\");});\nd(\"filter-wizard/components/figures/power\", function(){ return i(\"filter-wizard/components/figures/power.ts\");});\nd(\"filter-wizard/components/figures/schematic\", function(){ return i(\"filter-wizard/components/figures/schematic.ts\");});\nd(\"filter-wizard/components/figures/stage-details\", function(){ return i(\"filter-wizard/components/figures/stage-details.ts\");});\nd(\"filter-wizard/components/figures/stages\", function(){ return i(\"filter-wizard/components/figures/stages.ts\");});\nd(\"filter-wizard/components/figures/voltage-range-details\", function(){ return i(\"filter-wizard/components/figures/voltage-range-details.js\");});\nd(\"filter-wizard/components/figures/voltage-range\", function(){ return i(\"filter-wizard/components/figures/voltage-range.ts\");});\nd(\"filter-wizard/components/menu-links\", function(){ return i(\"filter-wizard/components/menu-links.ts\");});\nd(\"filter-wizard/components/settings/components\", function(){ return i(\"filter-wizard/components/settings/components.ts\");});\nd(\"filter-wizard/components/settings/filter-type\", function(){ return i(\"filter-wizard/components/settings/filter-type.ts\");});\nd(\"filter-wizard/components/settings/next-steps\", function(){ return i(\"filter-wizard/components/settings/next-steps.js\");});\nd(\"filter-wizard/components/settings/specifications\", function(){ return i(\"filter-wizard/components/settings/specifications.ts\");});\nd(\"filter-wizard/components/settings/stage\", function(){ return i(\"filter-wizard/components/settings/stage.ts\");});\nd(\"filter-wizard/components/settings/tolerances\", function(){ return i(\"filter-wizard/components/settings/tolerances.ts\");});\nd(\"filter-wizard/components/tab-button\", function(){ return i(\"filter-wizard/components/tab-button.ts\");});\nd(\"filter-wizard/components/tab-panel\", function(){ return i(\"filter-wizard/components/tab-panel.js\");});\nd(\"filter-wizard/components/aditools-device-table\", function(){ return i(\"filter-wizard/components/aditools-device-table.js\");});\nd(\"filter-wizard/components/aditools-parameter-selector\", function(){ return i(\"filter-wizard/components/aditools-parameter-selector.js\");});\nd(\"filter-wizard/components/aditools-graph-hover\", function(){ return i(\"filter-wizard/components/aditools-graph-hover.js\");});\nd(\"filter-wizard/components/aditools-graph\", function(){ return i(\"filter-wizard/components/aditools-graph.js\");});\nd(\"filter-wizard/components/aditools-minigraph\", function(){ return i(\"filter-wizard/components/aditools-minigraph.js\");});\nd(\"filter-wizard/components/aditools-multiline-graph\", function(){ return i(\"filter-wizard/components/aditools-multiline-graph.js\");});\nd(\"filter-wizard/components/aditools-card-checkbox\", function(){ return i(\"filter-wizard/components/aditools-card-checkbox.js\");});\nd(\"filter-wizard/components/aditools-card-part-number\", function(){ return i(\"filter-wizard/components/aditools-card-part-number.js\");});\nd(\"filter-wizard/components/aditools-card-tooltip\", function(){ return i(\"filter-wizard/components/aditools-card-tooltip.js\");});\nd(\"filter-wizard/components/aditools-card\", function(){ return i(\"filter-wizard/components/aditools-card.js\");});\nd(\"filter-wizard/components/aditools-confirmation-dialog\", function(){ return i(\"filter-wizard/components/aditools-confirmation-dialog.js\");});\nd(\"filter-wizard/components/aditools-content-wrap\", function(){ return i(\"filter-wizard/components/aditools-content-wrap.js\");});\nd(\"filter-wizard/components/aditools-dialog-load\", function(){ return i(\"filter-wizard/components/aditools-dialog-load.js\");});\nd(\"filter-wizard/components/aditools-dialog-samples\", function(){ return i(\"filter-wizard/components/aditools-dialog-samples.js\");});\nd(\"filter-wizard/components/aditools-dialog-save\", function(){ return i(\"filter-wizard/components/aditools-dialog-save.js\");});\nd(\"filter-wizard/components/aditools-dialog-share\", function(){ return i(\"filter-wizard/components/aditools-dialog-share.js\");});\nd(\"filter-wizard/components/aditools-dialog\", function(){ return i(\"filter-wizard/components/aditools-dialog.js\");});\nd(\"filter-wizard/components/aditools-feedback-dialog\", function(){ return i(\"filter-wizard/components/aditools-feedback-dialog.js\");});\nd(\"filter-wizard/components/aditools-footer\", function(){ return i(\"filter-wizard/components/aditools-footer.js\");});\nd(\"filter-wizard/components/aditools-header\", function(){ return i(\"filter-wizard/components/aditools-header.js\");});\nd(\"filter-wizard/components/aditools-help-dialog\", function(){ return i(\"filter-wizard/components/aditools-help-dialog.js\");});\nd(\"filter-wizard/components/aditools-help-tooltip\", function(){ return i(\"filter-wizard/components/aditools-help-tooltip.js\");});\nd(\"filter-wizard/components/aditools-menu-context\", function(){ return i(\"filter-wizard/components/aditools-menu-context.js\");});\nd(\"filter-wizard/components/aditools-menu-link\", function(){ return i(\"filter-wizard/components/aditools-menu-link.js\");});\nd(\"filter-wizard/components/aditools-menu-links\", function(){ return i(\"filter-wizard/components/aditools-menu-links.js\");});\nd(\"filter-wizard/components/aditools-menu-tab\", function(){ return i(\"filter-wizard/components/aditools-menu-tab.js\");});\nd(\"filter-wizard/components/aditools-menu-tabs\", function(){ return i(\"filter-wizard/components/aditools-menu-tabs.js\");});\nd(\"filter-wizard/components/aditools-menubar\", function(){ return i(\"filter-wizard/components/aditools-menubar.js\");});\nd(\"filter-wizard/components/aditools-narrow-menubar\", function(){ return i(\"filter-wizard/components/aditools-narrow-menubar.js\");});\nd(\"filter-wizard/components/aditools-section-header\", function(){ return i(\"filter-wizard/components/aditools-section-header.js\");});\nd(\"filter-wizard/components/aditools-section-subheader\", function(){ return i(\"filter-wizard/components/aditools-section-subheader.js\");});\nd(\"filter-wizard/components/aditools-studio-dropdown\", function(){ return i(\"filter-wizard/components/aditools-studio-dropdown.js\");});\nd(\"filter-wizard/components/aditools-system-dialog\", function(){ return i(\"filter-wizard/components/aditools-system-dialog.js\");});\nd(\"filter-wizard/components/aditools-tab-bar\", function(){ return i(\"filter-wizard/components/aditools-tab-bar.js\");});\nd(\"filter-wizard/components/aditools-tight-menubar\", function(){ return i(\"filter-wizard/components/aditools-tight-menubar.js\");});\nd(\"filter-wizard/components/aditools-toolbar-action\", function(){ return i(\"filter-wizard/components/aditools-toolbar-action.js\");});\nd(\"filter-wizard/components/aditools-toolbar-tab\", function(){ return i(\"filter-wizard/components/aditools-toolbar-tab.js\");});\nd(\"filter-wizard/components/aditools-toolbar\", function(){ return i(\"filter-wizard/components/aditools-toolbar.js\");});\nd(\"filter-wizard/components/email-input\", function(){ return i(\"filter-wizard/components/email-input.js\");});\nd(\"filter-wizard/components/input-list\", function(){ return i(\"filter-wizard/components/input-list.js\");});\nd(\"filter-wizard/components/basic-dropdown-content\", function(){ return i(\"filter-wizard/components/basic-dropdown-content.js\");});\nd(\"filter-wizard/components/basic-dropdown-trigger\", function(){ return i(\"filter-wizard/components/basic-dropdown-trigger.js\");});\nd(\"filter-wizard/components/basic-dropdown-wormhole\", function(){ return i(\"filter-wizard/components/basic-dropdown-wormhole.js\");});\nd(\"filter-wizard/components/basic-dropdown\", function(){ return i(\"filter-wizard/components/basic-dropdown.js\");});\nd(\"filter-wizard/components/power-select-multiple\", function(){ return i(\"filter-wizard/components/power-select-multiple.js\");});\nd(\"filter-wizard/components/power-select-multiple/input\", function(){ return i(\"filter-wizard/components/power-select-multiple/input.js\");});\nd(\"filter-wizard/components/power-select-multiple/trigger\", function(){ return i(\"filter-wizard/components/power-select-multiple/trigger.js\");});\nd(\"filter-wizard/components/power-select\", function(){ return i(\"filter-wizard/components/power-select.js\");});\nd(\"filter-wizard/components/power-select/before-options\", function(){ return i(\"filter-wizard/components/power-select/before-options.js\");});\nd(\"filter-wizard/components/power-select/label\", function(){ return i(\"filter-wizard/components/power-select/label.js\");});\nd(\"filter-wizard/components/power-select/no-matches-message\", function(){ return i(\"filter-wizard/components/power-select/no-matches-message.js\");});\nd(\"filter-wizard/components/power-select/options\", function(){ return i(\"filter-wizard/components/power-select/options.js\");});\nd(\"filter-wizard/components/power-select/placeholder\", function(){ return i(\"filter-wizard/components/power-select/placeholder.js\");});\nd(\"filter-wizard/components/power-select/power-select-group\", function(){ return i(\"filter-wizard/components/power-select/power-select-group.js\");});\nd(\"filter-wizard/components/power-select/search-message\", function(){ return i(\"filter-wizard/components/power-select/search-message.js\");});\nd(\"filter-wizard/components/power-select/trigger\", function(){ return i(\"filter-wizard/components/power-select/trigger.js\");});\nd(\"filter-wizard/components/head-content\", function(){ return i(\"filter-wizard/components/head-content.js\");});\nd(\"filter-wizard/components/head-layout\", function(){ return i(\"filter-wizard/components/head-layout.js\");});\nd(\"filter-wizard/components/cp-panel-body\", function(){ return i(\"filter-wizard/components/cp-panel-body.js\");});\nd(\"filter-wizard/components/cp-panel-toggle\", function(){ return i(\"filter-wizard/components/cp-panel-toggle.js\");});\nd(\"filter-wizard/components/cp-panel\", function(){ return i(\"filter-wizard/components/cp-panel.js\");});\nd(\"filter-wizard/components/cp-panels\", function(){ return i(\"filter-wizard/components/cp-panels.js\");});\nd(\"filter-wizard/components/ember-wormhole\", function(){ return i(\"filter-wizard/components/ember-wormhole.js\");});\nd(\"filter-wizard/components/ember-modal-dialog-positioned-container\", function(){ return i(\"filter-wizard/components/ember-modal-dialog-positioned-container.js\");});\nd(\"filter-wizard/components/ember-modal-dialog/-basic-dialog\", function(){ return i(\"filter-wizard/components/ember-modal-dialog/-basic-dialog.js\");});\nd(\"filter-wizard/components/ember-modal-dialog/-in-place-dialog\", function(){ return i(\"filter-wizard/components/ember-modal-dialog/-in-place-dialog.js\");});\nd(\"filter-wizard/components/ember-modal-dialog/-liquid-dialog\", function(){ return i(\"filter-wizard/components/ember-modal-dialog/-liquid-dialog.js\");});\nd(\"filter-wizard/components/ember-modal-dialog/-liquid-tether-dialog\", function(){ return i(\"filter-wizard/components/ember-modal-dialog/-liquid-tether-dialog.js\");});\nd(\"filter-wizard/components/ember-modal-dialog/-tether-dialog\", function(){ return i(\"filter-wizard/components/ember-modal-dialog/-tether-dialog.js\");});\nd(\"filter-wizard/components/modal-dialog\", function(){ return i(\"filter-wizard/components/modal-dialog.js\");});\nd(\"filter-wizard/helpers/format-value\", function(){ return i(\"filter-wizard/helpers/format-value.js\");});\nd(\"filter-wizard/helpers/element\", function(){ return i(\"filter-wizard/helpers/element.js\");});\nd(\"filter-wizard/helpers/and\", function(){ return i(\"filter-wizard/helpers/and.js\");});\nd(\"filter-wizard/helpers/eq\", function(){ return i(\"filter-wizard/helpers/eq.js\");});\nd(\"filter-wizard/helpers/gt\", function(){ return i(\"filter-wizard/helpers/gt.js\");});\nd(\"filter-wizard/helpers/gte\", function(){ return i(\"filter-wizard/helpers/gte.js\");});\nd(\"filter-wizard/helpers/is-array\", function(){ return i(\"filter-wizard/helpers/is-array.js\");});\nd(\"filter-wizard/helpers/is-empty\", function(){ return i(\"filter-wizard/helpers/is-empty.js\");});\nd(\"filter-wizard/helpers/is-equal\", function(){ return i(\"filter-wizard/helpers/is-equal.js\");});\nd(\"filter-wizard/helpers/lt\", function(){ return i(\"filter-wizard/helpers/lt.js\");});\nd(\"filter-wizard/helpers/lte\", function(){ return i(\"filter-wizard/helpers/lte.js\");});\nd(\"filter-wizard/helpers/not-eq\", function(){ return i(\"filter-wizard/helpers/not-eq.js\");});\nd(\"filter-wizard/helpers/not\", function(){ return i(\"filter-wizard/helpers/not.js\");});\nd(\"filter-wizard/helpers/or\", function(){ return i(\"filter-wizard/helpers/or.js\");});\nd(\"filter-wizard/helpers/xor\", function(){ return i(\"filter-wizard/helpers/xor.js\");});\nd(\"filter-wizard/helpers/cancel-all\", function(){ return i(\"filter-wizard/helpers/cancel-all.js\");});\nd(\"filter-wizard/helpers/perform\", function(){ return i(\"filter-wizard/helpers/perform.js\");});\nd(\"filter-wizard/helpers/task\", function(){ return i(\"filter-wizard/helpers/task.js\");});\nd(\"filter-wizard/helpers/page-title\", function(){ return i(\"filter-wizard/helpers/page-title.js\");});\nd(\"filter-wizard/helpers/assign\", function(){ return i(\"filter-wizard/helpers/assign.js\");});\nd(\"filter-wizard/helpers/ember-power-select-is-equal\", function(){ return i(\"filter-wizard/helpers/ember-power-select-is-equal.js\");});\nd(\"filter-wizard/helpers/ember-power-select-is-group\", function(){ return i(\"filter-wizard/helpers/ember-power-select-is-group.js\");});\nd(\"filter-wizard/helpers/ember-power-select-is-selected-present\", function(){ return i(\"filter-wizard/helpers/ember-power-select-is-selected-present.js\");});\nd(\"filter-wizard/helpers/ensure-safe-component\", function(){ return i(\"filter-wizard/helpers/ensure-safe-component.js\");});\nd(\"filter-wizard/helpers/app-version\", function(){ return i(\"filter-wizard/helpers/app-version.js\");});\nd(\"filter-wizard/helpers/format-date\", function(){ return i(\"filter-wizard/helpers/format-date.js\");});\nd(\"filter-wizard/helpers/format-list\", function(){ return i(\"filter-wizard/helpers/format-list.js\");});\nd(\"filter-wizard/helpers/format-message\", function(){ return i(\"filter-wizard/helpers/format-message.js\");});\nd(\"filter-wizard/helpers/format-number\", function(){ return i(\"filter-wizard/helpers/format-number.js\");});\nd(\"filter-wizard/helpers/format-relative\", function(){ return i(\"filter-wizard/helpers/format-relative.js\");});\nd(\"filter-wizard/helpers/format-time\", function(){ return i(\"filter-wizard/helpers/format-time.js\");});\nd(\"filter-wizard/helpers/t\", function(){ return i(\"filter-wizard/helpers/t.js\");});\nd(\"filter-wizard/helpers/ignore-children\", function(){ return i(\"filter-wizard/helpers/ignore-children.js\");});\nd(\"filter-wizard/helpers/media\", function(){ return i(\"filter-wizard/helpers/media.js\");});\nd(\"filter-wizard/modifiers/eps-qa-elements\", function(){ return i(\"filter-wizard/modifiers/eps-qa-elements.js\");});\nd(\"filter-wizard/modifiers/set-focus\", function(){ return i(\"filter-wizard/modifiers/set-focus.js\");});\nd(\"filter-wizard/modifiers/aditools-renderer\", function(){ return i(\"filter-wizard/modifiers/aditools-renderer.js\");});\nd(\"filter-wizard/modifiers/on-move-outside\", function(){ return i(\"filter-wizard/modifiers/on-move-outside.js\");});\nd(\"filter-wizard/modifiers/aditools-positioner\", function(){ return i(\"filter-wizard/modifiers/aditools-positioner.js\");});\nd(\"filter-wizard/modifiers/style\", function(){ return i(\"filter-wizard/modifiers/style.js\");});\nd(\"filter-wizard/modifiers/basic-dropdown-trigger\", function(){ return i(\"filter-wizard/modifiers/basic-dropdown-trigger.js\");});\nd(\"filter-wizard/modifiers/focus-trap\", function(){ return i(\"filter-wizard/modifiers/focus-trap.js\");});\nd(\"filter-wizard/modifiers/did-insert\", function(){ return i(\"filter-wizard/modifiers/did-insert.js\");});\nd(\"filter-wizard/modifiers/did-update\", function(){ return i(\"filter-wizard/modifiers/did-update.js\");});\nd(\"filter-wizard/modifiers/will-destroy\", function(){ return i(\"filter-wizard/modifiers/will-destroy.js\");});\nd(\"filter-wizard/modifiers/sortable-group\", function(){ return i(\"filter-wizard/modifiers/sortable-group.js\");});\nd(\"filter-wizard/modifiers/sortable-handle\", function(){ return i(\"filter-wizard/modifiers/sortable-handle.js\");});\nd(\"filter-wizard/modifiers/sortable-item\", function(){ return i(\"filter-wizard/modifiers/sortable-item.js\");});\nd(\"filter-wizard/templates/index\", function(){ return i(\"filter-wizard/templates/index.hbs\");});\nd(\"filter-wizard/controllers/index\", function(){ return i(\"filter-wizard/controllers/index.js\");});\nd(\"filter-wizard/routes/index\", function(){ return i(\"filter-wizard/routes/index.js\");});\nd(\"filter-wizard/routes/empty\", function(){ return i(\"filter-wizard/routes/empty.js\");});\nd(\"filter-wizard/routes/legacy\", function(){ return i(\"filter-wizard/routes/legacy.js\");});\nd(\"filter-wizard/templates/application\", function(){ return i(\"filter-wizard/templates/application.hbs\");});\nd(\"filter-wizard/templates/head\", function(){ return i(\"filter-wizard/templates/head.hbs\");});\n\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\nd(\"filter-wizard/initializers/abort\", function(){ return i(\"filter-wizard/initializers/abort.js\");});\nd(\"filter-wizard/initializers/ajax\", function(){ return i(\"filter-wizard/initializers/ajax.js\");});\nd(\"filter-wizard/initializers/error-handler\", function(){ return i(\"filter-wizard/initializers/error-handler.js\");});\n }\n\n\n\n\n\nif (typeof FastBoot === 'undefined') {\n if (!runningTests) {\n require('filter-wizard/app')['default'].create({\"name\":\"filter-wizard\",\"version\":\"2.13.0+d580cfad\"});\n }\n}\n\n\n","export default {\r\n mobile: '(max-width: 767px)',\r\n tablet: '(min-width: 768px) and (max-width: 991px)',\r\n desktop: '(min-width: 992px) and (max-width: 1200px)',\r\n};\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n {{!-- Passband Region, Attenuation and Frequency --}}\\r\\n \\r\\n \\r\\n \\r\\n {{t \\\"annotations.magnitude.passband-region\\\"}}\\r\\n \\r\\n \\r\\n {{t \\\"annotations.magnitude.db-down\\\" n=this.passbandAttenuationLabel.value}}\\r\\n \\r\\n \\r\\n {{this.passbandFrequencyLabel.value}}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n {{#if this.isBandpassFilterType}}\\r\\n \\r\\n {{t \\\"fragments.right\\\"}}\\r\\n \\r\\n \\r\\n {{t \\\"fragments.left\\\"}}\\r\\n \\r\\n {{/if}} \\r\\n \\r\\n {{!-- Stopband Region, Attenuation and Frequency (Becomes Stopband Region 1 in Bandpass Filter Type) --}}\\r\\n \\r\\n \\r\\n \\r\\n {{t \\\"annotations.magnitude.stopband-region\\\"}}\\r\\n \\r\\n \\r\\n {{t \\\"annotations.magnitude.db-down\\\" n=this.stopbandAttenuationLabel.value}}\\r\\n \\r\\n \\r\\n {{this.stopbandFrequencyLabel.value}}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n \\r\\n\\r\\n {{!-- Stopband Region 2, Attenuation and Frequency (for Bandpass Filter Type) --}}\\r\\n {{#if this.isBandpassFilterType}}\\r\\n \\r\\n \\r\\n \\r\\n {{t \\\"annotations.magnitude.stopband-region\\\"}}\\r\\n \\r\\n \\r\\n {{t \\\"annotations.magnitude.db-down\\\" n=this.stopbandAttenuationLabel.value}}\\r\\n \\r\\n \\r\\n {{t \\\"fragments.left\\\"}}\\r\\n \\r\\n \\r\\n {{t \\\"fragments.right\\\"}}\\r\\n \\r\\n \\r\\n {{this.stopbandStopStartFrequencyLabel.stop.value}}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n \\r\\n {{this.stopbandStopStartFrequencyLabel.start.value}}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n \\r\\n \\r\\n {{this.centerFrequencyLabel.value}}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n {{/if}}\\r\\n\\r\\n {{!-- Response Filter Text and Stage Count --}}\\r\\n \\r\\n \\r\\n {{t \\r\\n (concat \\\"annotations.filterResponse.orders.order\\\" @model.nthOrder) \\r\\n responseType=(t (concat \\r\\n \\\"annotations.filterResponse.responseType.\\\" \\r\\n @model.responseType)\\r\\n )\\r\\n }} \\r\\n {{#if @model.filterResponseValue}} \\r\\n {{format-value \\r\\n value=@model.filterResponseValue \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"2dz\\\"\\r\\n }}\\r\\n {{#if this.isChebyshevFilterResponse}} \\r\\n {{t \\\"units.db\\\"}}\\r\\n {{/if}}\\r\\n {{/if}}\\r\\n \\r\\n \\r\\n ({{t \\\"annotations.filterResponse.stages\\\" count=@model.numberOfStages}})\\r\\n \\r\\n \\r\\n \\r\\n {{t \\\"annotations.magnitude.gain\\\" n=this.gainValueLabel.value}}\\r\\n \\r\\n\\r\\n {{!-- Passband Ripple (Only for Chebyshev Filter Response) --}}\\r\\n {{#if this.isChebyshevFilterResponse}}\\r\\n \\r\\n \\r\\n {{t \\r\\n \\\"annotations.magnitude.passband-ripple\\\" \\r\\n n=(format-value \\r\\n value=@model.filterResponseValue \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"2dz\\\"\\r\\n )\\r\\n }}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{/if}}\\r\\n\\r\\n\",{ moduleName: \"filter-wizard/components/annotations/specifications-magnitude.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './specifications-magnitude.hbs'; */\nimport Component from '@glimmer/component';\r\nimport FilterConstants from '../../filter-constants';\r\nimport SpecificationResult from 'filter-wizard/models/results/specification';\r\nimport * as Format from '../../utils/format';\r\nimport * as Conversion from '../../models/utils/conversion';\r\n\r\nconst Position = { LEFT: 'Left', CENTER: 'Center', RIGHT: 'Right' };\r\nconst LEFTTOPADJUST = 1;\r\nconst RIGHTBOTTOMADJUST = 2;\r\n\r\ninterface SpecMagnitudeArgs {\r\n geometry: {\r\n width: number;\r\n height: number;\r\n limits: { [key: string]: number };\r\n xScale: (arg0: number) => number;\r\n yScale: (arg0: number) => number;\r\n };\r\n model: SpecificationResult;\r\n figureName: string;\r\n}\r\n\r\ntype BandPassStopBandFrequency = {\r\n stop: number;\r\n start: number;\r\n};\r\n\r\ntype ResponseTextPos = {\r\n x1: number;\r\n y1: number;\r\n x2: number;\r\n y2: number;\r\n};\r\n\r\ntype PassbandRegion = {\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n};\r\n\r\ntype PassbandRegionLabelPos = {\r\n x: number;\r\n y: number;\r\n};\r\n\r\ntype ArrowPosition = {\r\n x1: number;\r\n y1: number;\r\n x2: number;\r\n y2: number;\r\n};\r\n\r\ntype PassbandAttenuationLabel = {\r\n value: string;\r\n x: number;\r\n y: number;\r\n};\r\n\r\ntype PassbandFrequencyLabel = {\r\n value: string;\r\n x: number;\r\n y: number;\r\n anchor: string;\r\n};\r\n\r\ntype StopbandRegion = {\r\n x1: number;\r\n y1: number;\r\n w1: number;\r\n h1: number;\r\n x2: number;\r\n y2: number;\r\n w2: number;\r\n h2: number;\r\n};\r\n\r\ntype StopbandRegionLabelPos = {\r\n x1: number;\r\n y1: number;\r\n anchor: string;\r\n x2: number;\r\n y2: number;\r\n};\r\n\r\ntype StopbandAttenuationLabel = {\r\n value: string;\r\n x1: number;\r\n y1: number;\r\n anchor: string;\r\n x2: number;\r\n y2: number;\r\n};\r\n\r\ntype StopbandFrequencyLabel = {\r\n value: string;\r\n x: number;\r\n y: number;\r\n anchor: string;\r\n};\r\n\r\ntype CenterFrequencyLabel = {\r\n value: string;\r\n x: number;\r\n y: number;\r\n};\r\n\r\ntype StopbandStopStartFrequencyLabel = {\r\n stop: {\r\n value: string;\r\n x: number;\r\n y: number;\r\n };\r\n start: {\r\n value: string;\r\n x: number;\r\n y: number;\r\n };\r\n};\r\n\r\ntype GainValueLabel = {\r\n value: string;\r\n x: number;\r\n y: number;\r\n anchor: string;\r\n};\r\n\r\ntype PassbandRipple = {\r\n label: {\r\n x: number;\r\n y: number;\r\n anchor: string;\r\n };\r\n rippleTop: {\r\n x1: number;\r\n y1: number;\r\n x2: number;\r\n y2: number;\r\n };\r\n rippleBottom: {\r\n x1: number;\r\n y1: number;\r\n x2: number;\r\n y2: number;\r\n };\r\n};\r\n\r\nexport default class SpecMagnitudeAnnotation extends Component {\r\n // Gain in dB\r\n get gainDB(): number {\r\n const gainUnit = this.args.model.specificationsInput.gainUnit;\r\n const gain = this.args.model.specificationsInput.gain;\r\n let result = gain;\r\n if (gainUnit === FilterConstants.gainUnits.vv) {\r\n result = Conversion.VVtoDB(gain);\r\n }\r\n return result;\r\n }\r\n\r\n // Stopband Stop and Start Frequency (only for Band Pass)\r\n get bandpassStopBandFrequency(): BandPassStopBandFrequency {\r\n let stop = 0,\r\n start = 0;\r\n const filterType = this.args.model.filterName;\r\n if (filterType === FilterConstants.filterType.bandPass) {\r\n const stopband = this.args.model.specificationsInput.stopbandFrequency;\r\n const center = this.args.model.specificationsInput.centerFrequency;\r\n stop = (Math.sqrt(stopband * stopband + 4 * center * center) - stopband) / 2;\r\n start = stop + stopband;\r\n }\r\n return { stop: stop, start: start };\r\n }\r\n\r\n // Flag that determines if the Filter Type is Band Pass\r\n get isBandpassFilterType(): boolean {\r\n return this.args.model.filter.name === FilterConstants.filterType.bandPass;\r\n }\r\n\r\n // Flag that determines if the Filter Response is Chebyshev\r\n get isChebyshevFilterResponse(): boolean {\r\n return this.args.model.responseType === FilterConstants.responseType.chebyshev;\r\n }\r\n\r\n // Filter Response Text - Contains Filter Nth Order, Filter Response, Passband Ripple and Number of Stages\r\n get responseTextPos(): ResponseTextPos {\r\n {\r\n let x1 = 0,\r\n y1 = 0,\r\n x2 = 0,\r\n y2 = 0;\r\n const position = this.getResponsePosition();\r\n switch (position) {\r\n case Position.LEFT:\r\n x1 = x2 = 10;\r\n y1 = this.args.geometry.height - 30;\r\n y2 = this.args.geometry.height - 10;\r\n break;\r\n case Position.RIGHT:\r\n x1 = x2 = this.args.geometry.width - 200;\r\n y1 = this.args.geometry.height - 30;\r\n y2 = this.args.geometry.height - 10;\r\n break;\r\n case Position.CENTER:\r\n x1 = x2 = Math.round(this.args.geometry.width / 2) - 80;\r\n y1 = this.args.geometry.height - 30;\r\n y2 = this.args.geometry.height - 10;\r\n break;\r\n }\r\n return { x1: x1, y1: y1, x2: x2, y2: y2 };\r\n }\r\n }\r\n\r\n // Passband Region Area\r\n get passbandRegion(): PassbandRegion {\r\n let x = 0,\r\n y = 0,\r\n w = 0,\r\n h = 0; // Passband Region Area\r\n const filterType = this.args.model.filterName;\r\n\r\n if (this.args.geometry.limits['xmin'] && this.args.geometry.limits['xmax'] && this.args.geometry.limits['ymax']) {\r\n // Y position and height is consistent for all filter types for Passband Region\r\n y = this.yScale(this.args.geometry.limits['ymax']) + LEFTTOPADJUST;\r\n h = y + this.yScale(this.args.model.specificationsInput.passbandAttenuation + this.gainDB) - RIGHTBOTTOMADJUST;\r\n\r\n switch (filterType) {\r\n case FilterConstants.filterType.lowPass: {\r\n // Passband Region is Top Left for Low Pass Filter\r\n x = this.xScale(this.args.geometry.limits['xmin']) + LEFTTOPADJUST;\r\n w = this.xScale(this.args.model.specificationsInput.passbandFrequency) - x - RIGHTBOTTOMADJUST;\r\n break;\r\n }\r\n case FilterConstants.filterType.highPass: {\r\n // Passband Region is Top Right for High Pass Filter\r\n x = this.xScale(this.args.model.specificationsInput.passbandFrequency) + LEFTTOPADJUST;\r\n w = this.xScale(this.args.geometry.limits['xmax']) - x - RIGHTBOTTOMADJUST;\r\n break;\r\n }\r\n case FilterConstants.filterType.bandPass: {\r\n // Passband Region is Top Center for Band Pass Filter\r\n const passband = this.args.model.specificationsInput.passbandFrequency;\r\n const center = this.args.model.specificationsInput.centerFrequency;\r\n const start = (Math.sqrt(passband * passband + 4 * center * center) - passband) / 2;\r\n const stop = start + passband;\r\n x = this.xScale(start) + LEFTTOPADJUST;\r\n w = this.xScale(stop) - x - RIGHTBOTTOMADJUST;\r\n break;\r\n }\r\n }\r\n }\r\n return { x: x, y: y, w: w, h: h };\r\n }\r\n\r\n // Passband Region Text Position\r\n get passbandRegionLabelPos(): PassbandRegionLabelPos {\r\n const area = this.passbandRegion;\r\n const x = area.x + area.w / 2;\r\n const y = area.y + 10;\r\n return { x: x, y: y };\r\n }\r\n\r\n // Passband Arrows Position (only for Band Pass)\r\n get passbandArrows(): ArrowPosition {\r\n const area = this.passbandRegion;\r\n const x1 = area.x;\r\n const x2 = area.x + area.w;\r\n const y1 = area.y + 20;\r\n const y2 = y1;\r\n return { x1: x1, y1: y1, x2: x2, y2: y2 };\r\n }\r\n\r\n // Passband Attenuation Text Position\r\n get passbandAttenuationLabel(): PassbandAttenuationLabel {\r\n const value = Format.formatFieldValue(\r\n this.args.model.specificationsInput.passbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n );\r\n const area = this.passbandRegion;\r\n const x = area.x + area.w / 2;\r\n const y = area.y + area.h + 12;\r\n return { value: value, x: x, y: y };\r\n }\r\n\r\n // Passband Frequency Text Position\r\n get passbandFrequencyLabel(): PassbandFrequencyLabel {\r\n const area = this.passbandRegion;\r\n const filterType = this.args.model.filterName;\r\n const gainLine = this.yScale(Number(this.gainDB));\r\n const value = Format.formatFieldValue(\r\n this.args.model.specificationsInput.passbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n );\r\n let x = 0,\r\n y = 0;\r\n let anchor = 'text-anchor-start';\r\n switch (filterType) {\r\n case FilterConstants.filterType.lowPass:\r\n // Frequency Position is Right of Passband Region for Low Pass Filter\r\n x = area.x + area.w + 5;\r\n y = area.y + area.h / 2;\r\n if (y >= gainLine - 15 && y <= gainLine + 15) y = gainLine - 15;\r\n anchor = 'text-anchor-start';\r\n break;\r\n case FilterConstants.filterType.highPass:\r\n // Frequency Position is Left of Passband Region for High Pass Filter\r\n x = area.x - 5;\r\n y = area.y + area.h / 2;\r\n if (y >= gainLine - 15 && y <= gainLine + 15) y = gainLine - 15;\r\n anchor = 'text-anchor-end';\r\n break;\r\n case FilterConstants.filterType.bandPass:\r\n // Frequency Position is Right of Passband Region for Band Pass Filter\r\n x = area.x + area.w + 5;\r\n y = area.y + area.h / 2;\r\n if (y >= gainLine - 15 && y <= gainLine + 15) y = gainLine - 15;\r\n anchor = 'text-anchor-start';\r\n break;\r\n }\r\n return { value: value, x: x, y: y, anchor: anchor };\r\n }\r\n\r\n // Stopband Region Areas (There are two for Bandpass Filters)\r\n get stopbandRegion(): StopbandRegion {\r\n let x1 = 0,\r\n y1 = 0,\r\n w1 = 0,\r\n h1 = 0; // Passband Region Area (1)\r\n let x2 = 0,\r\n y2 = 0,\r\n w2 = 0,\r\n h2 = 0; // Passband Region Area (2)\r\n\r\n if (this.args.geometry.limits['xmin'] && this.args.geometry.limits['xmax'] && this.args.geometry.limits['ymin']) {\r\n // Y position and height is consistent for all filter types for Stopband Region\r\n y1 = this.yScale(this.args.model.specificationsInput.stopbandAttenuation + this.gainDB) + LEFTTOPADJUST;\r\n h1 = this.yScale(this.args.geometry.limits['ymin']) - y1 - RIGHTBOTTOMADJUST;\r\n\r\n const filterType = this.args.model.filterName;\r\n switch (filterType) {\r\n case FilterConstants.filterType.lowPass: {\r\n // Stopband Region is Bottom Right for Low Pass Filter\r\n x1 = this.xScale(this.args.model.specificationsInput.stopbandFrequency) + LEFTTOPADJUST;\r\n w1 = this.xScale(this.args.geometry.limits['xmax']) - x1 - RIGHTBOTTOMADJUST;\r\n break;\r\n }\r\n case FilterConstants.filterType.highPass: {\r\n // Stopband Region is Bottom Left for High Pass Filter\r\n x1 = this.xScale(this.args.geometry.limits['xmin']) + LEFTTOPADJUST;\r\n w1 = this.xScale(this.args.model.specificationsInput.stopbandFrequency) - x1 - RIGHTBOTTOMADJUST;\r\n break;\r\n }\r\n case FilterConstants.filterType.bandPass: {\r\n // Stopband Region is Bottom Left and Right for Band Pass Filter\r\n const bandpassStopBandFrequency = this.bandpassStopBandFrequency;\r\n const start1 = this.args.geometry.limits['xmin'];\r\n const stop1 = bandpassStopBandFrequency.stop;\r\n const start2 = bandpassStopBandFrequency.start;\r\n const stop2 = this.args.geometry.limits['xmax'];\r\n x1 = this.xScale(start1) + LEFTTOPADJUST;\r\n w1 = this.xScale(stop1) - x1 - RIGHTBOTTOMADJUST;\r\n x2 = this.xScale(start2) + LEFTTOPADJUST;\r\n y2 = y1;\r\n w2 = this.xScale(stop2) - x2 - RIGHTBOTTOMADJUST;\r\n h2 = h1;\r\n break;\r\n }\r\n }\r\n }\r\n return { x1: x1, y1: y1, w1: w1, h1: h1, x2: x2, y2: y2, w2: w2, h2: h2 };\r\n }\r\n\r\n // Stopband Region Text Position\r\n get stopbandRegionLabelPos(): StopbandRegionLabelPos {\r\n const area = this.stopbandRegion;\r\n const filterType = this.args.model.filterName;\r\n let x1 = 0,\r\n x2 = 0;\r\n const y1 = area.y1 + area.h1 - 5;\r\n const y2 = area.y2 + area.h2 - 5;\r\n let anchor = 'text-anchor-start';\r\n switch (filterType) {\r\n case FilterConstants.filterType.lowPass:\r\n case FilterConstants.filterType.highPass:\r\n // Stopband Region Text Position is Bottom Centered for Low/High Pass Filter\r\n x1 = x2 = area.x1 + area.w1 / 2;\r\n anchor = 'text-anchor-middle';\r\n break;\r\n case FilterConstants.filterType.bandPass:\r\n // Stopband Region Position is bottom left justified for the left region and bottom right justified for the right region\r\n x1 = area.x1 + 2;\r\n x2 = area.x2 + area.w2 - 2;\r\n anchor = 'text-anchor-start';\r\n break;\r\n }\r\n return { x1: x1, y1: y1, anchor: anchor, x2: x2, y2: y2 };\r\n }\r\n\r\n // Stopband Arrows Position (only for Band Pass)\r\n get stopbandArrows(): ArrowPosition {\r\n const area = this.stopbandRegion;\r\n const x1 = area.x1 + area.w1;\r\n const y1 = area.y1 + 10;\r\n const x2 = area.x2;\r\n const y2 = area.y2 + 10;\r\n return { x1: x1, y1: y1, x2: x2, y2: y2 };\r\n }\r\n\r\n // Stopband Attenuation Text Position\r\n get stopbandAttenuationLabel(): StopbandAttenuationLabel {\r\n const area = this.stopbandRegion;\r\n const filterType = this.args.model.filterName;\r\n const value = Format.formatFieldValue(\r\n this.args.model.specificationsInput.stopbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n );\r\n let x1 = 0,\r\n x2 = 0;\r\n const y1 = area.y1 - 5;\r\n const y2 = y1;\r\n let anchor = 'text-anchor-start';\r\n switch (filterType) {\r\n case FilterConstants.filterType.lowPass:\r\n case FilterConstants.filterType.highPass:\r\n // Attenuation Position is Above Stopband Region Centered for Low/High Pass Filter\r\n x1 = area.x1 + area.w1 / 2;\r\n anchor = 'text-anchor-middle';\r\n break;\r\n case FilterConstants.filterType.bandPass:\r\n // Attenuation Position is Above Stopband Region left justified for the left region and right justified for the right region\r\n x1 = area.x1 + 2;\r\n x2 = area.x2 + area.w2 - 2;\r\n anchor = 'text-anchor-start';\r\n break;\r\n }\r\n return { value: value, x1: x1, y1: y1, anchor: anchor, x2: x2, y2: y2 };\r\n }\r\n\r\n // Stopband Frequency Text Position\r\n get stopbandFrequencyLabel(): StopbandFrequencyLabel {\r\n const area = this.stopbandRegion;\r\n const filterType = this.args.model.filterName;\r\n const value = Format.formatFieldValue(\r\n this.args.model.specificationsInput.stopbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n );\r\n let x = 0,\r\n y = 0;\r\n let anchor = 'text-anchor-start';\r\n switch (filterType) {\r\n case FilterConstants.filterType.lowPass:\r\n // Frequency Position is Left of Stopband Region for Low Pass Filter\r\n x = area.x1 - 5;\r\n y = area.y1 + area.h1 / 2;\r\n anchor = 'text-anchor-end';\r\n break;\r\n case FilterConstants.filterType.highPass:\r\n // Frequency Position is Right of Stopband Region for High Pass Filter\r\n x = area.x1 + area.w1 + 5;\r\n y = area.y1 + area.h1 / 2;\r\n anchor = 'text-anchor-start';\r\n break;\r\n case FilterConstants.filterType.bandPass:\r\n if (this.args.geometry.limits['xmin'] && this.args.geometry.limits['xmax']) {\r\n // Frequency Position is Center of Graph lined with the Regions for Band Pass Filter\r\n x = (this.xScale(this.args.geometry.limits['xmin']) + this.xScale(this.args.geometry.limits['xmax'])) / 2;\r\n y = area.y1 + 10;\r\n anchor = 'text-anchor-middle';\r\n }\r\n break;\r\n }\r\n return { value: value, x: x, y: y, anchor: anchor };\r\n }\r\n\r\n // Center Frequency Text Position\r\n get centerFrequencyLabel(): CenterFrequencyLabel {\r\n const filterType = this.args.model.filterName;\r\n const value = Format.formatFieldValue(\r\n this.args.model.specificationsInput.centerFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n );\r\n let x = 0,\r\n y = 0;\r\n if (\r\n filterType === FilterConstants.filterType.bandPass &&\r\n this.args.geometry.limits['xmin'] &&\r\n this.args.geometry.limits['xmax']\r\n ) {\r\n x = (this.xScale(this.args.geometry.limits['xmin']) + this.xScale(this.args.geometry.limits['xmax'])) / 2;\r\n y = this.yScale(this.args.model.specificationsInput.passbandAttenuation + this.gainDB - 25);\r\n }\r\n return { value: value, x: x, y: y };\r\n }\r\n\r\n // Stopband Start and Stop Frequency Text (only for Band Pass)\r\n get stopbandStopStartFrequencyLabel(): StopbandStopStartFrequencyLabel {\r\n const area = this.stopbandRegion;\r\n const filterType = this.args.model.filterName;\r\n const bandpassStopBandFrequency = this.bandpassStopBandFrequency;\r\n const stop = Format.formatFieldValue(bandpassStopBandFrequency.stop, FilterConstants.fieldTypes.Engineering, '3s');\r\n const start = Format.formatFieldValue(\r\n bandpassStopBandFrequency.start,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n );\r\n let x1 = 0,\r\n y1 = 0; // Stopband Region Area (1)\r\n let x2 = 0,\r\n y2 = 0; // Stopband Region Area (2)\r\n if (filterType === FilterConstants.filterType.bandPass) {\r\n x1 = area.x1 + area.w1 + 2;\r\n x2 = area.x2 - 2;\r\n y1 = y2 = area.y2 + area.h2 - 20;\r\n }\r\n return { stop: { value: stop, x: x1, y: y1 }, start: { value: start, x: x2, y: y2 } };\r\n }\r\n\r\n // Gain Value Text\r\n get gainValueLabel(): GainValueLabel {\r\n const area = this.passbandRegion;\r\n const filterType = this.args.model.filterName;\r\n const value = Format.formatFieldValue(this.gainDB, FilterConstants.fieldTypes.NumericDecimal, '3s');\r\n const x = filterType === FilterConstants.filterType.bandPass ? area.x : area.x + 15;\r\n const y = this.yScale(this.gainDB) - 5;\r\n const anchor = filterType === FilterConstants.filterType.bandPass ? 'text-anchor-end' : 'text-anchor-start';\r\n return { value: value, x: x, y: y, anchor: anchor };\r\n }\r\n\r\n // Passband Ripple (Only when Chebyshev)\r\n get passbandRipple(): PassbandRipple {\r\n let labelX = 0,\r\n labelY = 0; // This would be the position of the text label\r\n let anchor = 'text-anchor-start';\r\n let rtx1 = 0,\r\n rtx2 = 0,\r\n rty1 = 0,\r\n rty2 = 0; // Ripple Top Positions\r\n let rbx1 = 0,\r\n rbx2 = 0,\r\n rby1 = 0,\r\n rby2 = 0; // Ripple Bottom Positions\r\n const responseType = this.args.model.responseType;\r\n if (responseType === FilterConstants.responseType.chebyshev) {\r\n const gain = Number(this.gainDB);\r\n const area = this.passbandRegion;\r\n const order = Number(this.args.model.nthOrder);\r\n const responsevalue = Number(this.args.model.filterResponseValue);\r\n const filterType = this.args.model.filterName;\r\n switch (filterType) {\r\n case FilterConstants.filterType.lowPass:\r\n case FilterConstants.filterType.bandPass:\r\n // Ripple Label Position is Right of Passband Region for Low Pass and Band Pass Filter\r\n labelX = area.x + area.w + 5;\r\n labelY = this.yScale(gain);\r\n anchor = 'text-anchor-start';\r\n break;\r\n case FilterConstants.filterType.highPass:\r\n // Ripple Label Position is Left of Passband Region for High Pass Filter\r\n labelX = area.x - 5;\r\n labelY = this.yScale(gain);\r\n anchor = 'text-anchor-end';\r\n break;\r\n }\r\n // Top Ripple\r\n rty1 = rty2 = this.yScale(gain);\r\n rtx1 = area.x;\r\n rtx2 = area.x + area.w + LEFTTOPADJUST;\r\n // Bottom Ripple\r\n rby1 = rby2 = this.yScale(order % 2 === 0 ? gain + responsevalue : gain - responsevalue);\r\n rbx1 = area.x;\r\n rbx2 = area.x + area.w + LEFTTOPADJUST;\r\n }\r\n return {\r\n label: { x: labelX, y: labelY, anchor: anchor },\r\n rippleTop: { x1: rtx1, y1: rty1, x2: rtx2, y2: rty2 },\r\n rippleBottom: { x1: rbx1, y1: rby1, x2: rbx2, y2: rby2 },\r\n };\r\n }\r\n\r\n // Determines the Position of the Response Text based on the Filter Type and Graph Type\r\n // Returns: responsePosition - Values can either be \"Left\", \"Center\" or \"Right\"\r\n getResponsePosition(): string {\r\n const filterType = this.args.model.filterName;\r\n const figureName = this.args.figureName;\r\n let responsePosition = '';\r\n\r\n switch (figureName) {\r\n case FilterConstants.figureName.magnitudeDb:\r\n case FilterConstants.figureName.magnitudeVV:\r\n switch (filterType) {\r\n case FilterConstants.filterType.highPass:\r\n responsePosition = Position.RIGHT;\r\n break;\r\n case FilterConstants.filterType.bandPass:\r\n responsePosition = Position.CENTER;\r\n break;\r\n case FilterConstants.filterType.lowPass:\r\n default:\r\n responsePosition = Position.LEFT;\r\n break;\r\n }\r\n break;\r\n case FilterConstants.figureName.phaseDegrees:\r\n case FilterConstants.figureName.phaseRadians:\r\n responsePosition = Position.LEFT;\r\n break;\r\n case FilterConstants.figureName.phaseDelay:\r\n case FilterConstants.figureName.groupDelay:\r\n switch (filterType) {\r\n case FilterConstants.filterType.bandPass:\r\n responsePosition = Position.CENTER;\r\n break;\r\n case FilterConstants.filterType.highPass:\r\n case FilterConstants.filterType.lowPass:\r\n default:\r\n responsePosition = Position.LEFT;\r\n break;\r\n }\r\n break;\r\n case FilterConstants.figureName.stepResponse:\r\n responsePosition = Position.RIGHT;\r\n break;\r\n }\r\n\r\n return responsePosition;\r\n }\r\n\r\n // Computes for the x position based on the graph's X Scale\r\n // Returns: xPos - Converted Coordinate Position base on X Scale\r\n xScale(xPos: number): number {\r\n return this.args.geometry.xScale(xPos);\r\n }\r\n\r\n // Computes for the y position based on the graph's X Scale\r\n // Returns: xPos - Converted Coordinate Position base on X Scale\r\n yScale(yPos: number): number {\r\n return this.args.geometry.yScale(yPos);\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n \\r\\n {{t \\r\\n (concat \\\"annotations.filterResponse.orders.order\\\" @model.nthOrder) \\r\\n responseType=(t \\r\\n (concat \\\"annotations.filterResponse.responseType.\\\" @model.responseType)\\r\\n )\\r\\n }} \\r\\n {{#if @model.filterResponseValue}} \\r\\n {{format-value \\r\\n value=@model.filterResponseValue \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"2dz\\\"\\r\\n }}\\r\\n {{#if this.isChebyshevFilterResponse}}\\r\\n {{t \\\"units.db\\\"}}\\r\\n {{/if}}\\r\\n {{/if}} \\r\\n \\r\\n \\r\\n ({{t \\\"annotations.filterResponse.stages\\\" count=@model.numberOfStages}})\\r\\n \\r\\n\",{ moduleName: \"filter-wizard/components/annotations/specifications-response.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './specifications-response.hbs'; */\nimport Component from '@glimmer/component';\r\nimport FilterConstants from '../../filter-constants';\r\nimport SpecificationResult from 'filter-wizard/models/results/specification';\r\n\r\nconst Position = { LEFT: 'Left', CENTER: 'Center', RIGHT: 'Right' };\r\n\r\ninterface SpecResponseArgs {\r\n geometry: { width: number; height: number };\r\n model: SpecificationResult;\r\n figureName: string;\r\n}\r\n\r\ntype ResponseTextPos = {\r\n x1: number;\r\n y1: number;\r\n x2: number;\r\n y2: number;\r\n};\r\n\r\nexport default class SpecResponseAnnotation extends Component {\r\n get responseTextPos(): ResponseTextPos {\r\n let x1 = 0,\r\n y1 = 0,\r\n x2 = 0,\r\n y2 = 0;\r\n const position = this.getResponsePosition();\r\n switch (position) {\r\n case Position.LEFT:\r\n x1 = x2 = 10;\r\n y1 = this.args.geometry.height - 30;\r\n y2 = this.args.geometry.height - 10;\r\n break;\r\n case Position.RIGHT:\r\n x1 = x2 = this.args.geometry.width - 200;\r\n y1 = this.args.geometry.height - 30;\r\n y2 = this.args.geometry.height - 10;\r\n break;\r\n case Position.CENTER:\r\n x1 = x2 = Math.round(this.args.geometry.width / 2) - 80;\r\n y1 = this.args.geometry.height - 30;\r\n y2 = this.args.geometry.height - 10;\r\n break;\r\n }\r\n return { x1: x1, y1: y1, x2: x2, y2: y2 };\r\n }\r\n\r\n get isChebyshevFilterResponse(): boolean {\r\n return this.args.model.responseType === FilterConstants.responseType.chebyshev;\r\n }\r\n\r\n // Determines the Position of the Response Text based on the Filter Type and Graph Type\r\n // Returns: responsePosition - Values can either be \"Left\", \"Center\" or \"Right\"\r\n getResponsePosition(): string {\r\n const filterType = this.args.model.filterName;\r\n const figureName = this.args.figureName;\r\n let responsePosition = '';\r\n\r\n switch (figureName) {\r\n case FilterConstants.figureName.magnitudeDb:\r\n case FilterConstants.figureName.magnitudeVV:\r\n switch (filterType) {\r\n case FilterConstants.filterType.highPass:\r\n responsePosition = Position.RIGHT;\r\n break;\r\n case FilterConstants.filterType.bandPass:\r\n responsePosition = Position.CENTER;\r\n break;\r\n case FilterConstants.filterType.lowPass:\r\n default:\r\n responsePosition = Position.LEFT;\r\n break;\r\n }\r\n break;\r\n case FilterConstants.figureName.phaseDegrees:\r\n case FilterConstants.figureName.phaseRadians:\r\n responsePosition = Position.LEFT;\r\n break;\r\n case FilterConstants.figureName.phaseDelay:\r\n case FilterConstants.figureName.groupDelay:\r\n switch (filterType) {\r\n case FilterConstants.filterType.bandPass:\r\n responsePosition = Position.CENTER;\r\n break;\r\n case FilterConstants.filterType.highPass:\r\n case FilterConstants.filterType.lowPass:\r\n default:\r\n responsePosition = Position.LEFT;\r\n break;\r\n }\r\n break;\r\n case FilterConstants.figureName.stepResponse:\r\n responsePosition = Position.RIGHT;\r\n break;\r\n }\r\n\r\n return responsePosition;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n \\r\\n {{!-- template-lint-disable link-href-attributes --}}\\r\\n \\r\\n {{t \\\"help.comp-tolerance.step-response.why-no-envelope.title\\\"}}\\r\\n \\r\\n \\r\\n\",{ moduleName: \"filter-wizard/components/annotations/step-response-envelope.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './step-response-envelope.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport SpecificationResult from 'filter-wizard/models/results/specification';\r\n\r\ninterface StepResponseEnvelopeArgs {\r\n geometry: { width: number; height: number };\r\n model: SpecificationResult;\r\n figureName: string;\r\n showHelp?: (title: string, message: string, msgparams?: Record) => void;\r\n}\r\n\r\nexport default class StepResponseEnvelopeAnnotation extends Component {\r\n get xpos(): number {\r\n return this.args.geometry.width - 20;\r\n }\r\n\r\n get ypos(): number {\r\n return this.args.geometry.height - 20;\r\n }\r\n\r\n showStepResponseHelp(): void {\r\n const title = 'help.comp-tolerance.step-response.why-no-envelope.title';\r\n const message = 'help.comp-tolerance.step-response.why-no-envelope.message';\r\n if (this.args.showHelp) {\r\n this.args.showHelp(title, message);\r\n }\r\n }\r\n\r\n @action helpEnterKey(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n this.showStepResponseHelp();\r\n }\r\n }\r\n\r\n @action helpClick(/*event*/): void {\r\n this.showStepResponseHelp();\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\",{ moduleName: \"filter-wizard/components/captioned-button.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './captioned-button.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t{{!-- capacitor values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- resistor values --}}\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{!-- inductor values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- opamp values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- stage values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- reference values --}}\\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/bandpass-inductor-gain.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './bandpass-inductor-gain.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t{{!-- capacitor values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- resistor values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- inductor values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- opamp values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- stage values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- reference values --}}\\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/bandpass-inductor.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './bandpass-inductor.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\t\t\\r\\n\t\t\t{{!-- capacitor values --}}\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{!-- resistor values --}}\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{!-- inductor values --}}\\r\\n\t\t\t{{!-- opamp values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- stage values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- reference values --}}\\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/bandpass-multiplefeedback-noposfb.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './bandpass-multiplefeedback-noposfb.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t{{!-- capacitor values --}}\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{!-- resistor values --}}\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{!-- inductor values --}}\\r\\n\t\t\t{{!-- opamp values --}}\\r\\n\t\t\t\\r\\n\t\t\t{{!-- stage values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- reference values --}}\\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/bandpass-multiplefeedback-posfb.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './bandpass-multiplefeedback-posfb.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t{{!-- capacitor values --}}\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{!-- resistor values --}}\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{!-- inductor values --}}\\r\\n\t\t\t{{!-- opamp values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- stage values --}}\\r\\n\t\t\t \\r\\n\t\t\t{{!-- reference values --}}\\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\t \\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/bandpass-multiplefeedback-posfbnor2.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './bandpass-multiplefeedback-posfbnor2.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{@circuitValues.item}}\\r\\n\t\t\t\t{{@circuitValues.value}}\\r\\n\t\t\t\t{{@circuitValues.tolerance}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{@circuitValues.voltage}}\\r\\n\t\t\t\\r\\n\t\t\t{{!--\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t--}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t{{!--\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t--}}\\r\\n\t\t\\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/bpcap-circuit.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './bpcap-circuit.hbs'; */\nimport Component from '@glimmer/component';\r\nimport type { CapacitorItem } from './bypass-capacitors-container';\r\n\r\ninterface BypassCapacitorCircuitArgs {\r\n circuitValues: CapacitorItem;\r\n index: number;\r\n}\r\n\r\nexport default class BypassCapacitorCircuit extends Component {\r\n yTranslate = 0;\r\n\r\n get xTranslate(): number {\r\n return this.args.index * 100;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n \\r\\n \\r\\n {{t \\\"help.next-steps.circuit.bypass-capacitor-title\\\"}}\\r\\n \\r\\n \\r\\n {{#each @bypassCapacitors as |item index|}}\\r\\n {{component (concat \\\"circuits/\\\" item.circuit)\\r\\n index=index\\r\\n circuitValues=item}}\\r\\n {{/each}}\\r\\n \\r\\n \\r\\n\",{ moduleName: \"filter-wizard/components/circuits/bypass-capacitors-container.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './bypass-capacitors-container.hbs'; */\nimport Component from '@glimmer/component';\r\n\r\ninterface BypassCapacitorsContainerArgs {\r\n bypassCapacitors: Array;\r\n adjustForReferences: boolean;\r\n}\r\n\r\nexport type CapacitorItem = {\r\n item: string;\r\n value: string;\r\n tolerance: string;\r\n voltage: string;\r\n circuit: string;\r\n};\r\n\r\nexport default class BypassCapacitorsContainer extends Component {\r\n get xTranslate(): number {\r\n return this.args.adjustForReferences ? 525 : 5;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n {{#if this.hasUrl}}\\r\\n \\r\\n {{if this.hasChannel (concat this.channel \\\" \\\") \\\"\\\"}}\\r\\n {{this.name}}\\r\\n \\r\\n {{this.value}}\\r\\n {{else}} \\r\\n {{if this.hasChannel (concat this.channel \\\" \\\" this.name) this.name}}\\r\\n {{this.value}}\\r\\n {{/if}}\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/device-text.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './device-text.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type OpampService from '../../services/opamps';\r\n\r\ninterface DeviceTextCircuitAnnotationArgs {\r\n item: DeviceItem;\r\n r: string;\r\n c: string;\r\n matrix: string;\r\n}\r\n\r\ntype DeviceItem = {\r\n name: string;\r\n url: string;\r\n tolerance: string;\r\n};\r\n\r\nexport default class DeviceTextCircuitAnnotation extends Component {\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n @service declare intl: IntlService;\r\n @service declare opamps: OpampService;\r\n\r\n get url(): string {\r\n return this.args.item.url\r\n ? this.args.item.url\r\n : this.args.item.name\r\n ? `${this.siteconfig['SiteUrl']}/${this.siteconfig.AdiLocale}/${this.opamps\r\n .getOpAmp(this.args.item.name)\r\n .generic.toUpperCase()}`\r\n : '';\r\n }\r\n\r\n get name(): string {\r\n return this.args.item.name\r\n ? this.args.item.name.toUpperCase()\r\n : this.intl.t('settings.components.choose-op-amp').toString();\r\n }\r\n\r\n get hasUrl(): boolean {\r\n return this.url.length > 0;\r\n }\r\n\r\n get hasChannel(): boolean {\r\n return this.args.c !== undefined && this.args.c !== null && this.args.c !== '';\r\n }\r\n\r\n get channel(): string {\r\n return this.args.c;\r\n }\r\n\r\n get value(): string {\r\n return this.args.r;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{/if}}\\r\\n\t\t\t\t\\r\\n\t\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t\t \\r\\n\t\t\t\t\\r\\n\t\t\t{{/if}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\t \\r\\n\t\t\t\t\\r\\n\t\t\t{{/if}}\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\t \\r\\n\t\t\t\t\\r\\n\t\t\t{{/if}}\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/highpass-firstorder-gain.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './highpass-firstorder-gain.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/highpass-firstorder.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './highpass-firstorder.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/highpass-inductor-gain.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './highpass-inductor-gain.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-inline-styles }}\\r\\n\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\t \\r\\n\t\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/highpass-inductor.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './highpass-inductor.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/highpass-multiplefeedback.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './highpass-multiplefeedback.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/highpass-sallenkey-gain.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './highpass-sallenkey-gain.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/highpass-sallenkey.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './highpass-sallenkey.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n \\r\\n {{t \\\"fragments.in\\\"}}\\r\\n \\r\\n\",{ moduleName: \"filter-wizard/components/circuits/input-text.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './input-text.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/lowpass-firstorder-gain.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './lowpass-firstorder-gain.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/lowpass-firstorder.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './lowpass-firstorder.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/lowpass-inductor-gain.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './lowpass-inductor-gain.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/lowpass-inductor.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './lowpass-inductor.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t \\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/lowpass-multiplefeedback.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './lowpass-multiplefeedback.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/lowpass-sallenkey-gain.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './lowpass-sallenkey-gain.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t{{#if @node.ref.showText}}\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}} \\r\\n\t\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t{{#if @node.out.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t{{!-- --}}\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t{{#if @node.in.showLine}}\\r\\n\t\t\t \\r\\n\t\t{{/if}}\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t{{#if @node.ref.showLine}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t \\r\\n\t\t\t\\r\\n\t\t{{/if}}\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/lowpass-sallenkey.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './lowpass-sallenkey.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n \\r\\n {{t \\\"fragments.out\\\"}}\\r\\n \\r\\n\",{ moduleName: \"filter-wizard/components/circuits/output-text.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './output-text.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n {{this.name}}\\r\\n {{#if (eq @item.name \\\"r3\\\") }}\\r\\n {{this.value}}\\r\\n {{else}}\\r\\n {{#if (eq @item.name \\\"r4\\\") }}\\r\\n {{this.value}}\\r\\n {{else}}\\r\\n {{this.value}}\\r\\n {{/if}}\\r\\n {{/if}}\\r\\n {{this.tolerance}}\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/part-text.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './part-text.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\n\r\ninterface PartTextCircuitAnnotationArgs {\r\n item: PartItem;\r\n stageLetter: string;\r\n unit: string;\r\n direction: string;\r\n matrix: string;\r\n}\r\n\r\ntype PartItem = {\r\n name: string;\r\n value: number;\r\n tolerance: string;\r\n};\r\n\r\nexport default class PartTextCircuitAnnotation extends Component {\r\n get yPos(): number {\r\n let value = 13.2;\r\n if (!this.args.item.name || !this.args.item.tolerance) {\r\n switch (this.args.direction) {\r\n case 'up':\r\n value = 0;\r\n break;\r\n case 'down':\r\n value = 26.4;\r\n break;\r\n }\r\n }\r\n return value;\r\n }\r\n get name(): string {\r\n return this.args.item.name && this.args.item.tolerance\r\n ? this.args.item.name.toUpperCase() + (this.args.stageLetter ? this.args.stageLetter : '')\r\n : '';\r\n }\r\n get tolerance(): string {\r\n return this.args.item.tolerance ? this.args.item.tolerance : '';\r\n }\r\n get value(): string {\r\n let adjusted = '';\r\n if (this.args.item.value) {\r\n adjusted = numberToUserDisplay(this.args.item.value, 'Engineering', 3, { showZeroes: false }) + this.args.unit;\r\n adjusted = adjusted.indexOf('Inf') > -1 ? '' : adjusted;\r\n }\r\n return adjusted;\r\n }\r\n get anchor(): string {\r\n return this.args.unit === 'V' ? 'middle-anchor' : '';\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t{{t \\\"fragments.ref\\\"}}\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t{{! template-lint-disable link-href-attributes require-presentational-children}}\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\t\t{{t \\\"help.next-steps.circuit.whats-this-trigger\\\"}}\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t\\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t \\r\\n\t\t\\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\t \\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/reference-circuit.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './reference-circuit.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport { getCapacitorPackage } from '../../utils/materials';\r\n\r\ninterface ReferenceCircuitArgs {\r\n circuitValues: { [key: string]: ReferenceCircuitComponentItem };\r\n r: string;\r\n c: string;\r\n showHelp?: (title: string, message: string, msgparams?: Record) => void;\r\n}\r\n\r\ntype ReferenceCircuitComponentItem = {\r\n name: string;\r\n value: string | number;\r\n url?: string;\r\n tolerance?: string | null;\r\n};\r\n\r\nexport default class ReferenceCircuit extends Component {\r\n showReferenceStageHelp(): void {\r\n const title = 'help.next-steps.circuit.whats-this.title';\r\n const message = 'help.next-steps.circuit.whats-this.message';\r\n if (this.args.showHelp) {\r\n this.args.showHelp(title, message);\r\n }\r\n }\r\n @action referenceStageHelpClick(/*event*/): void {\r\n this.showReferenceStageHelp();\r\n }\r\n @action referenceStageHelpEnterKey(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n this.showReferenceStageHelp();\r\n }\r\n }\r\n get c1Item(): ReferenceCircuitComponentItem {\r\n const item = Object.assign({}, this.args.circuitValues['c1']);\r\n const packageType = getCapacitorPackage(item.value, item.tolerance, true);\r\n if (packageType === '0603') {\r\n item.name = 'C1M';\r\n } else if (packageType === '1206') {\r\n item.name = 'C5M';\r\n }\r\n return item;\r\n }\r\n get c2Item(): ReferenceCircuitComponentItem {\r\n const item = Object.assign({}, this.args.circuitValues['c2']);\r\n const packageType = getCapacitorPackage(item.value, item.tolerance, true);\r\n if (packageType === '0603') {\r\n item.name = 'C2M';\r\n } else if (packageType === '1206') {\r\n item.name = 'C6M';\r\n }\r\n return item;\r\n }\r\n get c3Item(): ReferenceCircuitComponentItem {\r\n const item = Object.assign({}, this.args.circuitValues['c3']);\r\n const packageType = getCapacitorPackage(item.value, item.tolerance, true);\r\n if (packageType === '0603') {\r\n item.name = 'C3M';\r\n } else if (packageType === '1206') {\r\n item.name = 'C7M';\r\n }\r\n return item;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-inline-styles }}\\r\\n\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t{{concat @circuitValues.channelDesignator \\\" \\\"}}\\r\\n\t\t\t\t\t{{@circuitValues.name}}\\r\\n\t\t\t\t\\r\\n\t\t\t\t{{@circuitValues.referenceDesignator}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{@circuitValues.vsMinus}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{@circuitValues.vsPlus}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/spare-dual.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './spare-dual.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport type { OpAmpItem } from './spares-container';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type OpampService from '../../services/opamps';\r\n\r\ninterface SpareDualStageCircuitArgs {\r\n circuitValues: OpAmpItem;\r\n index: number;\r\n}\r\n\r\nexport default class SpareDualStageCircuit extends Component {\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n @service declare opamps: OpampService;\r\n\r\n yTranslate = 0;\r\n\r\n get xTranslate(): number {\r\n return this.args.index * 100;\r\n }\r\n get url(): string {\r\n return `${this.siteconfig['SiteUrl']}/${this.siteconfig.AdiLocale}/${this.opamps\r\n .getOpAmp(this.args.circuitValues.name)\r\n .generic.toUpperCase()}`;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-inline-styles }}\\r\\n\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t{{concat @circuitValues.channelDesignator \\\" \\\"}}\\r\\n\t\t\t\t\t{{@circuitValues.name}}\\r\\n\t\t\t\t\t\t\t\t\t\\r\\n\t\t\t\t{{@circuitValues.referenceDesignator}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{@circuitValues.vsPlus}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{t \\\"fragments.ref\\\"}}\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/spare-single.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './spare-single.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport type { OpAmpItem } from './spares-container';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type OpampService from '../../services/opamps';\r\n\r\ninterface SpareSingleStageCircuitArgs {\r\n circuitValues: OpAmpItem;\r\n index: number;\r\n}\r\n\r\nexport default class SpareSingleStageCircuit extends Component {\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n @service declare opamps: OpampService;\r\n\r\n yTranslate = 0;\r\n\r\n get xTranslate(): number {\r\n return this.args.index * 100;\r\n }\r\n\r\n get url(): string {\r\n return `${this.siteconfig['SiteUrl']}/${this.siteconfig.AdiLocale}/${this.opamps\r\n .getOpAmp(this.args.circuitValues.name)\r\n .generic.toUpperCase()}`;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n \\r\\n \\r\\n {{t \\\"help.next-steps.circuit.opamp-spares-title\\\"}}\\r\\n \\r\\n \\r\\n {{! template-lint-disable link-href-attributes require-presentational-children }}\\r\\n \\r\\n {{t \\\"help.next-steps.circuit.why-spares.title\\\"}} \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{#each @opAmpSpares as |item index|}}\\r\\n {{component (concat \\\"circuits/\\\" item.circuit)\\r\\n index=index\\r\\n circuitValues=item}}\\r\\n {{/each}}\\r\\n \\r\\n \\r\\n\",{ moduleName: \"filter-wizard/components/circuits/spares-container.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './spares-container.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport type { CapacitorItem } from './bypass-capacitors-container';\r\n\r\ninterface SparesContainerCircuitArgs {\r\n bypassCapacitors: Array;\r\n opAmpSpares: Array;\r\n adjustForReferences: boolean;\r\n adjustForBypassCapacitors: boolean;\r\n showHelp?: (title: string, message: string, msgparams?: Record) => void;\r\n}\r\n\r\nexport type OpAmpItem = {\r\n circuit: string;\r\n referenceDesignator: string;\r\n channelDesignator: string;\r\n name: string;\r\n vsPlus: string;\r\n vsMinus: string;\r\n};\r\n\r\nexport default class SparesContainerCircuit extends Component {\r\n get xTranslate(): number {\r\n const hasRefStage = this.args.adjustForReferences;\r\n const hasCapacitors = this.args.adjustForBypassCapacitors;\r\n let sparesPosition = 5;\r\n if (hasRefStage && hasCapacitors) {\r\n sparesPosition = 525 + this.args.bypassCapacitors.length * 100;\r\n }\r\n if (hasRefStage && !hasCapacitors) {\r\n sparesPosition = 525;\r\n }\r\n if (!hasRefStage && hasCapacitors) {\r\n sparesPosition = this.args.bypassCapacitors.length * 100;\r\n }\r\n return sparesPosition;\r\n }\r\n showOpAmpSparesHelp(): void {\r\n const title = 'help.next-steps.circuit.why-spares.title';\r\n const message = 'help.next-steps.circuit.why-spares.message';\r\n if (this.args.showHelp) {\r\n this.args.showHelp(title, message);\r\n }\r\n }\r\n @action opAmpSparesHelpClick(/*event*/): void {\r\n return this.showOpAmpSparesHelp();\r\n }\r\n @action opAmpSparesHelpEnterKey(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n return this.showOpAmpSparesHelp();\r\n }\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{yield\\r\\n (hash\\r\\n c1Item=this.c1Item\\r\\n c2Item=this.c2Item\\r\\n c5Item=this.c5Item\\r\\n r1Item=this.r1Item \\r\\n xTranslate=this.xTranslate\\r\\n yTranslate=this.yTranslate\\r\\n )}}\",{ moduleName: \"filter-wizard/components/circuits/stage-item.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './stage-item.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { getCapacitorPackage } from '../../utils/materials';\r\nimport type CircuitValues from '../../models/results/sub-results/circuit-details';\r\n\r\ninterface StageItemArgs {\r\n details: StageItemDetails;\r\n geometry: { [key in 'xTranslate' | 'yTranslate' | 'width' | 'height']: number };\r\n circuitValues: CircuitValues;\r\n}\r\n\r\ntype StageItemDetails = {\r\n stageLetter: string;\r\n stageOrder: number;\r\n stageFilterType: string;\r\n stageImplementation: string;\r\n};\r\n\r\ntype ComponentItem = {\r\n name: string;\r\n value: number | null;\r\n tolerance: number | null;\r\n minimum: number | null;\r\n maximum: number | null;\r\n};\r\n\r\nexport default class StageItem extends Component {\r\n get xTranslate(): number {\r\n return this.args.geometry.xTranslate;\r\n }\r\n get yTranslate(): number {\r\n return this.args.geometry.yTranslate;\r\n }\r\n get c1Item(): ComponentItem {\r\n const item = Object.assign({}, this.args.circuitValues.c1);\r\n const packageType = getCapacitorPackage(item.value, item.tolerance, false);\r\n const isFirstOrderLowPass =\r\n this.args.details.stageFilterType === 'low-pass' &&\r\n this.args.details.stageOrder === 1 &&\r\n this.args.details.stageImplementation === 'implementation.first-order';\r\n if (packageType === '0603') {\r\n item.name = isFirstOrderLowPass ? 'c2' : 'c1';\r\n } else if (packageType === '1206') {\r\n item.name = isFirstOrderLowPass ? 'c6' : 'c5';\r\n }\r\n return item;\r\n }\r\n get c2Item(): ComponentItem {\r\n const item = Object.assign({}, this.args.circuitValues.c2);\r\n const packageType = getCapacitorPackage(item.value, item.tolerance, false);\r\n if (packageType === '0603') {\r\n item.name = 'c2';\r\n } else if (packageType === '1206') {\r\n item.name = 'c6';\r\n }\r\n return item;\r\n }\r\n get c5Item(): ComponentItem {\r\n const item = Object.assign({}, this.args.circuitValues.c5);\r\n const packageType = getCapacitorPackage(item.value, item.tolerance, false);\r\n if (packageType === '0603') {\r\n item.name = 'c3';\r\n } else if (packageType === '1206') {\r\n item.name = 'c7';\r\n }\r\n return item;\r\n }\r\n get r1Item(): ComponentItem {\r\n const item = Object.assign({}, this.args.circuitValues.r1);\r\n item.name = 'r2';\r\n return item;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n {{t \\\"figures.circuit.stage\\\" letter=@item.stageLetter}}\\r\\n {{t (concat \\\"figures.circuit.order.\\\" this.stageOrder)}}\\r\\n {{t (concat \\\"figures.circuit.filter-type.\\\" @item.stageFilterType)}}\\r\\n {{t (concat \\\"figures.circuit.\\\" @item.stageImplementation)}}\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/stage-text.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './stage-text.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { toOrdinal } from '../../utils/common';\r\n\r\ninterface StageTextCircuitAnnotationArgs {\r\n item: StageItemDetails;\r\n matrix: string;\r\n}\r\n\r\ntype StageItemDetails = {\r\n stageLetter: string;\r\n stageOrder: number;\r\n stageFilterType: string;\r\n stageImplementation: string;\r\n};\r\n\r\nexport default class StageTextCircuitAnnotation extends Component {\r\n get stageOrder(): string {\r\n return toOrdinal(this.args.item.stageOrder);\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-inline-styles }}\\r\\n\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{@circuitValues.item}}\\r\\n\t\t\t\t{{@circuitValues.value}}\\r\\n\t\t\t\t{{@circuitValues.tolerance}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{@circuitValues.voltage}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t+\\r\\n\t\t\t\\r\\n\t\t\\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/tantcap-neg.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './tantcap-neg.hbs'; */\nimport Component from '@glimmer/component';\r\nimport type { CapacitorItem } from './bypass-capacitors-container';\r\n\r\ninterface TantalumCapacitorToNegativeArgs {\r\n circuitValues: CapacitorItem;\r\n index: number;\r\n}\r\n\r\nexport default class TantalumCapacitorToNegative extends Component {\r\n yTranslate = 0;\r\n\r\n get xTranslate(): number {\r\n return this.args.index * 100;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-inline-styles }}\\r\\n\\r\\n\t\\r\\n\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{@circuitValues.item}}\\r\\n\t\t\t\t{{@circuitValues.value}}\\r\\n\t\t\t\t{{@circuitValues.tolerance}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t{{@circuitValues.voltage}}\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\t\\r\\n\t\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t\\r\\n\t\t\t\t+\\r\\n\t\t\t\\r\\n\t\t\\r\\n\t\\r\\n\",{ moduleName: \"filter-wizard/components/circuits/tantcap-pos.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './tantcap-pos.hbs'; */\nimport Component from '@glimmer/component';\r\nimport type { CapacitorItem } from './bypass-capacitors-container';\r\n\r\ninterface TantalumCapacitorToPositiveArgs {\r\n circuitValues: CapacitorItem;\r\n index: number;\r\n}\r\n\r\nexport default class TantalumCapacitorToPositive extends Component {\r\n yTranslate = 0;\r\n\r\n get xTranslate(): number {\r\n return this.args.index * 100;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n <:default>\\r\\n
\\r\\n
\\r\\n

{{t \\\"dialogs.algorithm-confirmation.introduction\\\"}}

\\r\\n
\\r\\n
\\r\\n \\r\\n {{#if this.showProsAndCons}}\\r\\n
\\r\\n
\\r\\n

{{t \\\"dialogs.algorithm-confirmation.increasing-r1-advantages\\\"}}

\\r\\n
    \\r\\n
  • {{t \\\"dialogs.algorithm-confirmation.increasing-r1-advantages-item-1\\\"}}
  • \\r\\n
  • {{t \\\"dialogs.algorithm-confirmation.increasing-r1-advantages-item-2\\\"}}
  • \\r\\n
  • {{t \\\"dialogs.algorithm-confirmation.increasing-r1-advantages-item-3\\\"}}
  • \\r\\n
\\r\\n
\\r\\n
\\r\\n

{{t \\\"dialogs.algorithm-confirmation.decreasing-r2-advantages\\\"}}

\\r\\n
    \\r\\n
  • {{t \\\"dialogs.algorithm-confirmation.decreasing-r2-advantages-item-1\\\"}}
  • \\r\\n
  • {{t \\\"dialogs.algorithm-confirmation.decreasing-r2-advantages-item-2\\\"}}
  • \\r\\n
  • {{t \\\"dialogs.algorithm-confirmation.decreasing-r2-advantages-item-3\\\"}}
  • \\r\\n
\\r\\n
\\r\\n
\\r\\n

{{t \\\"dialogs.algorithm-confirmation.potential-drawbacks\\\"}}

\\r\\n
    \\r\\n
  • {{t \\\"dialogs.algorithm-confirmation.potential-drawbacks-item-1\\\"}}
  • \\r\\n
  • {{t \\\"dialogs.algorithm-confirmation.potential-drawbacks-item-2\\\"}}
  • \\r\\n
  • {{t \\\"dialogs.algorithm-confirmation.potential-drawbacks-item-3\\\"}}
  • \\r\\n
\\r\\n
\\r\\n
\\r\\n {{/if}}\\r\\n
\\r\\n
\\r\\n

{{t \\\"dialogs.algorithm-confirmation.post-script-new-design\\\"}}

\\r\\n

{{t \\\"dialogs.algorithm-confirmation.post-script-save-design\\\"}}

\\r\\n
\\r\\n
\\r\\n \\r\\n <:footer as |closeDialog|>\\r\\n \\r\\n \\r\\n \\r\\n\",{ moduleName: \"filter-wizard/components/dialogs/algorithm-confirmation.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './algorithm-confirmation.hbs'; */\nimport { action } from '@ember/object';\r\nimport { inject as service } from '@ember/service';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport Component from '@glimmer/component';\r\nimport { tracked } from '@glimmer/tracking';\r\n\r\ninterface AlgorithmConfirmationDialogArgs {\r\n // Parameters\r\n title: string;\r\n close: () => void;\r\n oldAlgorithmButtonText?: string;\r\n newAlgorithmButtonText?: string;\r\n dialogClass?: string;\r\n getAlgorithm: (useV2: boolean) => void;\r\n hideCloseX?: boolean;\r\n}\r\nexport default class AlgorithmConfirmationDialog extends Component {\r\n @service declare intl: IntlService;\r\n\r\n @tracked showProsAndCons = false;\r\n @tracked hideExpandText;\r\n\r\n constructor(owner: unknown, args: AlgorithmConfirmationDialogArgs) {\r\n super(owner, args);\r\n this.hideExpandText = this.intl.t('dialogs.algorithm-confirmation.expand');\r\n }\r\n\r\n @action processNewAlgorithm(algorithm: boolean, closeDialog: () => void): void {\r\n // True is new, False, is old\r\n if (this.args.getAlgorithm) {\r\n this.args.getAlgorithm(algorithm);\r\n }\r\n closeDialog();\r\n }\r\n\r\n @action showExpandableArea(): void {\r\n this.showProsAndCons = !this.showProsAndCons;\r\n if (this.showProsAndCons) {\r\n this.hideExpandText = this.intl.t('dialogs.algorithm-confirmation.hide');\r\n } else {\r\n this.hideExpandText = this.intl.t('dialogs.algorithm-confirmation.expand');\r\n }\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n <:default>\\r\\n
\\r\\n {{@message}}\\r\\n {{yield}}\\r\\n
\\r\\n \\r\\n <:footer as |closeDialog|>\\r\\n \\r\\n \\r\\n \\r\\n
\",{ moduleName: \"filter-wizard/components/dialogs/evalboard-confirmation.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './evalboard-confirmation.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport { inject as service } from '@ember/service';\r\nimport { assert } from '@ember/debug';\r\nimport { isNone } from '@ember/utils';\r\nimport type IntlService from 'ember-intl/services/intl';\r\n\r\ninterface EvalboardConfirmationDialogArgs {\r\n // Parameters\r\n title: string;\r\n confirm: () => void;\r\n close: () => void;\r\n message?: string;\r\n proceedButtonText?: string;\r\n cancelButtonText?: string;\r\n dialogClass?: string;\r\n}\r\nexport default class EvalboardConfirmationDialog extends Component {\r\n @service declare intl: IntlService;\r\n\r\n constructor(owner: unknown, args: EvalboardConfirmationDialogArgs) {\r\n super(owner, args);\r\n assert('`title` is required', !isNone(this.args.title));\r\n assert('`confirm` is required', !isNone(this.args.confirm));\r\n assert('`close` is required', !isNone(this.args.close));\r\n }\r\n\r\n // Optional parameters with defaults applied\r\n get _proceedButtonText() {\r\n return this.args.proceedButtonText ?? this.intl.t('ember-aditools-page.common.ok');\r\n }\r\n\r\n get _cancelButtonText() {\r\n return this.args.cancelButtonText ?? this.intl.t('ember-aditools-page.common.cancel');\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Component Actions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n @action proceed(closeDialog: () => void): void {\r\n if (this.args.confirm) {\r\n this.args.confirm();\r\n }\r\n closeDialog();\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n <:default>\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{#each this.evalBoardDisplay as |item| }}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{/each}}\\r\\n \\r\\n
{{t \\\"dialogs.evaluation-boards.stage-column\\\"}}{{t \\\"dialogs.evaluation-boards.stage-info-column\\\"}}{{t \\\"dialogs.evaluation-boards.eval-board-column\\\"}}{{t \\\"dialogs.evaluation-boards.eval-board-parts-column\\\"}}
{{item.stage}}\\r\\n {{#if item.hasStageInfo}}\\r\\n {{t\\r\\n \\\"dialogs.evaluation-boards.stage-info.stage-text\\\"\\r\\n stageType=(t (concat \\\"dialogs.evaluation-boards.stage-info.stage-type-\\\" item.stageType))\\r\\n stageImplementation=(t (concat \\\"dialogs.evaluation-boards.stage-info.implementation-\\\" item.stageImplementation))\\r\\n stageChannel=(t (concat \\\"dialogs.evaluation-boards.stage-info.channel-\\\" item.stageChannel))\\r\\n }}\\r\\n {{/if}}\\r\\n \\r\\n {{#if item.evalBoardModelNumber}}\\r\\n {{item.evalBoardModelNumber}}\\r\\n {{else}}\\r\\n {{t \\\"dialogs.evaluation-boards.eval-board-not-available-board\\\"}}\\r\\n {{/if}}\\r\\n {{item.partsOnEvalBoard}}
\\r\\n {{#if @evalBoardMultiple}}\\r\\n

{{t \\\"dialogs.evaluation-boards.eval-board-multiple\\\"}}

\\r\\n {{/if}}\\r\\n

{{t \\\"dialogs.evaluation-boards.eval-board-instruction\\\"}}

\\r\\n
\\r\\n \\r\\n <:footer as |closeDialog|>\\r\\n \\r\\n \\r\\n {{t \\\"settings.next-steps.order\\\"}}\\r\\n \\r\\n \\r\\n\",{ moduleName: \"filter-wizard/components/dialogs/evalboard.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './evalboard.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\n\r\ninterface EvalBoard {\r\n modelNumber: string;\r\n quantity: number;\r\n}\r\n///////////////////////////////////////////////////////////////////////////////\r\n// dialog-evalboard - component for the order evaluation board dialog //\r\n///////////////////////////////////////////////////////////////////////////////\r\n\r\ninterface EvalboardDialogArgs {\r\n order: () => void;\r\n close: (type: string) => void;\r\n title: string;\r\n message: string;\r\n model: EvalboardData[];\r\n evalBoardMultiple: boolean;\r\n shoppingCartEvalBoardUrl: string;\r\n}\r\n\r\ntype EvalboardData = {\r\n evalBoardModelNumber: string;\r\n partsOnEvalBoard: string[];\r\n stage: string;\r\n stageChannel: string;\r\n stageImplementation: string;\r\n stageType: string;\r\n};\r\n\r\nexport default class EvalboardDialog extends Component {\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Properties //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n get url(): string {\r\n const result = this.args.shoppingCartEvalBoardUrl.replace('{partlist}', this.evalBoardShoppingUrl.parts);\r\n console.log('URL for Eval Board shopping: ', result);\r\n return result;\r\n }\r\n get evalBoardDisplay(): {\r\n stage: string;\r\n stageType: string;\r\n stageImplementation: string;\r\n stageChannel: string;\r\n evalBoardModelNumber: string;\r\n partsOnEvalBoard: string[];\r\n hasStageInfo: boolean;\r\n }[] {\r\n const result = [];\r\n for (let i = 0; i < this.args.model.length; i++) {\r\n const item = this.args.model[i];\r\n if (item) {\r\n result.push({\r\n stage: item.stage,\r\n stageType: item.stageType,\r\n stageImplementation: item.stageImplementation,\r\n stageChannel: item.stageChannel,\r\n evalBoardModelNumber: item.evalBoardModelNumber,\r\n partsOnEvalBoard: item.partsOnEvalBoard,\r\n hasStageInfo:\r\n item.stageType !== 'none' || item.stageImplementation !== 'none' || item.stageChannel !== 'none',\r\n });\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n get evalBoardShoppingUrl(): { parts: string } {\r\n const evalBoardData = this.args.model.map((x) => x);\r\n const evalBoardOrder: EvalBoard[] = [];\r\n // Weed any unavailable boards out of order before sending to shopping cart\r\n const reducedData = evalBoardData.filter((data) => {\r\n return data.evalBoardModelNumber !== null;\r\n });\r\n\r\n for (const [index, data] of reducedData.entries()) {\r\n const evalBoard: EvalBoard = {\r\n modelNumber: data.evalBoardModelNumber,\r\n quantity: 1,\r\n };\r\n if (index === 0) {\r\n // if there is more than 4 stages, we need more than one motherboard\r\n // each motherboard can hold up to 4 daughterboards.\r\n if (evalBoardData.length > 4 && evalBoardData.length % 4 > 0) {\r\n // set Evalboard Data for motherboard with more than 4 stages\r\n evalBoardOrder.push(this.setMotherboard(evalBoard));\r\n } else {\r\n evalBoardOrder.push(evalBoard);\r\n }\r\n } else {\r\n // only order one 4-pack of daughterboard per up to 4 stages (same board)\r\n // daughterboards come in 4-packs. If there is more than one same daugherboard and up to 4, only order one pack.\r\n if (data.evalBoardModelNumber.indexOf('*') === -1) {\r\n evalBoardOrder.push(evalBoard);\r\n }\r\n }\r\n }\r\n\r\n const partlist = this.setParts(evalBoardOrder);\r\n return { parts: partlist };\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n setMotherboard(evalBoardOrder: EvalBoard): EvalBoard {\r\n const evalBoard = evalBoardOrder.modelNumber.split(' ');\r\n if (evalBoard.length > 2) {\r\n evalBoardOrder.modelNumber = evalBoard[2] ?? evalBoardOrder.modelNumber;\r\n evalBoardOrder.quantity = evalBoard[0] ? parseInt(evalBoard[0]) : evalBoardOrder.quantity;\r\n }\r\n return evalBoardOrder;\r\n }\r\n\r\n setParts(evalBoardOrder: EvalBoard[]): string {\r\n let partlist = '';\r\n const evalBoard = evalBoardOrder.reduce((accumulator: Record, value: EvalBoard) => {\r\n return { ...accumulator, [value.modelNumber]: (accumulator[value.modelNumber] || 0) + value.quantity };\r\n }, {});\r\n\r\n Object.keys(evalBoard).forEach((key) => {\r\n partlist = partlist + `${key},${evalBoard[key]}|`;\r\n });\r\n\r\n return partlist.substring(0, partlist.length - 1).replaceAll(' ', '%20');\r\n }\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Component Actions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n @action processEvalBoard(closeDialog: () => void): void {\r\n if (this.args.order) {\r\n this.args.order();\r\n }\r\n // If the customer needs to refer back to this page when filling the order form on the supplied page,\r\n // we may choose not to close the dialog so the customer doesn't have to reopen it.\r\n if (closeDialog) {\r\n closeDialog();\r\n }\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n \\r\\n \\r\\n {{t \\\"opAmpSelection.innerRequirements.requirement-title-one\\\"}}{{this.stageLetter}}{{t \\\"opAmpSelection.innerRequirements.requirement-title-two\\\"}}\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{t \\\"opAmpSelection.innerRequirements.total-supply-voltage-title\\\"}}{{this.totalVoltageSupply}}\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{t \\\"opAmpSelection.innerRequirements.required-gbw-title\\\"}}{{this.requiredGBW}}\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{t \\\"opAmpSelection.innerRequirements.recommended-gbw-title\\\"}}{{this.recommendedGBW}}\\r\\n
\\r\\n
\\r\\n\",{ moduleName: \"filter-wizard/components/dialogs/opamps-requirements.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './opamps-requirements.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\nimport SallenKeyLowPassIdealOpAmp from 'filter-wizard/models/implementation/sallen-key/low-pass/ideal-op-amp';\r\n\r\nconst voltageUnit = 'V';\r\nconst gbwUnit = 'Hz';\r\n\r\ninterface OpampsRequirementsArgs {\r\n limits: {\r\n allowedLimits: SallenKeyLowPassIdealOpAmp;\r\n recommendedLimits: SallenKeyLowPassIdealOpAmp;\r\n powerSpan: number;\r\n stageLetter: string;\r\n };\r\n}\r\n\r\nexport default class OpampsRequirements extends Component {\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Properties //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n get stageLetter(): string {\r\n return this.args.limits.stageLetter;\r\n }\r\n get totalVoltageSupply(): string {\r\n return this.getAdjustedValue(this.args.limits.powerSpan, voltageUnit);\r\n }\r\n get requiredGBW(): string {\r\n return this.getAdjustedValue(this.args.limits.allowedLimits.gbw, gbwUnit);\r\n }\r\n get recommendedGBW(): string {\r\n return this.getAdjustedValue(this.args.limits.recommendedLimits.gbw, gbwUnit);\r\n }\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n getAdjustedValue(rawValue: number | null, unit: string): string {\r\n let adjusted = '0';\r\n if (rawValue) {\r\n adjusted = numberToUserDisplay(rawValue, 'Engineering', 3, { showZeroes: false });\r\n adjusted = adjusted.indexOf('Inf') > -1 ? '0' : adjusted;\r\n }\r\n return adjusted + unit;\r\n }\r\n}\r\n","import { isUserEntryNumeric } from '@ebiz/pretty-num/';\n\n////////////////////////////////////////////////////////////////////////////////////\n// validation - Class containing function for character and field validation //\n////////////////////////////////////////////////////////////////////////////////////\n\nexport default {\n ////////////////////////////////////////////////////////////////////////////////\n // Functions //\n ////////////////////////////////////////////////////////////////////////////////\n\n // Function for Character Validation\n // Inputs: value - value to be validated\n // type - value field type\n // scope - used for custom validation, usually contains a Regular Expression, otherwise null\n // Returns: result - true when valid\n validateCharacterInput: function (value: string, type: string, scope?: RegExp): boolean {\n return this.validateFieldInput(value, type, scope);\n },\n\n // Function for Field Validation\n // Inputs: value - value to be validated\n // type - value field type\n // scope - used for custom validation, usually contains a Regular Expression, otherwise null\n // Returns: result - true when valid\n validateFieldInput: function (value: string, type: string, scope?: RegExp): boolean {\n let result = true;\n let pattern = /^/;\n switch (type) {\n case 'ALPHANUMERIC':\n pattern = /^[0-9a-zA-Z]+$/;\n result = pattern.test(value.toString());\n break;\n case 'ALPHABET':\n pattern = /^[a-zA-Z]+$/;\n result = pattern.test(value.toString());\n break;\n case 'NUMERIC':\n case 'NUMERICDECIMAL':\n case 'ENGINEERING': {\n result = isUserEntryNumeric(value.toString());\n break;\n }\n case 'CUSTOM':\n if (scope) {\n pattern = scope;\n result = pattern.test(value.toString());\n }\n break;\n case 'ALLCHARS':\n default:\n break;\n }\n return result;\n },\n};\n","import { userEntryToNumber } from '@ebiz/pretty-num';\nimport { assert } from '@ember/debug';\nimport type { Column } from 'slickgrid';\nimport type { ColumnFilter, DeviceData } from '../components/aditools-device-table.ts';\nimport Validation from './validation.ts';\n\nconst _stripTrailingDecimal = function (item: string) {\n const dotted = item.split('.');\n return dotted.length === 2 && dotted[1] && dotted[1].length === 0 ? item.slice(0, -1) : item;\n};\n\nexport default class EngineeringFilter implements ColumnFilter {\n defaultRelation: string;\n relation: string;\n initialValue: string;\n value: string;\n qaName?: string;\n constructor(defaultRelation: string, initialValue?: string, qaName?: string) {\n this.defaultRelation = defaultRelation ?? 'GT';\n this.relation = this.defaultRelation;\n this.initialValue = initialValue ?? '';\n this.value = this.initialValue;\n this.qaName = qaName;\n }\n\n populate(column: Column): HTMLElement {\n if (!column) {\n throw 'column passed to populate is invalid';\n }\n const selection = $(this.generateDOMElement(column));\n selection.find('select').val(this.relation);\n selection.find('input').val(this.value);\n assert('At least one element is always generated', selection[0]);\n return selection[0];\n }\n\n generateDOMElement(column: Column): string {\n const selectQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_select\"` : '';\n const inputQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_input\"` : '';\n return `
\n \n \n
`;\n }\n\n update(element: HTMLInputElement): void {\n const children = element.parentElement?.children;\n if (children) {\n this.relation = (children[0]).value;\n this.value = (children[1]).value;\n }\n }\n\n unpack(packedValues: string): void {\n if (packedValues) {\n const initialValues = JSON.parse(packedValues);\n if (\n Object.prototype.hasOwnProperty.call(initialValues, 'relation') &&\n Object.prototype.hasOwnProperty.call(initialValues, 'value')\n ) {\n this.relation = initialValues.relation;\n this.value = initialValues.value;\n }\n }\n }\n\n pack(): string {\n return JSON.stringify({ relation: this.relation, value: this.value });\n }\n\n hasValue(): boolean {\n return this.value !== '';\n }\n\n reset(): void {\n this.relation = this.defaultRelation;\n this.value = this.initialValue;\n }\n\n filter(field: string): boolean {\n // Temporary workaround for Package Area\n const cleanedField = field ? (field.includes('mm') ? (field.split('mm')[0] ?? '') : field) : field;\n let fieldValue = cleanedField === '' || cleanedField === '-' ? 0 : userEntryToNumber(cleanedField, Infinity);\n fieldValue = isNaN(fieldValue) ? Infinity : fieldValue;\n const filterRelation = this.relation;\n const filterValueString = _stripTrailingDecimal(this.value);\n if (Validation.validateFieldInput(filterValueString, 'ENGINEERING')) {\n const filterValue = userEntryToNumber(filterValueString, Infinity);\n if ((fieldValue || fieldValue === 0) && (filterValue || filterValue === 0)) {\n switch (filterRelation) {\n case 'EQ':\n return fieldValue === filterValue;\n case 'LE':\n return fieldValue <= filterValue;\n case 'LT':\n return fieldValue < filterValue;\n case 'GE':\n return fieldValue >= filterValue;\n case 'GT':\n return fieldValue > filterValue;\n }\n }\n }\n return true;\n }\n}\n","import { assert } from '@ember/debug';\nimport type { Column } from 'slickgrid';\nimport type { ColumnFilter, DeviceData } from '../components/aditools-device-table.ts';\n\nexport default class PartialTextFilter implements ColumnFilter {\n value: string;\n qaName?: string;\n updated?: (value: string) => void;\n\n constructor(initialValue?: string, qaName?: string, updated?: (value: string) => void) {\n this.value = initialValue ? initialValue : '';\n this.qaName = qaName;\n this.updated = updated;\n }\n\n populate(column: Column): HTMLElement {\n if (!column) {\n throw 'column passed to populate is invalid';\n }\n const selection = $(this.generateDOMElement(column));\n selection.val(this.value);\n assert('At least one element is always generated', selection[0]);\n return selection[0];\n }\n\n generateDOMElement(column: Column): string {\n const inputQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_input\"` : '';\n return ``;\n }\n\n update(element: HTMLInputElement): void {\n this.value = element.value;\n if (this.updated) {\n this.updated(element.value);\n }\n }\n\n unpack(packedValues: string): void {\n if (packedValues) {\n const initialValues = JSON.parse(packedValues);\n if (Object.prototype.hasOwnProperty.call(initialValues, 'value')) {\n this.value = initialValues.value;\n }\n }\n }\n\n reset(): void {\n this.value = '';\n }\n\n pack(): string {\n return JSON.stringify({ value: this.value });\n }\n\n hasValue(): boolean {\n return this.value !== '';\n }\n\n filter(field: string): boolean {\n const effectiveField = field ?? '';\n return effectiveField.toUpperCase().indexOf(this.value.toUpperCase()) > -1;\n }\n}\n","import { assert } from '@ember/debug';\nimport type { Column } from 'slickgrid';\nimport type { ColumnFilter, DeviceData } from '../components/aditools-device-table.ts';\n\nconst _stripDollar = function (item: string) {\n return item.substring(0, 1) === '$' ? item.slice(1) : item;\n};\n\nexport default class PriceFilter implements ColumnFilter {\n defaultRelation: string;\n relation: string;\n initialValue: string;\n value: string;\n qaName?: string;\n\n constructor(defaultRelation: string, initialValue?: string, qaName?: string) {\n this.defaultRelation = defaultRelation ?? 'GT';\n this.relation = this.defaultRelation;\n this.initialValue = initialValue ?? '';\n this.value = this.initialValue;\n this.qaName = qaName;\n }\n\n populate(column: Column): HTMLElement {\n if (!column) {\n throw 'column passed to populate is invalid';\n }\n const selection = $(this.generateDOMElement(column));\n selection.find('select').val(this.relation);\n selection.find('input').val(this.value);\n assert('At least one element is always generated', selection[0]);\n return selection[0];\n }\n\n generateDOMElement(column: Column): string {\n const selectQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_select\"` : '';\n const inputQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_input\"` : '';\n return `
\n \n \n
`;\n }\n\n update(element: HTMLInputElement): void {\n const children = element.parentElement?.children;\n if (children) {\n this.relation = (children[0]).value;\n this.value = (children[1]).value;\n }\n }\n\n unpack(packedValues: string): void {\n if (packedValues) {\n const initialValues = JSON.parse(packedValues);\n if (\n Object.prototype.hasOwnProperty.call(initialValues, 'relation') &&\n Object.prototype.hasOwnProperty.call(initialValues, 'value')\n ) {\n this.relation = initialValues.relation;\n this.value = initialValues.value;\n }\n }\n }\n\n pack(): string {\n return JSON.stringify({ relation: this.relation, value: this.value });\n }\n\n hasValue(): boolean {\n return this.value !== '';\n }\n\n reset(): void {\n this.relation = this.defaultRelation;\n this.value = this.initialValue;\n }\n\n filter(field: string): boolean {\n field = field === '' || field === '-' ? '0' : field;\n const fieldValue = field ? parseFloat(_stripDollar(field)) : field;\n const filterRelation = this.relation;\n const filterValue = parseFloat(_stripDollar(this.value));\n if ((fieldValue || fieldValue === 0) && (filterValue || filterValue === 0)) {\n switch (filterRelation) {\n case 'EQ':\n return fieldValue === filterValue;\n case 'LE':\n return (fieldValue as number) <= filterValue;\n case 'LT':\n return (fieldValue as number) < filterValue;\n case 'GE':\n return (fieldValue as number) >= filterValue;\n case 'GT':\n return (fieldValue as number) > filterValue;\n }\n }\n return true;\n }\n}\n","import { assert } from '@ember/debug';\nimport type { Column } from 'slickgrid';\nimport type { ColumnFilter, DeviceData, FieldValues } from '../components/aditools-device-table.ts';\n\nconst messages = {\n select_blanks_filter: '(Blanks)',\n select_all_filter: 'Show All',\n checkbox_filter_selected: 'values selected',\n value: 'value',\n};\n\nexport default class MultivalueCheckboxFilter implements ColumnFilter {\n filterValues: FieldValues[];\n value: string;\n qaName?: string;\n\n constructor(filterValues: FieldValues[], initialValue?: string, qaName?: string) {\n this.filterValues = filterValues;\n this.value = initialValue ? initialValue : '';\n this.qaName = qaName;\n }\n\n get initFilterCount(): string {\n if (this.value === '|') {\n // all were unchecked\n return '0';\n } else {\n // combination of 'Show ALl' and other values\n const values = this.value.split('|');\n if (this.value === '') {\n // value is 'Show All'\n return this.filterValues.length.toString();\n } else {\n return values.length.toString();\n }\n }\n }\n\n /* INTERFACE METHODS\n We are setting \"this.value\" in reset, unpack, update.\n This property is what we are tracking in filter, setting checkbox checked, and displaying initial filter count\n If 'Show All' is checked, automatically assign '' in this.value\n If all items were checked/packed except 'Show All', automatically assign '' in this.value\n Expected values of this.value:\n a. '|' : all were unchecked\n b. '' : all were checked\n c. \"1|2|3|4\" : sample combination/rest of the values in checkbox\n */\n populate(column: Column): HTMLElement {\n if (!column) {\n throw 'column passed to populate is invalid';\n }\n\n const selection = $(this.generateDOMElement(column));\n assert('At least one element is always generated', selection[0]);\n\n return selection[0];\n }\n\n update(element: HTMLInputElement): void {\n const columnId = element.id.split('_').slice(-1)[0] as string;\n if (element.id.includes('cbSelectAll')) {\n if (element.checked) {\n this.value = '';\n } else {\n this.value = '|';\n }\n } else {\n this.setCheckboxFilterData(columnId);\n }\n\n this.handleCheckboxChanged(columnId);\n }\n\n /* Should filter base on \"this.value\" */\n filter(field: string): boolean {\n if (this.value === '|') {\n // all were unchecked\n return false;\n }\n\n // could be combination of other values in checkbox\n if (this.value !== '') {\n if (this.value === '-') {\n // only blank is selected\n return field === '' || field === '-' || field === null || field === undefined;\n } else {\n const values = this.value.split('|').map((item) => {\n return item.trim();\n });\n // selected could be combination of blank and other values\n if (field) {\n const fieldList = field.split(',').map((item) => {\n return item.trim();\n });\n // match fieldList with the provided values\n return values.some((element) => {\n return fieldList.includes(element);\n });\n } else {\n // field is blank\n return values.includes('-');\n }\n }\n }\n\n // default-'Show All' is checked\n return true;\n }\n\n /* Called if there are packedFilters from aditools-device-table */\n unpack(packedValues: string): void {\n if (packedValues) {\n const initialValues = JSON.parse(packedValues);\n if (Object.prototype.hasOwnProperty.call(initialValues, 'value')) {\n this.value = initialValues.value;\n }\n }\n }\n\n pack(): string {\n const packedValues = JSON.stringify({ value: this.value });\n return packedValues;\n }\n\n reset(): void {\n this.value = '';\n }\n\n /* Guard to proceed with unpack/reset in aditools-device-table: should be false */\n hasValue(): boolean {\n return this.value !== '';\n }\n\n /* FUNCTIONS */\n generateDOMElement(column: Column): string {\n const filterCountMessage = this.initFilterCount + ' ' + messages.checkbox_filter_selected;\n this.generateCheckboxContainer(column);\n\n return `\n
\n
\n ${filterCountMessage}\n \n
\n
`;\n }\n\n generateCheckboxContainer(column: Column): void {\n const checkboxQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_checkbox\"` : '';\n const checkboxContainerItems = this.generateCheckboxContainerItems(column);\n\n const checkboxContainerString = `\n
\n ${checkboxContainerItems}\n
`;\n\n // insert checkbox container into device-table-overlays\n const overlayContainer = document.getElementById('device-table-overlays');\n if (overlayContainer) {\n const checkboxContainer = document.getElementById(`checkbox-container${column.id}`);\n if (checkboxContainer === null) {\n // if checkboxContainer is not existing, we can safely append it to overlayContainer\n $(checkboxContainerString).appendTo(overlayContainer);\n }\n }\n }\n\n generateCheckboxContainerItems(column: Column): string {\n const checkboxHtml = [],\n divider = `
`,\n selectAllIdName = `cbSelectAll_${column.id}`;\n\n // Build the Show All checkbox to the list.\n const selectAll = this.buildCheckboxString(\n selectAllIdName,\n selectAllIdName,\n '',\n messages.select_all_filter,\n '',\n this.setCheckboxItemChecked(''),\n false,\n );\n checkboxHtml.push(selectAll + divider);\n\n for (const [index, val] of this.filterValues.entries()) {\n const className = `cbfilter_${column.id}`,\n idName = `cbfilter_${index}_${column.id}`;\n if (val.value === '-') {\n // Build the (Blanks) checkbox to the list.\n const blankCheckbox = this.buildCheckboxString(\n idName,\n idName,\n val.value,\n val.display ?? '',\n className,\n this.setCheckboxItemChecked(val.value),\n false,\n );\n checkboxHtml.push(blankCheckbox + divider);\n } else {\n // Build the remaining checkbox items to the list.\n const checkboxItem = this.buildCheckboxString(\n idName,\n idName,\n val.value,\n val.display ?? '',\n className,\n this.setCheckboxItemChecked(val.value),\n false,\n );\n checkboxHtml.push(checkboxItem);\n }\n }\n\n return checkboxHtml.join('');\n }\n\n /* Track this.value to set checbox if checked or not */\n setCheckboxItemChecked(value: string): boolean {\n if (this.value === '|') {\n // all were unchecked\n return false;\n }\n\n // could be combination of other values in checkbox\n const values = this.value.split('|');\n if (this.value !== '') {\n return values.includes(value);\n }\n\n // default-'Show All' is checked\n return true;\n }\n\n buildCheckboxString(\n id: string,\n name: string,\n value: string,\n display: string,\n cbClass?: string,\n checked?: boolean,\n disabled?: boolean,\n ) {\n return ``;\n }\n\n updateFilterCount(columnId?: string) {\n let checkedCount = 0;\n const cbFilters = document.querySelectorAll('.cbfilter_' + columnId);\n if (cbFilters.length > 0) {\n cbFilters.forEach((cb) => {\n const checkbox = cb as HTMLInputElement;\n if (checkbox.type.toLowerCase() === 'checkbox' && checkbox.checked) {\n checkedCount++;\n }\n });\n }\n\n const text = checkedCount + ' ' + messages.checkbox_filter_selected;\n $('#checkbox-toggle-text' + columnId)\n .html(text)\n .attr('title', text);\n }\n\n updateSelectAllChecked(columnId: string) {\n const selectAll = document.getElementById('cbSelectAll_' + columnId) as HTMLInputElement;\n const cbFilters = document.querySelectorAll('.cbfilter_' + columnId);\n const cbFiltersChecked = document.querySelectorAll(`.cbfilter_${columnId}:checked`);\n if (cbFiltersChecked.length === cbFilters.length) {\n selectAll.checked = true;\n } else {\n selectAll.checked = false;\n }\n\n this.updateFilterCount(columnId);\n }\n\n updateCheckboxChecked(columnId: string) {\n const selectAll = document.getElementById('cbSelectAll_' + columnId) as HTMLInputElement;\n const cbFilters = document.querySelectorAll('.cbfilter_' + columnId);\n if (cbFilters.length > 0) {\n cbFilters.forEach((cb) => {\n (cb as HTMLInputElement).checked = selectAll.checked;\n });\n\n this.updateFilterCount(columnId);\n }\n }\n\n handleCheckboxChanged(columnId: string) {\n const selectAllChanged = () => {\n this.updateCheckboxChecked(columnId);\n };\n\n const checkboxChanged = () => {\n this.updateSelectAllChecked(columnId);\n };\n\n document.getElementById('cbSelectAll_' + columnId)?.addEventListener('change', selectAllChanged);\n document.querySelectorAll('.cbfilter_' + columnId)?.forEach((cb) => {\n cb.addEventListener('change', checkboxChanged);\n });\n }\n\n /* Part of 'update' interface method. For 'Blank' and other values in checkbox items */\n setCheckboxFilterData(columnId: string) {\n const cbFilters = document.querySelectorAll('.cbfilter_' + columnId);\n const values: string[] = [];\n\n if (cbFilters.length > 0) {\n cbFilters.forEach((cb) => {\n const checkbox = cb as HTMLInputElement;\n if (checkbox.type.toLowerCase() === 'checkbox' && checkbox.checked) {\n // extract values that are checked\n values.push(checkbox.value);\n }\n });\n }\n\n if (values.length === 0) {\n // all checkboxes unchecked\n this.value = '|';\n } else {\n if (values.length === this.filterValues.length) {\n // all were checked except Show All, automatically assign '' in this.value\n this.value = '';\n } else {\n this.value = values.join('|');\n }\n }\n }\n}\n","import type {\n DeviceColumn,\n DeviceData,\n DeviceComparator,\n ColumnFilter,\n FieldValues,\n} from '../components/aditools-device-table';\nimport Comparator from './comparator.ts';\nimport EngineeringFilter from './engineering-filter.ts';\nimport PartialTextFilter from './partial-text-filter.ts';\nimport PriceFilter from './price-filter.ts';\nimport MultivalueCheckboxFilter from './multivalue-checkbox-filter.ts';\n\nconst TRANSLATIONS = {\n en: {\n partName: 'Part Name',\n showAll: 'Show All',\n blanks: '(Blanks)',\n },\n cn: {\n // partName: '产品型号',\n partName: 'Part Name',\n showAll: '显示全部',\n blanks: '(Blanks)',\n },\n jp: {\n //partName: '製品番号',\n partName: 'Part Name',\n showAll: 'すべて表示',\n blanks: '(Blanks)',\n },\n ru: {\n partName: 'Part Name',\n showAll: 'Show All',\n blanks: '(Blanks)',\n },\n /*\n ru: {\n //partName: 'Наименование компонента',\n partName: 'Part Name',\n showAll: 'Показать все',\n },\n */\n};\n\nconst setBlankValue = function (deviceData: DeviceData[]): DeviceData[] {\n const deviceDataCopy = deviceData.map((data) => {\n const dataCopy = Object.assign({}, data);\n for (const [key, value] of Object.entries(dataCopy)) {\n if (!key.startsWith('value_')) {\n if (value === '') {\n dataCopy[key] = '-';\n }\n }\n }\n return dataCopy;\n });\n return deviceDataCopy;\n};\n\nconst NO_FILTER_COLUMNS = ['s25'];\n\ntype PSTParameterId = string; // pattern [\\d]{1-4}|s[\\d]{1-2}\n\ninterface PSTParameterDescription {\n name: string; // name of parameter\n definition: string; // what is it?\n type: string; // \"Floating Point\", \"String\", \"Integer\", \"Pulldown\",?\n filterType: string; // \"Sliders\", \"Textbox\", \"Checkboxes\", ?\n max: string | null; // maximum value - empty string if not applicable\n min: string | null; // minimum value - empty string if not applicable\n hasMagnitude: number; // number used as boolean\n uom: string | null; // unit of measure (V,A, Hz, ?...), or \"n/a\"\n values: string[] | number[] | null; // the set of allowed values\n classification: string; // Used to group parameters for selection\n minMaxTyp: string | null; // Kind of measure\n}\n\nexport interface PSTParameterMapping {\n [parmId: string]: PSTParameterDescription;\n}\n\nexport interface PSTIndex {\n categoryId: string;\n title: string;\n minPartsToRetrieve: string;\n queryStrings: unknown;\n quickFilter: unknown;\n PSTFilter: { cat: unknown | null; pst: unknown | null }[];\n breadcrumburl: { name: string; url: string }[];\n columns: PSTIndexColumn[]; // This is the bulk of the file\n}\n\ninterface PSTIndexColumn {\n id: string; // \"C{index}\"\n field: string; // PST parameter ID\n external_name: string; // Used for display\n tooltip: string | null;\n display_in_default_view: string; // 'true', 'false'\n user_displayable: string; // 'true', 'false'\n uom: string | null; // \"V\", \"Hz\", \"V/rtHz\", possibly \"n/a\"\n defaultUOM: string | null; // \"V\", \"Hz\", \"V/rtHz\", possibly \"n/a\"\n min: string; // possibly \"\"\n max: string; // possibly \"\"\n values: string[] | number[] | null;\n s3type: string | null; // \"math\", \"lookup\", ?...\n}\n\ninterface ParameterData {\n displayValue: string; // value for display with unit suffix\n value: string[]; // raw values - no units\n}\n\ninterface PartNumberData extends ParameterData {\n dataSheet: number; // Operates as a boolean\n usedInCFTL: number; // Operates as a boolean\n hasAnEvalBoard: number; // Operates as a boolean\n evalBoardUrl: string;\n generic: string; // generic part number\n genericStatus: string;\n companion: unknown[];\n}\n\nexport interface PSTData {\n categoryId: string;\n description: string;\n data: {\n id: string;\n '0': PartNumberData;\n [parameterId: string]: string | ParameterData; //for each parameter\n }[]; // for each part\n}\n\nexport function collectDeviceDataFromPST(\n pstData: PSTData,\n mappingData: PSTParameterMapping,\n blanksAsDashes?: boolean,\n): DeviceData[] {\n const rows: DeviceData[] = [];\n for (const part of pstData.data) {\n const row: DeviceData = {};\n row['partNumber'] = part['0'].displayValue;\n row['generic'] = part['0'].generic;\n row['id'] = part['0'].displayValue;\n for (const parm in part) {\n if (parm === 'id' || parm === '0' || !(parm in mappingData)) continue;\n const displayKey = 'display_' + parm;\n const valueKey = 'value_' + parm;\n const partparm = part[parm] as ParameterData;\n row[displayKey] = partparm.displayValue;\n const parmdata = mappingData[parm] as PSTParameterDescription; //Covered by guard clause above\n switch (parmdata.type) {\n case 'Floating Point':\n if (partparm.value[0] === '') {\n row[valueKey] = null;\n } else {\n row[valueKey] = parseFloat(partparm.value[0] ?? '0');\n }\n break;\n case 'Integer':\n if (partparm.value[0] === '') {\n row[valueKey] = null;\n } else {\n row[valueKey] = parseInt(partparm.value[0] ?? '0');\n }\n break;\n\n case 'Pulldown':\n // Nothing in a parameter mapping tells us if a pulldown type on a part is meant to have one value or multiple.\n // The code has to either always return an array or return a single value if that is all that is there.\n // Most pulldowns are single-value and the caller can special-case the few times a multi-value select has a single value.\n // Essentially, this code has optimized for the commonest case, rather than generalizing. Right? Wrong? We'll see.\n if (partparm.value.length === 1) {\n row[valueKey] = partparm.value[0];\n } else {\n row[valueKey] = partparm.value;\n }\n break;\n case 'Date':\n // Date string value is delivered as a Date value. Only s18 uses this so far.\n row[valueKey] = Date.parse(partparm.value[0] ?? '');\n break;\n case 'String':\n row[valueKey] = partparm.value[0];\n break;\n default:\n console.log(`Parameter ${parm} has unknown parameter type ${parmdata.type}`);\n row[valueKey] = partparm.value;\n break;\n }\n }\n rows.push(row);\n }\n return blanksAsDashes ? setBlankValue(rows) : rows;\n}\n\nexport function collectColumnDataFromPST(\n viewData: PSTIndex,\n mappingData: PSTParameterMapping,\n locale = 'en',\n): DeviceColumn[] {\n const results: DeviceColumn[] = [];\n viewData.columns.map((item) => {\n const field: PSTParameterId = item.field as PSTParameterId;\n if (mappingData[field]) {\n let columnComparator: DeviceComparator;\n const mappedItem = mappingData[field] as PSTParameterDescription; //Covered by guard clause above\n switch (mappedItem.type) {\n case 'Integer':\n columnComparator = Comparator.integerComparator;\n break;\n case 'Floating Point':\n columnComparator = Comparator.engineeringComparator;\n break;\n case 'Pulldown':\n columnComparator = Comparator.textComparator;\n break;\n case 'Date':\n columnComparator = Comparator.textComparator;\n break;\n case 'String':\n columnComparator = Comparator.textComparator;\n break;\n default:\n columnComparator = Comparator.textComparator;\n break;\n }\n let columnFilter: ColumnFilter | undefined;\n let columnValues: FieldValues[] = [];\n if (!NO_FILTER_COLUMNS.includes(item.field)) {\n switch (mappedItem.filterType) {\n case 'Sliders': {\n if (mappedItem.uom === '$ US') {\n columnFilter = new PriceFilter('GT');\n } else {\n columnFilter = new EngineeringFilter('GT');\n }\n break;\n }\n case 'Textbox': {\n columnFilter = new PartialTextFilter('');\n break;\n }\n case 'Checkboxes': {\n const fieldValues: FieldValues[] = [];\n if (item.values) {\n fieldValues.push({\n value: '-',\n display: _translations(locale)['blanks'] ?? '(Blanks)',\n match: '',\n });\n item.values.forEach((item) => {\n fieldValues.push({\n value: item.toString(),\n display: item.toString(),\n match: item.toString(),\n });\n });\n }\n columnValues = fieldValues;\n columnFilter = new MultivalueCheckboxFilter(fieldValues);\n break;\n }\n default: {\n columnFilter = new PartialTextFilter('');\n break;\n }\n }\n }\n\n const column: DeviceColumn = {\n id: item.field,\n name: mappedItem.name,\n field: 'display_' + item.field,\n sortable: true,\n comparator: columnComparator,\n filter: columnFilter,\n columnValues: columnValues,\n classification: mappedItem.classification,\n isDefault: item.display_in_default_view === 'true',\n unit: mappedItem.uom,\n minMaxTyp: mappedItem.minMaxTyp,\n toolTip: mappedItem.definition ?? mappedItem.name,\n };\n results.push(column);\n } else if (field === '0') {\n // Part Number has no mapping and needs to make a special column for this\n const column: DeviceColumn = {\n id: '0',\n name: _translations(locale)['partName'] ?? 'Part Name',\n sortable: true,\n comparator: Comparator.partComparator,\n field: 'partNumber',\n filter: new PartialTextFilter('', 'part'),\n columnValues: [],\n classification: 'Other',\n isDefault: true,\n unit: null,\n minMaxTyp: null,\n toolTip: _translations(locale)['partName'] ?? 'Part Name',\n };\n\n results.push(column);\n }\n });\n return results;\n}\n\nexport function reduceColumnFilterValuesToThosePresent(\n rowData: DeviceData[],\n columnData: DeviceColumn[],\n): void {\n for (const column of columnData) {\n if (column.columnValues && column.columnValues.length > 0) {\n const fieldValues: FieldValues[] = [];\n for (const columnValue of column.columnValues) {\n const checkData = rowData.filter((x) => {\n const matchValue = typeof columnValue.match !== 'undefined' ? columnValue.match : columnValue.value;\n if (Array.isArray(x[`value_${column.id as string}`])) {\n const xvalues = (x[`${column.field as string}`] as string).split(',').map((s) => s.trim());\n return matchValue !== ''\n ? xvalues.includes(matchValue.trim())\n : xvalues.includes(matchValue.trim()) || xvalues.includes('-');\n } else {\n return matchValue !== ''\n ? x[`${column.field as string}`] === matchValue\n : x[`${column.field as string}`] === matchValue || x[`${column.field as string}`] === '-';\n }\n });\n if (checkData.length > 0) {\n fieldValues.push(columnValue);\n }\n }\n column.filter = new MultivalueCheckboxFilter(fieldValues);\n }\n }\n}\n\nexport function getPSTName(viewData: PSTIndex): string {\n return viewData.title;\n}\n\nfunction _translations(locale: string): Record {\n let loc: 'en' | 'cn' | 'jp' | 'ru' = 'en';\n if (locale === 'en' || locale === 'cn' || locale === 'jp' || locale === 'ru') {\n loc = locale;\n }\n return TRANSLATIONS[loc as 'en' | 'cn' | 'jp' | 'ru'];\n}\n","import { assert } from '@ember/debug';\nimport type { Column } from 'slickgrid';\nimport type { ColumnFilter, DeviceData } from '../components/aditools-device-table.ts';\nimport type { FilterValues } from './selection-filter.ts';\n\nexport default class CommentFilter implements ColumnFilter {\n filterValues: FilterValues[];\n value: string;\n qaName?: string;\n constructor(filterValues: FilterValues[], initialValue?: string, qaName?: string) {\n this.filterValues = filterValues;\n this.value = initialValue ? initialValue : '';\n this.qaName = qaName;\n }\n\n populate(column: Column): HTMLElement {\n if (!column) {\n throw 'column passed to populate is invalid';\n }\n const selection = $(this.generateDOMElement(column));\n selection.val(this.value);\n assert('At least one element is always generated', selection[0]);\n return selection[0];\n }\n\n generateDOMElement(column: Column): string {\n const selectQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_select\"` : '';\n let options = '';\n for (const item of this.filterValues) {\n options += ``;\n }\n return ``;\n }\n\n update(element: HTMLInputElement): void {\n this.value = element.value;\n }\n\n unpack(packedValues: string): void {\n if (packedValues) {\n const initialValues = JSON.parse(packedValues);\n if (Object.prototype.hasOwnProperty.call(initialValues, 'value')) {\n this.value = initialValues.value;\n }\n }\n }\n\n reset(): void {\n this.value = '';\n }\n\n pack(): string {\n return JSON.stringify({ value: this.value });\n }\n\n hasValue(): boolean {\n return this.value !== '';\n }\n\n filter(field: string): boolean {\n const pieces = field ? field.split(':') : [];\n if (this.value) {\n const parm = this.filterValues.find((aParm: { value: string }) => {\n return this.value === aParm.value;\n });\n return pieces[0] === (parm?.match ? parm?.match : parm?.value);\n }\n return true;\n }\n}\n","import { userEntryToNumber } from '@ebiz/pretty-num';\nimport { assert } from '@ember/debug';\nimport type { Column } from 'slickgrid';\nimport Validation from './validation.ts';\nimport type { ColumnFilter, DeviceData } from '../components/aditools-device-table.ts';\n\nconst _stripTrailingDecimal = function (item: string) {\n const dotted = item.split('.');\n return dotted.length === 2 && dotted[1] && dotted[1].length === 0 ? item.slice(0, -1) : item;\n};\n\nexport default class EngineeringRangeValueFilter implements ColumnFilter {\n defaultMinimum: string;\n defaultMaximum: string;\n minimumValue: string;\n maximumValue: string;\n qaName?: string;\n constructor(defaultMinimum?: string, defaultMaximum?: string, qaName?: string) {\n this.defaultMinimum = defaultMinimum ?? '';\n this.defaultMaximum = defaultMaximum ?? '';\n this.minimumValue = this.defaultMinimum;\n this.maximumValue = this.defaultMaximum;\n this.qaName = qaName;\n }\n\n populate(column: Column): HTMLElement {\n if (!column) {\n throw 'column passed to populate is invalid';\n }\n const selection = $(this.generateDOMElement(column));\n selection.find('input:first-child').val(this.minimumValue);\n selection.find('input:nth-child(3)').val(this.maximumValue);\n assert('At least one element is always generated', selection[0]);\n return selection[0];\n }\n\n generateDOMElement(column: Column): string {\n const inputQaElement = this.qaName ? `data-qa-element=\"device_table_${this.qaName}_input\"` : '';\n return `
\n \n \n \n
`;\n }\n\n update(element: HTMLInputElement): void {\n const children = element.parentElement?.children;\n if (children) {\n this.minimumValue = (children[0]).value;\n this.maximumValue = (children[2]).value;\n }\n }\n\n unpack(packedValues: string): void {\n if (packedValues) {\n const initialValues = JSON.parse(packedValues);\n if (\n Object.prototype.hasOwnProperty.call(initialValues, 'minimumValue') &&\n Object.prototype.hasOwnProperty.call(initialValues, 'maximumValue')\n ) {\n this.minimumValue = initialValues.minimumValue;\n this.maximumValue = initialValues.maximumValue;\n }\n }\n }\n\n reset(): void {\n this.minimumValue = this.defaultMinimum;\n this.maximumValue = this.defaultMaximum;\n }\n\n hasValue(): boolean {\n return this.minimumValue !== '' || this.maximumValue !== '';\n }\n\n pack(): string {\n return JSON.stringify({ minimumValue: this.minimumValue, maximumValue: this.maximumValue });\n }\n\n filter(field: string): boolean {\n // Temporary workaround for Package Area\n const cleanedField = field ? (field.includes('mm') ? (field.split('mm')[0] ?? field) : field) : field;\n let fieldValue = cleanedField === '' || cleanedField === '-' ? 0 : userEntryToNumber(cleanedField, Infinity);\n fieldValue = isNaN(fieldValue) ? Infinity : fieldValue;\n const filterMinimumString = _stripTrailingDecimal(this.minimumValue);\n const filterMaximumString = _stripTrailingDecimal(this.maximumValue);\n if (\n Validation.validateFieldInput(filterMinimumString, 'ENGINEERING') ||\n Validation.validateFieldInput(filterMaximumString, 'ENGINEERING')\n ) {\n let filterMinValue = userEntryToNumber(filterMinimumString, Infinity);\n filterMinValue = isNaN(filterMinValue) ? Infinity : filterMinValue;\n let filterMaxValue = userEntryToNumber(filterMaximumString, Infinity);\n filterMaxValue = isNaN(filterMaxValue) ? Infinity : filterMaxValue;\n if (fieldValue || fieldValue === 0) {\n if (filterMinValue !== Infinity && filterMaxValue !== Infinity) {\n return fieldValue >= filterMinValue && fieldValue <= filterMaxValue;\n } else if (filterMinValue === Infinity && filterMaxValue !== Infinity) {\n return fieldValue <= filterMaxValue;\n } else if (filterMinValue !== Infinity && filterMaxValue === Infinity) {\n return fieldValue >= filterMinValue;\n }\n }\n }\n return true;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n <:default>\\r\\n
\\r\\n
\\r\\n {{#if this.showDeviceTable}}\\r\\n \\r\\n {{/if}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n <:footer as |closeDialog|>\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n{{#if this.parameterSelectorGrid}}\\r\\n \\r\\n <:default as |closeDialog|>\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n{{/if}}\\r\\n\",{ moduleName: \"filter-wizard/components/dialogs/opamps.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './opamps.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { inject as service } from '@ember/service';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport OpAmpsService from 'filter-wizard/services/opamps';\r\nimport SallenKeyLowPassIdealOpAmp from 'filter-wizard/models/implementation/sallen-key/low-pass/ideal-op-amp';\r\nimport {\r\n DeviceColumn,\r\n DeviceData,\r\n PackedFilterValue,\r\n SortColumnRef,\r\n} from '@ebiz/ember-aditools-device-table/components/aditools-device-table';\r\nimport {\r\n collectColumnDataFromPST,\r\n collectDeviceDataFromPST,\r\n PSTData,\r\n PSTIndex,\r\n PSTParameterMapping,\r\n reduceColumnFilterValuesToThosePresent,\r\n} from '@ebiz/ember-aditools-device-table/utils/device-table-pst';\r\nimport CommentFilter from '@ebiz/ember-aditools-device-table/utils/comment-filter';\r\nimport EngineeringFilter from '@ebiz/ember-aditools-device-table/utils/engineering-filter';\r\nimport PriceFilter from '@ebiz/ember-aditools-device-table/utils/price-filter';\r\nimport EngineeringRangeValueFilter from '@ebiz/ember-aditools-device-table/utils/engineering-range-value-filter';\r\nimport MultivalueCheckboxFilter from '@ebiz/ember-aditools-device-table/utils/multivalue-checkbox-filter';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport { ImplementationType, FilterType as Type } from '@ebiz/aditools-filter/recommendations';\r\n\r\ninterface OpampsDialogArgs {\r\n close: () => void;\r\n title: string;\r\n updatePart: (part: string) => void;\r\n partName: string;\r\n limits: {\r\n allowedLimits: SallenKeyLowPassIdealOpAmp;\r\n recommendedLimits: SallenKeyLowPassIdealOpAmp;\r\n powerSpan: number;\r\n stageLetter: string;\r\n };\r\n vsPlus: number;\r\n vsMinus: number;\r\n pstData: PSTData;\r\n pstView: PSTIndex;\r\n pstMapping: PSTParameterMapping;\r\n selectionFilterOptions: {\r\n columns?: DeviceColumn[] | undefined;\r\n filters?: PackedFilterValue[] | undefined;\r\n sortColumns?: SortColumnRef[] | undefined;\r\n };\r\n updateSelectionFilterOptions: (\r\n columns: DeviceColumn[] | undefined,\r\n filters: PackedFilterValue[] | undefined,\r\n sortColumns: SortColumnRef[] | undefined,\r\n ) => void;\r\n implementation?: ImplementationType | undefined;\r\n filterType?: Type | undefined;\r\n}\r\n\r\nconst options = {\r\n enableCellNavigation: true,\r\n enableColumnReorder: true,\r\n multiColumnSort: true,\r\n multiSelect: false,\r\n showHeaderRow: true,\r\n headerRowHeight: 30,\r\n frozenColumn: 0,\r\n explicitInitialization: true,\r\n parametersPanel: true,\r\n};\r\n\r\ntype OpAmpDisplayItem = {\r\n selectable: boolean;\r\n disallowed: boolean;\r\n comments: string;\r\n partNumber: string;\r\n feedbackMethod: string;\r\n status: string;\r\n statusText: string;\r\n isLTSpiceOpAmp: string;\r\n};\r\n\r\nexport default class OpampsDialog extends Component {\r\n @service declare intl: IntlService;\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n @service opamps!: OpAmpsService;\r\n // eslint-disable-next-line ember/no-tracked-properties-from-args\r\n @tracked selectedPartName = this.args.partName;\r\n @tracked pstColumns: DeviceColumn[] = [];\r\n @tracked parameterSelectorGrid = false;\r\n @tracked _columns?: DeviceColumn[];\r\n @tracked updatedfilters?: PackedFilterValue[];\r\n @tracked filters?: PackedFilterValue[];\r\n @tracked sortColumns?: SortColumnRef[];\r\n @tracked checkedColumns?: DeviceColumn[];\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Properties //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n get data(): DeviceData[] {\r\n const opAmpData = this.opamps.getOpAmpsForDisplay(\r\n this.args.limits,\r\n this.args.vsPlus,\r\n this.args.vsMinus,\r\n this.args.implementation,\r\n );\r\n return this.buildOpAmpDisplay(opAmpData); //_indexOpAmps();\r\n }\r\n get columns(): DeviceColumn[] {\r\n return (\r\n this._columns ??\r\n this.pstColumns.filter((x) => {\r\n return x.isDefault;\r\n })\r\n );\r\n }\r\n\r\n set columns(cols: DeviceColumn[]) {\r\n this._columns = cols;\r\n }\r\n\r\n get options(): {\r\n enableCellNavigation: boolean;\r\n enableColumnReorder: boolean;\r\n multiColumnSort: boolean;\r\n multiSelect: boolean;\r\n showHeaderRow: boolean;\r\n headerRowHeight: number;\r\n frozenColumn: number;\r\n explicitInitialization: boolean;\r\n } {\r\n return options;\r\n }\r\n\r\n get noColumnsSelected(): boolean {\r\n return this.checkedColumns !== undefined && this.checkedColumns.length === 1;\r\n }\r\n\r\n get showDeviceTable() {\r\n return this.pstColumns.length > 0;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Support Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n setImportantColumns(pstColumns: DeviceColumn[]): DeviceColumn[] {\r\n let result: DeviceColumn[] = [];\r\n const importantArray: DeviceColumn[] = [];\r\n const importantColumns = [\r\n 's3', // Price (1000+)\r\n 'ltSpice', // LT Spice\r\n 's7', // Status\r\n 's14', // Temp Range\r\n '4099', // Out V- Headroom\r\n '4100', // Out V+ Headroom\r\n '4085', // In V- Headroom\r\n '4084', // In V+ Headroom\r\n '2687', // # of Amps\r\n '4501', // Vos\r\n '4500', // Ibias\r\n '4108', // Iq/Amp\r\n '4101', // VNoise Density\r\n '2840', // Vs span (max)\r\n '2839', // Vs span (min)\r\n '4502', // GBP\r\n 'comments', // Comments\r\n '0', // Part Name\r\n ];\r\n\r\n importantColumns.forEach((item) => {\r\n const column = pstColumns.find((c) => c.id === item);\r\n if (column) {\r\n importantArray.push(column as DeviceColumn);\r\n }\r\n });\r\n result = pstColumns.filter((item) => !importantArray.includes(item));\r\n importantArray.forEach((item) => {\r\n result.unshift(item);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n getOpAmpSelectionColumns(): DeviceColumn[] {\r\n const pstColumns = collectColumnDataFromPST(this.args.pstView, this.args.pstMapping, this.siteconfig.AdiLocale);\r\n const siteUrl = this.siteconfig['SiteUrl'];\r\n const adiLocale = this.siteconfig.AdiLocale;\r\n\r\n const partFormatter = function (\r\n _row: number,\r\n _cell: number,\r\n value: string,\r\n _columnDef: unknown,\r\n dataContext: DeviceData,\r\n ): string {\r\n return [\r\n '',\r\n value,\r\n '',\r\n '',\r\n '',\r\n '',\r\n ].join('');\r\n };\r\n\r\n pstColumns.forEach((item) => {\r\n item.minWidth = 110;\r\n item.width = item.name ? item.name.length * 12 : 110;\r\n\r\n if (item.id === '0') {\r\n item.resizable = false;\r\n item.width = 115;\r\n item.formatter = partFormatter;\r\n }\r\n\r\n // Set filter type for engineering and price filters\r\n if (item.filter && item.filter instanceof EngineeringFilter) {\r\n item.filter = new EngineeringRangeValueFilter('', '');\r\n } else if (item.filter && item.filter instanceof PriceFilter) {\r\n item.filter = new PriceFilter('LT');\r\n }\r\n\r\n if (\r\n item.id === '4084' || // In V+ Headroom (typ)\r\n item.id === '4085' || // In V- Headroom (typ)\r\n item.id === '4100' || // Out V+ Headroom (typ)\r\n item.id === '4099' || // Out V- Headroom (typ)\r\n item.id === 's14' || // Temp Range\r\n item.id === 's7' // Status\r\n ) {\r\n item.isDefault = true;\r\n }\r\n });\r\n\r\n const newColumns = [\r\n {\r\n id: 'comments',\r\n name: this.intl.t('dialogs.opamp.table.comments'),\r\n field: 'comments',\r\n classification: 'Other',\r\n width: 470,\r\n sortable: true,\r\n isDefault: true,\r\n unit: null,\r\n toolTip: this.intl.t('dialogs.opamp.table.comments'),\r\n filter: new CommentFilter([\r\n {\r\n value: '',\r\n display: this.intl.t('dialogs.opamp.table.commentsDisplay.showAll'),\r\n },\r\n {\r\n value: this.intl.t('dialogs.opamp.table.commentsDisplay.showRecommended'),\r\n match: this.intl.t('dialogs.opamp.table.commentsDisplay.showRecommendedMatch'),\r\n display: this.intl.t('dialogs.opamp.table.commentsDisplay.showRecommended'),\r\n },\r\n {\r\n value: this.intl.t('dialogs.opamp.table.commentsDisplay.showNotRecommended'),\r\n match: this.intl.t('dialogs.opamp.table.commentsDisplay.showNotRecommendedMatch'),\r\n display: this.intl.t('dialogs.opamp.table.commentsDisplay.showNotRecommended'),\r\n },\r\n {\r\n value: this.intl.t('dialogs.opamp.table.commentsDisplay.showNotAllowed'),\r\n match: this.intl.t('dialogs.opamp.table.commentsDisplay.showNotAllowedMatch'),\r\n display: this.intl.t('dialogs.opamp.table.commentsDisplay.showNotAllowed'),\r\n },\r\n ]),\r\n },\r\n {\r\n id: 'ltSpice',\r\n name: 'LTspice',\r\n field: 'ltSpice',\r\n classification: 'Other',\r\n width: 110,\r\n sortable: true,\r\n isDefault: true,\r\n unit: null,\r\n toolTip: 'LTSpice',\r\n filter: new MultivalueCheckboxFilter([\r\n {\r\n value: this.intl.t('dialogs.opamp.table.isLTSpiceDisplay.showYes'),\r\n display: this.intl.t('dialogs.opamp.table.isLTSpiceDisplay.showYes'),\r\n match: this.intl.t('dialogs.opamp.table.isLTSpiceDisplay.showYes'),\r\n },\r\n {\r\n value: this.intl.t('dialogs.opamp.table.isLTSpiceDisplay.showNo'),\r\n display: this.intl.t('dialogs.opamp.table.isLTSpiceDisplay.showNo'),\r\n match: this.intl.t('dialogs.opamp.table.isLTSpiceDisplay.showNo'),\r\n },\r\n ]),\r\n },\r\n ];\r\n newColumns.forEach((item) => {\r\n pstColumns.push(item);\r\n });\r\n return this.setImportantColumns(pstColumns);\r\n }\r\n\r\n buildOpAmpDisplay(opAmpData: OpAmpDisplayItem[]): DeviceData[] {\r\n const deviceData = collectDeviceDataFromPST(this.args.pstData, this.args.pstMapping, true);\r\n const data: DeviceData[] = [];\r\n\r\n for (let i = 0; i < opAmpData.length; i++) {\r\n for (let j = 0; j < deviceData.length; j++) {\r\n if (opAmpData[i] && deviceData[j]) {\r\n const opAmpDataItem = opAmpData[i] as OpAmpDisplayItem,\r\n deviceDataItem = deviceData[j] as DeviceData;\r\n if (opAmpDataItem.partNumber === deviceDataItem['partNumber']) {\r\n if (opAmpDataItem.feedbackMethod === 'Current') {\r\n deviceDataItem['display_4502'] = 'CFB';\r\n deviceDataItem['value_4502'] = 'CFB';\r\n } else {\r\n deviceDataItem['display_4502'] =\r\n deviceDataItem['display_4502'] !== '' ? deviceDataItem['display_4502'] : '';\r\n deviceDataItem['value_4502'] = deviceDataItem['value_4502'] !== '' ? deviceDataItem['value_4502'] : '';\r\n }\r\n deviceDataItem['comments'] = opAmpDataItem.comments;\r\n deviceDataItem['ltSpice'] =\r\n opAmpDataItem.isLTSpiceOpAmp === 'Yes'\r\n ? this.intl.t('dialogs.opamp.table.isLTSpiceDisplay.showYes')\r\n : this.intl.t('dialogs.opamp.table.isLTSpiceDisplay.showNo');\r\n deviceDataItem['disallowed'] = opAmpDataItem.disallowed;\r\n deviceDataItem['selectable'] = opAmpDataItem.selectable;\r\n data.push(deviceDataItem);\r\n }\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Component Actions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n @action insertingDeviceTable(): void {\r\n this.pstColumns = this.getOpAmpSelectionColumns();\r\n reduceColumnFilterValuesToThosePresent(this.data, this.pstColumns);\r\n if (this.args.selectionFilterOptions.columns) {\r\n this.columns = this.args.selectionFilterOptions.columns;\r\n }\r\n if (this.args.selectionFilterOptions.filters) {\r\n this.filters = this.args.selectionFilterOptions.filters;\r\n }\r\n if (this.args.selectionFilterOptions.sortColumns) {\r\n this.sortColumns = this.args.selectionFilterOptions.sortColumns;\r\n }\r\n }\r\n\r\n @action partChanged(partName: string): void {\r\n this.selectedPartName = partName;\r\n }\r\n\r\n @action onChooseParameters(): void {\r\n this.parameterSelectorGrid = true;\r\n }\r\n\r\n @action onAllParameters(): void {\r\n this.columns = this.pstColumns;\r\n if (this.updatedfilters) {\r\n this.filters = [...this.updatedfilters];\r\n }\r\n this.args.updateSelectionFilterOptions(this.columns, this.filters, this.sortColumns);\r\n }\r\n\r\n @action onResetParameters(): void {\r\n this.columns = this.pstColumns.filter((x) => {\r\n return x.isDefault;\r\n });\r\n this.updatedfilters = undefined;\r\n this.filters = undefined;\r\n this.sortColumns = undefined;\r\n this.checkedColumns = undefined;\r\n\r\n this.args.updateSelectionFilterOptions(undefined, undefined, undefined);\r\n }\r\n\r\n @action submitParameterSelector(closeDialog: () => void): void {\r\n if (this.checkedColumns) {\r\n this.columns = [...this.checkedColumns];\r\n }\r\n if (this.updatedfilters) {\r\n this.filters = [...this.updatedfilters];\r\n }\r\n this.args.updateSelectionFilterOptions(this.columns, this.filters, this.sortColumns);\r\n closeDialog();\r\n }\r\n\r\n @action closeParameterSelector(): void {\r\n this.parameterSelectorGrid = false;\r\n this.checkedColumns = undefined;\r\n }\r\n\r\n @action selectionChanged(newColumns: DeviceColumn[]): void {\r\n this.checkedColumns = [...newColumns];\r\n }\r\n\r\n @action filterChanged(filters: PackedFilterValue[]): void {\r\n // 1. Get filters for any hidden columns\r\n const filtersOfHiddenCols: PackedFilterValue[] = [];\r\n if (this.updatedfilters) {\r\n this.updatedfilters.forEach((filterCol) => {\r\n const result = this.columns.find((col) => {\r\n return col.id === filterCol.columnId;\r\n });\r\n if (!result) {\r\n filtersOfHiddenCols.push(filterCol);\r\n }\r\n });\r\n }\r\n // 2. Merge filters for visible and hidden columns\r\n this.updatedfilters = filters.concat(filtersOfHiddenCols);\r\n this.args.updateSelectionFilterOptions(this.columns, this.updatedfilters, this.sortColumns);\r\n }\r\n\r\n @action sortChanged(sortColumns: SortColumnRef[]): void {\r\n this.sortColumns = sortColumns;\r\n this.args.updateSelectionFilterOptions(\r\n this.columns,\r\n this.filters === undefined ? this.updatedfilters : this.filters,\r\n this.sortColumns,\r\n );\r\n }\r\n\r\n @action applyAndClose(closeDialog: () => void) {\r\n if (this.selectedPartName) {\r\n this.args.updatePart(this.selectedPartName);\r\n }\r\n closeDialog();\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @dialogEnabled}}\\r\\n\\r\\n
\\r\\n {{this._message}}\\r\\n {{yield}}\\r\\n
\\r\\n
\\r\\n{{/if}}\",{ moduleName: \"filter-wizard/components/dialogs/system-lock.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './system-lock.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\n\r\n/////////////////////////////////////////////////////////////////////////////////////////\r\n// system-lock - Modal dialog that cannot be closed //\r\n/////////////////////////////////////////////////////////////////////////////////////////\r\n\r\ninterface SystemLockDialogArgs {\r\n dialogEnabled: boolean;\r\n title: string;\r\n message: string;\r\n}\r\n\r\nexport default class SystemLockDialog extends Component {\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Properties //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n get _message(): string {\r\n return this.args.message || '';\r\n }\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Component Actions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n @action close(): void {\r\n // No Operation - AditoolsDialog requires that a dialog should always have a close function\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n <:default>\\r\\n
\\r\\n
{{t this.heading}}
\\r\\n
\\r\\n
\\r\\n {{#each this.leftVideos as |video|}}\\r\\n \\r\\n {{t video.title}}\\r\\n \\r\\n {{/each}}\\r\\n
\\r\\n
\\r\\n {{#each this.rightVideos as |video|}}\\r\\n \\r\\n {{t video.title}}\\r\\n \\r\\n {{/each}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n <:footer as |closeDialog|>\\r\\n \\r\\n \\r\\n
\",{ moduleName: \"filter-wizard/components/dialogs/video.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './video.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { assert } from '@ember/debug';\r\nimport { isNone } from '@ember/utils';\r\n\r\n///////////////////////////////////////////////////////////////////////////////\r\n// aditools-video-dialog - display available videos in two columns //\r\n///////////////////////////////////////////////////////////////////////////////\r\n\r\ninterface VideoDialogArgs {\r\n videoIds: string[]; // The relative translation IDs of each video\r\n translationRoot: string; // The root translation string for all videos\r\n translationParms: { [parmName: string]: string }; // Hash of parms\r\n close: () => void; // Action to perform when closing the dialog\r\n}\r\nexport default class DialogVideo extends Component {\r\n ///////////////////////////////////////////////////////////////////////////\r\n // Instance properties //\r\n ///////////////////////////////////////////////////////////////////////////\r\n title!: string; // The translation ID of the dialog title\r\n heading!: string; // The translation ID of the dialog heading\r\n\r\n ///////////////////////////////////////////////////////////////////////////\r\n // Initialization //\r\n ///////////////////////////////////////////////////////////////////////////\r\n constructor(owner: unknown, args: VideoDialogArgs) {\r\n super(owner, args);\r\n // Template parameter validation\r\n assert('`videoIds` is required', !isNone(this.args.videoIds));\r\n assert('`translationRoot` is required', !isNone(this.args.translationRoot));\r\n assert('`translationParms is required', !isNone(this.args.translationParms));\r\n assert('`close` is required', !isNone(this.args.close));\r\n\r\n //Instance property initialization\r\n this.title = `${this.args.translationRoot}.title`;\r\n this.heading = `${this.args.translationRoot}.heading`;\r\n }\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed Properties //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n get leftVideos(): { title: string; url: string }[] {\r\n const halfmark = Math.round(this.args.videoIds.length / 2);\r\n const result = [];\r\n for (let i = 0; i < halfmark; i++) {\r\n result.push({\r\n title: `${this.args.translationRoot}.${this.args.videoIds[i]}.title`,\r\n url: `${this.args.translationRoot}.${this.args.videoIds[i]}.url`,\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n get rightVideos(): { title: string; url: string }[] {\r\n const halfmark = Math.round(this.args.videoIds.length / 2);\r\n const result = [];\r\n for (let i = halfmark; i < this.args.videoIds.length; i++) {\r\n result.push({\r\n title: `${this.args.translationRoot}.${this.args.videoIds[i]}.title`,\r\n url: `${this.args.translationRoot}.${this.args.videoIds[i]}.url`,\r\n });\r\n }\r\n return result;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
{{this.contextText}}
\\r\\n\",{ moduleName: \"filter-wizard/components/display-context.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './display-context.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { camelize } from '@ember/string';\r\nimport { inject as service } from '@ember/service';\r\nimport * as ContextUtils from '../utils/context';\r\nimport type Results from 'filter-wizard/models/results/results';\r\nimport type IntlService from 'ember-intl/services/intl';\r\n\r\ninterface DisplayContextArgs {\r\n tab: string;\r\n model: Results;\r\n}\r\n\r\ntype ContextFunctionType =\r\n | '_filterTypeContext'\r\n | '_specificationsContext'\r\n | '_componentsContext'\r\n | '_tolerancesContext'\r\n | '_nextStepsContext';\r\n\r\nexport default class DisplayContext extends Component {\r\n @service declare intl: IntlService;\r\n\r\n get contextText(): string {\r\n return this[('_' + camelize(this.args.tab) + 'Context') as ContextFunctionType](this.args.model);\r\n }\r\n\r\n _filterTypeContext(): string {\r\n return ContextUtils.filterSummary(null, this.intl);\r\n }\r\n _specificationsContext(model: Results): string {\r\n return ContextUtils.filterSummary(model.filter, this.intl);\r\n }\r\n _componentsContext(model: Results): string {\r\n return ContextUtils.specificationsSummary(model.specifications, this.intl);\r\n }\r\n _tolerancesContext(model: Results): string {\r\n return ContextUtils.componentsSummary(model.components, this.intl);\r\n }\r\n _nextStepsContext(model: Results): string {\r\n return ContextUtils.tolerancesSummary(model.tolerances, this.intl);\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"filter-wizard/components/field-input-text.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './field-input-text.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport { validateCharacterInput, validateFieldInput } from '../utils/validation';\r\nimport * as Format from '../utils/format';\r\nimport { tracked } from '@glimmer/tracking';\r\n\r\ninterface FieldInputTextArgs {\r\n isValid: string;\r\n fieldType: string;\r\n fieldId: string;\r\n formatString: string[];\r\n onInputChanged: (arg0: { fieldId: string; fieldValue: string; status: boolean }) => void;\r\n}\r\n\r\nexport default class FieldInputText extends Component {\r\n @tracked charValid = true;\r\n @tracked fieldValid = true;\r\n\r\n get invalid(): boolean {\r\n return !this.args.isValid || !this.charValid;\r\n }\r\n\r\n // This function validates the character input during key up event.\r\n validateCharValue(value: string): void {\r\n this.charValid = validateCharacterInput(value.toString(), this.args.fieldType);\r\n }\r\n\r\n // Event Handler Function when the contents of the Textbox have changed, usually via Enter or Blur\r\n @action onValueChanged(event: { target: { value: string } }): void {\r\n let value = event.target.value;\r\n this.fieldValid = validateFieldInput(value, this.args.fieldType);\r\n if (this.fieldValid) {\r\n // Need to canonicalize\r\n value = Format.formatFieldValue(value, this.args.fieldType, this.args.formatString);\r\n event.target.value = value;\r\n this.charValid = true;\r\n }\r\n // Send Action to Parent Component (if provided)\r\n if (this.args.onInputChanged) {\r\n this.args.onInputChanged({ fieldId: this.args.fieldId, fieldValue: value, status: this.fieldValid });\r\n }\r\n }\r\n\r\n // Event Handler for Key Up\r\n // Input: event - object passed when a keyup event occurs\r\n @action onKeyUp(event: { key: string; ctrlKey: boolean; altKey: boolean; target: { value: string } }): void {\r\n // There are a number of events that we need to check up here\r\n // 1. Regular Key Strokes\r\n // 2. When the user presses Backspace\r\n // 3. When the user presses Delete\r\n // 4. Paste Event (Ctrl + V)\r\n // 5. Cut Event (Ctrl + X)\r\n // 6. Redo Event (Ctrl + Y)\r\n // 7. Undo Event (Ctrl + Z)\r\n const key = event.key.toUpperCase();\r\n const isCtrlPressed = event.ctrlKey;\r\n const isAltPressed = event.altKey;\r\n const value = event.target.value;\r\n if (key.length > 1) {\r\n switch (key) {\r\n case 'BACKSPACE':\r\n case 'DELETE':\r\n // Backspace or Delete\r\n if (value.length > 0) {\r\n this.validateCharValue(value);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n if (isCtrlPressed) {\r\n switch (key) {\r\n case 'V': // Paste Event\r\n case 'X': // Cut Event\r\n case 'Y': // Redo Event\r\n case 'Z': // Undo Event\r\n if (value.length > 0) {\r\n this.validateCharValue(value);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else if (isAltPressed) {\r\n switch (key) {\r\n default:\r\n // Currently we will do nothing\r\n break;\r\n }\r\n } else {\r\n // Regular Key Strokes\r\n this.validateCharValue(value);\r\n }\r\n }\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n {{t \\\"panel.view\\\"}}\\r\\n \\r\\n {{t (concat \\\"figures.\\\" item.name \\\".title\\\")}}\\r\\n \\r\\n
\\r\\n
\\r\\n {{#if this.hasErrors}}\\r\\n \\r\\n {{else}}\\r\\n {{#let (component @choice.figure) as |Figure| }}\\r\\n
\\r\\n {{#if @choice.annotation}}\\r\\n {{#let (component @choice.annotation) as |Annotation| }}\\r\\n \\r\\n {{/let}}\\r\\n {{/if}}\\r\\n
\\r\\n {{/let}}\\r\\n {{/if}}\\r\\n
\\r\\n
\",{ moduleName: \"filter-wizard/components/figures-subpanel.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './figures-subpanel.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport type Results from 'filter-wizard/models/results/results';\r\n\r\ninterface FiguresSubmodelArgs {\r\n model: ResultsModel;\r\n errors: string[];\r\n choice: { source: string };\r\n}\r\ntype ResultsModel = { [key: string]: Results | string[]; errors: string[] };\r\n\r\nexport default class FiguresSubmodel extends Component {\r\n @tracked figureWidth = 500;\r\n @tracked figureHeight = 300;\r\n @tracked displayFigureElement: { getBoundingClientRect: () => { [key: string]: number } } | null = null;\r\n\r\n get hasErrors(): boolean {\r\n const errors = this.args.errors;\r\n const modelErrors = this.args.model.errors;\r\n return (errors && errors.length > 0) || (modelErrors && modelErrors.length > 0);\r\n }\r\n\r\n get figureModel(): ResultsModel | Results {\r\n const source = this.args.choice.source;\r\n if (source && this.args.model[source]) {\r\n return this.args.model[source] as Results;\r\n } else {\r\n return this.args.model;\r\n }\r\n }\r\n get displayFigureWidth(): number {\r\n return this.figureWidth - 20;\r\n }\r\n get displayFigureHeight(): number {\r\n return this.figureHeight - 20;\r\n }\r\n\r\n @action resizeListener(/*event*/): void {\r\n if (this.displayFigureElement) {\r\n const rect = this.displayFigureElement.getBoundingClientRect();\r\n if (rect['width'] && rect['height']) {\r\n this.figureWidth = rect['width'];\r\n this.figureHeight = rect['height'];\r\n }\r\n }\r\n }\r\n\r\n @action insertedDisplayFigure(element: { getBoundingClientRect: () => { [key: string]: number } }): void {\r\n if (element) {\r\n this.displayFigureElement = element;\r\n this.resizeListener();\r\n window.addEventListener('resize', this.resizeListener);\r\n }\r\n }\r\n\r\n @action destroyingDisplayFigure(): void {\r\n window.removeEventListener('resize', this.resizeListener);\r\n this.displayFigureElement = null;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n
{{t \\\"figures.billOfMaterials.bom-text-italic\\\"}}
\\r\\n
{{t \\\"figures.billOfMaterials.bom-text\\\"}}
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{#each this.bomTable as |item| }}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{/each}}\\r\\n \\r\\n
{{t \\\"figures.billOfMaterials.bom-quantity\\\"}}{{t \\\"figures.billOfMaterials.bom-designator\\\"}}{{t \\\"figures.billOfMaterials.bom-value\\\"}}{{t \\\"figures.billOfMaterials.bom-package\\\"}}{{t \\\"figures.billOfMaterials.bom-material\\\"}}{{t \\\"figures.billOfMaterials.bom-tolerance\\\"}}
{{item.count}}{{item.designators}}\\r\\n {{#if item.prodURL}}\\r\\n {{item.value}}\\r\\n {{else}} \\r\\n {{item.value}}\\r\\n {{/if}}\\r\\n {{item.package}}{{item.material}}{{item.tolerance}}
\\r\\n
\\r\\n
\",{ moduleName: \"filter-wizard/components/figures/bom.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './bom.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type OpampService from '../../services/opamps';\r\n\r\ninterface BomFigureArgs {\r\n model: BillOfMaterials[];\r\n}\r\n\r\ntype BillOfMaterials = {\r\n count: number;\r\n designators: string;\r\n value: string;\r\n prodURL: string | null;\r\n package: string | null;\r\n material: string | null;\r\n tolerance: string;\r\n italicRow: boolean;\r\n};\r\n\r\nexport default class BomFigure extends Component {\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n @service declare intl: IntlService;\r\n @service declare opamps: OpampService;\r\n\r\n get bomTable(): BillOfMaterials[] {\r\n const returnTable = [];\r\n const table = this.args.model;\r\n if (table) {\r\n for (let i = 0; i < table.length; i++) {\r\n if (table[i]) {\r\n const item = table[i] as BillOfMaterials;\r\n const count = item.count,\r\n designators = item.designators,\r\n value = item.value,\r\n tolerance = item.tolerance,\r\n italicRow = item.italicRow;\r\n let prodURL = item.prodURL,\r\n pkg = item.package,\r\n material = item.material;\r\n\r\n // Build Product URL Based on App Origin (https://www.analog.com/{locale}/{part})\r\n if (prodURL !== null && prodURL.includes('{{homeURL}}')) {\r\n prodURL = prodURL.replace('{{homeURL}}', `${this.siteconfig['SiteUrl']}/${this.siteconfig.AdiLocale}`);\r\n }\r\n // Change Package Details to Conform to Locale Strings on Extra Parts\r\n if (pkg !== null) {\r\n if (pkg.includes('{{header}}')) {\r\n pkg = pkg.replace(\r\n '{{header}}',\r\n this.intl.t('figures.billOfMaterials.extra-components.header').toString(),\r\n );\r\n } else if (pkg.includes('{{socket}}')) {\r\n pkg = pkg.replace(\r\n '{{socket}}',\r\n this.intl.t('figures.billOfMaterials.extra-components.socket').toString(),\r\n );\r\n } else if (pkg.includes('{{jumper}}')) {\r\n pkg = pkg.replace(\r\n '{{jumper}}',\r\n this.intl.t('figures.billOfMaterials.extra-components.jumper').toString(),\r\n );\r\n } else if (pkg.includes('{{test-pin}}')) {\r\n pkg = pkg.replace(\r\n '{{test-pin}}',\r\n this.intl.t('figures.billOfMaterials.extra-components.test-pin').toString(),\r\n );\r\n } else if (pkg.includes('{{sma-jack}}')) {\r\n pkg = pkg.replace(\r\n '{{sma-jack}}',\r\n this.intl.t('figures.billOfMaterials.extra-components.sma-jack').toString(),\r\n );\r\n } else if (pkg.includes('{{sma-male}}')) {\r\n pkg = pkg.replace(\r\n '{{sma-male}}',\r\n this.intl.t('figures.billOfMaterials.extra-components.sma-male').toString(),\r\n );\r\n }\r\n }\r\n // Check for Materials if it needs translation\r\n if (material !== null) {\r\n if (material.includes('{{tantalum}}')) {\r\n material = material.replace(\r\n '{{tantalum}}',\r\n this.intl.t('figures.billOfMaterials.materials.tantalum').toString(),\r\n );\r\n }\r\n }\r\n // Push item to array\r\n returnTable.push({\r\n count: count,\r\n designators: designators,\r\n value: value,\r\n prodURL: prodURL,\r\n package: pkg,\r\n material: material,\r\n tolerance: tolerance,\r\n italicRow: italicRow,\r\n });\r\n }\r\n }\r\n }\r\n return returnTable;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n {{#each this.errorMessages as |message| }}\\r\\n

\\r\\n {{message}}\\r\\n

\\r\\n {{/each}}\\r\\n\\r\\n {{#each this.resultErrorMessages as |message| }}\\r\\n

\\r\\n {{message}}\\r\\n

\\r\\n {{/each}}\\r\\n
\",{ moduleName: \"filter-wizard/components/figures/errors.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './errors.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport type IntlService from 'ember-intl/services/intl';\r\n\r\ninterface ErrorsFigureArgs {\r\n errors: { id: string; parameters: Parameters }[];\r\n resultErrors: { id: string; parameters: Parameters }[];\r\n}\r\n\r\ntype Parameters = {\r\n [key in 'minimum' | 'maximum' | 'value' | 'unit']: string;\r\n};\r\n\r\nexport default class ErrorsFigure extends Component {\r\n @service declare intl: IntlService;\r\n\r\n get errorMessages(): string[] {\r\n return !this.args.errors\r\n ? []\r\n : this.args.errors.map((error) => {\r\n return this.intl.t(`figures.errors.${error.id}`, error.parameters);\r\n });\r\n }\r\n get resultErrorMessages(): string[] {\r\n return !this.args.resultErrors\r\n ? []\r\n : this.args.resultErrors.map((error) => {\r\n return this.intl.t(`figures.errors.${error.id}`, error.parameters);\r\n });\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n {{yield geometry}}\\r\\n\\r\\n\",{ moduleName: \"filter-wizard/components/figures/graph.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './graph.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport { GraphOptions } from '@ebiz/ember-aditools-graph';\r\nimport type IntlService from 'ember-intl/services/intl';\r\n\r\ninterface GraphFigureArgs {\r\n model: GraphModel;\r\n choice: ChoiceDetails;\r\n options: GraphOptions;\r\n displayWidth: number;\r\n displayHeight: number;\r\n updateInput?: (inputType: string, modeldata: string) => void;\r\n showHelp?: (title: string, message: string, msgparams?: Record) => void;\r\n}\r\n\r\nexport type GraphModel = {\r\n data: Array[];\r\n limits: { [key in 'xmin' | 'xmax' | 'ymin' | 'ymax']: number };\r\n};\r\n\r\nexport type ChoiceDetails = {\r\n name: string;\r\n options: GraphOptions;\r\n};\r\n\r\n// Changes to the options getter should also be applied to the adjustedOptions getter on the noise figure\r\nexport default class GraphFigure extends Component {\r\n @service declare intl: IntlService;\r\n\r\n // Tweak options so that a -1 on yticks becomes 9 for graphs with narrow ranges and 1 for broad ranges.\r\n get options(): GraphOptions {\r\n let yticks = this.args.options.yticks;\r\n let xticks = this.args.options.xticks;\r\n if (this.args.options.yscale === 'log' && this.args.options.yticks === -1) {\r\n const breadth = Math.log10(this.args.model.limits.ymax) - Math.log10(this.args.model.limits.ymin);\r\n //console.log(`Decades of y for ${this.args.choice.name}: `, breadth);\r\n yticks = breadth > 3.5 ? 1 : breadth > 1.5 ? 3 : 9;\r\n }\r\n if (this.args.options.xscale === 'log' && this.args.options.xticks === -1) {\r\n const breadth = Math.log10(this.args.model.limits.xmax) - Math.log10(this.args.model.limits.xmin);\r\n //console.log(`Decades of x for ${this.args.choice.name}: `, breadth);\r\n xticks = breadth > 3.5 ? 1 : breadth > 1.5 ? 3 : 9;\r\n }\r\n // We can't afford to overwrite anything in our original\r\n const result = Object.assign({}, this.args.options); //clone input\r\n result.yticks = yticks; //tweak clone\r\n result.xticks = xticks;\r\n\r\n // Add hover section if available\r\n result.hover = this.args.options.hover;\r\n if (result.hover && this.args.options) {\r\n result.xUnit = this.args.options.xUnit ? this.intl.t(this.args.options.xUnit) : undefined;\r\n result.yUnit = this.args.options.yUnit ? this.intl.t(this.args.options.yUnit) : undefined;\r\n if (this.args.options.hoverTitles) {\r\n const headerLabel = this.args.options.hoverTitles.headerLabel\r\n ? this.intl.t(this.args.options.hoverTitles.headerLabel)\r\n : undefined;\r\n const lineLabels = [];\r\n for (const lineLabel of this.args.options.hoverTitles.lineLabels) {\r\n lineLabels.push(this.intl.t(lineLabel));\r\n }\r\n if (headerLabel && lineLabels.length > 0) {\r\n result.hoverTitles = {\r\n headerLabel: headerLabel,\r\n lineLabels: lineLabels,\r\n };\r\n }\r\n }\r\n result.hoverWidthAdjust = this.hoverWidth;\r\n }\r\n\r\n return result; //ship it\r\n }\r\n\r\n get hoverWidth(): number | undefined {\r\n switch (this.intl.primaryLocale) {\r\n case 'en-us':\r\n case 'ru-ru':\r\n return 1.05;\r\n case 'zh-cn':\r\n return 1.3;\r\n case 'ja-jp':\r\n return 1.72;\r\n default:\r\n return;\r\n }\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n
\\r\\n
{{t \\\"figures.noise.graph-title\\\"}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{t \\\"figures.noise.noise-referred-filter-output-1\\\"}}\\r\\n {{t \\\"figures.noise.noise-referred-filter-output-2\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
{{t \\\"figures.noise.rms-peak-to-peak\\\"}}
\\r\\n
\\r\\n \\r\\n \\r\\n {{t \\\"units.hz\\\"}}\\r\\n \\r\\n {{#unless this.isADCBandwidthValid}}\\r\\n
\\r\\n {{#each this.errorMessages as |message| }}\\r\\n \\r\\n {{message}}\\r\\n \\r\\n
\\r\\n {{/each}} \\r\\n
\\r\\n {{/unless}}\\r\\n
\\r\\n
{{t \\\"figures.noise.rms-title\\\"}}
\\r\\n
\\r\\n {{#if this.hasToleranceData}}\\r\\n {{t \\\"figures.noise.nominal-label\\\"}}: \\r\\n {{/if}}\\r\\n {{#if this.isADCBandwidthValid}} \\r\\n {{this.rms1}} {{t \\\"units.vrms\\\"}}\\r\\n {{/if}}\\r\\n
\\r\\n {{#if this.hasToleranceData}}\\r\\n {{t \\\"figures.noise.worst-case-label\\\"}}: \\r\\n {{#if this.isADCBandwidthValid}} \\r\\n {{this.rms2}} {{t \\\"units.vrms\\\"}}\\r\\n {{/if}}\\r\\n {{/if}} \\r\\n
\\r\\n
\\r\\n
{{t \\\"figures.noise.peak-to-peak-title\\\"}}
\\r\\n
\\r\\n {{#if this.hasToleranceData}}\\r\\n {{t \\\"figures.noise.nominal-label\\\"}}: \\r\\n {{/if}}\\r\\n {{#if this.isADCBandwidthValid}} \\r\\n {{this.peakToPeakNoise1}} {{t \\\"units.vpp\\\"}}\\r\\n {{/if}}\\r\\n
\\r\\n {{#if this.hasToleranceData}}\\r\\n {{t \\\"figures.noise.worst-case-label\\\"}}: \\r\\n {{#if this.isADCBandwidthValid}} \\r\\n {{this.peakToPeakNoise2}} {{t \\\"units.vpp\\\"}}\\r\\n {{/if}}\\r\\n {{/if}}\\r\\n
\\r\\n
\\r\\n
\\r\\n {{t \\\"figures.noise.adc-table-title\\\"}}\\r\\n \\r\\n {{#if this.hasToleranceData}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{#if this.isADCBandwidthValid}}\\r\\n {{#each @model.adcTableData as |item index|}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{/each}} \\r\\n {{/if}}\\r\\n \\r\\n
{{t \\\"figures.noise.adc-range\\\"}}{{t \\\"figures.noise.enob-comp-tol\\\"}}
{{t \\\"figures.noise.enob-nominal\\\"}}{{t \\\"figures.noise.enob-worst\\\"}}
\\r\\n {{item.adc}}{{t \\\"units.volt\\\"}}\\r\\n \\r\\n {{format-value value=item.nominalENOB fieldType=\\\"NUMERICDECIMAL\\\" param=\\\"1d\\\"}}\\r\\n \\r\\n {{format-value value=item.worstCaseENOB fieldType=\\\"NUMERICDECIMAL\\\" param=\\\"1d\\\"}}\\r\\n
\\r\\n {{else}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{#if this.isADCBandwidthValid}}\\r\\n {{#each @model.adcTableData as |item index|}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{/each}} \\r\\n {{/if}}\\r\\n \\r\\n
{{t \\\"figures.noise.adc-input-range\\\"}}{{t \\\"figures.noise.enob-comp-sel\\\"}}
\\r\\n {{item.adc}}{{t \\\"units.volt\\\"}}\\r\\n \\r\\n {{format-value value=item.nominalENOB fieldType=\\\"NUMERICDECIMAL\\\" param=\\\"1d\\\"}}\\r\\n
\\r\\n {{/if}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\",{ moduleName: \"filter-wizard/components/figures/noise.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './noise.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport { inject as service } from '@ember/service';\r\nimport { userEntryToNumber } from '@ebiz/pretty-num';\r\nimport FilterConstants from '../../filter-constants';\r\nimport { formatFieldValue } from '../../utils/format';\r\nimport ErrorTracker from '../../utils/error-tracker';\r\nimport IntlService from 'ember-intl/services/intl';\r\nimport type NoiseResult from '../../models/results/sub-results/noise';\r\nimport type NoiseAdvisor from '../../models/advisors/noise';\r\nimport type NoiseInput from '../../models/inputs/noise';\r\nimport { GraphOptions } from '@ebiz/ember-aditools-graph';\r\nimport { tracked } from '@glimmer/tracking';\r\n\r\ninterface NoiseFigureArgs {\r\n model: NoiseResult;\r\n options: GraphOptions;\r\n displayWidth: number;\r\n displayHeight: number;\r\n figureInput: NoiseInput;\r\n advisor: NoiseAdvisor;\r\n updateInput: (inputType: string, modeldata: NoiseInput) => void;\r\n}\r\n\r\ntype Error = {\r\n tab: string | null;\r\n fields: Array;\r\n id: string;\r\n parameters: { [key: string]: string };\r\n};\r\n\r\ntype Parameter = { fieldId: string; fieldValue: string; status: boolean };\r\n\r\ntype FieldType = { adcBandwidth: string };\r\n\r\nexport default class NoiseFigure extends Component {\r\n // tagName = '';\r\n\r\n ///////////////////////////////////////////////////////////////////////////\r\n // Template parameters //\r\n ///////////////////////////////////////////////////////////////////////////\r\n\r\n // model = null; // Result model from which to draw the figure\r\n // xTitleKey = null; // Translation key for horizontal axis (for graphs)\r\n // yTitleKey = null; // Translation key for vertical axis (for graphs)\r\n // options = null; // Figure display options\r\n // figureInput = null; // Figure Input\r\n // workingInput = null; // Working model for the inputs\r\n\r\n // adcBandwidthHelpType = null;\r\n // adcTableHelpType = null;\r\n\r\n // errorList = null;\r\n // errorTracker = null;\r\n @service declare intl: IntlService;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Initialization //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // init() {\r\n // super.init();\r\n // set(this, 'workingInput', this.advisor.clone(this.figureInput));\r\n // set(this, 'fieldTypes', this.initFieldTypes());\r\n // set(\r\n // this,\r\n // 'errorTracker',\r\n // ErrorTracker.create({ tabName: FilterConstants.figureName.noise, advisor: this.advisor })\r\n // );\r\n // set(this, 'errorList', []);\r\n // }\r\n @tracked errorList: Array = [];\r\n errorTracker = new ErrorTracker(FilterConstants.figureName.noise, this.args.advisor);\r\n workingInput: NoiseInput = this.args.advisor.clone(this.args.figureInput);\r\n fieldTypes: FieldType = this.initFieldTypes();\r\n\r\n initFieldTypes(): FieldType {\r\n return { adcBandwidth: FilterConstants.fieldTypes.Engineering };\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed Properties //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Changes to the adjustedOptions getter should also be applied to the options getter on the graph figure\r\n\r\n get adjustedOptions(): GraphOptions {\r\n let yticks = this.args.options.yticks;\r\n let xticks = this.args.options.xticks;\r\n\r\n if (this.args.options.yscale === 'log' && this.args.options.yticks === -1) {\r\n const breadth =\r\n Math.log10(this.args.model.graphData.limits.ymax) - Math.log10(this.args.model.graphData.limits.ymin);\r\n //console.log(`Decades for ${this.choice.name}: `, breadth);\r\n yticks = breadth > 2 ? 1 : breadth > 1.5 ? 3 : 9;\r\n } // We can't afford to overwrite anything in our original\r\n if (this.args.options.xscale === 'log' && this.args.options.xticks === -1) {\r\n const breadth =\r\n Math.log10(this.args.model.graphData.limits.xmax) - Math.log10(this.args.model.graphData.limits.xmin);\r\n //console.log(`Decades of x for ${this.args.choice.name}: `, breadth);\r\n xticks = breadth > 3.5 ? 1 : breadth > 1.5 ? 3 : 9;\r\n }\r\n\r\n const result = Object.assign({}, this.args.options); //clone input\r\n result.yticks = yticks; //tweak clone\r\n result.xticks = xticks;\r\n\r\n // Add hover section if available\r\n result.hover = this.args.options.hover;\r\n if (result.hover && this.args.options) {\r\n result.xUnit = this.args.options.xUnit ? this.intl.t(this.args.options.xUnit) : undefined;\r\n result.yUnit = this.args.options.yUnit ? this.intl.t(this.args.options.yUnit) : undefined;\r\n if (this.args.options.hoverTitles) {\r\n const headerLabel = this.args.options.hoverTitles.headerLabel\r\n ? this.intl.t(this.args.options.hoverTitles.headerLabel)\r\n : undefined;\r\n const lineLabels = [];\r\n for (const lineLabel of this.args.options.hoverTitles.lineLabels) {\r\n lineLabels.push(this.intl.t(lineLabel));\r\n }\r\n if (headerLabel && lineLabels.length > 0) {\r\n result.hoverTitles = {\r\n headerLabel: headerLabel,\r\n lineLabels: lineLabels,\r\n };\r\n }\r\n }\r\n result.hoverWidthAdjust = this.hoverWidth;\r\n }\r\n\r\n return result; //ship it\r\n }\r\n\r\n get hasToleranceData(): boolean {\r\n const value1 = this.args.model.peakToPeakNoise.worstCaseValue;\r\n const value2 = this.args.model.rms.worstCaseValue;\r\n return value1 !== null && value2 !== null;\r\n }\r\n\r\n get rms1(): string {\r\n const value = this.args.model.rms.nominalValue;\r\n return formatFieldValue(value, FilterConstants.fieldTypes.Engineering, '3s');\r\n }\r\n\r\n get rms2(): string {\r\n const value = this.args.model.rms.worstCaseValue;\r\n return formatFieldValue(value, FilterConstants.fieldTypes.Engineering, '3s');\r\n }\r\n\r\n get peakToPeakNoise1(): string {\r\n const value = this.args.model.peakToPeakNoise.nominalValue;\r\n return formatFieldValue(value, FilterConstants.fieldTypes.Engineering, '3s');\r\n }\r\n\r\n get peakToPeakNoise2(): string {\r\n const value = this.args.model.peakToPeakNoise.worstCaseValue;\r\n return formatFieldValue(value, FilterConstants.fieldTypes.Engineering, '3s');\r\n }\r\n\r\n get isADCBandwidthValid(): boolean {\r\n return !this.isInErrorList('adcBandwidth');\r\n }\r\n\r\n get errorMessages(): string[] {\r\n return this.errorList.map((error) => {\r\n return this.intl.t(`figures.errors.${error.id}`, error.parameters);\r\n });\r\n }\r\n\r\n get adcTableHelp(): { tooltip: string; title: string; message: string } {\r\n let result = {\r\n tooltip: 'help.comp-select.noise.adc-table.tooltip',\r\n title: 'help.comp-select.noise.adc-table.title',\r\n message: 'help.comp-select.noise.adc-table.message',\r\n };\r\n const hasToleranceData = this.hasToleranceData;\r\n if (hasToleranceData) {\r\n result = {\r\n tooltip: 'help.comp-tolerance.noise.adc-table.tooltip',\r\n title: 'help.comp-tolerance.noise.adc-table.title',\r\n message: 'help.comp-tolerance.noise.adc-table.message',\r\n };\r\n }\r\n return result;\r\n }\r\n get graphHeight(): number {\r\n return this.args.displayHeight - 130;\r\n }\r\n get graphWidth(): number {\r\n return Math.max(this.args.displayWidth - 275, 350);\r\n }\r\n\r\n get hoverWidth(): number | undefined {\r\n switch (this.intl.primaryLocale) {\r\n case 'en-us':\r\n case 'ru-ru':\r\n return 1.05;\r\n case 'zh-cn':\r\n return 1.38;\r\n case 'ja-jp':\r\n return 1.72;\r\n default:\r\n return;\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Utility Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Function that checks if the field has a parse error, value error or a cross-value error\r\n // Inputs: fieldName - the field to be checked in the errorList list\r\n // Returns: true if the fieldName is included in the list, otherwise false\r\n isInErrorList(fieldName: string): boolean {\r\n return this.errorList.some((error) => {\r\n return error.fields.includes(fieldName);\r\n });\r\n }\r\n\r\n // Function that does the following:\r\n validateAndUpdateModel(): void {\r\n const errors = this.errorTracker.validate(this.workingInput);\r\n\r\n // Update Properties for Handlebar use\r\n // Have to show error on the figure, not pass on to controller, or you can't see the figure to fix it\r\n // set(this, 'errorList', errors);\r\n this.errorList = errors;\r\n\r\n if (errors.length === 0) {\r\n this.args.updateInput('noise', this.args.advisor.clone(this.workingInput));\r\n }\r\n }\r\n\r\n // Function that sets the field input text to the workingModel\r\n updateModelInput(param: Parameter): void {\r\n let fieldValue = null;\r\n try {\r\n fieldValue = userEntryToNumber(param.fieldValue);\r\n } catch (e) {\r\n fieldValue;\r\n }\r\n // Get Raw Value after input has been rounded to the correct display value (For Number Field Types Only)\r\n const rawValue = //fieldValue\r\n this.fieldTypes[param.fieldId as keyof FieldType] === FilterConstants.fieldTypes.Numeric ||\r\n this.fieldTypes[param.fieldId as keyof FieldType] === FilterConstants.fieldTypes.NumericDecimal ||\r\n this.fieldTypes[param.fieldId as keyof FieldType] === FilterConstants.fieldTypes.Engineering\r\n ? fieldValue\r\n : param.fieldValue;\r\n\r\n this.workingInput[param.fieldId as keyof NoiseInput] = rawValue;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Component Actions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n @action adcBandwidthChanged(param: Parameter): void {\r\n this.errorTracker.updateUnparseableList(param);\r\n this.updateModelInput(param);\r\n this.validateAndUpdateModel();\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
{{t \\\"figures.power.header-text\\\"}}
\\r\\n
\\r\\n
\\r\\n {{#each @model.detailsOfPower as |item index|}}\\r\\n
\\r\\n
\\r\\n
{{item.stageLetter}}
\\r\\n
\\r\\n
 
\\r\\n
{{t (concat \\\"figures.power.order-with.order\\\" item.order)}}
\\r\\n
{{item.opAmp}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n {{format-value \\r\\n value=item.inputSupplyCurrent \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.ampere\\\"}}\\r\\n {{t \\\"fragments.times\\\"}} \\r\\n {{format-value \\r\\n value=item.powerSupply \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{t \\\"fragments.eq\\\"}} \\r\\n {{format-value value=item.power fieldType=\\\"ENGINEERING\\\" param=\\\"3s\\\"}}{{t \\\"units.watt\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{/each}}\\r\\n
\\r\\n
\\r\\n {{#if @model.needReferenceStage}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{t \\\"fragments.r\\\"}}
\\r\\n
\\r\\n
 
\\r\\n
{{t \\\"figures.power.reference-stage-text\\\"}}
\\r\\n
{{t \\\"figures.power.reference-stage-part-with\\\"}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n {{format-value \\r\\n value=@model.referenceStage.inputSupplyCurrent \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.ampere\\\"}}\\r\\n {{t \\\"fragments.times\\\"}} \\r\\n {{format-value \\r\\n value=@model.referenceStage.powerSupply \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.plus\\\"}}\\r\\n
\\r\\n {{format-value \\r\\n value=@model.referenceStage.resistorCurrent \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.ampere\\\"}}\\r\\n {{t \\\"fragments.times\\\"}} \\r\\n {{format-value \\r\\n value=@model.referenceStage.powerSupply \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n = \\r\\n {{format-value \\r\\n value=@model.referenceStage.power \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.watt\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{/if}}\\r\\n
\\r\\n
{{t \\\"figures.power.total-power\\\"}}
\\r\\n
\\r\\n
\\r\\n \\r\\n {{format-value \\r\\n value=@model.totalSupplyCurrents \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.ampere\\\"}}\\r\\n {{t \\\"fragments.times\\\"}} \\r\\n {{format-value \\r\\n value=@model.powerSupply \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{t \\\"fragments.eq\\\"}}\\r\\n {{format-value \\r\\n value=@model.totalPowerConsumption \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.watt\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\",{ moduleName: \"filter-wizard/components/figures/power.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './power.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport type PowerResults from '../../models/results/sub-results/power';\r\n\r\ninterface PowerFigureArgs {\r\n model: PowerResults;\r\n showHelp?: (title: string, message: string, msgparams?: Record) => void;\r\n}\r\n\r\nexport default class PowerFigure extends Component {\r\n @action showPowerHelp(): void {\r\n const title = 'help.common.power.title';\r\n const message = 'help.common.power.message';\r\n if (this.args.showHelp) {\r\n this.args.showHelp(title, message);\r\n }\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{#each this.actualStages as |item index|}}\\r\\n \\r\\n {{component item.name\\r\\n index=index\\r\\n circuitId=item.circuitId\\r\\n circuitValues=item.values\\r\\n details=item.details\\r\\n node=item.node\\r\\n stageLetter=item.stage.stageLetter\\r\\n designationR=item.designationR\\r\\n designationC=item.designationC\\r\\n xTranslate=stageitem.xTranslate\\r\\n yTranslate=stageitem.yTranslate\\r\\n c1Item=stageitem.c1Item\\r\\n c2Item=stageitem.c2Item\\r\\n c5Item=stageitem.c5Item\\r\\n r1Item=stageitem.r1Item\\r\\n }}\\r\\n \\r\\n {{/each}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{#if this.needReferenceStage.display}}\\r\\n {{#let (component this.needReferenceStage.circuitName) as |ReferenceStageCircuit| \\r\\n }}\\r\\n \\r\\n {{/let}}\\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{#if this.needBypassCapacitors.display}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{#if this.needOpAmpSpares.display}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\",{ moduleName: \"filter-wizard/components/figures/schematic.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './schematic.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { dasherize } from '@ember/string';\r\nimport { formatFieldValue } from '../../utils/format';\r\nimport FilterConstants from '../../filter-constants';\r\nimport { isNearInfinity } from '../../utils/common';\r\nimport { getOpAmpReferenceDesignator } from '../../utils/materials';\r\nimport type ComponentsInput from '../../models/inputs/component-selection';\r\nimport type TolerancesInput from '../../models/inputs/tolerance';\r\nimport type DetailsOfCircuit from '../../models/results/sub-results/circuit-details';\r\n\r\ninterface SchematicFigureArgs {\r\n model: SchematicModel;\r\n showHelp?: (title: string, message: string, msgparams?: Record) => void;\r\n}\r\n\r\ntype SchematicModel = {\r\n detailsOfCircuits: DetailsOfCircuit[];\r\n detailsOfStages: DetailsOfStage[];\r\n billOfMaterials: { designators: string; value: string; tolerance: string }[];\r\n needReferenceStage: boolean;\r\n componentsInput: ComponentsInput;\r\n toleranceInput: TolerancesInput;\r\n};\r\n\r\nexport type DetailsOfStage = {\r\n opAmp: string;\r\n opAmpSource: { getOpAmp: (opAmp: string) => OpAmp };\r\n stageLetter: string;\r\n};\r\n\r\ntype OpAmp = {\r\n numberChannels: number;\r\n packageCode: string;\r\n};\r\n\r\ntype CircuitConstants = {\r\n xTranslate: number;\r\n yTranslate: number;\r\n width: number;\r\n height: number;\r\n offset: number;\r\n};\r\n\r\ntype ActualStageResult = {\r\n name: string;\r\n circuitId: string;\r\n stage: DetailsOfStage;\r\n node: { [key in 'in' | 'out' | 'ref']: NodeDetail };\r\n details: StageDetails;\r\n geometry: { [key in 'xTranslate' | 'yTranslate' | 'width' | 'height']: number };\r\n values: DetailsOfCircuit;\r\n designationR: string;\r\n designationC: string;\r\n};\r\n\r\ntype NodeDetail = {\r\n showLine: boolean;\r\n showText: boolean;\r\n};\r\n\r\ntype StageDetails = {\r\n stageFilterType: string;\r\n stageImplementation: string;\r\n stageLetter: string;\r\n stageOrder: string | number;\r\n};\r\n\r\ntype NeedReferenceStage = {\r\n display: boolean;\r\n circuitName: string;\r\n};\r\n\r\ntype NeedBypassCapacitor = {\r\n display: boolean;\r\n bypassCapacitors: BypassCapacitor[];\r\n};\r\n\r\ntype NeedOpAmpSpare = {\r\n display: boolean;\r\n opAmpSpares: OpAmpSpare[];\r\n};\r\n\r\ntype BypassCapacitor = {\r\n item: string;\r\n value: string;\r\n tolerance: string;\r\n voltage: string;\r\n circuit: string;\r\n};\r\n\r\ntype OpAmpSpare = {\r\n channelDesignator: string;\r\n circuit: string;\r\n name: string;\r\n referenceDesignator: string;\r\n vsMinus: string;\r\n vsPlus: string;\r\n};\r\n\r\ntype ReferenceValues = {\r\n [key in 'v1' | 'v2' | 'c1' | 'c2' | 'c3' | 'c4' | 'r1' | 'r2' | 'r3' | 'r4' | 'opAmp']: ReferenceValueItem;\r\n};\r\n\r\ntype ReferenceValueItem = {\r\n name: string;\r\n value: string | number | null;\r\n url?: string | null;\r\n tolerance?: string | null;\r\n};\r\n\r\ntype BypassRef = {\r\n ref: string;\r\n voltage: string;\r\n circuit: string;\r\n};\r\n\r\ntype Bom = {\r\n designators: string;\r\n value: string;\r\n tolerance: string;\r\n};\r\n\r\ntype TantalumRef = {\r\n ref: string;\r\n voltage: string;\r\n circuit: string;\r\n};\r\n\r\nexport default class SchematicFigure extends Component {\r\n width = 700;\r\n height = 460;\r\n\r\n leftMargin = 0;\r\n topMargin = 0;\r\n rightMargin = 0;\r\n bottomMargin = 0;\r\n\r\n get outTxtPos(): number {\r\n const model = this.args.model;\r\n const circuitDetails = model.detailsOfCircuits;\r\n\r\n let value = 2.5;\r\n let x1 = 0;\r\n let x2 = 0;\r\n if (circuitDetails && circuitDetails.length > 0) {\r\n for (let i = 0; i < circuitDetails.length; i++) {\r\n if (circuitDetails[i]) {\r\n const dimensions = this.getCircuitConstants(\r\n this.getCircuitName(circuitDetails[i] as DetailsOfCircuit).toLowerCase(),\r\n );\r\n if (i === 0) {\r\n if (dimensions.offset < 0) {\r\n x1 = dimensions.offset;\r\n }\r\n x2 = x1 + dimensions.width;\r\n if (dimensions.offset < 0) {\r\n x2 += dimensions.offset * -1;\r\n }\r\n } else {\r\n x1 = x2;\r\n x2 = x1 + dimensions.width;\r\n }\r\n }\r\n }\r\n value = x2;\r\n }\r\n return value;\r\n }\r\n\r\n get actualStages(): ActualStageResult[] {\r\n let x1 = 0;\r\n let x2 = 0;\r\n const principalOffset = 0;\r\n const result = [];\r\n const subDirectory = 'circuits/';\r\n const model = this.args.model;\r\n const showReference = model.needReferenceStage;\r\n const circuitDetails = model.detailsOfCircuits;\r\n\r\n if (circuitDetails && circuitDetails.length > 0) {\r\n for (let i = 0; i < circuitDetails.length; i++) {\r\n if (circuitDetails[i]) {\r\n const circuitItem = circuitDetails[i] as DetailsOfCircuit,\r\n filterType = circuitItem.filter.name,\r\n implementation = circuitItem.implementation,\r\n stage = circuitItem.stage;\r\n\r\n let referenceDesignator = '',\r\n channelDesignator = '';\r\n\r\n if (this.displayExtraComponents) {\r\n const opAmpName = stage.opAmp;\r\n const opAmpData = stage.opAmpSource.getOpAmp(opAmpName);\r\n const opAmpChannels = opAmpData.numberChannels;\r\n const opAmpStageLetter = stage.stageLetter;\r\n\r\n referenceDesignator = getOpAmpReferenceDesignator(opAmpData.packageCode, opAmpChannels) + opAmpStageLetter;\r\n if (opAmpChannels > 1) {\r\n channelDesignator = ('1/' + opAmpChannels.toString()).toUpperCase();\r\n }\r\n }\r\n\r\n const nodeIn = i === 0 ? { showLine: false, showText: true } : { showLine: true, showText: false };\r\n const nodeOut =\r\n i === circuitDetails.length - 1 ? { showLine: false, showText: true } : { showLine: true, showText: false };\r\n const nodeRef = showReference ? { showLine: false, showText: true } : { showLine: true, showText: false };\r\n\r\n const circuitName = this.getCircuitName(circuitItem);\r\n const dimensions = this.getCircuitConstants(circuitName.toLowerCase());\r\n\r\n if (i === 0) {\r\n x1 = principalOffset;\r\n if (dimensions.offset < 0) x1 = dimensions.offset;\r\n x2 = x1 + dimensions.width;\r\n if (dimensions.offset < 0) x2 += dimensions.offset * -1;\r\n } else {\r\n x1 = x2;\r\n x2 = x1 + dimensions.width;\r\n }\r\n result.push({\r\n name: subDirectory + circuitName.toLowerCase(),\r\n circuitId: circuitName.toLowerCase() + '_' + i,\r\n stage: stage,\r\n node: {\r\n in: nodeIn,\r\n out: nodeOut,\r\n ref: nodeRef,\r\n },\r\n details: {\r\n stageLetter: circuitItem.stageLetter,\r\n stageOrder: circuitItem.order || '% order',\r\n stageFilterType: dasherize(filterType),\r\n stageImplementation: dasherize(this.getImplementation(implementation)),\r\n },\r\n geometry: {\r\n xTranslate: x1,\r\n yTranslate: dimensions.yTranslate,\r\n width: dimensions.width,\r\n height: dimensions.height,\r\n },\r\n values: circuitItem,\r\n designationR: referenceDesignator,\r\n designationC: channelDesignator,\r\n });\r\n }\r\n }\r\n }\r\n // if (result.length>0) {\r\n // result = this.useTrialData(circuitDetails[0]);\r\n // }\r\n return result;\r\n }\r\n\r\n get needReferenceStage(): NeedReferenceStage {\r\n return {\r\n display: this.args.model.needReferenceStage,\r\n circuitName: 'circuits/' + FilterConstants.fwCircuits.referenceCircuit,\r\n };\r\n }\r\n\r\n get displayExtraComponents(): boolean {\r\n const bom = this.args.model.billOfMaterials;\r\n return typeof bom !== 'undefined' && bom !== null && bom.length > 0;\r\n }\r\n\r\n get bypassCapacitors(): BypassCapacitor[] {\r\n const capacitorList = [];\r\n if (this.displayExtraComponents) {\r\n const bom = this.args.model.billOfMaterials;\r\n const stages = this.args.model.detailsOfStages;\r\n const vsPlus = this.args.model.componentsInput.vsPlus;\r\n const vsMinus = this.args.model.componentsInput.vsMinus;\r\n // Bypass Capacitors for Stages\r\n for (let i = 0; i < stages.length; i++) {\r\n const bypassRef = [];\r\n bypassRef.push({\r\n ref: FilterConstants.bypassCapacitorNames.c9,\r\n voltage: formatFieldValue(vsPlus, FilterConstants.fieldTypes.NumericDecimal, '3s') + 'V',\r\n circuit: FilterConstants.fwCircuits.bypassCapacitor,\r\n });\r\n bypassRef.push({\r\n ref: FilterConstants.bypassCapacitorNames.c0,\r\n voltage: formatFieldValue(vsMinus, FilterConstants.fieldTypes.NumericDecimal, '3s') + 'V',\r\n circuit: FilterConstants.fwCircuits.bypassCapacitor,\r\n });\r\n for (let j = 0; j < bypassRef.length; j++) {\r\n if (bypassRef[j] && stages[i]) {\r\n const bypassRefItem = bypassRef[j] as BypassRef,\r\n stagesItem = stages[i] as DetailsOfStage;\r\n\r\n const item = bypassRefItem.ref + stagesItem.stageLetter;\r\n const vsupply = bypassRefItem.voltage;\r\n const circuitName = bypassRefItem.circuit;\r\n for (let k = 0; k < bom.length; k++) {\r\n if (bom[k]) {\r\n const bomItem = bom[k] as Bom;\r\n const designators = bomItem.designators,\r\n value = bomItem.value,\r\n tolerance = bomItem.tolerance;\r\n if (designators.includes(item)) {\r\n capacitorList.push({\r\n item: item,\r\n value: value,\r\n tolerance: tolerance,\r\n voltage: vsupply,\r\n circuit: circuitName,\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Tantalum and C9M Bypass Reference Capacitors\r\n const tantalumRef = [];\r\n tantalumRef.push({\r\n ref: FilterConstants.tantalumCapacitorNames.c101m,\r\n voltage: formatFieldValue(vsPlus, FilterConstants.fieldTypes.NumericDecimal, '3s') + 'V',\r\n circuit: FilterConstants.fwCircuits.tantalumCapcacitorPositive,\r\n });\r\n tantalumRef.push({\r\n ref: FilterConstants.tantalumCapacitorNames.c100m,\r\n voltage: formatFieldValue(vsMinus, FilterConstants.fieldTypes.NumericDecimal, '3s') + 'V',\r\n circuit: FilterConstants.fwCircuits.tantalumCapcacitorNegative,\r\n });\r\n tantalumRef.push({\r\n ref: FilterConstants.bypassCapacitorNames.c9 + 'M',\r\n voltage: formatFieldValue(vsPlus, FilterConstants.fieldTypes.NumericDecimal, '3s') + 'V',\r\n circuit: FilterConstants.fwCircuits.bypassCapacitor,\r\n });\r\n for (let j = 0; j < tantalumRef.length; j++) {\r\n if (tantalumRef[j]) {\r\n const tantalumRefItem = tantalumRef[j] as TantalumRef;\r\n const item = tantalumRefItem.ref;\r\n const vsupply = tantalumRefItem.voltage;\r\n const circuitName = tantalumRefItem.circuit;\r\n for (let k = 0; k < bom.length; k++) {\r\n if (bom[k]) {\r\n const bomItem = bom[k] as Bom;\r\n const designators = bomItem.designators,\r\n value = bomItem.value,\r\n tolerance = bomItem.tolerance;\r\n if (designators.includes(item)) {\r\n capacitorList.push({\r\n item: item,\r\n value: value,\r\n tolerance: tolerance,\r\n voltage: vsupply,\r\n circuit: circuitName,\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return capacitorList;\r\n }\r\n\r\n get needBypassCapacitors(): NeedBypassCapacitor {\r\n const showBypassCapacitors = this.bypassCapacitors.length > 0 ? true : false;\r\n return { display: showBypassCapacitors, bypassCapacitors: this.bypassCapacitors };\r\n }\r\n\r\n get needOpAmpSpares(): NeedOpAmpSpare {\r\n const showOpAmpSpares = this.opAmpSpares.length > 0 ? true : false;\r\n return { display: showOpAmpSpares, opAmpSpares: this.opAmpSpares };\r\n }\r\n\r\n get opAmpSpares(): OpAmpSpare[] {\r\n const sparesList = [];\r\n if (this.displayExtraComponents) {\r\n const circuitDetails = this.args.model.detailsOfCircuits;\r\n const vsPlus = this.args.model.componentsInput.vsPlus;\r\n const vsMinus = this.args.model.componentsInput.vsMinus;\r\n const circuitName =\r\n vsMinus === 0 ? FilterConstants.fwCircuits.spareAmpSingle : FilterConstants.fwCircuits.spareAmpDual;\r\n for (let i = 0; i < circuitDetails.length; i++) {\r\n if (circuitDetails[i]) {\r\n const circuitItem = circuitDetails[i] as DetailsOfCircuit;\r\n const opAmpName = circuitItem.stage.opAmp;\r\n const opAmpData = circuitItem.stage.opAmpSource.getOpAmp(opAmpName);\r\n const opAmpChannels = opAmpData.numberChannels;\r\n if (opAmpChannels > 1) {\r\n const opAmpStageLetter = circuitItem.stage.stageLetter;\r\n const refDesignatorOpAmp =\r\n getOpAmpReferenceDesignator(opAmpData.packageCode, opAmpChannels) + opAmpStageLetter;\r\n const numSpares = opAmpChannels - 1;\r\n for (let j = 0; j < numSpares; j++) {\r\n //let opAmpValue = \"1/\" + opAmpChannels.toString() + \" \" + opAmpName + \" \" + refDesignatorOpAmp;\r\n sparesList.push({\r\n circuit: circuitName,\r\n referenceDesignator: refDesignatorOpAmp,\r\n channelDesignator: '1/' + opAmpChannels.toString(),\r\n name: opAmpName,\r\n vsPlus: formatFieldValue(vsPlus, FilterConstants.fieldTypes.NumericDecimal, '3s') + 'V',\r\n vsMinus: formatFieldValue(vsMinus, FilterConstants.fieldTypes.NumericDecimal, '3s') + 'V',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return sparesList;\r\n }\r\n\r\n get svgWidth(): number {\r\n const stages = this.actualStages;\r\n const length = stages.length;\r\n\r\n const referenceStage = this.needReferenceStage;\r\n const referenceStageWidth = referenceStage.display ? 525 : 0;\r\n\r\n const bypassCapacitors = this.needBypassCapacitors;\r\n const bypassCapacitorsWidth = bypassCapacitors.display ? bypassCapacitors.bypassCapacitors.length * 100 : 0;\r\n\r\n const opAmpSpares = this.needOpAmpSpares;\r\n let opAmpSparesWidth = opAmpSpares.display\r\n ? opAmpSpares.opAmpSpares.length * 100 + (opAmpSpares.opAmpSpares.length === 1 ? 70 : 5)\r\n : 0;\r\n opAmpSparesWidth += length === 1 ? 100 : 0;\r\n\r\n const sparesContainerWidth = referenceStageWidth + bypassCapacitorsWidth + opAmpSparesWidth;\r\n let schematicsContainerWidth = 0;\r\n\r\n if (length > 0 && stages[0] && stages[length - 1]) {\r\n schematicsContainerWidth =\r\n (stages[length - 1] as ActualStageResult).geometry.xTranslate +\r\n (stages[length - 1] as ActualStageResult).geometry.width -\r\n stages[0].geometry.xTranslate +\r\n 35.0;\r\n }\r\n return schematicsContainerWidth >= sparesContainerWidth ? schematicsContainerWidth : sparesContainerWidth;\r\n }\r\n\r\n get referenceValues(): ReferenceValues {\r\n const showTolerance = this.args.model.toleranceInput ? true : false;\r\n const refStageVoltage = this.args.model.componentsInput.vsPlus;\r\n return {\r\n v1: { name: 'VVS1', value: refStageVoltage, tolerance: null },\r\n v2: { name: 'VVS2', value: refStageVoltage, tolerance: null },\r\n c1: { name: 'C1M', value: 0.00001, tolerance: showTolerance ? '20%' : null },\r\n c2: { name: 'C2M', value: 0.00001, tolerance: showTolerance ? '20%' : null },\r\n c3: { name: 'C3M', value: 0.0000001, tolerance: showTolerance ? '20%' : null },\r\n c4: { name: 'C4M', value: 0.0000001, tolerance: showTolerance ? '20%' : null },\r\n r1: { name: 'R1M', value: 10000, tolerance: showTolerance ? '1%' : null },\r\n r2: { name: 'R2M', value: 10000, tolerance: showTolerance ? '1%' : null },\r\n r3: { name: 'R3M', value: 4990, tolerance: showTolerance ? '1%' : null },\r\n r4: { name: 'R4M', value: null, tolerance: showTolerance ? '1%' : null },\r\n opAmp: { name: 'AD8031', value: 'U1M', url: null },\r\n };\r\n }\r\n\r\n getCircuitName(circuitItem: DetailsOfCircuit): string {\r\n let circuitName = '';\r\n const filterType = circuitItem.filter.name,\r\n implementation = circuitItem.implementation,\r\n hasGain =\r\n parseFloat(formatFieldValue(circuitItem.circuit.gain, FilterConstants.fieldTypes.Engineering, '3s')) > 1;\r\n\r\n switch (filterType) {\r\n case FilterConstants.filterType.gain: {\r\n circuitName = FilterConstants.fwCircuits.gain;\r\n break;\r\n }\r\n case FilterConstants.filterType.lowPass: {\r\n switch (implementation) {\r\n case FilterConstants.implementationType.firstOrder:\r\n circuitName = hasGain\r\n ? FilterConstants.fwCircuits.lowPassFirstOrderGain\r\n : FilterConstants.fwCircuits.lowPassFirstOrder;\r\n break;\r\n case FilterConstants.implementationType.sallenKey:\r\n circuitName = hasGain\r\n ? FilterConstants.fwCircuits.lowPassSallenKeyGain\r\n : FilterConstants.fwCircuits.lowPassSallenKey;\r\n break;\r\n case FilterConstants.implementationType.multipleFeedback:\r\n circuitName = hasGain\r\n ? FilterConstants.fwCircuits.lowPassMultipleFeedback\r\n : FilterConstants.fwCircuits.lowPassMultipleFeedback;\r\n break;\r\n case FilterConstants.implementationType.inductor:\r\n circuitName = hasGain\r\n ? FilterConstants.fwCircuits.lowPassInductorGain\r\n : FilterConstants.fwCircuits.lowPassInductor;\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n }\r\n case FilterConstants.filterType.highPass: {\r\n switch (implementation) {\r\n case FilterConstants.implementationType.firstOrder:\r\n circuitName = hasGain\r\n ? FilterConstants.fwCircuits.highPassFirstOrderGain\r\n : FilterConstants.fwCircuits.highPassFirstOrder;\r\n break;\r\n case FilterConstants.implementationType.sallenKey:\r\n circuitName = hasGain\r\n ? FilterConstants.fwCircuits.highPassSallenKeyGain\r\n : FilterConstants.fwCircuits.highPassSallenKey;\r\n break;\r\n case FilterConstants.implementationType.multipleFeedback:\r\n circuitName = hasGain\r\n ? FilterConstants.fwCircuits.highPassMultipleFeedback\r\n : FilterConstants.fwCircuits.highPassMultipleFeedback;\r\n break;\r\n case FilterConstants.implementationType.inductor:\r\n circuitName = hasGain\r\n ? FilterConstants.fwCircuits.highPassInductorGain\r\n : FilterConstants.fwCircuits.highPassInductor;\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n }\r\n case FilterConstants.filterType.bandPass: {\r\n switch (implementation) {\r\n case FilterConstants.implementationType.multipleFeedback:\r\n case FilterConstants.implementationType.deliyannisFriend:\r\n if (circuitItem.r3.value === 0 && isNearInfinity(circuitItem.r4.value))\r\n circuitName = FilterConstants.fwCircuits.bandPassDelyiannisFriendNoPosFB;\r\n else if (isNearInfinity(circuitItem.r2.value))\r\n circuitName = FilterConstants.fwCircuits.bandPassDelyiannisFriendPosFBnoR2;\r\n else circuitName = FilterConstants.fwCircuits.bandPassDelyiannisFriendPosFB;\r\n break;\r\n case FilterConstants.implementationType.inductor:\r\n circuitName = hasGain\r\n ? FilterConstants.fwCircuits.bandPassInductorGain\r\n : FilterConstants.fwCircuits.bandPassInductor;\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n return circuitName;\r\n }\r\n\r\n getCircuitConstants(circuitName: string): CircuitConstants {\r\n let result: CircuitConstants = { xTranslate: 0, yTranslate: 0, width: 0, height: 0, offset: 0 };\r\n switch (circuitName) {\r\n case FilterConstants.fwCircuits.bandPassInductorGain:\r\n result = { xTranslate: 0, yTranslate: 0, width: 255.168, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.bandPassInductor:\r\n result = { xTranslate: 0, yTranslate: 0, width: 255.168, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.bandPassDelyiannisFriendNoPosFB:\r\n result = { xTranslate: 0, yTranslate: 0, width: 296.834, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.bandPassDelyiannisFriendPosFB:\r\n result = { xTranslate: 0, yTranslate: 0, width: 316.569, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.bandPassDelyiannisFriendPosFBnoR2:\r\n result = { xTranslate: 0, yTranslate: 0, width: 316.569, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.highPassFirstOrderGain:\r\n result = { xTranslate: 0, yTranslate: 0, width: 253.714, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.highPassFirstOrder:\r\n result = { xTranslate: 0, yTranslate: 0, width: 253.714, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.highPassInductorGain:\r\n result = { xTranslate: 0, yTranslate: 0, width: 315.168, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.highPassInductor:\r\n result = { xTranslate: 0, yTranslate: 0, width: 315.168, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.highPassMultipleFeedback:\r\n result = { xTranslate: 0, yTranslate: 0, width: 296.834, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.highPassSallenKeyGain:\r\n result = { xTranslate: 0, yTranslate: 0, width: 315.168, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.highPassSallenKey:\r\n result = { xTranslate: 0, yTranslate: 0, width: 315.168, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.lowPassFirstOrderGain:\r\n result = { xTranslate: 0, yTranslate: 0, width: 253.714, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.lowPassFirstOrder:\r\n result = { xTranslate: 0, yTranslate: 0, width: 253.714, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.lowPassInductorGain:\r\n result = { xTranslate: 0, yTranslate: 0, width: 287.168, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.lowPassInductor:\r\n result = { xTranslate: 0, yTranslate: 0, width: 287.168, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.lowPassMultipleFeedback:\r\n result = { xTranslate: 0, yTranslate: 0, width: 296.834, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.lowPassSallenKeyGain:\r\n result = { xTranslate: 0, yTranslate: 0, width: 315.168, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.lowPassSallenKey:\r\n result = { xTranslate: 0, yTranslate: 0, width: 316.714, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.gain:\r\n result = { xTranslate: 0, yTranslate: 0, width: 200, height: 300, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.bypassCapacitor:\r\n case FilterConstants.fwCircuits.tantalumCapcacitorNegative:\r\n case FilterConstants.fwCircuits.tantalumCapcacitorPositive:\r\n result = { xTranslate: 0, yTranslate: 0, width: 80, height: 80, offset: 0 };\r\n break;\r\n case FilterConstants.fwCircuits.spareAmpDual:\r\n case FilterConstants.fwCircuits.spareAmpSingle:\r\n result = { xTranslate: 0, yTranslate: 0, width: 80, height: 160, offset: 0 };\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n getImplementation(implementation: string): string {\r\n let result = '';\r\n switch (implementation) {\r\n case 'sallenKey':\r\n result = 'implementation.sallenKey';\r\n break;\r\n case 'deliyannisFriend':\r\n case 'multipleFeedback':\r\n case 'multipleFeedback-posFB':\r\n case 'multipleFeedback-noPosFB':\r\n result = 'implementation.multipleFeedback';\r\n break;\r\n case 'firstOrder':\r\n result = 'implementation.firstOrder';\r\n break;\r\n case 'inductor':\r\n result = 'implementation.inductor';\r\n break;\r\n default:\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n // useTrialData() {\r\n // var principalOffset = 0;\r\n // var x1 = 0,\r\n // x2 = 0,\r\n // showReference = true,\r\n // result = [],\r\n // circuits = [\r\n // // 'bandpass-multiplefeedback-noposfb',\r\n // // 'highpass-multiplefeedback',\r\n // // 'lowpass-multiplefeedback',\r\n // // 'bandpass-multiplefeedback-posfb',\r\n // // 'highpass-sallenkey',\r\n // // 'lowpass-firstorder',\r\n // // 'lowpass-sallenkey',\r\n // // 'lowpass-multiplefeedback',\r\n // // 'lowpass-sallenkey-gain',\r\n // // 'highpass-sallenkey-gain',\r\n // // 'bandpass-multiplefeedback-posfbnor2',\r\n // // 'lowpass-sallenkey',\r\n // // 'lowpass-firstorder-gain',\r\n // // 'bandpass-inductor-gain',\r\n // // 'lowpass-firstorder',\r\n // // 'bandpass-inductor',\r\n // // 'lowpass-inductor-gain',\r\n // // 'highpass-firstorder-gain',\r\n // // 'lowpass-inductor',\r\n // // 'highpass-firstorder',\r\n // 'highpass-inductor-gain',\r\n // 'highpass-inductor',\r\n // //'bpcap-circuit','tantcap-neg','tantcap-pos','spare-dual','spare-single','gain-circuit',\r\n // ];\r\n // for (var i=0; i\\r\\n
\\r\\n
{{@model.stageLetter}}
\\r\\n
\\r\\n {{#unless this.hasActualStage}}\\r\\n
 
\\r\\n {{/unless}}\\r\\n
\\r\\n {{t (concat \\\"figures.stages.orders.\\\" this.nthOrder)}}\\r\\n
\\r\\n
\\r\\n {{t (concat \\\"figures.stages.filter-types.\\\" this.filterName)}}\\r\\n
\\r\\n {{#if this.hasActualStage}}\\r\\n
\\r\\n \\r\\n {{t \\r\\n (concat \\\"figures.stages.implementations.\\\" this.implementation) \\r\\n htmlSafe=true\\r\\n }}\\r\\n \\r\\n
\\r\\n {{/if}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{#if this.hasActualStage}}\\r\\n {{t \\\"figures.stages.target\\\"}}\\r\\n {{t \\\"figures.stages.simulated\\\"}}\\r\\n {{else}}\\r\\n \\r\\n {{/if}}\\r\\n
\\r\\n
\\r\\n \\r\\n {{format-value value=@model.gain.target fieldType=\\\"NUMERICDECIMAL\\\" param=\\\"3s\\\"}}\\r\\n \\r\\n {{#if this.hasActualStage}}\\r\\n \\r\\n {{this.simulatedGain}}\\r\\n {{#if this.simulatedGainTo}}\\r\\n {{t \\\"figures.stages.simulated-to\\\" value=this.simulatedGainTo}}\\r\\n {{/if}}\\r\\n \\r\\n {{/if}}\\r\\n
\\r\\n
\\r\\n \\r\\n {{format-value value=@model.stageFp.target fieldType=\\\"ENGINEERING\\\" param=\\\"3s\\\"}}\\r\\n \\r\\n {{#if this.hasActualStage}} \\r\\n \\r\\n {{this.simulatedFp}}\\r\\n {{#if this.simulatedFpTo}}\\r\\n {{t \\\"figures.stages.simulated-to\\\" value=this.simulatedFpTo}}\\r\\n {{/if}} \\r\\n \\r\\n {{/if}} \\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.stageQ.enabled }} \\r\\n {{format-value value=@model.stageQ.target fieldType=\\\"ENGINEERING\\\" param=\\\"3s\\\"}}\\r\\n {{else}} \\r\\n {{t \\\"fragments.n-a\\\"}}\\r\\n {{/if}}\\r\\n \\r\\n {{#if this.hasActualStage}}\\r\\n \\r\\n {{this.simulatedQ}}\\r\\n {{#if this.simulatedQTo}}\\r\\n {{t \\\"figures.stages.simulated-to\\\" value=this.simulatedQTo}}\\r\\n {{/if}}\\r\\n \\r\\n {{/if}} \\r\\n
\\r\\n
\\r\\n \\r\\n\",{ moduleName: \"filter-wizard/components/figures/stage-details.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './stage-details.hbs'; */\nimport Component from '@glimmer/component';\r\nimport FilterConstants from '../../filter-constants';\r\nimport { formatFieldValue } from '../../utils/format';\r\nimport type StageDetailResults from '../../models/results/sub-results/stage-details';\r\n\r\ninterface StageFigureDetailsArgs {\r\n model: StageDetailResults;\r\n options: { xscale: string; yscale: string };\r\n}\r\n\r\nexport default class StageFigureDetails extends Component {\r\n get hasActualStage(): boolean {\r\n return this.args.model.actualStage !== null;\r\n }\r\n\r\n get filterName(): string {\r\n const value = this.args.model.filterName;\r\n return value.split('_').join('-');\r\n }\r\n\r\n get nthOrder(): string {\r\n const value = this.args.model.nthOrder;\r\n return value.split('_').join('-');\r\n }\r\n\r\n get implementation(): string | null {\r\n const value = this.args.model.implementation;\r\n let result = null;\r\n switch (value) {\r\n case FilterConstants.implementationType.sallenKey:\r\n result = 'sallen-key';\r\n break;\r\n case FilterConstants.implementationType.multipleFeedback:\r\n case FilterConstants.implementationType.deliyannisFriend:\r\n result = 'multiple-feedback';\r\n break;\r\n case FilterConstants.implementationType.inductor:\r\n result = 'inductor';\r\n break;\r\n case FilterConstants.implementationType.gain:\r\n result = 'gain';\r\n break;\r\n case FilterConstants.implementationType.firstOrder:\r\n result = 'buffered-rc';\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n get simulatedGain(): string | null {\r\n let value = null;\r\n const gain = this.args.model.gain;\r\n if (gain.simulatedFrom !== null) {\r\n value = formatFieldValue(gain.simulatedFrom, FilterConstants.fieldTypes.NumericDecimal, '3s');\r\n } else if (gain.simulatedValue !== null) {\r\n value = formatFieldValue(gain.simulatedValue, FilterConstants.fieldTypes.NumericDecimal, '3s');\r\n }\r\n return value;\r\n }\r\n\r\n get simulatedGainTo(): string | null {\r\n let value = null;\r\n const gain = this.args.model.gain;\r\n if (gain.simulatedTo !== null) {\r\n value = formatFieldValue(gain.simulatedTo, FilterConstants.fieldTypes.NumericDecimal, '3s');\r\n }\r\n return value;\r\n }\r\n\r\n get simulatedFp(): string | null {\r\n let value = null;\r\n const stageFp = this.args.model.stageFp;\r\n if (stageFp.simulatedFrom !== null) {\r\n value = formatFieldValue(stageFp.simulatedFrom, FilterConstants.fieldTypes.Engineering, '3s');\r\n } else if (stageFp.simulatedValue !== null) {\r\n value = formatFieldValue(stageFp.simulatedValue, FilterConstants.fieldTypes.Engineering, '3s');\r\n }\r\n return value;\r\n }\r\n\r\n get simulatedFpTo(): string | null {\r\n let value = null;\r\n const stageFp = this.args.model.stageFp;\r\n if (stageFp.simulatedTo !== null) {\r\n value = formatFieldValue(stageFp.simulatedTo, FilterConstants.fieldTypes.Engineering, '3s');\r\n }\r\n return value;\r\n }\r\n\r\n get simulatedQ(): string {\r\n let value = null;\r\n const stageQ = this.args.model.stageQ;\r\n if (stageQ.simulatedFrom !== null && stageQ.enabled) {\r\n value = formatFieldValue(stageQ.simulatedFrom, FilterConstants.fieldTypes.Engineering, '3s');\r\n } else if (stageQ.simulatedValue !== null && stageQ.enabled) {\r\n value = formatFieldValue(stageQ.simulatedValue, FilterConstants.fieldTypes.Engineering, '3s');\r\n } else {\r\n value = 'N/A';\r\n }\r\n return value;\r\n }\r\n\r\n get simulatedQTo(): string | null {\r\n let value = null;\r\n const stageQ = this.args.model.stageQ;\r\n if (stageQ.simulatedTo !== null) {\r\n if (stageQ.enabled) {\r\n value = formatFieldValue(stageQ.simulatedTo, FilterConstants.fieldTypes.Engineering, '3s');\r\n } else {\r\n value = 'N/A';\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n {{t \\\"figures.stages.header-text\\\" n=this.numberOfStages}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{t \\\"settings.specifications.gain\\\"}} ({{t \\\"units.vv\\\"}}):\\r\\n
\\r\\n
\\r\\n {{t \\\"fragments.f\\\"}}{{t \\\"fragments.p\\\"}} ({{t \\\"units.hz\\\"}}):\\r\\n
\\r\\n
\\r\\n {{t \\\"fragments.q\\\"}}:\\r\\n
\\r\\n
\\r\\n {{#each @model.detailsOfStages as |item|}}\\r\\n \\r\\n {{/each}}\\r\\n
\\r\\n
\\r\\n {{#if @model.responseType}}\\r\\n
\\r\\n \\r\\n {{t \\r\\n (concat \\\"annotations.filterResponse.orders.order\\\" @model.nthOrder) \\r\\n responseType=(t (concat \\\"annotations.filterResponse.responseType.\\\" @model.responseType))\\r\\n }} \\r\\n {{#if @model.filterResponseValue}} \\r\\n {{format-value \\r\\n value=@model.filterResponseValue \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"2dz\\\" \\r\\n }}\\r\\n {{#if this.isChebyshevFilterResponse}} \\r\\n {{t \\\"units.db\\\"}}\\r\\n {{/if}}\\r\\n {{/if}}\\r\\n \\r\\n
\\r\\n \\r\\n ({{t \\\"annotations.filterResponse.stages\\\" count=this.numberOfStages}})\\r\\n \\r\\n
\\r\\n {{/if}}\\r\\n
\",{ moduleName: \"filter-wizard/components/figures/stages.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './stages.hbs'; */\nimport Component from '@glimmer/component';\r\nimport FilterConstants from '../../filter-constants';\r\nimport { DetailsOfStage } from './schematic';\r\n\r\ninterface StagesFiguresArgs {\r\n model: StagesModel;\r\n options: { xscale: string; yscale: string };\r\n}\r\n\r\ntype StagesModel = {\r\n detailsOfStages: DetailsOfStage[];\r\n responseType: string;\r\n nthOrder: string;\r\n filterResponseValue: string;\r\n};\r\n\r\nexport default class StagesFigure extends Component {\r\n get numberOfStages(): number {\r\n return this.args.model.detailsOfStages.length;\r\n }\r\n\r\n get isChebyshevFilterResponse(): boolean {\r\n return this.args.model.responseType === FilterConstants.responseType.chebyshev;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n {{@model.nominalVoltageDisplay.stageLetter}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n {{@model.nominalVoltageDisplay.opAmp}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.nominalVoltageDisplay.amplifierSpecs.slewRate.warningEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.amplifierSpecs.slewRate.value \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.vperus\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.nominalVoltageDisplay.amplifierSpecs.inputRange.warningEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.amplifierSpecs.inputRange.minimum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.to\\\"}} \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.amplifierSpecs.inputRange.maximum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.nominalVoltageDisplay.amplifierSpecs.outputRange.warningEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.amplifierSpecs.outputRange.minimum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.to\\\"}} \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.amplifierSpecs.outputRange.maximum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.nominalVoltageDisplay.maxSignals.slewRate.warningEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.maxSignals.slewRate.value \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.vperus\\\"}}\\r\\n {{t \\\"fragments.at\\\"}} \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.maxSignals.slewRate.frequency \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.nominalVoltageDisplay.maxSignals.inputRange.warningEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.maxSignals.inputRange.minimum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.to\\\"}} \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.maxSignals.inputRange.maximum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.at\\\"}} \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.maxSignals.inputRange.frequency \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.nominalVoltageDisplay.maxSignals.outputRange.warningEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.maxSignals.outputRange.minimum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.to\\\"}} \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.maxSignals.outputRange.maximum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.at\\\"}} \\r\\n {{format-value \\r\\n value=@model.nominalVoltageDisplay.maxSignals.outputRange.frequency \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n {{#if @isTolerance}}\\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.worstCaseVoltageDisplay.maxSignals.slewRate.warningEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{format-value \\r\\n value=@model.worstCaseVoltageDisplay.maxSignals.slewRate.value \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.vperus\\\"}}\\r\\n {{t \\\"fragments.at\\\"}} \\r\\n {{format-value \\r\\n value=@model.worstCaseVoltageDisplay.maxSignals.slewRate.frequency \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.worstCaseVoltageDisplay.maxSignals.inputRange.warningEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{format-value \\r\\n value=@model.worstCaseVoltageDisplay.maxSignals.inputRange.minimum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.to\\\"}} \\r\\n {{format-value \\r\\n value=@model.worstCaseVoltageDisplay.maxSignals.inputRange.maximum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.at\\\"}} \\r\\n {{format-value \\r\\n value=@model.worstCaseVoltageDisplay.maxSignals.inputRange.frequency \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{#if @model.worstCaseVoltageDisplay.maxSignals.outputRange.warningEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n \\r\\n \\r\\n {{format-value \\r\\n value=@model.worstCaseVoltageDisplay.maxSignals.outputRange.minimum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.to\\\"}} \\r\\n {{format-value \\r\\n value=@model.worstCaseVoltageDisplay.maxSignals.outputRange.maximum \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.volt\\\"}}\\r\\n {{t \\\"fragments.at\\\"}} \\r\\n {{format-value \\r\\n value=@model.worstCaseVoltageDisplay.maxSignals.outputRange.frequency \\r\\n fieldType=\\\"ENGINEERING\\\" \\r\\n param=\\\"3s\\\"\\r\\n }}{{t \\\"units.hz\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n {{/if}} \\r\\n
\",{ moduleName: \"filter-wizard/components/figures/voltage-range-details.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './voltage-range-details.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{t \\\"figures.voltageRange.maximum-input\\\"}}\\r\\n {{#if this.isTolerance}}\\r\\n

\\r\\n {{t \\\"figures.voltageRange.max-signals-nominal\\\"}}: \\r\\n {{format-value \\r\\n value=@model.maxInputSignalPossible \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"3s\\\"\\r\\n }} {{t \\\"units.vpp\\\"}}\\r\\n

\\r\\n

\\r\\n {{t \\\"figures.voltageRange.max-signals-worst-case\\\"}}: \\r\\n {{format-value \\r\\n value=@model.worstCaseInputSignal \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"3s\\\"\\r\\n }} {{t \\\"units.vpp\\\"}}\\r\\n

\\r\\n {{else}}\\r\\n

\\r\\n {{t \\\"figures.voltageRange.signal-possible\\\"}}: \\r\\n {{format-value \\r\\n value=@model.maxInputSignalPossible \\r\\n fieldType=\\\"NUMERICDECIMAL\\\" \\r\\n param=\\\"3s\\\"\\r\\n }} {{t \\\"units.vpp\\\"}}\\r\\n

\\r\\n {{/if}} \\r\\n
\\r\\n
\\r\\n
{{t \\\"figures.voltageRange.amplifier_specs\\\"}}
\\r\\n
{{t \\\"figures.voltageRange.amplifier\\\"}}:
\\r\\n
{{t \\\"figures.voltageRange.slew-rate\\\"}}:
\\r\\n
{{t \\\"figures.voltageRange.amp-input-range\\\"}}:
\\r\\n
{{t \\\"figures.voltageRange.amp-output-range\\\"}}:
\\r\\n
\\r\\n
\\r\\n {{#if this.isTolerance}}\\r\\n
{{t \\\"figures.voltageRange.max-signals-nominal\\\"}}
\\r\\n {{else}}\\r\\n
{{t \\\"figures.voltageRange.max-signals\\\"}}
\\r\\n {{/if}} \\r\\n
{{t \\\"figures.voltageRange.slew-rate\\\"}}:
\\r\\n
{{t \\\"figures.voltageRange.input-range\\\"}}:
\\r\\n
{{t \\\"figures.voltageRange.output-range\\\"}}:
\\r\\n
\\r\\n {{#if this.isTolerance}}\\r\\n
\\r\\n
{{t \\\"figures.voltageRange.max-signals-worst-case\\\"}}
\\r\\n
{{t \\\"figures.voltageRange.slew-rate\\\"}}:
\\r\\n
{{t \\\"figures.voltageRange.input-range\\\"}}:
\\r\\n
{{t \\\"figures.voltageRange.output-range\\\"}}:
\\r\\n
\\r\\n {{/if}}\\r\\n
\\r\\n {{#each @model.detailsOfVoltageRange as |item index|}}\\r\\n \\r\\n {{/each}}\\r\\n
\\r\\n
\\r\\n
\",{ moduleName: \"filter-wizard/components/figures/voltage-range.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './voltage-range.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport VoltageRange from '../../models/results/sub-results/voltage-range';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\n\r\ninterface VoltageRangeFigureArgs {\r\n model: VoltageRange;\r\n}\r\n\r\nexport default class VoltageRangeFigure extends Component {\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n\r\n get isTolerance(): boolean {\r\n return !!this.args.model.toleranceInput;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#let (component @links.menu-link) as |MenuLink|}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n{{/let}}\\r\\n{{!#aditools-dropdown label=\\\"Language\\\"}} {{!--\\r\\n
    \\r\\n
  • English
  • \\r\\n
  • 日本語
  • \\r\\n
  • 中文
  • \\r\\n
  • русский
  • \\r\\n
\\r\\n--}} {{!/aditools-dropdown}} \",{ moduleName: \"filter-wizard/components/menu-links.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './menu-links.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport { toolbarLinkClickAnalytics } from '../utils/analytics';\r\nimport { action } from '@ember/object';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport type AnalyticsService from '@ebiz/ember-aditools-analytics/services/aditools-analytics';\r\n\r\ninterface MenuLinksArgs {\r\n activeTab: string;\r\n}\r\n\r\nconst videoIds = [\r\n 'analog_digital',\r\n 'active_passive',\r\n 'chebyshev_butterworth_bessel',\r\n 'quality_factor',\r\n 'active_filter',\r\n 'sallenkey_feedback',\r\n 'gain_attenuation',\r\n 'opamp_output_impedance',\r\n 'picking_components',\r\n];\r\n\r\nexport default class MenuLinks extends Component {\r\n @service('aditools-analytics') declare analytics: AnalyticsService;\r\n @service declare intl: IntlService;\r\n @tracked videoIds = videoIds;\r\n\r\n @action toolbarMenuClick(menuLink: string): void {\r\n const tab = this.intl.t('wizard.' + this.args.activeTab, { locale: 'en-us' });\r\n toolbarLinkClickAnalytics(menuLink, tab, this.analytics);\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"filter-wizard/components/settings/components.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './components.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { inject as service } from '@ember/service';\r\nimport { next } from '@ember/runloop';\r\nimport { userEntryToNumber } from '@ebiz/pretty-num';\r\nimport FilterConstants from '../../filter-constants';\r\nimport ErrorTracker from '../../utils/error-tracker';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type OpAmpsService from 'filter-wizard/services/opamps';\r\nimport type ComponentsInput from '../../models/inputs/component-selection';\r\nimport type ComponentsAdvisor from '../../models/advisors/component-selection';\r\nimport type IndividualStageInput from '../../models/inputs/component-selection/individual-stage';\r\nimport type SliderInput from '../../models/inputs/component-selection/slider';\r\nimport { assert } from '@ember/debug';\r\nimport { isNone } from '@ember/utils';\r\nimport { tracked as makeTracked } from 'tracked-built-ins';\r\nimport { lockInputsErrorsList } from '../../models/advisors/component-selection';\r\n\r\nconst optimizationList = [\r\n { text: 'settings.components.optimizations.voltage-range', value: FilterConstants.optimizationType.voltageRange },\r\n { text: 'settings.components.optimizations.low-noise', value: FilterConstants.optimizationType.noise },\r\n { text: 'settings.components.optimizations.low-power', value: FilterConstants.optimizationType.power },\r\n];\r\n\r\ninterface ComponentSettingsArgs {\r\n model?: ComponentsInput;\r\n advisor?: ComponentsAdvisor;\r\n updateModel?: (inputType: string, modeldata: ComponentsInput) => void;\r\n updateErrors?: (inputType: string, errors: Array) => void;\r\n}\r\n\r\ntype Stage = {\r\n letter: string;\r\n settings: IndividualStageInput;\r\n orderIndex: number;\r\n};\r\n\r\nexport default class ComponentSettings extends Component {\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n @service declare opamps: OpAmpsService;\r\n @tracked workingModel: ComponentsInput;\r\n @tracked errorTracker: ErrorTracker;\r\n @tracked selectedOptimization: string | undefined;\r\n @tracked voltageSupplyHelpEnaled: boolean;\r\n @tracked componentsHelpEnabled: boolean;\r\n @tracked gbwHelpEnabled: boolean;\r\n @tracked implementationHelpEnabled: boolean;\r\n @tracked stages: Stage[];\r\n @tracked selectedStage: Stage | undefined;\r\n fieldNames: { [key: string]: string };\r\n fieldTypes: { [key: string]: string };\r\n fieldFormat: string;\r\n optimizationList: { text: string; value: string }[];\r\n\r\n constructor(owner: unknown, args: ComponentSettingsArgs) {\r\n super(owner, args);\r\n assert('`Components Input Model` is required', !isNone(this.args.model));\r\n assert('`Components Advisor` is required', !isNone(this.args.advisor));\r\n this.workingModel = makeTracked(this.args.advisor.clone(this.args.model) as ComponentsInput);\r\n this.selectedOptimization =\r\n this.workingModel.optimizationPreference === FilterConstants.optimizationPreferenceOptions.nonSpecific\r\n ? this.workingModel.optimization\r\n : FilterConstants.optimizationType.power;\r\n this.voltageSupplyHelpEnaled = false;\r\n this.componentsHelpEnabled = false;\r\n this.gbwHelpEnabled = false;\r\n this.implementationHelpEnabled = false;\r\n this.optimizationList = optimizationList;\r\n this.fieldNames = FilterConstants.fields.inputs.components;\r\n this.fieldTypes = {\r\n vsMinus: FilterConstants.fieldTypes.NumericDecimal,\r\n vsPlus: FilterConstants.fieldTypes.NumericDecimal,\r\n };\r\n this.fieldFormat = '3s';\r\n this.errorTracker = new ErrorTracker(FilterConstants.tabs.components, this.args.advisor);\r\n this.stages = [];\r\n this.sortStages();\r\n this.selectedStage = this.stages[0];\r\n // this.addClosestPolyfill(); // checks if .closest() method is present, adds polyfill if not\r\n next(this, () => {\r\n const errors = this.errorTracker.validate(this.workingModel);\r\n if (errors.length > 0 && this.args.updateErrors) {\r\n this.args.updateErrors('components', errors);\r\n }\r\n });\r\n }\r\n\r\n get isVsPlusValid(): boolean {\r\n return !this.errorTracker.isInErrorList('vsPlus');\r\n }\r\n\r\n get isVsMinusValid(): boolean {\r\n return !this.errorTracker.isInErrorList('vsMinus');\r\n }\r\n\r\n get opAmpsDisabled(): boolean {\r\n return (this.args.advisor as ComponentsAdvisor).isComponentResultError(\r\n this.workingModel,\r\n this.errorTracker.errorList,\r\n );\r\n }\r\n\r\n get isDisabledByErrors(): boolean {\r\n return this.errorTracker.errorList.some((error: { id: string }) => {\r\n return lockInputsErrorsList.includes(error.id);\r\n });\r\n }\r\n\r\n get displayStages(): boolean {\r\n return this.workingModel.optimizationPreference === FilterConstants.optimizationPreferenceOptions.specific\r\n ? true\r\n : false;\r\n }\r\n\r\n get hideStages(): boolean {\r\n return !this.displayStages;\r\n }\r\n\r\n get optimizationSelection(): { text: string; value: string } | undefined {\r\n const selected = this.workingModel.optimization;\r\n const selection = this.optimizationList.find((item) => {\r\n return item.value === selected;\r\n });\r\n return selection;\r\n }\r\n\r\n // Function that does the following:\r\n // - Calls Error Tracker to Validate the inputs in the Component\r\n // - Updates the Error Section if there are errors found\r\n // - Updates the Model if there are no errors found.\r\n validateAndUpdateModel(): void {\r\n const errors = this.errorTracker.validate(this.workingModel);\r\n if (errors.length > 0) {\r\n if (this.args.updateErrors) {\r\n this.args.updateErrors('components', errors);\r\n }\r\n } else {\r\n if (this.args.updateModel && this.args.advisor) {\r\n this.args.updateModel('components', this.args.advisor.clone(this.workingModel) as ComponentsInput);\r\n }\r\n }\r\n }\r\n\r\n // Function that sets the field input text to the workingModel\r\n updateModelInput(param: { status: boolean; fieldId: keyof ComponentsInput; fieldValue: string }): void {\r\n if (param.status) {\r\n const fieldValue =\r\n this.fieldTypes[param.fieldId as keyof ComponentsInput] === FilterConstants.fieldTypes.Numeric ||\r\n this.fieldTypes[param.fieldId as keyof ComponentsInput] === FilterConstants.fieldTypes.NumericDecimal ||\r\n this.fieldTypes[param.fieldId as keyof ComponentsInput] === FilterConstants.fieldTypes.Engineering\r\n ? userEntryToNumber(param.fieldValue)\r\n : param.fieldValue;\r\n this.workingModel[param.fieldId] = fieldValue;\r\n }\r\n }\r\n\r\n // Function that updates the stages with the appropriate OpAmp based on the Optimization Type selected\r\n updateOpAmpsFromOptimization(): void {\r\n const workingModel = this.workingModel;\r\n const optimizationValues = (this.args.advisor as ComponentsAdvisor).getOpAmpsFromOptimization(workingModel);\r\n const stages = workingModel.individualStageInputs;\r\n for (let i = 0; i < stages.length; i++) {\r\n const stageDefaults = (this.args.advisor as ComponentsAdvisor).getStageDefault(i);\r\n stages[i].opAmp = optimizationValues.opAmps[i];\r\n stages[i].implementation = stageDefaults ? stageDefaults.implementation : null;\r\n stages[i].implementationSelection = stageDefaults ? stageDefaults.implementationSelection : null;\r\n stages[i].componentSizing = stageDefaults ? stageDefaults.componentSizing : null;\r\n stages[i].gainRatio = stageDefaults ? stageDefaults.gainRatio : null;\r\n }\r\n this.workingModel.sortOrder = optimizationValues.sortOrder;\r\n this.workingModel.individualStageInputs = stages;\r\n this.sortStages();\r\n }\r\n\r\n // Function that sorts the individual stage inputs according to sort order\r\n sortStages(): void {\r\n const order = this.workingModel.sortOrder;\r\n const stages = this.workingModel.individualStageInputs;\r\n const result = [];\r\n\r\n //apply sort order and stage letters\r\n for (let i = 0; i < order.length; i++) {\r\n for (let j = 0; j < stages.length; j++) {\r\n if (order[i] === j) {\r\n result.push({ letter: stages[order[i]].stageLetter, settings: stages[order[i]], orderIndex: order[i] });\r\n }\r\n }\r\n }\r\n this.stages = result;\r\n }\r\n\r\n getSpecificOptimization(): string {\r\n let isRecommended = true;\r\n const stages = this.workingModel.individualStageInputs;\r\n for (let i = 0; i < stages.length; i++) {\r\n if (\r\n !(this.args.advisor as ComponentsAdvisor).isRecommendedOpAmp(i, stages[i].opAmp, stages[i], this.workingModel)\r\n ) {\r\n isRecommended = false;\r\n break;\r\n }\r\n }\r\n return isRecommended\r\n ? FilterConstants.optimizationType.recommendedSpecific\r\n : FilterConstants.optimizationType.allowedSpecific;\r\n }\r\n\r\n updateSliders(sliderGainValues: { sliderValues: SliderInput[]; gainValues: SliderInput[] }): void {\r\n const workingModel = this.workingModel;\r\n for (let i = 0; i < workingModel.individualStageInputs.length; i++) {\r\n const individualStageInput = workingModel.individualStageInputs[i];\r\n individualStageInput.componentSizing = sliderGainValues.sliderValues[i];\r\n individualStageInput.gainRatio = sliderGainValues.gainValues[i];\r\n }\r\n }\r\n\r\n /*\r\n // fix for ember-sortable, it uses .closest() which is not supported by IE and other browsers below certain versions\r\n addClosestPolyfill(): void {\r\n // checks if .closest() method is present, adds polyfill if not\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n }\r\n if (!Element.prototype.closest) {\r\n Element.prototype.closest = function (el: string) {\r\n let element = this;\r\n do {\r\n if (element.matches(el)) {\r\n return element;\r\n }\r\n element = element.parentElement || element.parentNode;\r\n } while (element !== null && element.nodeType === 1);\r\n return null;\r\n };\r\n }\r\n }\r\n */\r\n\r\n @action fieldChange(param: { status: boolean; fieldId: keyof ComponentsInput; fieldValue: string }): void {\r\n this.errorTracker.updateUnparseableList(param);\r\n this.updateModelInput(param);\r\n if (\r\n !this.errorTracker.hasUnparsableFields() &&\r\n this.workingModel.optimizationPreference === FilterConstants.optimizationPreferenceOptions.nonSpecific\r\n ) {\r\n this.updateOpAmpsFromOptimization();\r\n }\r\n this.validateAndUpdateModel();\r\n }\r\n\r\n @action updateStage(): void {\r\n this.workingModel.optimization = this.getSpecificOptimization();\r\n this.validateAndUpdateModel();\r\n }\r\n\r\n @action setOptimizationPreference(e: { target: { id: string } }): void {\r\n const optPref =\r\n e.target.id === 'specific-radio'\r\n ? FilterConstants.optimizationPreferenceOptions.specific\r\n : FilterConstants.optimizationPreferenceOptions.nonSpecific;\r\n this.workingModel.optimizationPreference = optPref;\r\n if (this.workingModel.optimizationPreference === FilterConstants.optimizationPreferenceOptions.nonSpecific) {\r\n this.workingModel.optimization = this.selectedOptimization;\r\n this.updateOpAmpsFromOptimization();\r\n } else {\r\n const workingModel = this.workingModel;\r\n const optimizedInput = (this.args.advisor as ComponentsAdvisor).getOptimizationValues(workingModel);\r\n this.updateSliders(optimizedInput);\r\n this.workingModel.sortOrder = optimizedInput.sortOrder;\r\n this.workingModel.optimization = this.getSpecificOptimization();\r\n this.workingModel = workingModel;\r\n this.sortStages();\r\n }\r\n this.validateAndUpdateModel();\r\n }\r\n\r\n @action setOptimization(e: { value: string }): void {\r\n this.workingModel.optimization = e.value;\r\n this.selectedOptimization = this.workingModel.optimization;\r\n this.updateOpAmpsFromOptimization();\r\n this.validateAndUpdateModel();\r\n }\r\n\r\n @action setGBWCompensate(e: { target: { checked: boolean } }): void {\r\n const compensateForGbw = e.target.checked;\r\n this.workingModel.compensateForGbw = compensateForGbw;\r\n\r\n this.validateAndUpdateModel();\r\n }\r\n\r\n @action selectStage(\r\n stage: { letter: string; settings: IndividualStageInput; orderIndex: number },\r\n event: { target: { parentElement: { classList: { contains: (arg0: string) => string } } } },\r\n ): void {\r\n if (!event.target.parentElement.classList.contains('is-dropping')) {\r\n this.selectedStage = stage;\r\n }\r\n }\r\n\r\n @action updateSortOrder(\r\n sortedStages: { letter: string; settings: IndividualStageInput; orderIndex: number }[] /*, draggedStage*/,\r\n ): void {\r\n this.stages = sortedStages;\r\n const order = sortedStages.map((value: { orderIndex: number }) => {\r\n return value.orderIndex;\r\n });\r\n this.workingModel.sortOrder = order;\r\n this.validateAndUpdateModel();\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n

{{t \\\"settings.filter-tab.select-filter-type\\\"}}

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\",{ moduleName: \"filter-wizard/components/settings/filter-type.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './filter-type.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\n\r\n// Filter Type Settings Panel - The panel that lets the user select a filter type\r\n\r\ninterface FilterTypeComponentArgs {\r\n tabInput: string;\r\n updateModel?: (inputType: string, modeldata: FilterType) => void;\r\n showHelp?: (title: string, message: string, msgparams?: Record) => void;\r\n}\r\n\r\nexport default class FilterTypeComponent extends Component {\r\n get lowPassActive(): boolean {\r\n return this.args.tabInput === 'lowPass';\r\n }\r\n get highPassActive(): boolean {\r\n return this.args.tabInput === 'highPass';\r\n }\r\n get bandPassActive(): boolean {\r\n return this.args.tabInput === 'bandPass';\r\n }\r\n\r\n @action select(filterType: FilterType): void {\r\n if (this.args.updateModel) {\r\n this.args.updateModel('filter-type', filterType);\r\n }\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"filter-wizard/components/settings/next-steps.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './next-steps.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"filter-wizard/components/settings/specifications.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './specifications.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { inject as service } from '@ember/service';\r\nimport { action } from '@ember/object';\r\nimport { next } from '@ember/runloop';\r\nimport { userEntryToNumber } from '@ebiz/pretty-num';\r\nimport FilterConstants from '../../filter-constants';\r\nimport { formatFieldValue } from '../../utils/format';\r\nimport ErrorTracker from '../../utils/error-tracker';\r\nimport type SpecificationsInput from '../../models/inputs/specification';\r\nimport type SpecificationsAdvisor from '../../models/advisors/specification';\r\nimport { getResponseType, getResponseValue } from '../../models/gestures/filter-response-gesture';\r\nimport { changeGainUnits } from '../../models/gestures/gain-unit-gesture';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport { assert } from '@ember/debug';\r\nimport { isNone } from '@ember/utils';\r\nimport { tracked as makeTracked } from 'tracked-built-ins';\r\nimport { FilterType, filters } from '../../models/filter/filter';\r\n\r\nconst gainUnitValues = [\r\n { text: 'settings.specifications.gain-units.db', value: FilterConstants.gainUnits.db },\r\n { text: 'settings.specifications.gain-units.vv', value: FilterConstants.gainUnits.vv },\r\n];\r\n\r\ninterface SpecificationsSettingsArgs {\r\n model?: SpecificationsInput;\r\n advisor?: SpecificationsAdvisor;\r\n updateModel?: (inputType: string, modeldata: SpecificationsInput) => void;\r\n updateErrors?: (inputType: string, errors: Array) => void;\r\n takeStep?: (requestedAction: string) => void;\r\n showHelp?: (title: string, message: string, msgparams?: Record) => void;\r\n tool?: string;\r\n}\r\n\r\n///////////////////////////////////////////////////////////////////////////////////////\r\n// settings-specifications - The panel that lets the user set filter specifications //\r\n///////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class SpecificationsSettings extends Component {\r\n @service declare intl: IntlService;\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n\r\n @tracked workingModel: SpecificationsInput; // a model holding the values of all the fields that can be parsed\r\n @tracked errorTracker: ErrorTracker;\r\n\r\n fieldNames: { [key: string]: string }; // Field Names for Input Textboxes. Taken from Filter Constants\r\n fieldTypes: { [key: string]: string }; // Field Types for Parsing and Formatting. Taken from Filter Constants\r\n fieldFormat: string; // Field Format for The Input Boxes in the Component\r\n\r\n @tracked stagesDisplayText: string; // Display of working number of stages\r\n @tracked filterResponseDisplayText: string | undefined; // Display of working filter response\r\n @tracked filterResponseHoverText: string; // Hover text for filter response slider\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Initialization //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n constructor(owner: unknown, args: SpecificationsSettingsArgs) {\r\n super(owner, args);\r\n assert('`Specifications Input Model` is required', !isNone(this.args.model));\r\n assert('`Specifications Advisor` is required', !isNone(this.args.advisor));\r\n this.workingModel = makeTracked(this.args.advisor.clone(this.args.model) as SpecificationsInput);\r\n this.filterResponseHoverText = '';\r\n this.filterResponseDisplayText = this.getFilterResponseDisplayText();\r\n this.stagesDisplayText = this.getStagesDisplayText();\r\n this.fieldNames = FilterConstants.fields.inputs.specifications;\r\n this.fieldTypes = this.initFieldTypes();\r\n this.fieldFormat = '3s';\r\n this.errorTracker = new ErrorTracker(FilterConstants.tabs.specifications, this.args.advisor);\r\n next(this, () => {\r\n const errors = this.errorTracker.validate(this.workingModel);\r\n if (errors.length > 0 && this.args.updateErrors) {\r\n this.args.updateErrors('specifications', errors);\r\n }\r\n });\r\n }\r\n\r\n initFieldTypes(): { [key: string]: string } {\r\n return {\r\n gain: FilterConstants.fieldTypes.NumericDecimal,\r\n passbandAttenuation: FilterConstants.fieldTypes.NumericDecimal,\r\n passbandFrequency: FilterConstants.fieldTypes.Engineering,\r\n stopbandAttenuation: FilterConstants.fieldTypes.NumericDecimal,\r\n stopbandFrequency: FilterConstants.fieldTypes.Engineering,\r\n centerFrequency: FilterConstants.fieldTypes.Engineering,\r\n filterResponseValue: FilterConstants.fieldTypes.NumericDecimal,\r\n };\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Conditions (Returns true or false) //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n get isGainValid(): boolean {\r\n return !this.errorTracker.isInErrorList('gain');\r\n }\r\n get isPassbandAttenuationValid(): boolean {\r\n return !this.errorTracker.isInErrorList('passbandAttenuation');\r\n }\r\n get isPassbandFrequencyValid(): boolean {\r\n return !this.errorTracker.isInErrorList('passbandFrequency');\r\n }\r\n get isStopbandAttenuationValid(): boolean {\r\n return !this.errorTracker.isInErrorList('stopbandAttenuation');\r\n }\r\n get isStopbandFrequencyValid(): boolean {\r\n return !this.errorTracker.isInErrorList('stopbandFrequency');\r\n }\r\n get isCenterFrequencyValid(): boolean {\r\n return !this.errorTracker.isInErrorList('centerFrequency');\r\n }\r\n get isFilterResponseValid(): boolean {\r\n return !this.errorTracker.isInErrorList('filterResponse');\r\n }\r\n get hasCenterFrequency(): boolean {\r\n return (\r\n typeof (this.args.model as SpecificationsInput).centerFrequency !== 'undefined' &&\r\n (this.args.model as SpecificationsInput).centerFrequency !== null &&\r\n !isNaN((this.args.model as SpecificationsInput).centerFrequency)\r\n );\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Properties //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n get unitsSelection(): { text: string; value: string } | undefined {\r\n const units = this.workingModel.gainUnit;\r\n const selection = this.gainUnitValues.find((item) => {\r\n return item.value === units;\r\n });\r\n return selection;\r\n }\r\n get filterResponseDisplayValue(): string {\r\n const value = this.workingModel.filterResponseValue;\r\n return value ? formatFieldValue(value, FilterConstants.fieldTypes.NumericDecimal, '2dz') : '';\r\n }\r\n\r\n get gainUnitValues(): Array<{ text: string; value: string }> {\r\n return gainUnitValues;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Utility Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Function that does the following:\r\n // - Calls Error Tracker to Validate the inputs in the Component\r\n // - Updates the Error Section if there are errors found\r\n // - Updates the Model if there are no errors found.\r\n validateAndUpdateModel(): void {\r\n // Validate the Inputs\r\n const errors = this.errorTracker.validate(this.workingModel);\r\n\r\n // Update the error list when there are errors, if there are none, update the model\r\n if (errors.length > 0) {\r\n if (this.args.updateErrors) {\r\n this.args.updateErrors('specifications', errors);\r\n }\r\n } else {\r\n if (this.args.updateModel && this.args.advisor) {\r\n this.args.updateModel('specifications', this.args.advisor.clone(this.workingModel) as SpecificationsInput);\r\n }\r\n }\r\n\r\n // Refresh Response Display\r\n this.refreshResponse(errors.length > 0);\r\n }\r\n\r\n // Function that sets the response value and the response type from the slider to the workingModel\r\n updateResponseModel(): void {\r\n this.workingModel.filterResponseValue = getResponseValue(\r\n this.workingModel.filterResponseSlider,\r\n this.workingModel.passbandAttenuation,\r\n );\r\n this.workingModel.selectedResponseType = getResponseType(this.workingModel.filterResponseSlider);\r\n }\r\n\r\n // Function that sets the field input text to the workingModel\r\n updateModelInput(param: { fieldId: keyof SpecificationsInput; fieldValue: string; status: boolean }): void {\r\n if (param.status) {\r\n // Get Raw field value after input has been rounded to the correct display value (For Number Field Types Only)\r\n const fieldValue =\r\n this.fieldTypes[param.fieldId as keyof SpecificationsInput] === FilterConstants.fieldTypes.Numeric ||\r\n this.fieldTypes[param.fieldId as keyof SpecificationsInput] === FilterConstants.fieldTypes.NumericDecimal ||\r\n this.fieldTypes[param.fieldId as keyof SpecificationsInput] === FilterConstants.fieldTypes.Engineering\r\n ? userEntryToNumber(param.fieldValue)\r\n : param.fieldValue;\r\n this.workingModel[param.fieldId] = fieldValue;\r\n }\r\n }\r\n\r\n resetSliderDisplay(): void {\r\n this.filterResponseHoverText = '';\r\n }\r\n\r\n getFilterResponseHoverText(sliderValue: string, passbandAttenuation: string): string {\r\n const value = getResponseValue(sliderValue, passbandAttenuation);\r\n const reponseType = getResponseType(sliderValue);\r\n const responseValue = value ? formatFieldValue(value, FilterConstants.fieldTypes.NumericDecimal, '2dz') : '';\r\n if (reponseType === FilterConstants.responseType.chebyshev) {\r\n return `${reponseType} ${responseValue} ${this.intl.t('units.db')}`;\r\n } else {\r\n return `${reponseType} ${responseValue}`;\r\n }\r\n }\r\n\r\n getFilterResponseDisplayText(): string {\r\n const responseType = this.intl.t(\r\n `annotations.filterResponse.responseType.${this.workingModel.selectedResponseType}`,\r\n );\r\n let order = 0;\r\n try {\r\n const workingModel = this.workingModel;\r\n // const filter = new Filter(\r\n // (this.args.advisor as SpecificationsAdvisor).filterType,\r\n // workingModel.selectedResponseType\r\n // );\r\n order = filters[(this.args.advisor as SpecificationsAdvisor).filterType as keyof FilterType].getOrder({\r\n filterResponseType: workingModel.selectedResponseType,\r\n passbandFrequency: workingModel.passbandFrequency,\r\n passbandAttenuation: workingModel.passbandAttenuation,\r\n stopbandFrequency: workingModel.stopbandFrequency,\r\n stopbandAttenuation: workingModel.stopbandAttenuation,\r\n centerFrequency: workingModel.centerFrequency,\r\n filterResponseValue: workingModel.filterResponseValue,\r\n });\r\n } catch (e) {\r\n order = 0;\r\n }\r\n let orderString = '';\r\n if (order <= 0 || order > FilterConstants.maxOrder) {\r\n return '';\r\n } else {\r\n orderString = this.intl.t(`annotations.filterResponse.orders.order${order}`, { responseType: responseType });\r\n if (this.workingModel.filterResponseValue) {\r\n let units = '';\r\n if (this.workingModel.selectedResponseType === FilterConstants.responseType.chebyshev) {\r\n units = ' ' + this.intl.t('units.db');\r\n }\r\n return `${orderString} ${this.filterResponseDisplayValue}${units}`;\r\n } else {\r\n return orderString;\r\n }\r\n }\r\n }\r\n\r\n getStagesDisplayText(): string {\r\n const workingModel = this.workingModel;\r\n let stages = 0,\r\n order = 0;\r\n try {\r\n // const filter = new Filter(\r\n // (this.args.advisor as SpecificationsAdvisor).filterType,\r\n // workingModel.selectedResponseType\r\n // );\r\n stages = filters[(this.args.advisor as SpecificationsAdvisor).filterType as keyof FilterType].getNumberOfStages({\r\n filterResponseType: workingModel.selectedResponseType,\r\n passbandFrequency: workingModel.passbandFrequency,\r\n passbandAttenuation: workingModel.passbandAttenuation,\r\n stopbandFrequency: workingModel.stopbandFrequency,\r\n stopbandAttenuation: workingModel.stopbandAttenuation,\r\n centerFrequency: workingModel.centerFrequency,\r\n filterResponseValue: workingModel.filterResponseValue,\r\n });\r\n order = filters[(this.args.advisor as SpecificationsAdvisor).filterType as keyof FilterType].getOrder({\r\n filterResponseType: workingModel.selectedResponseType,\r\n passbandFrequency: workingModel.passbandFrequency,\r\n passbandAttenuation: workingModel.passbandAttenuation,\r\n stopbandFrequency: workingModel.stopbandFrequency,\r\n stopbandAttenuation: workingModel.stopbandAttenuation,\r\n centerFrequency: workingModel.centerFrequency,\r\n filterResponseValue: workingModel.filterResponseValue,\r\n });\r\n } catch (e) {\r\n stages = 0;\r\n }\r\n if (stages <= 0 || order > FilterConstants.maxOrder) {\r\n return '';\r\n } else {\r\n return `(${this.intl.t('annotations.filterResponse.stages', { count: stages })})`;\r\n }\r\n }\r\n\r\n refreshResponse(hasErrors: boolean): void {\r\n if (!hasErrors) {\r\n this.filterResponseDisplayText = this.getFilterResponseDisplayText();\r\n this.stagesDisplayText = this.getStagesDisplayText();\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Component Actions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n @action changeGainUnits(units: { text: string; value: string }): void {\r\n this.workingModel.gain = changeGainUnits(this.workingModel.gain, units.value);\r\n this.workingModel.gainUnit = units.value;\r\n this.validateAndUpdateModel();\r\n }\r\n @action displayResponse(e: InputEvent): void {\r\n this.filterResponseHoverText = this.getFilterResponseHoverText(\r\n (e.target as HTMLInputElement).value,\r\n this.workingModel.passbandAttenuation,\r\n );\r\n }\r\n @action updateResponse(e: InputEvent): void {\r\n this.workingModel.filterResponseSlider = (e.target as HTMLInputElement).value;\r\n this.updateResponseModel();\r\n this.validateAndUpdateModel();\r\n this.resetSliderDisplay();\r\n }\r\n @action hideResponse(): void {\r\n this.resetSliderDisplay();\r\n }\r\n // Action Handler when any of the textboxes in the Specifications Settings Panel encounter a Change Event\r\n // Inputs: param. A structure containing the following\r\n // - fieldId - the field that caused the change event to occur\r\n // - fieldValue - the value corresponding to the fieldId\r\n // - status - true if the parsed value of the field is valid, otherwise false\r\n // Description - When a field in the panel has been changed the function first validates the changed field\r\n // and then calls the function to validate field values and update models when no errors are found\r\n @action fieldChange(param: { fieldId: keyof SpecificationsInput; fieldValue: string; status: boolean }): void {\r\n this.errorTracker.updateUnparseableList(param);\r\n this.updateResponseModel();\r\n this.updateModelInput(param);\r\n this.validateAndUpdateModel();\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{#if this.displayGainSlider}}\\r\\n
\\r\\n
\\r\\n {{! template-lint-disable require-input-label}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{#if this.displayQResistors}}\\r\\n \\r\\n {{else}}\\r\\n \\r\\n {{/if}}\\r\\n
\\r\\n
\\r\\n
\\r\\n {{/if}}\\r\\n
\\r\\n {{t \\\"settings.components.op-amp\\\"}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{t \\\"settings.components.implementation\\\"}}\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n {{t item.text}}\\r\\n \\r\\n \\r\\n
\\r\\n {{#if this.opAmpDialogEnabled}}\\r\\n \\r\\n {{/if}}\\r\\n
\",{ moduleName: \"filter-wizard/components/settings/stage.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './stage.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { action } from '@ember/object';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { inject as service } from '@ember/service';\r\nimport FilterConstants from '../../filter-constants';\r\nimport ErrorTracker from '../../utils/error-tracker';\r\nimport type OpAmpsService from 'filter-wizard/services/opamps';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type ComponentsAdvisor from '../../models/advisors/component-selection';\r\nimport type IndividualStageInput from '../../models/inputs/component-selection/individual-stage';\r\nimport type SallenKeyLowPassIdealOpAmp from 'filter-wizard/models/implementation/sallen-key/low-pass/ideal-op-amp';\r\nimport {\r\n DeviceColumn,\r\n DeviceData,\r\n PackedFilterValue,\r\n SortColumnRef,\r\n} from '@ebiz/ember-aditools-device-table/components/aditools-device-table';\r\n\r\ninterface ComponentStageSettingsArgs {\r\n model: IndividualStageInput;\r\n advisor: ComponentsAdvisor;\r\n index: number;\r\n workingVsPlus: number;\r\n workingVsMinus: number;\r\n stageLetter: string;\r\n errorTracker: ErrorTracker;\r\n update: () => void;\r\n isDisabledByErrors: boolean;\r\n systemDialogFunc?: (status: string, message: string, msgparams?: Record) => void;\r\n showNotification?: (title: string, message: string, msgparams?: Record) => void;\r\n}\r\n\r\ntype Limits = {\r\n allowedLimits: SallenKeyLowPassIdealOpAmp;\r\n recommendedLimits: SallenKeyLowPassIdealOpAmp;\r\n powerSpan: number;\r\n stageLetter: string | undefined;\r\n};\r\n\r\nexport default class ComponentStageSettings extends Component {\r\n @service declare opamps: OpAmpsService;\r\n @service declare intl: IntlService;\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n\r\n @tracked opAmpDialogEnabled: boolean;\r\n @tracked filterType: string;\r\n\r\n constructor(owner: unknown, args: ComponentStageSettingsArgs) {\r\n super(owner, args);\r\n this.opAmpDialogEnabled = false;\r\n this.filterType = this.args.advisor.model.inputs.filterType;\r\n this.opamps.getOpAmps();\r\n }\r\n\r\n get implementationList(): { text: string; value: string }[] {\r\n return this.getImplementationList();\r\n }\r\n\r\n get implementationSelection(): { text: string; value: string } | undefined {\r\n const selected = this.args.model.implementation;\r\n const selection = this.implementationList.find((item) => {\r\n return item.value === selected;\r\n });\r\n return selection;\r\n }\r\n\r\n get limits(): Limits {\r\n const currentIndex = this.args.index;\r\n const stageLetter = this.args.stageLetter;\r\n const stageLimits = this.args.advisor.getStageLimits(\r\n this.args.model,\r\n this.args.workingVsPlus,\r\n this.args.workingVsMinus,\r\n currentIndex,\r\n );\r\n return {\r\n allowedLimits: stageLimits.allowedLimits,\r\n recommendedLimits: stageLimits.recommendedLimits,\r\n powerSpan: stageLimits.powerSpan,\r\n stageLetter: stageLetter,\r\n };\r\n }\r\n\r\n get displayGainSlider(): boolean {\r\n const isGainEnabled = this.args.model.gainRatio.enabled;\r\n const implementation = this.args.model.implementation;\r\n return isGainEnabled && implementation !== FilterConstants.implementationType.multipleFeedback;\r\n }\r\n\r\n get displayQResistors(): boolean {\r\n //Displays Q Resistors label on gain slider when filterType is bandpass\r\n const display = this.filterType === FilterConstants.filterType.bandPass ? true : false;\r\n return display;\r\n }\r\n\r\n get getOpAmpDisplay(): string {\r\n return this.args.model.opAmp !== 'ideal'\r\n ? this.args.model.opAmp\r\n : this.intl.t('settings.components.choose-op-amp').toString();\r\n }\r\n\r\n get isOpAmpError(): boolean {\r\n return this.args.errorTracker.isInErrorList('stageOpAmp' + this.args.index);\r\n }\r\n\r\n get selectionFilterOptions(): {\r\n columns?: DeviceColumn[];\r\n filters?: PackedFilterValue[];\r\n sortColumns?: SortColumnRef[];\r\n } {\r\n return this.opamps.selectionFilterOptions;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////////\r\n // //\r\n // There will be instances where the componentSizing range equals to one value: //\r\n // //\r\n // model.componentSizing.MINIMUM === model.componentSizing.MAXIMUM //\r\n // //\r\n // In such a case, the slider position gets set on the rightmost area of the //\r\n // slider bar. The computed properties below works to handle this, adjusting the //\r\n // stage display in a manner that the slider knob is set to the middle of slider //\r\n // bar. The computations affect the stage displays only, with no foreseen effects //\r\n // to the model. //\r\n // //\r\n // IF (componentSizing.minimum === componentSizng.maximum) { //\r\n // 0 <===== x =====> componentSizing.maximum*2 //\r\n // } ELSE { //\r\n // componentSizing.minimum <===== x =====> componentSizing.maximum //\r\n // } //\r\n // //\r\n ////////////////////////////////////////////////////////////////////////////////////\r\n\r\n get minimumSizingValue(): number {\r\n const maximumValue = this.args.model.componentSizing.maximum;\r\n const minimumValue = this.args.model.componentSizing.minimum;\r\n // This adds a slider range LOWER LIMIT of 0 when both the ACTUAL range's lower and upper limits are equal.\r\n // Otherwize, it utilizes the ACTUAL minimum value as lower limit.\r\n // min == x == max ----> 0 < x\r\n return minimumValue === maximumValue ? 0 : minimumValue;\r\n }\r\n\r\n get maximumSizingValue(): number {\r\n const maximumValue = this.args.model.componentSizing.maximum;\r\n const minimumValue = this.args.model.componentSizing.minimum;\r\n // This adds a slider range UPPER LIMIT of maximumValue*2 when both the ACTUAL range's lower and upper\r\n // limits are equal. Otherwize, it utilizes the ACTUAL maximum value as upper limit.\r\n // min == x == max ----> x < max*2\r\n return minimumValue === maximumValue ? maximumValue * 2 : maximumValue;\r\n }\r\n\r\n get sizingEnabled(): boolean {\r\n const maximumValue = this.args.model.componentSizing.maximum;\r\n const minimumValue = this.args.model.componentSizing.minimum;\r\n // This just sets the disabled attribute on the slider after it had set the stage-level slider limits\r\n // implemented the minimumSizingValue and maximumSizingValue.\r\n return minimumValue === maximumValue ? true : false;\r\n }\r\n\r\n getImplementationList(): { text: string; value: string }[] {\r\n const currentIndex = this.args.index;\r\n const stageDefault = this.args.advisor.getStageDefault(currentIndex);\r\n const implementationList = [];\r\n\r\n if (stageDefault !== null) {\r\n const implementationData = stageDefault.implementationSelection;\r\n for (let i = 0; i < implementationData.selections.length; i++) {\r\n switch (implementationData.selections[i]) {\r\n case FilterConstants.implementationType.sallenKey:\r\n implementationList.push({\r\n text: 'settings.components.implementations.sallen-key',\r\n value: FilterConstants.implementationType.sallenKey,\r\n });\r\n break;\r\n case FilterConstants.implementationType.multipleFeedback:\r\n implementationList.push({\r\n text: 'settings.components.implementations.multiple-feedback',\r\n value: FilterConstants.implementationType.multipleFeedback,\r\n });\r\n break;\r\n case FilterConstants.implementationType.inductor:\r\n implementationList.push({\r\n text: 'settings.components.implementations.inductor',\r\n value: FilterConstants.implementationType.inductor,\r\n });\r\n break;\r\n case FilterConstants.implementationType.firstOrder:\r\n implementationList.push({\r\n text: 'settings.components.implementations.buffered-rc',\r\n value: FilterConstants.implementationType.firstOrder,\r\n });\r\n break;\r\n case FilterConstants.implementationType.deliyannisFriend:\r\n implementationList.push({\r\n text: 'settings.components.implementations.multiple-feedback',\r\n value: FilterConstants.implementationType.deliyannisFriend,\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n return implementationList;\r\n }\r\n\r\n updateStageModel(): void {\r\n // Send Action to Parent Component (if provided)\r\n if (this.args.update) {\r\n this.args.update();\r\n }\r\n }\r\n\r\n updateSliderValues(implementation: string): void {\r\n const currentIndex = this.args.index;\r\n const stageDefaults = this.args.advisor.getImplementationDefaults(currentIndex, implementation);\r\n this.args.model.componentSizing = stageDefaults.componentSizing;\r\n this.args.model.gainRatio = stageDefaults.gainRatio;\r\n }\r\n\r\n @action setImplementation(implementation: { value: string }): void {\r\n if (this.args.model.implementation !== implementation.value) {\r\n this.args.model.implementation = implementation.value;\r\n this.args.model.implementationSelection.selectedItem = implementation.value;\r\n this.updateSliderValues(implementation.value);\r\n this.updateStageModel();\r\n }\r\n }\r\n\r\n @action updateComponentSizing(e: { target: { value: string } }): void {\r\n this.args.model.componentSizing.value = Number(e.target.value);\r\n this.updateStageModel();\r\n }\r\n\r\n @action updateGainRatio(e: { target: { value: string } }): void {\r\n this.args.model.gainRatio.value = Number(e.target.value);\r\n this.updateStageModel();\r\n }\r\n\r\n @action async showOpAmpSelectionDialog(newState: boolean): Promise {\r\n if (newState) {\r\n if (!this.opamps.pstView || !this.opamps.pstMapping) {\r\n if (this.args.systemDialogFunc) this.args.systemDialogFunc('ON', 'loading-opamp-data');\r\n this.opamps.pstView = await this.opamps.pstViewPromise;\r\n this.opamps.pstMapping = await this.opamps.pstMappingPromise;\r\n if (this.args.systemDialogFunc) this.args.systemDialogFunc('OFF', '');\r\n if (!this.opamps.pstView || !this.opamps.pstMapping) {\r\n if (this.args.showNotification)\r\n this.args.showNotification('dialogs.system.title', 'dialogs.system.error-pst-data');\r\n return;\r\n }\r\n }\r\n }\r\n this.opAmpDialogEnabled = newState;\r\n }\r\n\r\n @action updatePart(part: string): void {\r\n this.args.model.opAmp = part;\r\n this.updateStageModel();\r\n }\r\n\r\n @action updateSelectionFilterOptions(\r\n columns: DeviceColumn[] | undefined,\r\n filters: PackedFilterValue[] | undefined,\r\n sortColumns: SortColumnRef[] | undefined,\r\n ): void {\r\n this.opamps.selectionFilterOptions.columns = columns;\r\n this.opamps.selectionFilterOptions.filters = filters;\r\n this.opamps.selectionFilterOptions.sortColumns = sortColumns;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\",{ moduleName: \"filter-wizard/components/settings/tolerances.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './tolerances.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { action } from '@ember/object';\r\nimport { inject as service } from '@ember/service';\r\nimport { tracked as makeTracked } from 'tracked-built-ins';\r\nimport type SiteService from '@ebiz/ember-aditools-site/services/aditools-site';\r\nimport type ToleranceInput from '../../models/inputs/tolerance';\r\nimport type ToleranceAdvisor from '../../models/advisors/tolerance';\r\n\r\ninterface ToleranceSettingsArgs {\r\n model: ToleranceInput;\r\n advisor: ToleranceAdvisor;\r\n updateModel?: (inputType: string, modeldata: ToleranceInput) => void;\r\n}\r\n\r\nexport default class TolerancesSettings extends Component {\r\n @service('aditools-site') declare siteconfig: SiteService;\r\n @tracked workingModel: ToleranceInput;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Initialization //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n constructor(owner: unknown, args: ToleranceSettingsArgs) {\r\n super(owner, args);\r\n this.workingModel = makeTracked(this.args.advisor.clone(this.args.model));\r\n }\r\n\r\n get capacitorToleranceSelection(): { text: string; value: string } | undefined {\r\n const selected = this.workingModel.capacitorTolerance;\r\n const selection = this.workingModel.capacitorToleranceList.find((item: { value: string }) => {\r\n return item.value === selected;\r\n });\r\n return selection;\r\n }\r\n\r\n get resistorToleranceSelection(): { text: string; value: string } | undefined {\r\n const selected = this.workingModel.resistorTolerance;\r\n const selection = this.workingModel.resistorToleranceList.find((item: { value: string }) => {\r\n return item.value === selected;\r\n });\r\n return selection;\r\n }\r\n\r\n get inductorToleranceSelection(): { text: string; value: string } | undefined {\r\n const selected = this.workingModel.inductorTolerance;\r\n const selection = this.workingModel.inductorToleranceList.find((item: { value: string }) => {\r\n return item.value === selected;\r\n });\r\n return selection;\r\n }\r\n\r\n get opAmpGbwToleranceSelection(): { text: string; value: string } | undefined {\r\n const selected = this.workingModel.opAmpGbwTolerance;\r\n const selection = this.workingModel.opAmpGbwToleranceList.find((item: { value: string }) => {\r\n return item.value === selected;\r\n });\r\n return selection;\r\n }\r\n\r\n get capacitorPreferredSeriesSelection(): { text: string; value: string } | undefined {\r\n const selected = this.workingModel.capacitorPreferredSeries;\r\n const selection = this.workingModel.capacitorPreferredSeriesList.find((item: { value: string }) => {\r\n return item.value === selected;\r\n });\r\n return selection;\r\n }\r\n\r\n get resistorPreferredSeriesSelection(): { text: string; value: string } | undefined {\r\n const selected = this.workingModel.resistorPreferredSeries;\r\n const selection = this.workingModel.resistorPreferredSeriesList.find((item: { value: string }) => {\r\n return item.value === selected;\r\n });\r\n return selection;\r\n }\r\n\r\n get inductorPreferredSeriesSelection(): { text: string; value: string } | undefined {\r\n const selected = this.workingModel.inductorPreferredSeries;\r\n const selection = this.workingModel.inductorPreferredSeriesList.find((item: { value: string }) => {\r\n return item.value === selected;\r\n });\r\n return selection;\r\n }\r\n\r\n get hasInductors(): boolean {\r\n return this.args.advisor.hasInductors();\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Utility Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n updateCurrentModel(): void {\r\n if (this.args.updateModel && this.args.advisor) {\r\n this.args.updateModel('tolerances', this.args.advisor.clone(this.workingModel));\r\n }\r\n }\r\n\r\n updateComponentsModel(): void {\r\n if (this.args.advisor) {\r\n this.args.advisor.updateComponentsModel(this.workingModel);\r\n }\r\n }\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Component Actions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n @action setCapacitorTolerance(e: { text: string; value: string }): void {\r\n this.workingModel.capacitorTolerance = e.value;\r\n this.updateCurrentModel();\r\n }\r\n\r\n @action setResistorTolerance(e: { text: string; value: string }): void {\r\n this.workingModel.resistorTolerance = e.value;\r\n this.updateCurrentModel();\r\n this.updateComponentsModel();\r\n }\r\n\r\n @action setInductorTolerance(e: { text: string; value: string }): void {\r\n this.workingModel.inductorTolerance = e.value;\r\n this.updateCurrentModel();\r\n }\r\n\r\n @action setOpAmpGbwTolerance(e: { text: string; value: string }): void {\r\n this.workingModel.opAmpGbwTolerance = e.value;\r\n this.updateCurrentModel();\r\n }\r\n\r\n @action setCapacitorPreferredSeries(e: { text: string; value: string }): void {\r\n this.workingModel.capacitorPreferredSeries = e.value;\r\n this.updateCurrentModel();\r\n }\r\n\r\n @action setResistorPreferredSeries(e: { text: string; value: string }): void {\r\n this.workingModel.resistorPreferredSeries = e.value;\r\n this.updateCurrentModel();\r\n }\r\n\r\n @action setInductorPreferredSeries(e: { text: string; value: string }): void {\r\n this.workingModel.inductorPreferredSeries = e.value;\r\n this.updateCurrentModel();\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\r\\n
\\r\\n \\r\\n
\\r\\n\",{ moduleName: \"filter-wizard/components/tab-button.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './tab-button.hbs'; */\nimport Component from '@glimmer/component';\r\nimport { inject as service } from '@ember/service';\r\nimport type IntlService from 'ember-intl/services/intl';\r\n\r\ninterface TabButtonArgs {\r\n activeTab: string;\r\n enabledTabs: string[];\r\n type: string;\r\n}\r\n\r\nexport default class TabButton extends Component {\r\n @service declare intl: IntlService;\r\n\r\n get isEnabled(): boolean {\r\n const index = this.args.enabledTabs.findIndex((item) => {\r\n return item === this.args.activeTab;\r\n });\r\n return !(\r\n index === -1 ||\r\n (this.args.type === 'previous' && index === 0) ||\r\n (this.args.type === 'next' && index === this.args.enabledTabs.length - 1)\r\n );\r\n }\r\n\r\n get isPrevious(): boolean {\r\n return this.args.type === 'previous';\r\n }\r\n\r\n get isNext(): boolean {\r\n return this.args.type === 'next';\r\n }\r\n\r\n get label(): string {\r\n return this.args.type === 'next'\r\n ? this.intl.t('navbar.next-tab')\r\n : this.args.type === 'previous'\r\n ? this.intl.t('navbar.previous-tab')\r\n : 'tab';\r\n }\r\n\r\n get icon(): string {\r\n return this.args.type === 'next' ? 'Icon_Expand' : 'Icon_Collapse';\r\n }\r\n\r\n get tab(): string | null {\r\n const index = this.args.enabledTabs.findIndex((item) => {\r\n return item === this.args.activeTab;\r\n });\r\n if (\r\n index === -1 ||\r\n (this.args.type === 'previous' && index === 0) ||\r\n (this.args.type === 'next' && index === this.args.enabledTabs.length - 1) ||\r\n !this.args.enabledTabs[index]\r\n ) {\r\n return null;\r\n }\r\n if (this.args.type === 'previous' && this.args.enabledTabs[index - 1]) {\r\n return this.args.enabledTabs[index - 1] as string;\r\n }\r\n if (this.args.type === 'next' && this.args.enabledTabs[index + 1]) {\r\n return this.args.enabledTabs[index + 1] as string;\r\n }\r\n return this.args.enabledTabs[index] as string;\r\n }\r\n}\r\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\r\\n
\\r\\n \\r\\n
\\r\\n {{#let (component (concat \\\"settings/\\\" @tab)) as |SettingsSubpanel|}}\\r\\n \\r\\n {{/let}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\",{ moduleName: \"filter-wizard/components/tab-panel.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './tab-panel.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","\n export default (function() {\n if (typeof FastBoot !== 'undefined') {\nreturn FastBoot.config('filter-wizard');\n} else {\nvar prefix = 'filter-wizard';try {\n var metaName = prefix + '/config/environment';\n var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n var config = JSON.parse(decodeURIComponent(rawConfig));\n\n var exports = { 'default': config };\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n}\ncatch(err) {\n throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n}\n })().default;\n ","import Controller from '@ember/controller';\r\nimport { inject as service } from '@ember/service';\r\nimport { action, set } from '@ember/object';\r\nimport { camelize, dasherize } from '@ember/string';\r\nimport { next, later } from '@ember/runloop';\r\nimport { tracked } from '@glimmer/tracking';\r\nimport { dependentKeyCompat } from '@ember/object/compat';\r\n\r\nimport SpecificationsAdvisor from '../models/advisors/specification';\r\nimport ComponentsAdvisor from '../models/advisors/component-selection';\r\nimport TolerancesAdvisor from '../models/advisors/tolerance';\r\nimport NoiseAdvisor from '../models/advisors/noise';\r\nimport FigureMap from '../figure-map';\r\nimport FilterConstants from '../filter-constants';\r\nimport {\r\n sendTabExitAnalytics,\r\n sendTabNavigationAnalytics,\r\n sendPartStageDataNextStepsAnalytics,\r\n sendLocaleChangeAnalytics,\r\n shareDesignAnalytics,\r\n sendOpenCloseDialogAnalytics,\r\n downloadDesignAnalytics,\r\n toolbarLinkClickAnalytics,\r\n} from '../utils/analytics';\r\nimport { downloadFile } from '../utils/download';\r\nimport DesignFiles from '../utils/design-files';\r\nimport RSVP from 'rsvp';\r\nimport ENV from '../config/environment';\r\nimport { getURL } from '../utils/resource';\r\nimport * as SpiceNetlistsUtil from '../utils/spice-netlists';\r\nimport * as CommonUtils from '../utils/common';\r\nimport * as SpiceSchematicsUtil from '../utils/spice-schematics';\r\n\r\n///////////////////////////////////////////////////////////////////////////////\r\n// Index Controller: Controller for the main route of the application, //\r\n// controlling the flow of information between the UI and the Index Model. //\r\n///////////////////////////////////////////////////////////////////////////////\r\n\r\n// Map tab names to corresponding input and result members of the model.\r\n// TODO: Convention over configuration with a camelize function would help here.\r\nlet tabList = ['filter-type', 'specifications', 'components', 'tolerances', 'next-steps'];\r\nlet tabIcons = {\r\n 'filter-type': 'hf-response',\r\n specifications: 'step-plot',\r\n components: 'block-diagram',\r\n tolerances: 'step-plot',\r\n 'next-steps': 'timing',\r\n};\r\nlet inputModels = {\r\n 'filter-type': 'filterType', // 'model.inputs.filterType',\r\n specifications: 'specifications', // 'model.inputs.specifications',\r\n components: 'components', // 'model.inputs.components',\r\n tolerances: 'tolerances', // 'model.inputs.tolerances',\r\n 'next-steps': 'nextSteps', // 'model.inputs.nextSteps',\r\n noise: 'noise', // 'model.inputs.noise',\r\n};\r\nlet inputModelReleaseOrder = ['noise', 'next-steps', 'tolerances', 'components', 'specifications', 'filter-type'];\r\nlet defaultFigures = {\r\n 'filter-type': '',\r\n specifications: 'magnitudeDb',\r\n components: 'circuit',\r\n tolerances: 'circuit',\r\n 'next-steps': 'circuit',\r\n};\r\nlet figuresOfTab = FigureMap;\r\n\r\nconst videoIds = [\r\n 'analog_digital',\r\n 'active_passive',\r\n 'chebyshev_butterworth_bessel',\r\n 'quality_factor',\r\n 'active_filter',\r\n 'sallenkey_feedback',\r\n 'gain_attenuation',\r\n 'opamp_output_impedance',\r\n 'picking_components',\r\n];\r\n\r\nlet delay = function (t, v) {\r\n return new Promise(function (resolve) {\r\n setTimeout(resolve.bind(null, v), t);\r\n });\r\n};\r\n\r\nexport default class IndexController extends Controller {\r\n @service logger;\r\n @service intl;\r\n @service('aditools-site') siteconfig; // Used by videos\r\n @service persistence;\r\n @service('aditools-analytics') analytics;\r\n @service share;\r\n @service download;\r\n @service cdp;\r\n @service fastboot;\r\n @service feedback;\r\n @service opamps;\r\n @service channel;\r\n @service assets;\r\n @service snapshot;\r\n\r\n @tracked tool = null;\r\n @tracked width = null;\r\n @tracked visitedTabs = [];\r\n @tracked activeTab = null;\r\n @tracked selectedFigure = null;\r\n @tracked fromErrors = [];\r\n @tracked fromModel = [];\r\n @tracked videoIds = videoIds;\r\n\r\n queryParams = ['lang', 'pdf', 'tool', 'design', 'invokerId'];\r\n pdf = 'remote';\r\n lang = null;\r\n design = null;\r\n invokerId = null;\r\n advisors = null;\r\n tabs = null;\r\n errors = null;\r\n tabIcons = null;\r\n notificationDialog = null;\r\n helpDialog = null;\r\n systemDialog = null;\r\n dialogFlags = null;\r\n edgeWarning = null;\r\n designFiles = null;\r\n designName = null;\r\n designDesc = null;\r\n pdfFigures = null;\r\n evalBoardDisplayData = null;\r\n evalBoardMultiple = null;\r\n shoppingCartBaseUrl = null;\r\n shoppingCartEvalBoardUrl = null;\r\n stackedTabs = null;\r\n height = null;\r\n navElement = null;\r\n boundResizeListener = null;\r\n htmlToCanvas = null;\r\n pdfReport = null;\r\n systemLock = null;\r\n handShakeTimeOut = null;\r\n designSendTimeOut = null;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Initialization //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n constructor(...args) {\r\n super(...args);\r\n this.tabs = tabList;\r\n this.activeTab = this.tabs[0];\r\n set(this, 'errors', []);\r\n set(this, 'advisors', {});\r\n set(this, 'tabIcons', tabIcons);\r\n set(this, 'notificationDialog', { title: '', message: '', enabled: false });\r\n set(this, 'helpDialog', { title: '', message: '', enabled: false });\r\n set(this, 'edgeWarning', { title: '', message: '', enabled: false });\r\n set(this, 'systemDialog', { message: '', enabled: false });\r\n set(this, 'dialogFlags', {\r\n orderSamplesEnabled: false,\r\n evalBoardEnabled: false,\r\n mailToColleagueEnabled: false,\r\n evalBoardConfirmationEnabled: false,\r\n algorithmEnabled: false,\r\n });\r\n set(\r\n this,\r\n 'designFiles',\r\n new DesignFiles(this.cdp, this.persistence, this.logger, this.intl, this.fastboot, this.assets),\r\n );\r\n set(this, 'pdfFigures', { render: false, components: [] });\r\n set(this, 'stackedTabs', false);\r\n\r\n this.fromErrors = this._updateFromErrors('');\r\n this.fromModel = this._updateFromModel();\r\n\r\n set(this, 'figurePerTab', Object.assign({}, defaultFigures));\r\n set(this, 'systemLock', { title: '', message: '', enabled: false });\r\n }\r\n\r\n setupStudioLinks() {\r\n this.precisionStudioMenuLinks = {\r\n PrecisionStudioUrl: this.siteconfig.PrecisionStudioUrl,\r\n FilterWizardUrl: this.siteconfig.FilterWizardUrl,\r\n AdcDriverUrl: this.siteconfig.AdcDriverUrl,\r\n PhotodiodeUrl: this.siteconfig.PhotodiodeUrl,\r\n DiamondUrl: this.siteconfig.DiamondUrl,\r\n SimDDSUrl: this.siteconfig.SimDDSUrl,\r\n VirtualEvalUrl: this.siteconfig.VirtualEvalUrl,\r\n DACErrorCalculatorUrl: this.siteconfig.DACErrorCalculatorUrl,\r\n NoiseUrl: this.siteconfig.NoiseUrl,\r\n SignalChainDesignerUrl: this.siteconfig.SignalChainDesignerUrl,\r\n };\r\n }\r\n\r\n setupShoppingCartUrl() {\r\n this.logger.time('shoppingCartTime');\r\n if (!this.isDestroyed) {\r\n set(this, 'shoppingCartBaseUrl', this.siteconfig.ShoppingCartBaseUrl);\r\n set(\r\n this,\r\n 'shoppingCartEvalBoardUrl',\r\n this.siteconfig.ShoppingCartEvalBoardUrl.replace('{cdpLocale}', this.siteconfig.CdpLocale),\r\n );\r\n }\r\n this.logger.timeEnd('shoppingCartTime');\r\n }\r\n\r\n setupAdvisors() {\r\n const model = this.model;\r\n set(this.advisors, 'specifications', new SpecificationsAdvisor(model));\r\n set(this.advisors, 'components', new ComponentsAdvisor(model));\r\n set(this.advisors, 'tolerances', new TolerancesAdvisor(model));\r\n set(this.advisors, 'noise', new NoiseAdvisor(model));\r\n }\r\n\r\n checkBrowserSuitability() {\r\n set(this, 'edgeWarning', {\r\n title: this.intl.t('help.to-precision-warning.title'),\r\n message: this.intl.t('help.to-precision-warning.message'),\r\n enabled: this.isToPrecisionUnreliable(),\r\n });\r\n }\r\n\r\n isToPrecisionUnreliable() {\r\n return (2e-6).toPrecision(3) !== '0.00000200';\r\n }\r\n\r\n setupConnectionToChannel() {\r\n if (this.invokerId) {\r\n return RSVP.Promise.resolve()\r\n .then(() => {\r\n this.systemDialogFunc('ON', 'connecting-to', { tool: this.toolNameDisplay });\r\n return delay(1000).then(() => {\r\n this.channel.setInvokerId(this.invokerId);\r\n return;\r\n });\r\n })\r\n .then(() => {\r\n let eventList = {\r\n onConnect: this.onConnectHandler,\r\n onDisconnect: this.onDisconnectHandler,\r\n onData: this.onDataHandler,\r\n };\r\n set(this, 'handShakeTimeOut', { timeOut: null, handlerFunc: this.handShakeTimeOutError });\r\n this.logger.log('Setup Integration Connection');\r\n return this.channel.connect(eventList, this.handShakeTimeOut);\r\n })\r\n .catch((error) => {\r\n this.systemDialogFunc('OFF', '');\r\n set(this.systemLock, 'enabled', true);\r\n set(this.systemLock, 'title', this.intl.t('dialogs.connect-to.title-error'));\r\n set(\r\n this.systemLock,\r\n 'message',\r\n this.intl.t('dialogs.connect-to.message-error', { tool: this.toolNameDisplay }),\r\n );\r\n this.logger.log('Error:' + error.toString());\r\n });\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed Properties - used from handlebars //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Enabled tabs always include visited tabs + the next\r\n // Filter type tab is not considered visited until a filter type is selected.\r\n @dependentKeyCompat\r\n get enabledTabs() {\r\n let visitedTabs = this.visitedTabs.slice(),\r\n tabs = this.tabs,\r\n fromErrors = this.fromErrors,\r\n fromModel = this.fromModel,\r\n result = [];\r\n for (let i = 1, iLen = tabs.length; i < iLen; i++) {\r\n if (!visitedTabs.includes(tabs[i]) && visitedTabs.includes(tabs[i - 1])) {\r\n visitedTabs.push(tabs[i]);\r\n break;\r\n }\r\n }\r\n if (visitedTabs.length === 0) {\r\n visitedTabs.push('filter-type');\r\n }\r\n for (let i = 0; i < visitedTabs.length; i++) {\r\n if (fromErrors.includes(visitedTabs[i]) && fromModel.includes(visitedTabs[i])) {\r\n result.push(visitedTabs[i]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n get isSpecificationsDisabled() {\r\n return !this.enabledTabs.includes('specifications');\r\n }\r\n\r\n get isComponentsDisabled() {\r\n return !this.enabledTabs.includes('components');\r\n }\r\n\r\n get isTolerancesDisabled() {\r\n return !this.enabledTabs.includes('tolerances');\r\n }\r\n\r\n get isNextStepssDisabled() {\r\n return !this.enabledTabs.includes('next-steps');\r\n }\r\n\r\n @dependentKeyCompat\r\n get activeTabFieldName() {\r\n return camelize(this.activeTab);\r\n }\r\n\r\n @dependentKeyCompat\r\n get currentTabFigures() {\r\n return figuresOfTab[this.activeTab];\r\n }\r\n\r\n @dependentKeyCompat\r\n get figure() {\r\n let tab = this.activeTab,\r\n selectedName = this.selectedFigure,\r\n figureItem = figuresOfTab[tab].find(function (item) {\r\n return item.name === selectedName;\r\n });\r\n return figureItem;\r\n }\r\n\r\n @dependentKeyCompat\r\n get isWideDisplay() {\r\n let result = this.width >= 950 ? true : false;\r\n return result;\r\n }\r\n\r\n @dependentKeyCompat\r\n get isNarrowDisplay() {\r\n let result = this.width < 950 ? true : false;\r\n return result;\r\n }\r\n\r\n @dependentKeyCompat\r\n get toolNameDisplay() {\r\n return this.tool ? decodeURIComponent(this.tool) : null;\r\n }\r\n\r\n @dependentKeyCompat\r\n get orderEvalboardDisplay() {\r\n return 'display';\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Internal Support Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n _clearAllInputData() {\r\n for (let model of inputModelReleaseOrder) {\r\n set(this.model.inputs, inputModels[model], null);\r\n }\r\n }\r\n\r\n _replaceInputErrors(inputType, newErrors) {\r\n for (let error of this.errors) {\r\n if (error.tab !== inputType) {\r\n //TODO: Change error.tab to error.inputType\r\n newErrors.push(error);\r\n }\r\n }\r\n set(this, 'errors', newErrors);\r\n }\r\n\r\n _selectTab(trigger, tab) {\r\n if (this.enabledTabs.includes(tab) && tab !== this.activeTab) {\r\n // Send Analytics Data from Previous Tab\r\n let oldTab = this.activeTab;\r\n if (trigger !== 'LOAD') {\r\n sendTabExitAnalytics(this.model, oldTab, this.analytics, this.logger);\r\n }\r\n\r\n this._spin();\r\n next(this, () => {\r\n if (!this.isDestroying && !this.isDestroyed) {\r\n // Clear the Errors when we move to a different tab, we will just regenerate them again once we visit the tab again\r\n set(this, 'errors', []);\r\n\r\n if (tab === 'components') {\r\n this.systemDialogFunc('ON', 'loading-opamp-data');\r\n this.opamps.getRequest().then(() => {\r\n this.systemDialogFunc('OFF', '');\r\n this._nospin();\r\n if (this.opamps.getOpAmps() !== null) {\r\n // Update Selected Figure on Selected Tab\r\n this._updateTabFigure(tab, this._updateVisitedTabs(tab));\r\n\r\n // Update Tab Input Model\r\n this._updateInputModel(tab);\r\n\r\n // If there is an error, find the first tab where an error occurred\r\n const errorTab = this.errors.length > 0 ? this.errors[0].tab : '';\r\n\r\n // Update Tab\r\n this.activeTab = errorTab !== '' ? errorTab : tab;\r\n\r\n // If there is an error, focus to that tab\r\n this._forceFocusTab(errorTab);\r\n\r\n // Update fromErrors, fromModel\r\n this.fromErrors = this._updateFromErrors(errorTab);\r\n this.fromModel = this._updateFromModel();\r\n } else {\r\n // OpAmp Data Unavailable notification\r\n this._showNotification('dialogs.system.title', 'dialogs.system.error-opamp-data');\r\n return;\r\n }\r\n });\r\n } else {\r\n // Update Selected Figure on Selected Tab\r\n this._updateTabFigure(tab, this._updateVisitedTabs(tab));\r\n\r\n // Update Tab Input Model\r\n this._updateInputModel(tab);\r\n\r\n // If there is an error, find the first tab where an error occurred\r\n const errorTab = this.errors.length > 0 ? this.errors[0].tab : '';\r\n\r\n // Update Tab\r\n this.activeTab = errorTab !== '' ? errorTab : tab;\r\n\r\n // If there is an error, focus to that tab\r\n this._forceFocusTab(errorTab);\r\n\r\n // Update fromErrors, fromModel\r\n this.fromErrors = this._updateFromErrors(errorTab);\r\n this.fromModel = this._updateFromModel();\r\n\r\n this._nospin();\r\n }\r\n }\r\n });\r\n\r\n // If Tabs is Next Steps, send Analytics Data for Parts\r\n if (camelize(tab) === FilterConstants.tabs.nextSteps) {\r\n sendPartStageDataNextStepsAnalytics(this.model, this.analytics, this.intl);\r\n }\r\n\r\n // Send Analytics that a user has Selected a Tab (except for a LOAD trigger that resets the tab back to )\r\n if (trigger !== 'LOAD') {\r\n sendTabNavigationAnalytics(oldTab, tab, trigger, this.analytics, this.logger);\r\n }\r\n\r\n // Logging\r\n this.logger.log('Tab = ' + tab);\r\n }\r\n }\r\n\r\n _updateVisitedTabs(tab) {\r\n let isInitialVisit = false;\r\n let visitedTabs = this.visitedTabs.slice();\r\n if (tab !== 'filter-type' && !visitedTabs.includes(tab)) {\r\n visitedTabs.push(tab);\r\n this.visitedTabs = visitedTabs;\r\n isInitialVisit = true;\r\n }\r\n return isInitialVisit;\r\n }\r\n\r\n _updateInputModel(inputType) {\r\n // If we're moving forward, restructure all *intermediate* tabs between current and new tab\r\n // If the current inputType isn't a tab, this part will be a no-op\r\n let first = tabList.indexOf(this.activeTab);\r\n let last = tabList.indexOf(inputType);\r\n if (last > first) {\r\n for (let i = first + 1; i < last; i++) {\r\n let advisor = this.advisors[tabList[i]];\r\n if (advisor && advisor.restructure && tabList[i] in inputModels) {\r\n set(\r\n this.model.inputs,\r\n inputModels[tabList[i]],\r\n advisor.restructure(this.model.inputs[inputModels[tabList[i]]]),\r\n );\r\n }\r\n if (advisor && advisor.validate) {\r\n let tabErrorList = advisor.validate(this.model.inputs[inputModels[tabList[i]]], []);\r\n this._replaceInputErrors(inputType, tabErrorList);\r\n }\r\n }\r\n }\r\n // Now deal with the current item\r\n let advisor = this.advisors[inputType];\r\n if (advisor && inputType in inputModels) {\r\n if (!this.model.inputs[inputModels[inputType]]) {\r\n // Brand new model\r\n set(this.model.inputs, inputModels[inputType], advisor.generate());\r\n } else if (advisor.restructure) {\r\n // Only restructure if advisor supports it\r\n set(this.model.inputs, inputModels[inputType], advisor.restructure(this.model.inputs[inputModels[inputType]]));\r\n }\r\n }\r\n }\r\n\r\n _updateTabFigure(tab, initialVisit) {\r\n // Get the current selected figure\r\n if (figuresOfTab[tab].length > 0) {\r\n // Let's generalize it, not just filter-type, but tabs without figures\r\n let selectedFigure = this.selectedFigure,\r\n figureExists =\r\n !!selectedFigure &&\r\n figuresOfTab[tab].some(function (item) {\r\n return item.name === selectedFigure;\r\n });\r\n this.logger.log(`initialVisit = ${initialVisit}; figureExists = ${figureExists}`);\r\n\r\n // If the tab is visited for the first time, automatically set the default figure for the selected tab.\r\n // If not, check first if the current figure exists on the new selected tab, if not, then use the default figure.\r\n let newSelectedFigure = this.figurePerTab[tab];\r\n this._spin();\r\n next(this, () => {\r\n if (!this.isDestroying && !this.isDestroyed) {\r\n this._updateInputModel(newSelectedFigure);\r\n this.selectedFigure = newSelectedFigure;\r\n this._nospin();\r\n }\r\n });\r\n }\r\n }\r\n\r\n _showNotification(title, message, msgparams) {\r\n let adjparams = msgparams;\r\n if (adjparams) {\r\n adjparams.htmlSafe = 'true';\r\n } else {\r\n adjparams = { htmlSafe: 'true' };\r\n }\r\n set(this.notificationDialog, 'title', this.intl.t(title, { htmlSafe: 'true' }));\r\n set(this.notificationDialog, 'message', this.intl.t(message, adjparams));\r\n set(this.notificationDialog, 'enabled', true);\r\n }\r\n\r\n _showHelp(title, message, msgparams) {\r\n let adjparams = msgparams;\r\n if (adjparams) {\r\n adjparams.htmlSafe = 'true';\r\n } else {\r\n adjparams = { htmlSafe: 'true' };\r\n }\r\n set(this.helpDialog, 'title', this.intl.t(title, { htmlSafe: 'true' }));\r\n set(this.helpDialog, 'message', this.intl.t(message, adjparams));\r\n set(this.helpDialog, 'enabled', true);\r\n }\r\n\r\n _downloadDesign(all) {\r\n let filesToUpload = [];\r\n let isLocalPDF = this.pdf ? this.pdf.toLowerCase() !== 'remote' : false;\r\n this.logger.time('downloadDesignTime');\r\n return RSVP.Promise.resolve()\r\n .then(() => {\r\n this.systemDialogFunc('ON', 'download-requesting');\r\n this.logger.time('downloadDataBuildTime');\r\n return delay(100).then(() => {\r\n // Delay to allow Dialog Message and Spinner to Appear\r\n if (all) {\r\n this._createPDFImages();\r\n if (!this.htmlToCanvas) {\r\n return Promise.resolve(import('html2canvas'))\r\n .then((module) => {\r\n return module.default;\r\n })\r\n .then((htmlToCanvas) => {\r\n this.htmlToCanvas = htmlToCanvas;\r\n });\r\n }\r\n }\r\n return;\r\n });\r\n })\r\n .then(() => {\r\n return delay(10).then(() => {\r\n // Delay to allow Dialog Message to Appear\r\n if (all) {\r\n if (!this.pdfReport && isLocalPDF) {\r\n return RSVP.Promise.resolve(import('@ebiz/aditools-design-report'))\r\n .then((module) => {\r\n return module.default;\r\n })\r\n .then((module) => {\r\n this.pdfReport = module;\r\n return;\r\n })\r\n .then(() => {\r\n return this._buildPDFFonts();\r\n })\r\n .then((pdfFonts) => {\r\n this.designFiles.pdfFonts = pdfFonts;\r\n return;\r\n });\r\n }\r\n }\r\n return;\r\n });\r\n })\r\n .then(() => {\r\n let savedDesignFile = [];\r\n if (all) {\r\n // 1. Add JSON Design to the Upload List\r\n this.systemDialogFunc('ON', 'download-create-design');\r\n savedDesignFile = this.designFiles.buildSavedDesign(\r\n this.model.inputs,\r\n this.visitedTabs,\r\n this.designName,\r\n this.designDesc,\r\n this.advisors['components'],\r\n );\r\n }\r\n return delay(10).then(() => {\r\n // Delay to allow Dialog Message to Appear\r\n return savedDesignFile;\r\n });\r\n })\r\n .then((savedDesignFile) => {\r\n let csvFiles = [];\r\n filesToUpload = filesToUpload.concat(savedDesignFile);\r\n if (all) {\r\n // 2. Add Graph Data (which will be converted to CSV in the API)\r\n this.systemDialogFunc('ON', 'download-create-data');\r\n csvFiles = this.designFiles.buildGraphToCSVDataFiles(this.model.results);\r\n }\r\n return delay(10).then(() => {\r\n // Delay to allow Dialog Message to Appear\r\n return csvFiles;\r\n });\r\n })\r\n .then((csvFiles) => {\r\n let evalBoardFiles = [];\r\n filesToUpload = filesToUpload.concat(csvFiles);\r\n if (all) {\r\n // 3. Add Eval Board Links to ZIP Files to be Added to the Upload List\r\n this.systemDialogFunc('ON', 'download-create-eval-board');\r\n evalBoardFiles = this.designFiles.buildEvalBoardFiles(\r\n this.model.results.nextSteps,\r\n this.siteconfig.AdiLocale,\r\n );\r\n }\r\n return delay(10).then(() => {\r\n // Delay to allow Dialog Message to Appear\r\n return evalBoardFiles;\r\n });\r\n })\r\n .then((evalBoardFiles) => {\r\n let bomFile = [];\r\n filesToUpload = filesToUpload.concat(evalBoardFiles);\r\n if (all) {\r\n // 4. Add BOM Data (which will be converted to CSV in the API)\r\n this.systemDialogFunc('ON', 'download-create-bom');\r\n bomFile = this.designFiles.buildBOMData(this.model.results.nextSteps);\r\n }\r\n return delay(10).then(() => {\r\n return bomFile;\r\n });\r\n })\r\n .then((bomFile) => {\r\n filesToUpload = filesToUpload.concat(bomFile);\r\n this.systemDialogFunc('ON', 'download-create-spice');\r\n // Get the Macro Models for the Netlists\r\n let opAmpsList = this.model.inputs.components.individualStageInputs.map((item) => {\r\n return item.opAmp;\r\n });\r\n let opAmpsListGeneric = opAmpsList.map((item) => {\r\n return this.opamps.getOpAmp(item).generic.toUpperCase();\r\n });\r\n let macroModels = SpiceNetlistsUtil.getModelFiles(opAmpsListGeneric, this.cdp);\r\n return delay(10).then(async () => {\r\n // Delay to allow Dialog Message to Appear\r\n let modelFiles = {};\r\n for (let i = 0; i < opAmpsList.length; i++) {\r\n modelFiles[opAmpsList[i]] = await macroModels[opAmpsListGeneric[i]];\r\n }\r\n return [modelFiles, opAmpsList];\r\n });\r\n })\r\n .then(([modelFiles, opAmpsList]) => {\r\n // 5. Add the Spice Files (Netlists) to the Upload List\r\n let pathURL = this.siteconfig.SpiceNetlistsUrl;\r\n return SpiceNetlistsUtil.getSpiceNetListFiles(\r\n pathURL,\r\n this.siteconfig.MediaUrl,\r\n this.siteconfig.AdiLocale,\r\n opAmpsList,\r\n all ? 'all' : 'spice',\r\n modelFiles,\r\n this.model,\r\n this.assets,\r\n this.logger,\r\n this.fastboot,\r\n );\r\n })\r\n .then((netListFilesAndParts) => {\r\n filesToUpload = filesToUpload.concat(netListFilesAndParts.downloadFiles);\r\n // 6. Add the Spice Files (Schematics) to the Upload List\r\n //let directory = all ? FilterConstants.spiceFolderDownloadPath : '';\r\n let pathURL = this.siteconfig.SpiceSchematicsUrl;\r\n return SpiceSchematicsUtil.getSpiceSchematicFiles(\r\n pathURL,\r\n all ? 'all' : 'spice',\r\n this.model,\r\n this.assets,\r\n this.logger,\r\n this.fastboot,\r\n this.intl,\r\n netListFilesAndParts.netListParts,\r\n );\r\n })\r\n .then((spiceFiles) => {\r\n if (spiceFiles !== null && spiceFiles.length > 0) {\r\n filesToUpload = filesToUpload.concat(spiceFiles);\r\n }\r\n // 7. Generate Images for PDF Use\r\n let imagePromiseArray = [];\r\n if (all) {\r\n this.systemDialogFunc('ON', 'download-create-graph');\r\n let pdfFigureList = this.pdfFigures.components;\r\n for (let i = 0; i < pdfFigureList.length; i++) {\r\n // I can actually use _convertHTMLToImage for everything, but when it comes to large SVGs performance\r\n // seems to degrade. Using this If Block improves performance\r\n if (i !== 10) {\r\n // For the Graphs\r\n imagePromiseArray.push(this.snapshot.convertSVGToImage('#pdfimage-' + pdfFigureList[i].name));\r\n\r\n // For debugging/testing purposes, you can also use this.\r\n /*\r\n imagePromiseArray.push(\r\n this.snapshot.convertHTMLToImage('#pdfimage-' + pdfFigureList[i].name, this.htmlToCanvas)\r\n );\r\n */\r\n } else {\r\n // For the Stages\r\n imagePromiseArray.push(\r\n this.snapshot.convertHTMLToImage('#pdfimage-' + pdfFigureList[i].name, this.htmlToCanvas),\r\n );\r\n }\r\n }\r\n }\r\n return delay(10).then(() => {\r\n // Delay to allow Dialog Message to Appear\r\n return RSVP.Promise.all(imagePromiseArray);\r\n });\r\n })\r\n .then((imageList) => {\r\n let pdfFile = [];\r\n if (all) {\r\n // 8. Add Data for PDF Creation to the Upload List\r\n this.systemDialogFunc('ON', 'download-create-pdf');\r\n if (isLocalPDF) {\r\n // PDF is created by Client\r\n pdfFile = this.designFiles.buildPDFBinaryData(\r\n this.model,\r\n imageList,\r\n this.designName,\r\n this.designDesc,\r\n this.pdfReport,\r\n );\r\n } else {\r\n // PDF is created by ToolsAPI\r\n pdfFile = this.designFiles.buildPDFData(this.model, imageList, this.designName, this.designDesc);\r\n }\r\n }\r\n return delay(10).then(() => {\r\n // Delay to allow Dialog Message to Appear\r\n return pdfFile;\r\n });\r\n })\r\n .then((pdfFile) => {\r\n filesToUpload = filesToUpload.concat(pdfFile);\r\n // 9. Build Download Data\r\n let downloadData = {\r\n ToolId: 1,\r\n ToolName: 'FW',\r\n UploadFiles: filesToUpload,\r\n };\r\n this.logger.timeEnd('downloadDataBuildTime');\r\n return downloadData;\r\n })\r\n .then((downloadData) => {\r\n // 10. Send Download Data to API\r\n this.systemDialogFunc('ON', 'download-downloading');\r\n this.download.downloadDesign(downloadData).then(([contentType, fileName, result]) => {\r\n // 11. Download Finished\r\n return delay(10).then(() => {\r\n // Delay to allow Dialog Message to Appear\r\n this.systemDialogFunc('OFF', '');\r\n set(this, 'pdfFigures', { render: false, components: [] });\r\n if (result !== null) {\r\n downloadFile(contentType, fileName, result);\r\n } else {\r\n // Error Status\r\n this._showNotification('download.error-title', 'download.error-message');\r\n }\r\n this.logger.timeEnd('downloadDesignTime');\r\n });\r\n });\r\n })\r\n .catch((error) => {\r\n this.systemDialogFunc('OFF', '');\r\n this._showNotification('download.error-title', 'download.error-message');\r\n this.logger.log('Error:' + error.toString());\r\n this.logger.timeEnd('downloadDesignTime');\r\n });\r\n }\r\n\r\n _createPDFImages() {\r\n let resultSource = 'nextSteps';\r\n let pdfFigures = FigureMap[dasherize(resultSource)];\r\n let imageComponents = [];\r\n let excludeIndex = [10, 11, 14];\r\n let specialIndex = [9];\r\n for (let i = 0; i < pdfFigures.length; i++) {\r\n if (!excludeIndex.includes(i)) {\r\n if (!specialIndex.includes(i)) {\r\n imageComponents.push({\r\n name: pdfFigures[i].name,\r\n figure: pdfFigures[i].figure,\r\n source: pdfFigures[i].source\r\n ? this.model.results[resultSource][pdfFigures[i].source]\r\n : this.model.results[resultSource],\r\n options: pdfFigures[i].options,\r\n });\r\n } else {\r\n switch (i) {\r\n case 9: {\r\n imageComponents.push({\r\n name: pdfFigures[i].name,\r\n figure: 'figures/graph',\r\n source: this.model.results[resultSource][pdfFigures[i].source].graphData,\r\n options: pdfFigures[i].options,\r\n });\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n set(this, 'pdfFigures', { render: true, components: imageComponents });\r\n }\r\n\r\n _updateModelNumber(evalBoardData) {\r\n let numOfStages = evalBoardData.length;\r\n let workingEvalBoardData = [];\r\n\r\n for (var a = 0; a < numOfStages; a++) {\r\n var evalBoardItem = Object.assign({}, evalBoardData[a]);\r\n workingEvalBoardData.push(evalBoardItem);\r\n }\r\n\r\n // all daughter boards (except for motherboard) will be shipped as 4-packs.\r\n // So if the design calls for multiple evaluation boards of 1 type, as long as 4 or less are needed, customer will only need to order one 4-pack.\r\n set(this, 'evalBoardMultiple', false);\r\n\r\n for (var i = 1; i < numOfStages; i++) {\r\n if (workingEvalBoardData[i].evalBoardModelNumber !== null) {\r\n if (workingEvalBoardData[i].evalBoardModelNumber.indexOf('*') === -1) {\r\n var evalBoardName = workingEvalBoardData[i].evalBoardModelNumber;\r\n var j = i + 1;\r\n var count = 1;\r\n for (j; j < numOfStages; j++) {\r\n if (evalBoardName === workingEvalBoardData[j].evalBoardModelNumber) {\r\n count++;\r\n if (count !== 5) {\r\n workingEvalBoardData[j].evalBoardModelNumber = '*' + workingEvalBoardData[j].evalBoardModelNumber;\r\n set(this, 'evalBoardMultiple', true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // if there is more than 4 stages, we need more than one motherboard\r\n // each motherboard can hold up to 4 daughterboards.\r\n const numOfStagesActual = evalBoardData.filter((x) => x.stage !== '').length;\r\n if (numOfStagesActual > 4) {\r\n workingEvalBoardData[0].evalBoardModelNumber = '2 x ' + workingEvalBoardData[0].evalBoardModelNumber;\r\n }\r\n\r\n set(this, 'evalBoardDisplayData', workingEvalBoardData);\r\n }\r\n\r\n // not needed, already defined in the component AditoolsDialogSamples\r\n // _buildOrderSamplesShoppingUrl(checkedSamples) {\r\n // let checkedClause = checkedSamples.length > 0 ? '&modelNbr=' + encodeURIComponent(checkedSamples.join(',')) : '';\r\n // // let details = `&sc=true&ACTION=SAMPLES_BUNDLES${checkedClause}`;\r\n // return checkedClause;\r\n // }\r\n\r\n _spin() {\r\n set(this, 'updating', true);\r\n }\r\n\r\n _nospin() {\r\n set(this, 'updating', false);\r\n }\r\n\r\n _updateFromErrors(inputType) {\r\n let tabList = this.tabs,\r\n result = [];\r\n for (let i = 0; i < tabList.length; i++) {\r\n result.push(tabList[i]);\r\n if (tabList[i] === inputType) break;\r\n }\r\n return result;\r\n }\r\n\r\n _updateFromModel() {\r\n let tabList = this.tabs,\r\n result = [];\r\n for (let i = 0; i < tabList.length; i++) {\r\n let advisor = this.advisors[tabList[i]];\r\n result.push(tabList[i]);\r\n if (typeof advisor !== 'undefined' && advisor.hasRestrictions()) break;\r\n }\r\n return result;\r\n }\r\n\r\n _getDimensionsOnResize() {\r\n let _width = window.innerWidth;\r\n let _height = window.innerHeight;\r\n this.width = _width < 0 ? 0 : _width;\r\n set(this, 'height', _height < 0 ? 0 : _height);\r\n }\r\n\r\n _updateToolbarCss() {\r\n if (this.siteconfig.AdiLocale === 'jp') {\r\n let sheets = document.styleSheets;\r\n for (let i = 0; i < sheets.length; i++) {\r\n let csshref = sheets[i].href;\r\n if (csshref && csshref.includes('filter-wizard.css')) {\r\n let rules = sheets[i].cssRules;\r\n for (let j = 0; j < rules.length; j++) {\r\n let rule = rules[j];\r\n if (rule.style) {\r\n let selectorText = rule.selectorText;\r\n if (selectorText.toLowerCase() === '.aditools-menubar .menu-links > .menu-link') {\r\n rule.style.fontSize = '12px';\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _updateFigurePerTab() {\r\n let figurePerTab = this.figurePerTab,\r\n currentFigure = this.selectedFigure;\r\n\r\n for (let _tab in figuresOfTab) {\r\n if (figurePerTab[_tab].length > 0) {\r\n let existsInFigures = figuresOfTab[_tab].some((item) => {\r\n return item.name === currentFigure;\r\n });\r\n //this.logger.log(_tab, this.visitedTabs.includes(_tab) ? ' tab visited.' : 'tab not yet visited.');\r\n if (existsInFigures) {\r\n if (_tab === 'components' && !this.visitedTabs.includes(_tab)) {\r\n let _figure = figurePerTab[_tab];\r\n figurePerTab[_tab] = _figure;\r\n } else {\r\n figurePerTab[_tab] = currentFigure;\r\n }\r\n } else {\r\n let _figure = figurePerTab[_tab];\r\n figurePerTab[_tab] = _figure;\r\n }\r\n }\r\n }\r\n set(this, 'figurePerTab', Object.assign({}, figurePerTab));\r\n }\r\n\r\n _buildPDFFonts() {\r\n let fontURL = '';\r\n let fontName = '';\r\n let fontFileName = '';\r\n let pdfFonts = [];\r\n this.systemDialogFunc('ON', 'application-busy');\r\n switch (this.siteconfig.AdiLocale) {\r\n case 'en':\r\n case 'ru':\r\n fontName = 'Arial';\r\n fontFileName = 'arial.ttf';\r\n fontURL = getURL(ENV.rootURL + FilterConstants.enFontResource, this.fastboot, this.logger);\r\n break;\r\n case 'jp':\r\n fontName = 'NotoSansJP';\r\n fontFileName = 'NotoSansJP-Regular.ttf';\r\n fontURL = getURL(ENV.rootURL + FilterConstants.jpFontResource, this.fastboot, this.logger);\r\n break;\r\n case 'cn':\r\n fontName = 'NotoSansSC';\r\n fontFileName = 'NotoSansSC-Regular.ttf';\r\n fontURL = getURL(ENV.rootURL + FilterConstants.cnFontResource, this.fastboot, this.logger);\r\n break;\r\n }\r\n this.logger.time(`Download ${fontName} font`);\r\n return this.assets.getAsset(fontURL, 'BLOB').then((content) => {\r\n return new RSVP.Promise((resolve, reject) => {\r\n let reader = new FileReader();\r\n reader.readAsDataURL(content);\r\n reader.onloadend = () => {\r\n let fontData = reader.result;\r\n let fontIndex = fontData.indexOf(';base64,');\r\n if (fontIndex > -1) {\r\n fontData = fontData.substring(fontIndex + ';base64,'.length);\r\n }\r\n this.logger.timeEnd(`Download ${fontName} font`);\r\n if (fontData !== null) {\r\n pdfFonts.push({ fileName: fontFileName, fontName: fontName, fontStyle: 'normal', data: atob(fontData) });\r\n resolve(pdfFonts);\r\n } else {\r\n reject(pdfFonts);\r\n }\r\n };\r\n });\r\n });\r\n }\r\n\r\n _sendDesign() {\r\n return RSVP.Promise.resolve()\r\n .then(() => {\r\n this.systemDialogFunc('ON', 'sending-filter', { tool: this.toolNameDisplay });\r\n return delay(200).then(() => {\r\n return;\r\n });\r\n })\r\n .then(() => {\r\n let designData = this.persistence.dry(\r\n this.visitedTabs,\r\n this.model.inputs,\r\n this.model.results.specifications,\r\n this.advisors['components'],\r\n );\r\n set(this, 'designSendTimeOut', { timeOut: null, handlerFunc: this.designSendTimeOutError });\r\n return this.channel.sendDesign(designData, this.designSendTimeOut);\r\n })\r\n .catch((error) => {\r\n this.systemDialogFunc('OFF', '');\r\n set(this.systemLock, 'enabled', false);\r\n this._showNotification('dialogs.send-filter.title-error', 'dialogs.send-filter.message-error', {\r\n tool: this.toolNameDisplay,\r\n });\r\n this.logger.log('Error:' + error.toString());\r\n });\r\n }\r\n\r\n _forceFocusTab(tab) {\r\n if (tab !== '') {\r\n const tabElem = document.querySelector(`[data-qa-element=\"menu_bar_${tab.replace('-', '_')}_tab\"]`);\r\n tabElem.focus();\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Controller Actions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n @action updateModel(inputType, modeldata) {\r\n // On filter type change, consider filter type tab visited and forget you ever visited any other pages\r\n if (inputType === 'filter-type' && this.model.inputs[inputModels[inputType]] !== modeldata) {\r\n this.visitedTabs = ['filter-type'];\r\n set(this, 'figurePerTab', Object.assign({}, defaultFigures));\r\n this._clearAllInputData();\r\n }\r\n this._replaceInputErrors(inputType, []);\r\n this._spin();\r\n next(this, () => {\r\n if (!this.isDestroying && !this.isDestroyed) {\r\n set(this.model.inputs, inputModels[inputType], modeldata);\r\n if (inputType === 'filter-type') {\r\n this._selectTab('TAB', 'specifications');\r\n }\r\n this.fromErrors = this._updateFromErrors('');\r\n this.fromModel = this._updateFromModel();\r\n this._nospin();\r\n }\r\n });\r\n this.logger.log(`Update (${inputType})`, modeldata);\r\n }\r\n\r\n @action updateErrors(inputType, errors) {\r\n this._replaceInputErrors(inputType, errors.slice());\r\n this.fromErrors = this._updateFromErrors(inputType);\r\n }\r\n\r\n @action selectTab(trigger, tab) {\r\n this._selectTab(trigger, tab);\r\n }\r\n\r\n @action selectFigure(figure) {\r\n this._spin();\r\n later(\r\n this,\r\n () => {\r\n if (!this.isDestroying && !this.isDestroyed) {\r\n this._updateInputModel(figure.name);\r\n this.selectedFigure = figure.name;\r\n this._updateFigurePerTab();\r\n this._nospin();\r\n }\r\n },\r\n 100,\r\n );\r\n }\r\n\r\n @action switchLanguage(adilang) {\r\n let oldLocale = this.intl.locale;\r\n oldLocale = oldLocale === 'ja' ? 'jp' : oldLocale === 'zh' ? 'cn' : oldLocale;\r\n if (location.href.indexOf('designtools') !== -1) {\r\n location.href = `/designtools/${adilang}/filterwizard/`;\r\n } else {\r\n location.href = `?lang=${adilang}`;\r\n }\r\n sendLocaleChangeAnalytics(oldLocale, adilang, this.analytics, this.logger);\r\n this.logger.log('Locale = ' + adilang);\r\n }\r\n\r\n @action takeStep(requestedAction) {\r\n switch (requestedAction) {\r\n case 'order': {\r\n RSVP.Promise.resolve()\r\n .then(() => {\r\n this.systemDialogFunc('ON', 'application-busy');\r\n return delay(10).then(() => {\r\n return this.model.results.nextSteps.orderSamplesData;\r\n });\r\n })\r\n .then((orderSamples) => {\r\n this.systemDialogFunc('OFF', '');\r\n set(this, 'orderSamplesData', orderSamples);\r\n set(this.dialogFlags, 'orderSamplesEnabled', true);\r\n sendOpenCloseDialogAnalytics('Order samples', 'O', this.model, this.analytics, this.intl);\r\n this.logger.log('Next Step (' + requestedAction + ')');\r\n });\r\n break;\r\n }\r\n case 'evalboard':\r\n RSVP.Promise.resolve()\r\n .then(() => {\r\n this.systemDialogFunc('ON', 'application-busy');\r\n return delay(10).then(() => {\r\n this._updateModelNumber(this.model.results.nextSteps.evalBoardData);\r\n return;\r\n });\r\n })\r\n .then(() => {\r\n this.systemDialogFunc('OFF', '');\r\n const inductor = this.evalBoardDisplayData.find(\r\n (x) => x.stageImplementation === 'inductor' && CommonUtils.isNullOrUndefined(x.evalBoardModelNumber),\r\n );\r\n if (inductor) {\r\n set(this.dialogFlags, 'evalBoardConfirmationEnabled', true);\r\n } else {\r\n set(this.dialogFlags, 'evalBoardEnabled', true);\r\n sendOpenCloseDialogAnalytics('Order eval board', 'O', this.model, this.analytics, this.intl);\r\n this.logger.log('Next Step (' + requestedAction + ')');\r\n }\r\n });\r\n break;\r\n case 'share':\r\n sendOpenCloseDialogAnalytics('Mail', 'O', this.model, this.analytics, this.intl);\r\n set(this.dialogFlags, 'mailToColleagueEnabled', true);\r\n this.logger.log('Next Step (' + requestedAction + ')');\r\n break;\r\n case 'downloadAll':\r\n downloadDesignAnalytics('Get all files', this.model, this.analytics, this.intl);\r\n this._downloadDesign(true);\r\n this.logger.log('Next Step (' + requestedAction + ')');\r\n break;\r\n case 'downloadSpice':\r\n downloadDesignAnalytics('Get spice only', this.model, this.analytics, this.intl);\r\n this._downloadDesign(false);\r\n this.logger.log('Next Step (' + requestedAction + ')');\r\n break;\r\n case 'sendDesign':\r\n this._sendDesign();\r\n this.logger.log('Next Step (' + requestedAction + ')');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n @action closeDialog(type) {\r\n switch (type) {\r\n case 'order':\r\n sendOpenCloseDialogAnalytics('Order samples', 'C', this.model, this.analytics, this.intl);\r\n set(this.dialogFlags, 'orderSamplesEnabled', false);\r\n break;\r\n case 'evalboard':\r\n sendOpenCloseDialogAnalytics('Order eval board', 'C', this.model, this.analytics, this.intl);\r\n set(this.dialogFlags, 'evalBoardEnabled', false);\r\n break;\r\n case 'share':\r\n sendOpenCloseDialogAnalytics('Mail', 'C', this.model, this.analytics, this.intl);\r\n set(this.dialogFlags, 'mailToColleagueEnabled', false);\r\n break;\r\n case 'feedback':\r\n sendOpenCloseDialogAnalytics('Feedback', 'C', this.model, this.analytics, this.intl);\r\n break;\r\n case 'look-evalboard':\r\n sendOpenCloseDialogAnalytics('Look order eval board', 'C', this.model, this.analytics, this.intl);\r\n set(this.dialogFlags, 'evalBoardConfirmationEnabled', false);\r\n break;\r\n case 'algorithm':\r\n if (\r\n this.model.inputs.components.preferredAlgorithms === undefined ||\r\n this.model.inputs.components.preferredAlgorithms === null\r\n ) {\r\n this.model.inputs.components.preferredAlgorithms = FilterConstants.model.inputs.components.oldAlgorithm;\r\n }\r\n set(this.dialogFlags, 'algorithmEnabled', false);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n @action confirmLookEvalBoard() {\r\n set(this.dialogFlags, 'evalBoardEnabled', true);\r\n sendOpenCloseDialogAnalytics('Order eval board', 'O', this.model, this.analytics, this.intl);\r\n this.logger.log('Next Step (evalboard)');\r\n }\r\n\r\n @action showNotification(title, message, msgparams) {\r\n this._showNotification(title, message, msgparams);\r\n }\r\n\r\n @action closeNotification() {\r\n set(this.notificationDialog, 'enabled', false);\r\n set(this.notificationDialog, 'title', '');\r\n set(this.notificationDialog, 'message', '');\r\n }\r\n\r\n @action closeEdgeWarning() {\r\n set(this.edgeWarning, 'enabled', false);\r\n }\r\n\r\n @action showHelp(title, message, msgparams) {\r\n this._showHelp(title, message, msgparams);\r\n }\r\n\r\n @action closeHelp() {\r\n set(this.helpDialog, 'enabled', false);\r\n set(this.helpDialog, 'title', '');\r\n set(this.helpDialog, 'message', '');\r\n }\r\n\r\n @action systemDialogFunc(status, message, msgparams) {\r\n switch (status) {\r\n case 'ON':\r\n set(this.systemDialog, 'enabled', true);\r\n set(this.systemDialog, 'message', this.intl.t(`dialogs.system.${message}`, msgparams));\r\n break;\r\n case 'OFF': {\r\n const dialogBody = document.querySelector('.aditools-system-dialog');\r\n if (dialogBody && dialogBody.parentElement) {\r\n dialogBody.parentElement.close();\r\n }\r\n set(this.systemDialog, 'enabled', false);\r\n set(this.systemDialog, 'message', '');\r\n break;\r\n }\r\n case 'NONE':\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n @action loadDesign(jsonStringData) {\r\n set(this, 'updating', true);\r\n this.systemDialogFunc('ON', 'application-busy');\r\n this.opamps.getRequest().then(() => {\r\n set(this, 'updating', false);\r\n if (!this.isDestroying && !this.isDestroyed) {\r\n let inputs = this.persistence.load(jsonStringData);\r\n switch (inputs.errorCode.code) {\r\n case FilterConstants.loadErrorCodes.noError: {\r\n this._selectTab('LOAD', 'filter-type');\r\n next(this, () => {\r\n if (!this.isDestroying && !this.isDestroyed) {\r\n const hasOldAlgorithm = this.persistence.hasOldAlgorithm(jsonStringData, inputs.inputModel);\r\n this.visitedTabs = inputs.visitedTabs;\r\n this.model.inputs.filterType = inputs.inputModel.filterType;\r\n this.model.inputs.specifications = inputs.inputModel.specifications;\r\n this.model.inputs.components = inputs.inputModel.components;\r\n this.model.inputs.tolerances = inputs.inputModel.tolerances;\r\n this.model.inputs.nextSteps = inputs.inputModel.nextSteps;\r\n this.logger.log('Load submitted. \\nDesign Data: ' + jsonStringData);\r\n this.systemDialogFunc('OFF', '');\r\n if (hasOldAlgorithm) {\r\n set(this.dialogFlags, 'algorithmEnabled', true);\r\n }\r\n }\r\n });\r\n break;\r\n }\r\n case FilterConstants.loadErrorCodes.generalError: {\r\n this.systemDialogFunc('OFF', '');\r\n this._showNotification('dialogs.load.title', 'dialogs.load.invalid-file');\r\n break;\r\n }\r\n case FilterConstants.loadErrorCodes.invalidPartFound: {\r\n this.systemDialogFunc('OFF', '');\r\n this._showNotification('dialogs.load.title', 'dialogs.load.invalid-parts', {\r\n numParts: inputs.errorCode.details.split(', ').length,\r\n parts: inputs.errorCode.details,\r\n });\r\n break;\r\n }\r\n case FilterConstants.loadErrorCodes.noOpAmps: {\r\n this.systemDialogFunc('OFF', '');\r\n this._showNotification('dialogs.load.title', 'dialogs.load.no-opamps');\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n @action saveDesign(name, desc) {\r\n set(this, 'designName', name);\r\n set(this, 'designDesc', desc);\r\n /*\r\n let stages = this.visitedTabs.includes(FilterConstants.tabs.components)\r\n ? this.model.results.components.detailsOfStages\r\n : null;\r\n */\r\n this.persistence.save(name, desc, this.visitedTabs, this.model.inputs, this.advisors['components']);\r\n this.logger.log('Save submitted. \\nDesign Name: ' + name + '\\nDesign Description: ' + desc);\r\n }\r\n\r\n @action shareDesign(name, sender, recipients) {\r\n let saveData = this.persistence.getSaveData(\r\n this.visitedTabs,\r\n this.model.inputs,\r\n this.advisors['components'],\r\n ).design;\r\n set(this.dialogFlags, 'mailToColleagueEnabled', false);\r\n return RSVP.Promise.resolve()\r\n .then(() => {\r\n this.systemDialogFunc('ON', 'application-busy');\r\n return delay(250).then(() => {\r\n return;\r\n });\r\n })\r\n .then(() => {\r\n return this.share.shareDesign(name, sender, recipients, saveData);\r\n })\r\n .then((result) => {\r\n this.systemDialogFunc('OFF', '');\r\n if (result.status === 0) {\r\n shareDesignAnalytics(name, sender, recipients, saveData, this.analytics, this.logger);\r\n sendOpenCloseDialogAnalytics('Mail', 'S', this.model, this.analytics, this.intl);\r\n this._showNotification('dialogs.share.title', 'dialogs.share.share-dialog-ok-message');\r\n } else {\r\n this._showNotification('dialogs.share.title', 'dialogs.share.share-dialog-ng-message');\r\n }\r\n })\r\n .catch((error) => {\r\n this.systemDialogFunc('OFF', '');\r\n this._showNotification('dialogs.share.title', 'dialogs.share.share-dialog-ng-message');\r\n this.logger.log('Error:' + error.toString());\r\n });\r\n }\r\n\r\n @action processOrderSamples() {\r\n sendOpenCloseDialogAnalytics('Order samples', 'S', this.model, this.analytics, this.intl);\r\n }\r\n\r\n @action processEvalBoard() {\r\n sendOpenCloseDialogAnalytics('Order eval board', 'S', this.model, this.analytics, this.intl);\r\n }\r\n\r\n @action getAlgorithm(useV2) {\r\n this.model.inputs.components.preferredAlgorithms = useV2\r\n ? FilterConstants.model.inputs.components.defaultAlgorithm\r\n : FilterConstants.model.inputs.components.oldAlgorithm;\r\n }\r\n\r\n @action giveFeedback(model) {\r\n return RSVP.Promise.resolve()\r\n .then(() => {\r\n this.systemDialogFunc('ON', 'application-busy');\r\n return delay(250).then(() => {\r\n return;\r\n });\r\n })\r\n .then(() => {\r\n return this.feedback.deliverFeedback(model.name, model.email, model.feedback);\r\n })\r\n .then((result) => {\r\n this.systemDialogFunc('OFF', '');\r\n if (result.status === 0) {\r\n this._showNotification('dialogs.feedback.title', 'dialogs.feedback.feedback-dialog-ok-message');\r\n } else {\r\n this._showNotification('dialogs.feedback.title', 'dialogs.feedback.feedback-dialog-ng-message');\r\n }\r\n })\r\n .catch((error) => {\r\n this.systemDialogFunc('OFF', '');\r\n this._showNotification('dialogs.feedback.title', 'dialogs.feedback.feedback-dialog-ng-message');\r\n this.logger.log('Error:' + error.toString());\r\n });\r\n }\r\n\r\n @action insertingToolbar(element) {\r\n this.navElement = element;\r\n this._updateToolbarCss();\r\n this._getDimensionsOnResize();\r\n this.boundResizeListener = this._getDimensionsOnResize.bind(this);\r\n window.addEventListener('resize', this.boundResizeListener);\r\n }\r\n\r\n @action destroyingToolbar() {\r\n this.navElement = null;\r\n window.removeEventListener('resize', this.boundResizeListener);\r\n }\r\n\r\n @action loadFromUrlDesign() {\r\n if (this.design) {\r\n let jsonStringData = this.persistence.soak(this.design);\r\n this.loadDesign(jsonStringData);\r\n }\r\n }\r\n\r\n @action handshakeAcknowledgedEvent(data) {\r\n clearTimeout(this.handShakeTimeOut.timeOut);\r\n console.timeEnd('Handshake');\r\n if (!this.fastboot.isFastBoot && data.filterWizardDesign && data.filterWizardDesign.length > 0) {\r\n this.loadDesign(this.persistence.soak(data.filterWizardDesign));\r\n this.logger.log('Loaded Design from Invoker Tool: ' + data.filterWizardDesign);\r\n } else {\r\n this.systemDialogFunc('OFF', '');\r\n }\r\n this.logger.log('Handshake has been acknowledged');\r\n }\r\n\r\n @action handShakeTimeOutError() {\r\n console.timeEnd('Handshake');\r\n this.systemDialogFunc('OFF', '');\r\n set(this.systemLock, 'enabled', true);\r\n set(this.systemLock, 'title', this.intl.t('dialogs.connect-to.title-error'));\r\n set(this.systemLock, 'message', this.intl.t('dialogs.connect-to.message-error', { tool: this.toolNameDisplay }));\r\n this.logger.log('Error: Handshake acknowledge timeout error.');\r\n this.channel.disconnect();\r\n }\r\n\r\n @action designAcknowledgedEvent(recipientId) {\r\n clearTimeout(this.designSendTimeOut.timeOut);\r\n console.timeEnd('Send Design');\r\n this.systemDialogFunc('OFF', '');\r\n set(this.systemLock, 'enabled', true);\r\n set(this.systemLock, 'title', this.intl.t('dialogs.send-filter.title-ok', { tool: this.toolNameDisplay }));\r\n set(this.systemLock, 'message', this.intl.t('dialogs.send-filter.message'));\r\n this.logger.log('Design has been received. Receipient ID: ' + recipientId);\r\n this.channel.disconnect();\r\n }\r\n\r\n @action designSendTimeOutError() {\r\n console.timeEnd('Send Design');\r\n this.systemDialogFunc('OFF', '');\r\n set(this.systemLock, 'enabled', false);\r\n this._showNotification('dialogs.send-filter.title-error', 'dialogs.send-filter.message-error', {\r\n tool: this.toolNameDisplay,\r\n });\r\n this.logger.log('Error: Design acknowledge timeout error.');\r\n }\r\n\r\n @action integrationCancelledEvent() {\r\n this.systemDialogFunc('OFF', '');\r\n set(this.systemLock, 'enabled', true);\r\n set(this.systemLock, 'title', this.intl.t('dialogs.send-filter.title-cancel', { tool: this.toolNameDisplay }));\r\n set(this.systemLock, 'message', this.intl.t('dialogs.send-filter.message'));\r\n this.logger.log('Integration has been cancelled from Invoker Tool');\r\n this.channel.disconnect();\r\n }\r\n\r\n @action onConnectHandler() {\r\n this.systemDialogFunc('OFF', '');\r\n this.logger.log('Connection has been established');\r\n }\r\n\r\n @action onDisconnectHandler() {\r\n this.channel.selfLink.destroy();\r\n this.channel.setInvokerId(null);\r\n this.logger.log('Disconnected');\r\n }\r\n\r\n @action onDataHandler(data) {\r\n switch (data.type) {\r\n case 'acknowledgeHandshake':\r\n this.handshakeAcknowledgedEvent(data);\r\n break;\r\n case 'cancelIntegration':\r\n this.integrationCancelledEvent();\r\n break;\r\n case 'design':\r\n if (!this.fastboot.isFastBoot && data.filterWizardDesign && data.filterWizardDesign.length > 0) {\r\n this.loadDesign(this.persistence.soak(data.filterWizardDesign));\r\n this.logger.log('Loaded Design from Invoker Tool: ' + data.filterWizardDesign);\r\n } else {\r\n this.systemDialogFunc('OFF', '');\r\n }\r\n break;\r\n case 'acknowledgeDesign':\r\n this.designAcknowledgedEvent(this.channel.invokerId);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n @action toolbarMenuClick(menuLink) {\r\n const tab = this.intl.t('wizard.' + this.activeTab, { locale: 'en-us' });\r\n toolbarLinkClickAnalytics(menuLink, tab, this.analytics);\r\n }\r\n}\r\n","export default {\r\n className: \"AdiCm.LocalParts\",\r\n data: {\r\n \"description\": \"LTC Parts\",\r\n \"en\": [\r\n {\r\n \"id\": \"row1\",\r\n \"0\": {\r\n \"regionRecommend\": 0,\r\n \"rookiePart\": 0,\r\n \"dataSheet\": 0,\r\n \"description\": \"Precision Operational Amplifier\",\r\n \"usedInCFTL\": 0,\r\n \"hasAnEvalBoard\": 0,\r\n \"evalBoardUrl\": \"\",\r\n \"generic\": \"lt1001\",\r\n \"displayValue\": \"LT1001\",\r\n \"value\": [\r\n \"LT1001\"\r\n ],\r\n \"genericStatus\": \"Production\",\r\n \"package\": [\r\n \"8 ld SOIC\"\r\n ]\r\n },\r\n \"-1\": {\r\n \"usedInCFTL\": 0,\r\n \"hasAnEvalBoard\": 0,\r\n \"evalBoardURL\": \"\"\r\n },\r\n \"-2\": {\r\n \"value\": [\r\n \"Production\"\r\n ],\r\n \"displayValue\": \"Production\"\r\n },\r\n \"-3\": {\r\n \"value\": [\r\n \"8 ld SOIC\"\r\n ],\r\n \"displayValue\": \"8 ld SOIC\"\r\n },\r\n \"-4\": {\r\n \"value\": [\r\n \"Precision Operational Amplifier\"\r\n ],\r\n \"displayValue\": \"Precision Operational Amplifier\"\r\n },\r\n \"2687\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4501\": {\r\n \"value\": [\r\n \"0.000025\"\r\n ],\r\n \"displayValue\": \"25µ\"\r\n },\r\n \"300\": {\r\n \"value\": [\r\n \"0.25\"\r\n ],\r\n \"displayValue\": \"0.25\"\r\n },\r\n \"2839\": {\r\n \"value\": [\r\n \"6\"\r\n ],\r\n \"displayValue\": \"6\"\r\n },\r\n \"2840\": {\r\n \"value\": [\r\n \"44\"\r\n ],\r\n \"displayValue\": \"44\"\r\n },\r\n \"4108\": {\r\n \"value\": [\r\n \"0.0015\"\r\n ],\r\n \"displayValue\": \"1.5m\"\r\n },\r\n \"5056\": {\r\n \"value\": [\r\n \"Voltage Feedback\"\r\n ],\r\n \"displayValue\": \"Voltage Feedback\"\r\n },\r\n \"4101\": {\r\n \"value\": [\r\n \"0.0000000096\"\r\n ],\r\n \"displayValue\": \"9.6n\"\r\n },\r\n \"4124\": {\r\n \"value\": [\r\n \"0.0000000000001\"\r\n ],\r\n \"displayValue\": \"100f\"\r\n },\r\n \"4500\": {\r\n \"value\": [\r\n \"0.000000002\"\r\n ],\r\n \"displayValue\": \"2n\"\r\n },\r\n \"4127\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4100\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4099\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4084\": {\r\n \"value\": [\r\n \"0.9\"\r\n ],\r\n \"displayValue\": \"0.9\"\r\n },\r\n \"4085\": {\r\n \"value\": [\r\n \"0.9\"\r\n ],\r\n \"displayValue\": \"0.9\"\r\n },\r\n \"4502\": {\r\n \"value\": [\r\n \"800000\"\r\n ],\r\n \"displayValue\": \"800k\"\r\n },\r\n \"4401\": {\r\n \"value\": [\r\n \"50\"\r\n ],\r\n \"displayValue\": \"50\"\r\n },\r\n \"4455\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"4117\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s1\": {\r\n \"value\": [\r\n \"19873\"\r\n ],\r\n \"displayValue\": \"19873\"\r\n },\r\n \"s2\": {\r\n \"value\": [\r\n \"\"\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s3\": {\r\n \"value\": [\r\n \"1.65\"\r\n ],\r\n \"displayValue\": \"$1.65\"\r\n },\r\n \"s4\": {\r\n \"value\": [\r\n \"R-8\"\r\n ],\r\n \"displayValue\": \"R-8\"\r\n },\r\n \"s5\": {\r\n \"value\": [\r\n \"8 ld SOIC\"\r\n ],\r\n \"displayValue\": \"8 ld SOIC\"\r\n },\r\n \"s6\": {\r\n \"value\": [\r\n \"Precision Operational Amplifier\"\r\n ],\r\n \"displayValue\": \"Precision Operational Amplifier\"\r\n },\r\n \"s7\": {\r\n \"value\": [\r\n \"Production\"\r\n ],\r\n \"displayValue\": \"Production\"\r\n },\r\n \"s8\": {\r\n \"value\": [\r\n \"\"\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s9\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s10\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s11\": {\r\n \"value\": [\r\n \"3\"\r\n ],\r\n \"displayValue\": \"3\"\r\n },\r\n \"s12\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n }\r\n }\r\n ],\r\n \"jp\": [\r\n {\r\n \"id\": \"row1\",\r\n \"0\": {\r\n \"regionRecommend\": 0,\r\n \"rookiePart\": 0,\r\n \"dataSheet\": 0,\r\n \"description\": \"高精度オペアンプ\",\r\n \"usedInCFTL\": 0,\r\n \"hasAnEvalBoard\": 0,\r\n \"evalBoardUrl\": \"\",\r\n \"generic\": \"lt1001\",\r\n \"displayValue\": \"LT1001\",\r\n \"value\": [\r\n \"LT1001\"\r\n ],\r\n \"genericStatus\": \"生産/供給中\",\r\n \"package\": [\r\n \"8 ld SOIC\"\r\n ]\r\n },\r\n \"-1\": {\r\n \"usedInCFTL\": 0,\r\n \"hasAnEvalBoard\": 0,\r\n \"evalBoardURL\": \"\"\r\n },\r\n \"-2\": {\r\n \"value\": [\r\n \"生産/供給中\"\r\n ],\r\n \"displayValue\": \"生産/供給中\"\r\n },\r\n \"-3\": {\r\n \"value\": [\r\n \"8 ld SOIC\"\r\n ],\r\n \"displayValue\": \"8 ld SOIC\"\r\n },\r\n \"-4\": {\r\n \"value\": [\r\n \"高精度オペアンプ\"\r\n ],\r\n \"displayValue\": \"高精度オペアンプ\"\r\n },\r\n \"2687\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4501\": {\r\n \"value\": [\r\n \"0.000025\"\r\n ],\r\n \"displayValue\": \"25µ\"\r\n },\r\n \"300\": {\r\n \"value\": [\r\n \"0.25\"\r\n ],\r\n \"displayValue\": \"0.25\"\r\n },\r\n \"2839\": {\r\n \"value\": [\r\n \"6\"\r\n ],\r\n \"displayValue\": \"6\"\r\n },\r\n \"2840\": {\r\n \"value\": [\r\n \"44\"\r\n ],\r\n \"displayValue\": \"44\"\r\n },\r\n \"4108\": {\r\n \"value\": [\r\n \"0.0015\"\r\n ],\r\n \"displayValue\": \"1.5m\"\r\n },\r\n \"5056\": {\r\n \"value\": [\r\n \"Voltage Feedback\"\r\n ],\r\n \"displayValue\": \"Voltage Feedback\"\r\n },\r\n \"4101\": {\r\n \"value\": [\r\n \"0.0000000096\"\r\n ],\r\n \"displayValue\": \"9.6n\"\r\n },\r\n \"4124\": {\r\n \"value\": [\r\n \"0.0000000000001\"\r\n ],\r\n \"displayValue\": \"100f\"\r\n },\r\n \"4500\": {\r\n \"value\": [\r\n \"0.000000002\"\r\n ],\r\n \"displayValue\": \"2n\"\r\n },\r\n \"4127\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4100\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4099\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4084\": {\r\n \"value\": [\r\n \"0.9\"\r\n ],\r\n \"displayValue\": \"0.9\"\r\n },\r\n \"4085\": {\r\n \"value\": [\r\n \"0.9\"\r\n ],\r\n \"displayValue\": \"0.9\"\r\n },\r\n \"4502\": {\r\n \"value\": [\r\n \"800000\"\r\n ],\r\n \"displayValue\": \"800k\"\r\n },\r\n \"4401\": {\r\n \"value\": [\r\n \"50\"\r\n ],\r\n \"displayValue\": \"50\"\r\n },\r\n \"4455\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"4117\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s1\": {\r\n \"value\": [\r\n \"19873\"\r\n ],\r\n \"displayValue\": \"19873\"\r\n },\r\n \"s2\": {\r\n \"value\": [\r\n \"\"\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s3\": {\r\n \"value\": [\r\n \"1.65\"\r\n ],\r\n \"displayValue\": \"$1.65\"\r\n },\r\n \"s4\": {\r\n \"value\": [\r\n \"R-8\"\r\n ],\r\n \"displayValue\": \"R-8\"\r\n },\r\n \"s5\": {\r\n \"value\": [\r\n \"8 ld SOIC\"\r\n ],\r\n \"displayValue\": \"8 ld SOIC\"\r\n },\r\n \"s6\": {\r\n \"value\": [\r\n \"高精度オペアンプ\"\r\n ],\r\n \"displayValue\": \"高精度オペアンプ\"\r\n },\r\n \"s7\": {\r\n \"value\": [\r\n \"生産/供給中\"\r\n ],\r\n \"displayValue\": \"生産/供給中\"\r\n },\r\n \"s8\": {\r\n \"value\": [\r\n \"\"\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s9\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s10\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s11\": {\r\n \"value\": [\r\n \"3\"\r\n ],\r\n \"displayValue\": \"3\"\r\n },\r\n \"s12\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n }\r\n }\r\n ],\r\n \"cn\": [\r\n {\r\n \"id\": \"row1\",\r\n \"0\": {\r\n \"regionRecommend\": 0,\r\n \"rookiePart\": 0,\r\n \"dataSheet\": 0,\r\n \"description\": \"高精度运算放大器\",\r\n \"usedInCFTL\": 0,\r\n \"hasAnEvalBoard\": 0,\r\n \"evalBoardUrl\": \"\",\r\n \"generic\": \"lt1001\",\r\n \"displayValue\": \"LT1001\",\r\n \"value\": [\r\n \"LT1001\"\r\n ],\r\n \"genericStatus\": \"量产\",\r\n \"package\": [\r\n \"8 ld SOIC\"\r\n ]\r\n },\r\n \"-1\": {\r\n \"usedInCFTL\": 0,\r\n \"hasAnEvalBoard\": 0,\r\n \"evalBoardURL\": \"\"\r\n },\r\n \"-2\": {\r\n \"value\": [\r\n \"量产\"\r\n ],\r\n \"displayValue\": \"量产\"\r\n },\r\n \"-3\": {\r\n \"value\": [\r\n \"8 ld SOIC\"\r\n ],\r\n \"displayValue\": \"8 ld SOIC\"\r\n },\r\n \"-4\": {\r\n \"value\": [\r\n \"高精度运算放大器\"\r\n ],\r\n \"displayValue\": \"高精度运算放大器\"\r\n },\r\n \"2687\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4501\": {\r\n \"value\": [\r\n \"0.000025\"\r\n ],\r\n \"displayValue\": \"25µ\"\r\n },\r\n \"300\": {\r\n \"value\": [\r\n \"0.25\"\r\n ],\r\n \"displayValue\": \"0.25\"\r\n },\r\n \"2839\": {\r\n \"value\": [\r\n \"6\"\r\n ],\r\n \"displayValue\": \"6\"\r\n },\r\n \"2840\": {\r\n \"value\": [\r\n \"44\"\r\n ],\r\n \"displayValue\": \"44\"\r\n },\r\n \"4108\": {\r\n \"value\": [\r\n \"0.0015\"\r\n ],\r\n \"displayValue\": \"1.5m\"\r\n },\r\n \"5056\": {\r\n \"value\": [\r\n \"Voltage Feedback\"\r\n ],\r\n \"displayValue\": \"Voltage Feedback\"\r\n },\r\n \"4101\": {\r\n \"value\": [\r\n \"0.0000000096\"\r\n ],\r\n \"displayValue\": \"9.6n\"\r\n },\r\n \"4124\": {\r\n \"value\": [\r\n \"0.0000000000001\"\r\n ],\r\n \"displayValue\": \"100f\"\r\n },\r\n \"4500\": {\r\n \"value\": [\r\n \"0.000000002\"\r\n ],\r\n \"displayValue\": \"2n\"\r\n },\r\n \"4127\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4100\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4099\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4084\": {\r\n \"value\": [\r\n \"0.9\"\r\n ],\r\n \"displayValue\": \"0.9\"\r\n },\r\n \"4085\": {\r\n \"value\": [\r\n \"0.9\"\r\n ],\r\n \"displayValue\": \"0.9\"\r\n },\r\n \"4502\": {\r\n \"value\": [\r\n \"800000\"\r\n ],\r\n \"displayValue\": \"800k\"\r\n },\r\n \"4401\": {\r\n \"value\": [\r\n \"50\"\r\n ],\r\n \"displayValue\": \"50\"\r\n },\r\n \"4455\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"4117\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s1\": {\r\n \"value\": [\r\n \"19873\"\r\n ],\r\n \"displayValue\": \"19873\"\r\n },\r\n \"s2\": {\r\n \"value\": [\r\n \"\"\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s3\": {\r\n \"value\": [\r\n \"1.65\"\r\n ],\r\n \"displayValue\": \"$1.65\"\r\n },\r\n \"s4\": {\r\n \"value\": [\r\n \"R-8\"\r\n ],\r\n \"displayValue\": \"R-8\"\r\n },\r\n \"s5\": {\r\n \"value\": [\r\n \"8 ld SOIC\"\r\n ],\r\n \"displayValue\": \"8 ld SOIC\"\r\n },\r\n \"s6\": {\r\n \"value\": [\r\n \"高精度运算放大器\"\r\n ],\r\n \"displayValue\": \"高精度运算放大器\"\r\n },\r\n \"s7\": {\r\n \"value\": [\r\n \"量产\"\r\n ],\r\n \"displayValue\": \"量产\"\r\n },\r\n \"s8\": {\r\n \"value\": [\r\n \"\"\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s9\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s10\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s11\": {\r\n \"value\": [\r\n \"3\"\r\n ],\r\n \"displayValue\": \"3\"\r\n },\r\n \"s12\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n }\r\n }\r\n ],\r\n \"ru\": [\r\n {\r\n \"id\": \"row1\",\r\n \"0\": {\r\n \"regionRecommend\": 0,\r\n \"rookiePart\": 0,\r\n \"dataSheet\": 0,\r\n \"description\": \"Precision Operational Amplifier\",\r\n \"usedInCFTL\": 0,\r\n \"hasAnEvalBoard\": 0,\r\n \"evalBoardUrl\": \"\",\r\n \"generic\": \"lt1001\",\r\n \"displayValue\": \"LT1001\",\r\n \"value\": [\r\n \"LT1001\"\r\n ],\r\n \"genericStatus\": \"Production\",\r\n \"package\": [\r\n \"8 ld SOIC\"\r\n ]\r\n },\r\n \"-1\": {\r\n \"usedInCFTL\": 0,\r\n \"hasAnEvalBoard\": 0,\r\n \"evalBoardURL\": \"\"\r\n },\r\n \"-2\": {\r\n \"value\": [\r\n \"Production\"\r\n ],\r\n \"displayValue\": \"Production\"\r\n },\r\n \"-3\": {\r\n \"value\": [\r\n \"8 ld SOIC\"\r\n ],\r\n \"displayValue\": \"8 ld SOIC\"\r\n },\r\n \"-4\": {\r\n \"value\": [\r\n \"Precision Operational Amplifier\"\r\n ],\r\n \"displayValue\": \"Precision Operational Amplifier\"\r\n },\r\n \"2687\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4501\": {\r\n \"value\": [\r\n \"0.000025\"\r\n ],\r\n \"displayValue\": \"25µ\"\r\n },\r\n \"300\": {\r\n \"value\": [\r\n \"0.25\"\r\n ],\r\n \"displayValue\": \"0.25\"\r\n },\r\n \"2839\": {\r\n \"value\": [\r\n \"6\"\r\n ],\r\n \"displayValue\": \"6\"\r\n },\r\n \"2840\": {\r\n \"value\": [\r\n \"44\"\r\n ],\r\n \"displayValue\": \"44\"\r\n },\r\n \"4108\": {\r\n \"value\": [\r\n \"0.0015\"\r\n ],\r\n \"displayValue\": \"1.5m\"\r\n },\r\n \"5056\": {\r\n \"value\": [\r\n \"Voltage Feedback\"\r\n ],\r\n \"displayValue\": \"Voltage Feedback\"\r\n },\r\n \"4101\": {\r\n \"value\": [\r\n \"0.0000000096\"\r\n ],\r\n \"displayValue\": \"9.6n\"\r\n },\r\n \"4124\": {\r\n \"value\": [\r\n \"0.0000000000001\"\r\n ],\r\n \"displayValue\": \"100f\"\r\n },\r\n \"4500\": {\r\n \"value\": [\r\n \"0.000000002\"\r\n ],\r\n \"displayValue\": \"2n\"\r\n },\r\n \"4127\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4100\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4099\": {\r\n \"value\": [\r\n \"1\"\r\n ],\r\n \"displayValue\": \"1\"\r\n },\r\n \"4084\": {\r\n \"value\": [\r\n \"0.9\"\r\n ],\r\n \"displayValue\": \"0.9\"\r\n },\r\n \"4085\": {\r\n \"value\": [\r\n \"0.9\"\r\n ],\r\n \"displayValue\": \"0.9\"\r\n },\r\n \"4502\": {\r\n \"value\": [\r\n \"800000\"\r\n ],\r\n \"displayValue\": \"800k\"\r\n },\r\n \"4401\": {\r\n \"value\": [\r\n \"50\"\r\n ],\r\n \"displayValue\": \"50\"\r\n },\r\n \"4455\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"4117\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s1\": {\r\n \"value\": [\r\n \"19873\"\r\n ],\r\n \"displayValue\": \"19873\"\r\n },\r\n \"s2\": {\r\n \"value\": [\r\n \"\"\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s3\": {\r\n \"value\": [\r\n \"1.65\"\r\n ],\r\n \"displayValue\": \"$1.65\"\r\n },\r\n \"s4\": {\r\n \"value\": [\r\n \"R-8\"\r\n ],\r\n \"displayValue\": \"R-8\"\r\n },\r\n \"s5\": {\r\n \"value\": [\r\n \"8 ld SOIC\"\r\n ],\r\n \"displayValue\": \"8 ld SOIC\"\r\n },\r\n \"s6\": {\r\n \"value\": [\r\n \"Precision Operational Amplifier\"\r\n ],\r\n \"displayValue\": \"Precision Operational Amplifier\"\r\n },\r\n \"s7\": {\r\n \"value\": [\r\n \"Production\"\r\n ],\r\n \"displayValue\": \"Production\"\r\n },\r\n \"s8\": {\r\n \"value\": [\r\n \"\"\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s9\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s10\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n },\r\n \"s11\": {\r\n \"value\": [\r\n \"3\"\r\n ],\r\n \"displayValue\": \"3\"\r\n },\r\n \"s12\": {\r\n \"value\": [\r\n ],\r\n \"displayValue\": \"\"\r\n }\r\n }\r\n ]\r\n }\r\n};\r\n ","import FilterConstants from './filter-constants';\r\n\r\n// NOTE: yticks option of -1 invokes special case code on figures/graph - otherwise all graph options run straight through to ember-aditools-graph\r\nexport default {\r\n 'filter-type': [],\r\n specifications: [\r\n {\r\n name: FilterConstants.figureName.magnitudeDb,\r\n figure: 'figures/graph',\r\n annotation: 'annotations/specifications-magnitude',\r\n source: 'magnitudeDb',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.db',\r\n hoverTitles: { headerLabel: 'figures.magnitudeDb.x-hover', lineLabels: ['figures.magnitudeDb.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.magnitudeVV,\r\n figure: 'figures/graph',\r\n annotation: 'annotations/specifications-response',\r\n source: 'magnitudeVV',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.vv',\r\n hoverTitles: { headerLabel: 'figures.magnitudeVV.x-hover', lineLabels: ['figures.magnitudeVV.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseDegrees,\r\n figure: 'figures/graph',\r\n annotation: 'annotations/specifications-response',\r\n source: 'phaseDegrees',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.degree',\r\n hoverTitles: { headerLabel: 'figures.phaseDegrees.x-hover', lineLabels: ['figures.phaseDegrees.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseRadians,\r\n figure: 'figures/graph',\r\n annotation: 'annotations/specifications-response',\r\n source: 'phaseRadians',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 6,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.radian',\r\n hoverTitles: { headerLabel: 'figures.phaseRadians.x-hover', lineLabels: ['figures.phaseRadians.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.groupDelay,\r\n figure: 'figures/graph',\r\n annotation: 'annotations/specifications-response',\r\n source: 'groupDelay',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.second',\r\n hoverTitles: { headerLabel: 'figures.groupDelay.x-hover', lineLabels: ['figures.groupDelay.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseDelay,\r\n figure: 'figures/graph',\r\n annotation: 'annotations/specifications-response',\r\n source: 'phaseDelay',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.second',\r\n hoverTitles: { headerLabel: 'figures.phaseDelay.x-hover', lineLabels: ['figures.phaseDelay.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.stepResponse,\r\n figure: 'figures/graph',\r\n annotation: 'annotations/specifications-response',\r\n source: 'stepResponse',\r\n options: {\r\n xscale: 'linear',\r\n xformat: '.3~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: 8,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.second',\r\n yUnit: 'units.vv',\r\n hoverTitles: { headerLabel: 'figures.stepResponse.x-hover', lineLabels: ['figures.stepResponse.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.stages,\r\n figure: 'figures/stages',\r\n annotation: null,\r\n source: null,\r\n options: { xscale: 'log', yscale: 'linear' },\r\n },\r\n ],\r\n components: [\r\n {\r\n name: FilterConstants.figureName.magnitudeDb,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'magnitudeDb',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.db',\r\n hoverTitles: { headerLabel: 'figures.magnitudeDb.x-hover', lineLabels: ['figures.magnitudeDb.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.magnitudeVV,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'magnitudeVV',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.vv',\r\n hoverTitles: { headerLabel: 'figures.magnitudeVV.x-hover', lineLabels: ['figures.magnitudeVV.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseDegrees,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'phaseDegrees',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.degree',\r\n hoverTitles: { headerLabel: 'figures.phaseDegrees.x-hover', lineLabels: ['figures.phaseDegrees.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseRadians,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'phaseRadians',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 6,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.radian',\r\n hoverTitles: { headerLabel: 'figures.phaseRadians.x-hover', lineLabels: ['figures.phaseRadians.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.groupDelay,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'groupDelay',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.second',\r\n hoverTitles: { headerLabel: 'figures.groupDelay.x-hover', lineLabels: ['figures.groupDelay.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseDelay,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'phaseDelay',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.second',\r\n hoverTitles: { headerLabel: 'figures.phaseDelay.x-hover', lineLabels: ['figures.phaseDelay.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.stepResponse,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'stepResponse',\r\n options: {\r\n xscale: 'linear',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: 8,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.second',\r\n yUnit: 'units.vv',\r\n hoverTitles: { headerLabel: 'figures.stepResponse.x-hover', lineLabels: ['figures.stepResponse.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.inputImpedanceMagnitude,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'inputImpedanceMagnitude',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'log',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: -1,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.ohm',\r\n hoverTitles: {\r\n headerLabel: 'figures.inputImpedanceMagnitude.x-hover',\r\n lineLabels: ['figures.inputImpedanceMagnitude.y-hover'],\r\n },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.inputImpedancePhase,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'inputImpedancePhase',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.degree',\r\n hoverTitles: {\r\n headerLabel: 'figures.inputImpedancePhase.x-hover',\r\n lineLabels: ['figures.inputImpedancePhase.y-hover'],\r\n },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.noise,\r\n figure: 'figures/noise',\r\n annotation: null,\r\n source: 'noise',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'log',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: -1,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.snd',\r\n hoverTitles: { headerLabel: 'figures.noise.x-hover', lineLabels: ['figures.noise.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.power,\r\n figure: 'figures/power',\r\n annotation: null,\r\n source: 'power',\r\n options: null,\r\n },\r\n {\r\n name: FilterConstants.figureName.voltageRange,\r\n figure: 'figures/voltage-range',\r\n annotation: null,\r\n source: 'voltageRange',\r\n options: null,\r\n },\r\n {\r\n name: FilterConstants.figureName.stages,\r\n figure: 'figures/stages',\r\n annotation: null,\r\n source: null,\r\n options: { xscale: 'log', yscale: 'linear' },\r\n },\r\n {\r\n name: FilterConstants.figureName.circuit,\r\n figure: 'figures/schematic',\r\n annotation: null,\r\n source: null,\r\n options: null,\r\n },\r\n ],\r\n tolerances: [\r\n {\r\n name: FilterConstants.figureName.magnitudeDb,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'magnitudeDb',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.db',\r\n hoverTitles: { headerLabel: 'figures.magnitudeVV.x-hover', lineLabels: ['figures.magnitudeVV.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.magnitudeVV,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'magnitudeVV',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.vv',\r\n hoverTitles: { headerLabel: 'figures.magnitudeVV.x-hover', lineLabels: ['figures.magnitudeVV.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseDegrees,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'phaseDegrees',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.degree',\r\n hoverTitles: { headerLabel: 'figures.phaseDegrees.x-hover', lineLabels: ['figures.phaseDegrees.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseRadians,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'phaseRadians',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 6,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.radian',\r\n hoverTitles: { headerLabel: 'figures.phaseRadians.x-hover', lineLabels: ['figures.phaseRadians.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.groupDelay,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'groupDelay',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.second',\r\n hoverTitles: { headerLabel: 'figures.groupDelay.x-hover', lineLabels: ['figures.groupDelay.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseDelay,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'phaseDelay',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.second',\r\n hoverTitles: { headerLabel: 'figures.phaseDelay.x-hover', lineLabels: ['figures.phaseDelay.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.stepResponse,\r\n figure: 'figures/graph',\r\n annotation: 'annotations/step-response-envelope',\r\n source: 'stepResponse',\r\n options: {\r\n xscale: 'linear',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: 8,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.second',\r\n yUnit: 'units.vv',\r\n hoverTitles: { headerLabel: 'figures.stepResponse.x-hover', lineLabels: ['figures.stepResponse.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.inputImpedanceMagnitude,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'inputImpedanceMagnitude',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'log',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: -1,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.ohm',\r\n hoverTitles: {\r\n headerLabel: 'figures.inputImpedanceMagnitude.x-hover',\r\n lineLabels: ['figures.inputImpedanceMagnitude.y-hover'],\r\n },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.inputImpedancePhase,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'inputImpedancePhase',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.degree',\r\n hoverTitles: {\r\n headerLabel: 'figures.inputImpedancePhase.x-hover',\r\n lineLabels: ['figures.inputImpedancePhase.y-hover'],\r\n },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.noise,\r\n figure: 'figures/noise',\r\n annotation: null,\r\n source: 'noise',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'log',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: -1,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.snd',\r\n hoverTitles: { headerLabel: 'figures.noise.x-hover', lineLabels: ['figures.noise.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.power,\r\n figure: 'figures/power',\r\n annotation: null,\r\n source: 'power',\r\n options: null,\r\n },\r\n {\r\n name: FilterConstants.figureName.voltageRange,\r\n figure: 'figures/voltage-range',\r\n annotation: null,\r\n source: 'voltageRange',\r\n options: null,\r\n },\r\n {\r\n name: FilterConstants.figureName.stages,\r\n figure: 'figures/stages',\r\n annotation: null,\r\n source: null,\r\n options: { xscale: 'log', yscale: 'linear' },\r\n },\r\n {\r\n name: FilterConstants.figureName.circuit,\r\n figure: 'figures/schematic',\r\n annotation: null,\r\n source: null,\r\n options: null,\r\n },\r\n ],\r\n 'next-steps': [\r\n {\r\n name: FilterConstants.figureName.magnitudeDb,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'magnitudeDb',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.db',\r\n hoverTitles: { headerLabel: 'figures.magnitudeVV.x-hover', lineLabels: ['figures.magnitudeVV.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.magnitudeVV,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'magnitudeVV',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.vv',\r\n hoverTitles: { headerLabel: 'figures.magnitudeVV.x-hover', lineLabels: ['figures.magnitudeVV.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseDegrees,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'phaseDegrees',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.degree',\r\n hoverTitles: { headerLabel: 'figures.phaseDegrees.x-hover', lineLabels: ['figures.phaseDegrees.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseRadians,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'phaseRadians',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 6,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.radian',\r\n hoverTitles: { headerLabel: 'figures.phaseRadians.x-hover', lineLabels: ['figures.phaseRadians.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.groupDelay,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'groupDelay',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.second',\r\n hoverTitles: { headerLabel: 'figures.groupDelay.x-hover', lineLabels: ['figures.groupDelay.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.phaseDelay,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'phaseDelay',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.second',\r\n hoverTitles: { headerLabel: 'figures.phaseDelay.x-hover', lineLabels: ['figures.phaseDelay.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.stepResponse,\r\n figure: 'figures/graph',\r\n annotation: 'annotations/step-response-envelope',\r\n source: 'stepResponse',\r\n options: {\r\n xscale: 'linear',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: 8,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.second',\r\n yUnit: 'units.vv',\r\n hoverTitles: { headerLabel: 'figures.stepResponse.x-hover', lineLabels: ['figures.stepResponse.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.inputImpedanceMagnitude,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'inputImpedanceMagnitude',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'log',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: -1,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.ohm',\r\n hoverTitles: {\r\n headerLabel: 'figures.inputImpedanceMagnitude.x-hover',\r\n lineLabels: ['figures.inputImpedanceMagnitude.y-hover'],\r\n },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.inputImpedancePhase,\r\n figure: 'figures/graph',\r\n annotation: null,\r\n source: 'inputImpedancePhase',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'linear',\r\n yformat: '.3~r',\r\n xticks: -1,\r\n yticks: 8,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.degree',\r\n hoverTitles: {\r\n headerLabel: 'figures.inputImpedancePhase.x-hover',\r\n lineLabels: ['figures.inputImpedancePhase.y-hover'],\r\n },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.noise,\r\n figure: 'figures/noise',\r\n annotation: null,\r\n source: 'noise',\r\n options: {\r\n xscale: 'log',\r\n xformat: '.4~s',\r\n yscale: 'log',\r\n yformat: '.3~s',\r\n xticks: -1,\r\n yticks: -1,\r\n hover: true,\r\n xUnit: 'units.hz',\r\n yUnit: 'units.snd',\r\n hoverTitles: { headerLabel: 'figures.noise.x-hover', lineLabels: ['figures.noise.y-hover'] },\r\n },\r\n },\r\n {\r\n name: FilterConstants.figureName.power,\r\n figure: 'figures/power',\r\n annotation: null,\r\n source: 'power',\r\n options: null,\r\n },\r\n {\r\n name: FilterConstants.figureName.voltageRange,\r\n figure: 'figures/voltage-range',\r\n annotation: null,\r\n source: 'voltageRange',\r\n options: null,\r\n },\r\n {\r\n name: FilterConstants.figureName.stages,\r\n figure: 'figures/stages',\r\n annotation: null,\r\n source: null,\r\n options: { xscale: 'log', yscale: 'linear' },\r\n },\r\n {\r\n name: FilterConstants.figureName.circuit,\r\n figure: 'figures/schematic',\r\n annotation: null,\r\n source: null,\r\n options: null,\r\n },\r\n {\r\n name: FilterConstants.figureName.billOfMaterials,\r\n figure: 'figures/bom',\r\n annotation: null,\r\n source: 'billOfMaterials',\r\n options: null,\r\n },\r\n ],\r\n};\r\n","const FilterConstants = {\r\n filterType: {\r\n lowPass: 'lowPass',\r\n highPass: 'highPass',\r\n bandPass: 'bandPass',\r\n bandStop: 'bandStop',\r\n gain: 'gain',\r\n notch: 'notch',\r\n },\r\n optimizationType: {\r\n noise: 'Noise',\r\n voltageRange: 'VoltageRange',\r\n power: 'Power',\r\n recommendedSpecific: 'RecommendedSpecificComponents',\r\n allowedSpecific: 'AllowedSpecificComponents',\r\n },\r\n optimizationPreferenceOptions: {\r\n specific: 'specific',\r\n nonSpecific: 'nonSpecific',\r\n },\r\n responseType: {\r\n bessel: 'Bessel',\r\n chebyshev: 'Chebyshev',\r\n butterworth: 'Butterworth',\r\n butterworthBessel: 'Butterworth Bessel',\r\n },\r\n sizing: {\r\n big: 'big',\r\n tiny: 'tiny',\r\n },\r\n gainUnits: {\r\n vv: 'V/V',\r\n db: 'dB',\r\n },\r\n idealOpAmp: 'ideal',\r\n tabs: {\r\n filterType: 'filterType',\r\n specifications: 'specifications',\r\n components: 'components',\r\n tolerances: 'tolerances',\r\n nextSteps: 'nextSteps',\r\n },\r\n fields: {\r\n inputs: {\r\n specifications: {\r\n gain: 'gain',\r\n gainUnit: 'gainUnit',\r\n passbandFrequency: 'passbandFrequency',\r\n passbandAttenuation: 'passbandAttenuation',\r\n stopbandFrequency: 'stopbandFrequency',\r\n stopbandAttenuation: 'stopbandAttenuation',\r\n centerFrequency: 'centerFrequency',\r\n },\r\n components: {\r\n vsPlus: 'vsPlus',\r\n vsMinus: 'vsMinus',\r\n },\r\n },\r\n },\r\n figureName: {\r\n magnitudeDb: 'magnitudeDb',\r\n magnitudeVV: 'magnitudeVV',\r\n phaseDegrees: 'phaseDegrees',\r\n phaseRadians: 'phaseRadians',\r\n phaseDelay: 'phaseDelay',\r\n groupDelay: 'groupDelay',\r\n stepResponse: 'stepResponse',\r\n stages: 'stages',\r\n inputImpedanceMagnitude: 'inputImpedanceMagnitude',\r\n inputImpedancePhase: 'inputImpedancePhase',\r\n noise: 'noise',\r\n power: 'power',\r\n voltageRange: 'voltageRange',\r\n circuit: 'circuit',\r\n billOfMaterials: 'billOfMaterials',\r\n },\r\n Limits: {\r\n RSMALL_LOAD_LIMIT: 50,\r\n RSMALL_COMP_LIMIT: 1,\r\n RBIG_COMP_LIMIT: 10e6,\r\n CSMALL_COMP_LIMIT: 1e-11,\r\n CBIG_COMP_LIMIT: 1e-5,\r\n LSMALL_COMP_LIMIT: 1e-9,\r\n LBIG_COMP_LIMIT: 33e-6,\r\n REFERENCE_OPAMP_MAX_VOLTAGE: 12,\r\n REFERENCE_OPAMP_MIN_VOLTAGE: 2.7,\r\n INFINITY: 1e66,\r\n NEARLY_INFINITY: 1e40,\r\n NEGINFINITY: -1e60,\r\n REFERENCE_OPAMP_CURRENT: 0.0014,\r\n REFERENCE_RESISTOR: 10000,\r\n INDUCTOR_ALLOWED_FREQ: 1e6,\r\n INDUCTOR_PREFERRED_FREQ_X_GAIN_X_Q: 20e6,\r\n INDUCTOR_REQUIRED_FREQ_X_GAIN_X_Q: 20e6,\r\n PARASITIC_INPUT_CAP: 3e-12,\r\n },\r\n solutionPossibleType: {\r\n solutionExists: 'Solution Exists',\r\n frequencyTooHigh: 'Frequency too high',\r\n frequencyTooLow: 'Frequency too low',\r\n },\r\n implementationType: {\r\n sallenKey: 'sallenKey',\r\n deliyannisFriend: 'deliyannisFriend',\r\n firstOrder: 'firstOrder',\r\n multipleFeedback: 'multipleFeedback',\r\n inductor: 'inductor',\r\n gain: 'gain',\r\n },\r\n model: {\r\n inputs: {\r\n components: {\r\n defaultAlgorithm: {\r\n 'sallenKey|lowPass': 'lowpassV2',\r\n },\r\n oldAlgorithm: {\r\n 'sallenKey|lowPass': 'lowpass',\r\n },\r\n },\r\n },\r\n },\r\n noiseSources: {\r\n r1: 'R1',\r\n r2: 'R2',\r\n r3: 'R3',\r\n r4: 'R4',\r\n r5: 'R5',\r\n r6: 'R6',\r\n opAmpVoltage: 'OpAmpVoltage',\r\n opAmpNegCurrent: 'OpAmpNegCurrent',\r\n opAmpPosCurrent: 'OpAmpPosCurrent',\r\n },\r\n resistorTolerance: {\r\n ideal: 'ideal',\r\n oneTenth: '0.1%',\r\n fiveTenths: '0.5%',\r\n one: '1%',\r\n five: '5%',\r\n },\r\n capacitorTolerance: {\r\n ideal: 'ideal',\r\n one: '1%',\r\n five: '5%',\r\n ten: '10%',\r\n twenty: '20%',\r\n },\r\n inductorTolerance: {\r\n ideal: 'ideal',\r\n five: '5%',\r\n ten: '10%',\r\n twenty: '20%',\r\n },\r\n gbwTolerance: {\r\n ideal: 'ideal',\r\n twenty: '20%',\r\n },\r\n eSeries: {\r\n E6: 'E6',\r\n E12: 'E12',\r\n E24: 'E24',\r\n E48: 'E48',\r\n E96: 'E96',\r\n ideal: 'ideal',\r\n },\r\n resistorNames: {\r\n r1: 'R1',\r\n r2: 'R2',\r\n r3: 'R3',\r\n r4: 'R4',\r\n r5: 'R5',\r\n r6: 'R6',\r\n },\r\n capacitorNames: {\r\n c1: 'C1',\r\n c2: 'C2',\r\n c3: 'C3',\r\n c4: 'C4',\r\n c5: 'C5',\r\n },\r\n bypassCapacitorNames: {\r\n c9: 'C9',\r\n c0: 'C0',\r\n },\r\n tantalumCapacitorNames: {\r\n c100m: 'C100M',\r\n c101m: 'C101M',\r\n },\r\n inductorNames: { l1: 'L1' },\r\n tool: {\r\n toolId: 1,\r\n userId: '2363076A-20B1-1012-AE1A-10B7C77332C4',\r\n },\r\n oldSliderSteps: 144,\r\n slider: {\r\n chebyshevLimit: 47,\r\n butterworthLimit: 54,\r\n besselButterworthLimit: 96,\r\n },\r\n maxOrder: 10,\r\n stageLetter: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],\r\n ampStatus: {\r\n prerelease: 1,\r\n not_recommended_for_new_designs: 4,\r\n lastTimeBuy: 5,\r\n obsolete: 6,\r\n },\r\n ampRecommendationStatus: {\r\n recommended: 1,\r\n marginal: 2,\r\n notAllowed: 3,\r\n },\r\n resistorNoiseBase: 4.07e-9,\r\n spiceFileType: {\r\n ACAnalysis: 'AC Analysis',\r\n TransientAnalysis: 'Transient Analysis',\r\n NoiseAnalysis: 'Noise Analysis',\r\n },\r\n schematicKey: {\r\n acKey: 'acAnalysis',\r\n noiseKey: 'noiseAnalysis',\r\n transientKey: 'transientAnalysis',\r\n },\r\n circuitPath: 'circuits/',\r\n circuitWidget: {\r\n compSelectCanvasWidget: 'compSelectCanvasWidget',\r\n toleranceCanvasWidget: 'toleranceCanvasWidget',\r\n finalCanvasWidget: 'finalCanvasWidget',\r\n },\r\n fwCircuits: {\r\n gain: 'gain-circuit',\r\n lowPassFirstOrder: 'lowpass-firstorder',\r\n lowPassFirstOrderGain: 'lowpass-firstorder-gain',\r\n lowPassSallenKey: 'lowpass-sallenkey',\r\n lowPassSallenKeyGain: 'lowpass-sallenkey-gain',\r\n lowPassMultipleFeedback: 'lowpass-multiplefeedback',\r\n lowPassInductor: 'lowpass-inductor',\r\n lowPassInductorGain: 'lowpass-inductor-gain',\r\n highPassFirstOrder: 'highpass-firstorder',\r\n highPassFirstOrderGain: 'highpass-firstorder-gain',\r\n highPassSallenKey: 'highpass-sallenkey',\r\n highPassSallenKeyGain: 'highpass-sallenkey-gain',\r\n highPassMultipleFeedback: 'highpass-multiplefeedback',\r\n highPassInductor: 'highpass-inductor',\r\n highPassInductorGain: 'highpass-inductor-gain',\r\n bandPassDelyiannisFriendNoPosFB: 'bandpass-multiplefeedback-noposfb',\r\n bandPassDelyiannisFriendPosFB: 'bandpass-multiplefeedback-posfb',\r\n bandPassDelyiannisFriendPosFBnoR2: 'bandpass-multiplefeedback-posfbnor2',\r\n bandPassInductor: 'bandpass-inductor',\r\n bandPassInductorGain: 'bandpass-inductor-gain',\r\n referenceCircuit: 'reference-circuit',\r\n bypassCapacitor: 'bpcap-circuit',\r\n tantalumCapcacitorPositive: 'tantcap-pos',\r\n tantalumCapcacitorNegative: 'tantcap-neg',\r\n spareAmpSingle: 'spare-single',\r\n spareAmpDual: 'spare-dual',\r\n },\r\n spiceCircuitPath: 'assets/data/spice-circuits/',\r\n spiceFolderDownloadPath: 'SPICE Files',\r\n fieldTypes: {\r\n AlphaNumeric: 'ALPHANUMERIC',\r\n Alphabet: 'ALPHABET',\r\n Numeric: 'NUMERIC',\r\n NumericDecimal: 'NUMERICDECIMAL',\r\n Engineering: 'ENGINEERING',\r\n Custom: 'CUSTOM',\r\n AllChars: 'ALLCHARS',\r\n Scientific: 'SCIENTIFIC',\r\n },\r\n fieldCapitlization: {\r\n UpperCase: 'UPPERCASE',\r\n LowerCase: 'LOWERCASE',\r\n FirstChar: 'FIRSTCHAR',\r\n AllFirstChar: 'ALLFIRSTCHAR',\r\n },\r\n evalBoard: {\r\n fileBase: 'EVAL-FW-{{type}}{{implementation}}{{channel}}',\r\n mother: 'MOTHER',\r\n none: '',\r\n type: {\r\n lowPass: 'LP',\r\n highPass: 'HP',\r\n bandPass: 'BP',\r\n bandStop: '',\r\n notch: 'BP',\r\n gain: 'LP',\r\n },\r\n implementation: {\r\n firstOrder: 'SK',\r\n sallenKey: 'SK',\r\n multipleFeedback: 'MFB',\r\n deliyannisFriend: 'DF',\r\n inductor: '',\r\n gain: 'SK',\r\n },\r\n channel: {\r\n one: '1',\r\n two: '2',\r\n other: '',\r\n },\r\n },\r\n roundDirection: {\r\n up: 'up',\r\n down: 'down',\r\n closest: 'closest',\r\n },\r\n loadErrorCodes: {\r\n noError: 0,\r\n generalError: -1,\r\n invalidPartFound: -2,\r\n noOpAmps: -3,\r\n },\r\n coverImageResource: 'assets/images/PDFDesignFrontPage.jpg',\r\n enFontResource: 'assets/fonts/arial.ttf',\r\n jpFontResource: 'assets/fonts/NotoSansJP-Regular.ttf',\r\n cnFontResource: 'assets/fonts/NotoSansSC-Regular.ttf',\r\n //spiceSchematicCircuits: {\r\n // oneStageACAnalysis: 'acAnalysis1Stage.asc',\r\n // twoStageACAnalysis: 'acAnalysis2Stage.asc',\r\n // threeStageACAnalysis: 'acAnalysis3Stage.asc',\r\n // fourStageACAnalysis: 'acAnalysis4Stage.asc',\r\n // fiveStageACAnalysis: 'acAnalysis5Stage.asc',\r\n // oneStageNoiseAnalysis: 'noiseAnalysis1Stage.asc',\r\n // twoStageNoiseAnalysis: 'noiseAnalysis2Stage.asc',\r\n // threeStageNoiseAnalysis: 'noiseAnalysis3Stage.asc',\r\n // fourStageNoiseAnalysis: 'noiseAnalysis4Stage.asc',\r\n // fiveStageNoiseAnalysis: 'noiseAnalysis5Stage.asc',\r\n // oneStageTransientAnalysis: 'transientAnalysis1Stage.asc',\r\n // twoStageTransientAnalysis: 'transientAnalysis2Stage.asc',\r\n // threeStageTransientAnalysis: 'transientAnalysis3Stage.asc',\r\n // fourStageTransientAnalysis: 'transientAnalysis4Stage.asc',\r\n // fiveStageTransientAnalysis: 'transientAnalysis5Stage.asc',\r\n //}\r\n};\r\n\r\nexport default FilterConstants;\r\n","export default {\r\n time: {\r\n hhmmss: {\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n second: 'numeric',\r\n },\r\n },\r\n date: {\r\n hhmmss: {\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n second: 'numeric',\r\n },\r\n },\r\n number: {\r\n EUR: {\r\n style: 'currency',\r\n currency: 'EUR',\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n },\r\n USD: {\r\n style: 'currency',\r\n currency: 'USD',\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n },\r\n },\r\n};\r\n","import { helper } from '@ember/component/helper';\r\nimport * as Format from '../utils/format';\r\n\r\nexport function formatValue(params, namedArgs) {\r\n let result = Format.formatFieldValue(namedArgs.value, namedArgs.fieldType, namedArgs.param);\r\n return result;\r\n}\r\n\r\nexport default helper(formatValue);\r\n","import { initialize } from 'ember-responsive/initializers/responsive';\r\n\r\n/**\r\n * Ember responsive initializer\r\n *\r\n * Supports auto injecting media service app-wide.\r\n *\r\n * Generated by the ember-responsive addon. Customize initialize to change\r\n * injection.\r\n */\r\n\r\nexport default {\r\n name: 'responsive',\r\n initialize,\r\n};\r\n","import IndividualStageAdvisor from './individual-stage';\r\nimport { getOpampNames } from '../gestures/optimization';\r\nimport IndexModel from '../index';\r\nimport ComponentSelectionInput from '../inputs/component-selection';\r\nimport SliderInput from '../inputs/component-selection/slider';\r\nimport IndividualStageInput from '../inputs/component-selection/individual-stage';\r\nimport ComponentSelectionResults from '../results/component-selection';\r\nimport SallenKeyLowPassIdealOpAmp from '../implementation/sallen-key/low-pass/ideal-op-amp';\r\nimport SallenKeyLowPassCircuit from '../implementation/sallen-key/low-pass/circuit';\r\nimport SecondOrderActualStage from '../stages/actual-second-order';\r\nimport { StageInput } from './individual-stage';\r\nimport FilterConstants from '../../filter-constants';\r\nimport { isNullOrUndefined } from '../../utils/common';\r\nimport { getStageInputsInImplementationOrder } from '../utils/stage';\r\nimport { evaluateOpAmps, getAppropriateOpAmps } from '@ebiz/aditools-filter/recommendations';\r\n\r\nexport const lockInputsErrorsList = [\r\n 'invalidField',\r\n 'emptyField',\r\n 'voltageSpanLessThanMinimum',\r\n 'voltageSpanGreaterThanMax',\r\n 'vsMinusShouldBeNegative',\r\n 'vsPlusShouldBePositive',\r\n 'frequencyTooHigh',\r\n 'frequencyTooLow',\r\n];\r\n\r\nconst _defaults = {\r\n vsPlus: 5,\r\n vsMinus: -5,\r\n optimization: FilterConstants.optimizationType.power,\r\n optimizationPreference: FilterConstants.optimizationPreferenceOptions.nonSpecific,\r\n compensateForGbw: false,\r\n};\r\n\r\nconst componentResultErrors = [\r\n 'noOpAmpFoundForRequirements',\r\n 'noOpAmpFoundForRequirementsWithVoltage',\r\n 'frequencyTooHigh',\r\n 'frequencyTooLow',\r\n];\r\n\r\ninterface OverallAllowedLimits {\r\n gbw: number;\r\n rOutOverGBW: number;\r\n iBias: number;\r\n slewRate: number;\r\n specialGain: number;\r\n}\r\n\r\ninterface StageLimits {\r\n allowedLimits: SallenKeyLowPassIdealOpAmp;\r\n powerSpan: number;\r\n recommendedLimits: SallenKeyLowPassIdealOpAmp;\r\n}\r\n\r\ninterface OptimizationValues {\r\n gainValues: SliderInput[];\r\n sliderValues: SliderInput[];\r\n sortOrder: number[];\r\n}\r\n\r\ninterface SliderValues {\r\n gainValues: SliderInput[];\r\n sliderValues: SliderInput[];\r\n}\r\n\r\ninterface OpAmpsFromOptimization {\r\n sortOrder: number[];\r\n opAmps: string[];\r\n}\r\n\r\n////////////////////////////////////////////////////////////////////////////////////\r\n// component-selection - Advisor that runs when user goes into the components tab //\r\n////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class ComponentSelectionAdvisor {\r\n model: IndexModel;\r\n stageAdvisor: IndividualStageAdvisor;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Initialization //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n constructor(model: IndexModel) {\r\n this.model = model;\r\n this.stageAdvisor = new IndividualStageAdvisor(this.model);\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // User Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Creates the component selection input model\r\n // Inputs:\r\n // - data : input model values, if this is null, defaults are used\r\n // Returns: component selection input model\r\n generate(data: ComponentSelectionInput): ComponentSelectionInput {\r\n return this.restructure(new ComponentSelectionInput(data ? data : _defaults));\r\n }\r\n\r\n // Creates a Copy of the Model\r\n // Inputs:\r\n // - sourceModel : model to be copied from\r\n // Returns: result - a newly created input model with values copied from the source model\r\n clone(sourceModel: ComponentSelectionInput): ComponentSelectionInput {\r\n const result = new ComponentSelectionInput();\r\n result.preferredAlgorithms = sourceModel.preferredAlgorithms;\r\n result.choiceOptions = sourceModel.choiceOptions;\r\n result.compensateForGbw = sourceModel.compensateForGbw;\r\n result.optimization = sourceModel.optimization;\r\n result.optimizationPreference = sourceModel.optimizationPreference;\r\n result.vsMinus = sourceModel.vsMinus;\r\n result.vsPlus = sourceModel.vsPlus;\r\n result.individualStageInputs = sourceModel.individualStageInputs\r\n ? sourceModel.individualStageInputs.map((item: StageInput) => {\r\n return this.stageAdvisor.clone(item);\r\n })\r\n : sourceModel.individualStageInputs;\r\n result.sortOrder = sourceModel.sortOrder;\r\n\r\n return result;\r\n }\r\n\r\n // Rebuilds the component selection input model\r\n // Inputs:\r\n // - inputModel : the values of the component selection input model\r\n // Returns: result - component selection input model. Includes the individual stage inputs as well\r\n restructure(inputModel: ComponentSelectionInput): ComponentSelectionInput {\r\n const workingModel = this.clone(inputModel);\r\n let isValidCircuit = true;\r\n\r\n // 1. Check if the changes in specifications input have the number of stages generated\r\n const targetStages = this.model.results.specifications.targetStagesWithDistributedGain;\r\n let currentStages = workingModel.individualStageInputs\r\n ? workingModel.individualStageInputs.map((item: StageInput) => {\r\n return this.stageAdvisor.clone(item);\r\n })\r\n : workingModel.individualStageInputs;\r\n if (currentStages === null) {\r\n currentStages = [];\r\n }\r\n if (workingModel.sortOrder.length !== targetStages.length) {\r\n workingModel.sortOrder = [];\r\n }\r\n if (targetStages.length > currentStages.length) {\r\n workingModel.sortOrder = [];\r\n } else if (targetStages.length < currentStages.length) {\r\n currentStages = currentStages.slice(0, targetStages.length - currentStages.length);\r\n workingModel.sortOrder = [];\r\n }\r\n\r\n // 2. Build a Temporary Index Model. We do not want to use our main model as a scratch pad\r\n const indexModel = new IndexModel(this.model.opAmpSource);\r\n indexModel.inputs.filterType = this.model.inputs.filterType;\r\n indexModel.inputs.specifications = this.model.inputs.specifications;\r\n // 2a. Rebuild Individual Stage Inputs (Happens when the changes you make change the stage count and implementation)\r\n workingModel.individualStageInputs = []; // Clear before Rebuilding\r\n const optimizationPreference = workingModel.optimizationPreference;\r\n\r\n const newIndividualStages = this.rebuildIndividualStages(targetStages, currentStages, optimizationPreference);\r\n\r\n isValidCircuit = newIndividualStages.isValidCircuit;\r\n workingModel.individualStageInputs = newIndividualStages.newStages;\r\n workingModel.sortOrder =\r\n optimizationPreference === FilterConstants.optimizationPreferenceOptions.nonSpecific\r\n ? []\r\n : workingModel.sortOrder;\r\n if (optimizationPreference === FilterConstants.optimizationPreferenceOptions.specific)\r\n workingModel.optimization = FilterConstants.optimizationType.recommendedSpecific;\r\n const compensateForGbw = workingModel.compensateForGbw;\r\n workingModel.compensateForGbw = false; // Getting the Parts needs the Compensate for GBW to be turned off.\r\n indexModel.inputs.components = workingModel;\r\n\r\n if (isValidCircuit) {\r\n this.getIndividualStageOpAmps(indexModel, workingModel, inputModel.individualStageInputs);\r\n }\r\n\r\n // 5. Get the Component Inputs Model and clear the scratchpad Index Model\r\n workingModel.compensateForGbw = compensateForGbw; // Restore Compensate for GBW value\r\n const updatedModel = this.clone(workingModel);\r\n // indexModel = null;\r\n\r\n // 6. Update the sliders\r\n const sliderValues = this.getSliderValues(updatedModel);\r\n for (let i = 0; i < updatedModel.individualStageInputs.length; i++) {\r\n if (sliderValues.sliderValues[i] && sliderValues.gainValues[i]) {\r\n const componentSizing = sliderValues.sliderValues[i] as SliderInput,\r\n gainRatio = sliderValues.gainValues[i] as SliderInput;\r\n updatedModel.individualStageInputs[i].componentSizing.minimum = componentSizing.minimum;\r\n updatedModel.individualStageInputs[i].componentSizing.maximum = componentSizing.maximum;\r\n updatedModel.individualStageInputs[i].gainRatio.maximum = gainRatio.maximum;\r\n updatedModel.individualStageInputs[i].gainRatio.minimum = gainRatio.minimum;\r\n }\r\n }\r\n\r\n updatedModel.preferredAlgorithms = inputModel.preferredAlgorithms\r\n ? inputModel.preferredAlgorithms\r\n : FilterConstants.model.inputs.components.defaultAlgorithm;\r\n return updatedModel;\r\n }\r\n\r\n rebuildIndividualStages(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n targetStages: any,\r\n currentStages: StageInput[],\r\n optimizationPreference: string,\r\n ): { newStages: IndividualStageInput[]; isValidCircuit: boolean } {\r\n let isValidCircuit = true;\r\n const newStages = [];\r\n for (let i = 0; i < targetStages.length; i++) {\r\n let stageItem = null;\r\n const currentStage = currentStages[i];\r\n if (!currentStage) {\r\n stageItem = this.stageAdvisor.generate(targetStages[i], null, null, null, null);\r\n } else {\r\n const isOldDesign = currentStage.componentSizing.value === null;\r\n const legacySizingSliderValue = isOldDesign\r\n ? Number(currentStage.legacySizingSliderValue) / FilterConstants.oldSliderSteps\r\n : null;\r\n const legacyGainSliderValue = isOldDesign\r\n ? Number(currentStage.legacyGainSliderValue) / FilterConstants.oldSliderSteps\r\n : null;\r\n stageItem = this.stageAdvisor.generate(\r\n targetStages[i],\r\n null,\r\n isOldDesign,\r\n legacySizingSliderValue,\r\n legacyGainSliderValue,\r\n );\r\n stageItem.opAmp = currentStage.opAmp;\r\n\r\n if (isOldDesign) {\r\n currentStage.componentSizing.value = stageItem.componentSizing.value;\r\n currentStage.gainRatio.value = stageItem.gainRatio.value;\r\n }\r\n\r\n if (optimizationPreference === FilterConstants.optimizationPreferenceOptions.specific) {\r\n if (currentStage.implementation) {\r\n const currImplementationSelection = currentStage.implementationSelection.selections;\r\n const defaultImplementationSelection = stageItem.implementationSelection.selections;\r\n let doUpdateImplementation = currImplementationSelection.length === defaultImplementationSelection.length;\r\n if (doUpdateImplementation) {\r\n for (let j = 0; j < currImplementationSelection.length; j++) {\r\n const selectionItem = currImplementationSelection[j];\r\n if (!defaultImplementationSelection.includes(selectionItem)) {\r\n doUpdateImplementation = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (doUpdateImplementation) {\r\n doUpdateImplementation = defaultImplementationSelection.includes(\r\n currentStage.implementationSelection.selectedItem,\r\n );\r\n }\r\n\r\n if (doUpdateImplementation) {\r\n stageItem.implementationSelection = currentStage.implementationSelection;\r\n stageItem.implementation = currentStage.implementation;\r\n }\r\n }\r\n\r\n const stageDefaults = this.stageAdvisor.getImplementationDefaults(\r\n targetStages[i],\r\n stageItem.implementation,\r\n currentStage,\r\n );\r\n\r\n stageItem.componentSizing = stageDefaults.componentSizing;\r\n stageItem.gainRatio = stageDefaults.gainRatio;\r\n\r\n // Component Sizing and Gain Ratio Minimum and Maximum Values are not saved in a design, so when it sees that the values\r\n // are set to -1 from the design, the values will be set to the defaults based on the target stage values and the implementation\r\n if (currentStage.componentSizing.minimum === -1 && currentStage.componentSizing.maximum === -1) {\r\n currentStage.componentSizing.minimum = stageDefaults.componentSizing.minimum;\r\n currentStage.componentSizing.maximum = stageDefaults.componentSizing.maximum;\r\n }\r\n\r\n if (currentStage.gainRatio.minimum === -1 && currentStage.gainRatio.maximum === -1) {\r\n currentStage.gainRatio.minimum = stageDefaults.gainRatio.minimum;\r\n currentStage.gainRatio.maximum = stageDefaults.gainRatio.maximum;\r\n }\r\n }\r\n\r\n stageItem.componentSizing.value = currentStage.componentSizing\r\n ? this.getComponentSizing(currentStage, stageItem)\r\n : -1;\r\n stageItem.gainRatio.value = currentStage.gainRatio ? this.getGainRatio(currentStage, stageItem) : -1;\r\n }\r\n\r\n isValidCircuit =\r\n isValidCircuit &&\r\n ((stageItem.componentSizing.enabled && stageItem.componentSizing.value !== -1) ||\r\n (!stageItem.componentSizing.enabled && stageItem.componentSizing.value === -1)) &&\r\n ((stageItem.gainRatio.enabled && stageItem.gainRatio.value !== -1) ||\r\n (!stageItem.gainRatio.enabled && stageItem.gainRatio.value === -1));\r\n stageItem.stageLetter = targetStages[i].stageLetter;\r\n newStages.push(stageItem);\r\n }\r\n\r\n return { newStages: newStages, isValidCircuit: isValidCircuit };\r\n }\r\n\r\n getComponentSizing(currentStage: StageInput, stageItem: IndividualStageInput): number {\r\n let componentSizingValue = stageItem.componentSizing.value;\r\n if (stageItem.componentSizing.enabled) {\r\n const currentCompSizeValue = currentStage.componentSizing.value;\r\n if (\r\n currentCompSizeValue !== -1 &&\r\n currentStage.componentSizing.maximum !== -1 &&\r\n currentStage.componentSizing.minimum !== -1\r\n ) {\r\n // ARNA-5151: If the current value is lesser than the minimum or greater than the maximum, extend the minimum or maximum instead\r\n if (currentCompSizeValue < stageItem.componentSizing.minimum) {\r\n stageItem.componentSizing.minimum = currentStage.componentSizing.value;\r\n } else if (currentCompSizeValue > stageItem.componentSizing.maximum) {\r\n stageItem.componentSizing.maximum = currentStage.componentSizing.value;\r\n }\r\n componentSizingValue = currentCompSizeValue;\r\n }\r\n }\r\n return componentSizingValue;\r\n }\r\n\r\n getGainRatio(currentStage: StageInput, stageItem: IndividualStageInput): number {\r\n let gainRatioValue = stageItem.gainRatio.value;\r\n if (stageItem.gainRatio.enabled) {\r\n const currentGainRatioValue = currentStage.gainRatio.value;\r\n if (\r\n currentGainRatioValue !== -1 &&\r\n currentStage.gainRatio.maximum !== -1 &&\r\n currentStage.gainRatio.minimum !== -1\r\n ) {\r\n // ARNA-5151: If the current value is lesser than the minimum or greater than the maximum, extend the minimum or maximum instead\r\n if (currentGainRatioValue < stageItem.gainRatio.minimum) {\r\n stageItem.gainRatio.minimum = currentStage.gainRatio.value;\r\n } else if (currentGainRatioValue > stageItem.gainRatio.maximum) {\r\n stageItem.gainRatio.maximum = currentStage.gainRatio.value;\r\n }\r\n gainRatioValue = currentGainRatioValue;\r\n }\r\n }\r\n return gainRatioValue;\r\n }\r\n\r\n getIndividualStageOpAmps(\r\n indexModel: IndexModel,\r\n workingModel: ComponentSelectionInput,\r\n oldStages: IndividualStageInput[],\r\n ): void {\r\n // 3. Generate the appropriate op amps based on the limits and recommendations on the original inputs.\r\n // As of this moment, all added op amps are marked with an \"ideal\" part name\r\n const individualStageInputs = getStageInputsInImplementationOrder(\r\n workingModel.individualStageInputs,\r\n indexModel.results.components.detailsOfCircuits,\r\n );\r\n let opAmpSelection = null;\r\n const modelParams = {\r\n circuits: indexModel.results.components.circuits,\r\n individualStageInputs: individualStageInputs,\r\n vsPlus: workingModel.vsPlus,\r\n vsMinus: workingModel.vsMinus,\r\n optimization: workingModel.optimization,\r\n stopbandFrequency: indexModel.results.components.stopbandFrequency,\r\n };\r\n const params = indexModel.opAmpSource.getFilterOpampsParams(modelParams);\r\n const opAmpsList = getAppropriateOpAmps(\r\n params.opAmps,\r\n params.circuits,\r\n params.vsPlus,\r\n params.vsMinus,\r\n params.optimization,\r\n params.stopbandFrequency,\r\n params.applyAdditionalCriteria,\r\n );\r\n\r\n opAmpSelection = opAmpsList.length > 0 ? getOpampNames(opAmpsList, indexModel) : null;\r\n if (\r\n workingModel.optimizationPreference === FilterConstants.optimizationPreferenceOptions.specific &&\r\n !opAmpSelection\r\n ) {\r\n workingModel.optimization = FilterConstants.optimizationType.allowedSpecific;\r\n opAmpSelection = opAmpsList.length > 0 ? getOpampNames(opAmpsList, indexModel) : null;\r\n }\r\n\r\n // 4. Supply OpAmp Values for the Individual Stages\r\n for (let i = 0; i < workingModel.individualStageInputs.length; i++) {\r\n if (workingModel.individualStageInputs[i]) {\r\n if (workingModel.optimizationPreference === FilterConstants.optimizationPreferenceOptions.nonSpecific) {\r\n workingModel.individualStageInputs[i].opAmp = opAmpSelection ? opAmpSelection[i] : 'ideal';\r\n } else {\r\n const oldStage = oldStages[i];\r\n const opAmp = workingModel.individualStageInputs[i].opAmp\r\n ? workingModel.individualStageInputs[i].opAmp\r\n : oldStage && oldStage.opAmp\r\n ? oldStage.opAmp\r\n : null;\r\n workingModel.individualStageInputs[i].opAmp = opAmp && opAmp.length > 0 ? opAmp : 'ideal';\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Returns the default values for a stage\r\n // Inputs:\r\n // - index : index of the individual stages array\r\n // Returns: default value for the individual stage input based from the target stage referenced by the index\r\n getStageDefault(index: number): IndividualStageInput | null {\r\n const targetStages = this.model.results.specifications.targetStagesWithDistributedGain;\r\n return index < targetStages.length ? this.stageAdvisor.generate(targetStages[index], null, null, null, null) : null;\r\n }\r\n\r\n // Returns the default values for a stage given a specific implementation\r\n // Inputs:\r\n // - index : index of the individual stages array\r\n // - implementation : stage implementation\r\n // Returns: stageDefaults - default values of the individual stage input based on target stage referenced by the index and implementation\r\n getImplementationDefaults(index: number, implementation: string): IndividualStageInput {\r\n const targetStages = this.model.results.specifications.targetStagesWithDistributedGain;\r\n const stageDefaults = this.stageAdvisor.getImplementationDefaults(targetStages[index], implementation);\r\n return stageDefaults;\r\n }\r\n\r\n // Gets the allowed limits with the given stage data\r\n // Inputs:\r\n // - resultsModel : component selection results model\r\n // - stageCount : number of stages\r\n // Returns: hash containing the allowed limits for gbw, rOutOverGBW, iBias, slewRate & specialGain\r\n _getOverallAllowedLimits(resultsModel: ComponentSelectionResults, stageCount: number): OverallAllowedLimits {\r\n const opAmpGBW = [],\r\n routGBW = [],\r\n iBias = [],\r\n slewRate = [],\r\n specialGain = [];\r\n for (let i = 0; i < stageCount; i++) {\r\n const stageLimits = resultsModel.getStageLimits(i);\r\n opAmpGBW.push(stageLimits.allowedLimits.gbw);\r\n routGBW.push(stageLimits.allowedLimits.rOutOverGBW);\r\n iBias.push(stageLimits.allowedLimits.iBias);\r\n slewRate.push(stageLimits.allowedLimits.slewRate);\r\n specialGain.push(stageLimits.allowedLimits.specialGain);\r\n }\r\n\r\n return {\r\n gbw: Math.max(...opAmpGBW),\r\n rOutOverGBW: Math.min(...routGBW),\r\n iBias: Math.min(...iBias),\r\n slewRate: Math.max(...slewRate),\r\n specialGain: Math.min(...specialGain),\r\n };\r\n }\r\n\r\n // Validate Component Selection Inputs\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // - invalidFields : array of string containing fields with parse errors\r\n // Returns: result - Array of error messages\r\n validate(inputModel: ComponentSelectionInput, invalidFields: Array): Array {\r\n let result: Array = [];\r\n result.push(this.validateEcosystem(inputModel));\r\n result.push(this.validateVsPlus(inputModel, invalidFields));\r\n result.push(this.validateVsMinus(inputModel, invalidFields));\r\n result.push(this.validateVoltageSpan(inputModel, invalidFields));\r\n result = result.filter((p) => !!p);\r\n if (result.length === 0) {\r\n const errorC1: ValidationError | null = this.validateC1Value(inputModel, invalidFields);\r\n if (errorC1 !== null) {\r\n result.push(errorC1);\r\n } else {\r\n const errorCompRatio: ValidationError | null = this.validateComponentSizingAndGainRatio(\r\n inputModel,\r\n invalidFields,\r\n );\r\n if (errorCompRatio !== null) {\r\n result.push(errorCompRatio);\r\n } else {\r\n const errorOpAmp = this.validateOpAmpAvailability(inputModel, invalidFields);\r\n if (errorOpAmp !== null) result = result.concat(errorOpAmp);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validate target stages from specifications results vs. component input stages\r\n // Checks if inputModel isn't consistent with the outside world\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // Returns: result hash object containing error information for stage info (too many or too few, if any)\r\n validateEcosystem(inputModel: ComponentSelectionInput): ValidationError | null {\r\n let result = null;\r\n const targetStages = this.model.results.specifications.targetStagesWithDistributedGain;\r\n const stagesLength = inputModel.individualStageInputs ? inputModel.individualStageInputs.length : 0;\r\n if (stagesLength > targetStages.length) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: ['individualStages'],\r\n id: 'tooManyStages',\r\n parameters: { value: targetStages.length },\r\n };\r\n } else if (stagesLength < targetStages.length) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: ['individualStages'],\r\n id: 'tooFewStages',\r\n parameters: { value: targetStages.length },\r\n };\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Positive Supply Voltage (Vs+) Value\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // - invalidFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for Vs+ (if any)\r\n validateVsPlus(inputModel: ComponentSelectionInput, invalidFields: Array): ValidationError | null {\r\n let result = null;\r\n const vsPlusName = FilterConstants.fields.inputs.components.vsPlus;\r\n if (invalidFields.indexOf(vsPlusName) === -1) {\r\n const value = inputModel.vsPlus;\r\n if (value < 0) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: [vsPlusName],\r\n id: 'vsPlusShouldBePositive',\r\n parameters: { value: value },\r\n };\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Validates Negative Supply Voltage (Vs+) Value\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // - invalidFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for Vs- (if any)\r\n validateVsMinus(inputModel: ComponentSelectionInput, invalidFields: Array): ValidationError | null {\r\n let result = null;\r\n const vsMinusName = FilterConstants.fields.inputs.components.vsMinus;\r\n if (invalidFields.indexOf(vsMinusName) === -1) {\r\n const value = inputModel.vsMinus;\r\n if (value > 0) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: [vsMinusName],\r\n id: 'vsMinusShouldBeNegative',\r\n parameters: { value: value },\r\n };\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Validates Voltage Span (difference of Vs+ and Vs-)\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // - invalidFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for Voltage Span (if any)\r\n validateVoltageSpan(inputModel: ComponentSelectionInput, invalidFields: Array): ValidationError | null {\r\n let result: ValidationError | null = null;\r\n const vsMinusName = FilterConstants.fields.inputs.components.vsMinus;\r\n const vsPlusName = FilterConstants.fields.inputs.components.vsPlus;\r\n if (invalidFields.indexOf(vsMinusName) === -1 && invalidFields.indexOf(vsPlusName) === -1) {\r\n const vsMinus = inputModel.vsMinus;\r\n const vsPlus = inputModel.vsPlus;\r\n const voltageSpan = vsPlus - vsMinus;\r\n if (voltageSpan < 1.8) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: [vsPlusName, vsMinusName],\r\n id: 'voltageSpanLessThanMinimum',\r\n parameters: { vsPlus: vsPlus, vsMinus: vsMinus, voltageSpan: voltageSpan.toString() },\r\n };\r\n } else if (voltageSpan > 36) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: [vsPlusName, vsMinusName],\r\n id: 'voltageSpanGreaterThanMax',\r\n parameters: { vsPlus: vsPlus, vsMinus: vsMinus, voltageSpan: voltageSpan.toString() },\r\n };\r\n }\r\n if (!result) {\r\n const indexModel = new IndexModel(this.model.opAmpSource);\r\n indexModel.inputs.filterType = this.model.inputs.filterType;\r\n indexModel.inputs.specifications = this.model.inputs.specifications;\r\n indexModel.inputs.components = inputModel;\r\n if (indexModel.results.components.needReferenceStage) {\r\n if (voltageSpan < 2.7) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: [vsPlusName, vsMinusName],\r\n id: 'referenceVoltageSpanLessThanMinimum',\r\n parameters: { vsPlus: vsPlus, vsMinus: vsMinus, voltageSpan: voltageSpan.toString() },\r\n };\r\n } else if (voltageSpan > 12) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: [vsPlusName, vsMinusName],\r\n id: 'referenceVoltageSpanGreaterThanMax',\r\n parameters: { vsPlus: vsPlus, vsMinus: vsMinus, voltageSpan: voltageSpan.toString() },\r\n };\r\n }\r\n }\r\n // indexModel = null;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Checks if there is a valid OpAmp available per stage\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // - invalidFields : array of string containing fields with parse errors\r\n // Returns: result - array of hash object containing error information for OpAmp availability (if any)\r\n validateOpAmpAvailability(\r\n inputModel: ComponentSelectionInput,\r\n invalidFields: Array,\r\n ): Array {\r\n let result: Array = [];\r\n let noOpAmps = false;\r\n const opAmpErrors = [];\r\n if (invalidFields.length === 0) {\r\n const vsMinusName = FilterConstants.fields.inputs.components.vsMinus;\r\n const vsPlusName = FilterConstants.fields.inputs.components.vsPlus;\r\n const compensateForGbw = inputModel.compensateForGbw;\r\n const indexModel = new IndexModel(this.model.opAmpSource);\r\n indexModel.inputs.filterType = this.model.inputs.filterType;\r\n indexModel.inputs.specifications = this.model.inputs.specifications;\r\n inputModel.compensateForGbw = false; // Getting the Parts needs the Compensate for GBW to be turned off.\r\n indexModel.inputs.components = inputModel;\r\n const individualStageInputs = getStageInputsInImplementationOrder(\r\n inputModel.individualStageInputs,\r\n indexModel.results.components.detailsOfCircuits,\r\n );\r\n const optimizationPreference = inputModel.optimizationPreference;\r\n if (optimizationPreference === FilterConstants.optimizationPreferenceOptions.nonSpecific) {\r\n const modelParams = {\r\n circuits: indexModel.results.components.circuits,\r\n individualStageInputs: individualStageInputs,\r\n vsPlus: inputModel.vsPlus,\r\n vsMinus: inputModel.vsMinus,\r\n optimization: inputModel.optimization,\r\n stopbandFrequency: indexModel.results.components.stopbandFrequency,\r\n };\r\n const params = indexModel.opAmpSource.getFilterOpampsParams(modelParams);\r\n const opAmpsList = getAppropriateOpAmps(\r\n params.opAmps,\r\n params.circuits,\r\n params.vsPlus,\r\n params.vsMinus,\r\n params.optimization,\r\n params.stopbandFrequency,\r\n params.applyAdditionalCriteria,\r\n );\r\n\r\n noOpAmps = !(opAmpsList && opAmpsList.length > 0);\r\n } else {\r\n for (let i = 0; i < individualStageInputs.length; i++) {\r\n const opAmp = individualStageInputs[i].opAmp;\r\n const modelParams = {\r\n circuits: indexModel.results.components.circuits[i],\r\n individualStageInputs: individualStageInputs[i],\r\n vsPlus: inputModel.vsPlus,\r\n vsMinus: inputModel.vsMinus,\r\n optimization: inputModel.optimization,\r\n stopbandFrequency: indexModel.results.components.stopbandFrequency,\r\n };\r\n const params = indexModel.opAmpSource.getFilterOpampsParams(modelParams);\r\n const allowedOpAmps = evaluateOpAmps(\r\n params.opAmps,\r\n params.circuits,\r\n params.vsPlus,\r\n params.vsMinus,\r\n params.optimization,\r\n params.stopbandFrequency,\r\n )\r\n ?.filter((opamp) => {\r\n return opamp.status !== 'notAllowed';\r\n })\r\n .map((opamp) => {\r\n return opamp.partNumber;\r\n });\r\n\r\n noOpAmps = !(allowedOpAmps && allowedOpAmps.length > 0);\r\n if (noOpAmps) {\r\n break;\r\n } else {\r\n if (opAmp !== 'ideal') {\r\n // Check if the selected OpAmp is valid for the filter requirements\r\n let errorFields: Array = [];\r\n const vsMinus = inputModel.vsMinus;\r\n const vsPlus = inputModel.vsPlus;\r\n let errorId = 'selectedOpAmpIsIncompatible';\r\n if (vsPlus - vsMinus < 5 || vsPlus - vsMinus > 10) {\r\n errorId = 'selectedOpAmpIsIncompatibleWithVoltage';\r\n errorFields = [vsPlusName, vsMinusName];\r\n }\r\n errorFields.push('stageOpAmp' + i.toString());\r\n if (!allowedOpAmps.includes(opAmp)) {\r\n opAmpErrors.push({\r\n tab: FilterConstants.tabs.components,\r\n fields: errorFields,\r\n id: errorId,\r\n parameters: { stage: individualStageInputs[i].stageLetter, opAmp: opAmp },\r\n });\r\n }\r\n } else {\r\n // No OpAmp selected currently for this stage\r\n opAmpErrors.push({\r\n tab: FilterConstants.tabs.components,\r\n fields: ['stageOpAmp' + i.toString()],\r\n id: 'selectedOpAmpIsIdeal',\r\n parameters: { stage: individualStageInputs[i].stageLetter },\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (noOpAmps) {\r\n // One or more stages have no opamps available for requirements\r\n const vsMinus = inputModel.vsMinus;\r\n const vsPlus = inputModel.vsPlus;\r\n let errorId = 'noOpAmpFoundForRequirements';\r\n let errorFields = [];\r\n for (let i = 0; i < individualStageInputs.length; i++) {\r\n errorFields.push('stageOpAmp' + i.toString());\r\n }\r\n if (vsPlus - vsMinus < 5 || vsPlus - vsMinus > 10) {\r\n errorId = 'noOpAmpFoundForRequirementsWithVoltage';\r\n errorFields = errorFields.concat([vsPlusName, vsMinusName]);\r\n }\r\n\r\n result.push({\r\n tab: FilterConstants.tabs.components,\r\n fields: errorFields,\r\n id: errorId,\r\n parameters: {},\r\n });\r\n } else {\r\n // If there are OpAmp errors per stage, it will be built here\r\n if (opAmpErrors.length > 0) result = result.concat(opAmpErrors);\r\n }\r\n\r\n inputModel.compensateForGbw = compensateForGbw; // Restore Compensate for GBW value\r\n // indexModel = null;\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Master Capacitor (C1) value\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // - invalidFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for c1 value (if any)\r\n validateC1Value(inputModel: ComponentSelectionInput, invalidFields: Array): ValidationError | null {\r\n let result = null;\r\n if (invalidFields.length === 0) {\r\n const indexModel = new IndexModel(this.model.opAmpSource);\r\n indexModel.inputs.filterType = this.model.inputs.filterType;\r\n indexModel.inputs.specifications = this.model.inputs.specifications;\r\n indexModel.inputs.components = inputModel;\r\n let frequency, c1big, c1tiny;\r\n const stages = indexModel.results.components.detailsOfStages;\r\n const circuits = indexModel.results.components.detailsOfCircuits;\r\n for (let i = 0; i < stages.length; i++) {\r\n const circuitData = circuits[i];\r\n const stageImplementation = stages[i].implementation;\r\n switch (stageImplementation) {\r\n case FilterConstants.implementationType.gain: {\r\n c1big = FilterConstants.Limits.INFINITY;\r\n c1tiny = FilterConstants.Limits.INFINITY;\r\n break;\r\n }\r\n case FilterConstants.implementationType.firstOrder:\r\n case FilterConstants.implementationType.sallenKey:\r\n case FilterConstants.implementationType.inductor:\r\n case FilterConstants.implementationType.multipleFeedback:\r\n case FilterConstants.implementationType.deliyannisFriend: {\r\n c1big = circuitData.c1.maximum;\r\n c1tiny = circuitData.c1.minimum;\r\n frequency = circuitData.circuit.frequency;\r\n break;\r\n }\r\n }\r\n if (c1big < c1tiny) {\r\n if (frequency > 1000) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: [],\r\n id: 'frequencyTooHigh',\r\n parameters: {},\r\n };\r\n } else {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: [],\r\n id: 'frequencyTooLow',\r\n parameters: {},\r\n };\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // indexModel = null;\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Component Sizing and Gain Ratio values\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // - invalidFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for c1 value (if any)\r\n validateComponentSizingAndGainRatio(\r\n inputModel: ComponentSelectionInput,\r\n invalidFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n if (invalidFields.length === 0) {\r\n const stages = inputModel.individualStageInputs;\r\n for (let i = 0; i < stages.length; i++) {\r\n const componentSizing = stages[i].componentSizing;\r\n const gainRatio = stages[i].gainRatio;\r\n if (\r\n (componentSizing.enabled && componentSizing.value === -1) ||\r\n (gainRatio.enabled && gainRatio.value === -1)\r\n ) {\r\n result = {\r\n tab: FilterConstants.tabs.components,\r\n fields: [],\r\n id: 'frequencyTooHigh',\r\n parameters: {},\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Gets the default values for a stage given a specific implementation\r\n // Inputs:\r\n // - stageInputs : working model for specific stage\r\n // - index : index of the actual stages array\r\n // Returns: limits for a particular stage reference by the index\r\n getStageLimits(stageInputs: IndividualStageInput, vsPlus: number, vsMinus: number, index: number): StageLimits {\r\n const indexModel = new IndexModel(this.model.opAmpSource);\r\n indexModel.inputs.filterType = this.model.inputs.filterType;\r\n indexModel.inputs.specifications = this.model.inputs.specifications;\r\n\r\n const inputModel = this.clone(this.model.inputs.components);\r\n inputModel.vsPlus = vsPlus;\r\n inputModel.vsMinus = vsMinus;\r\n const individualStageInputs = inputModel.individualStageInputs;\r\n individualStageInputs[index].implementation = stageInputs.implementation;\r\n individualStageInputs[index].componentSizing = stageInputs.componentSizing;\r\n individualStageInputs[index].gainRatio = stageInputs.gainRatio;\r\n indexModel.inputs.components = inputModel;\r\n\r\n const stages = indexModel.results.components;\r\n return stages.getStageLimits(inputModel.sortOrder.indexOf(index));\r\n }\r\n\r\n // Gets the overall limits (gbw, rOutOverGBW, iBias, slewRate & specialGain)\r\n // Returns: overall limits from component selection results model\r\n getOverallLimits(): OverallAllowedLimits {\r\n return this.model.results.components.overallLimits;\r\n }\r\n\r\n // Gets the default values of component sizing and gain depending on optimization\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // Returns: hash object containing the sort order, component sizing values and gain values per stage\r\n getOptimizationValues(inputModel: ComponentSelectionInput): OptimizationValues {\r\n const workingModel = this.clone(inputModel);\r\n workingModel.optimizationPreference = FilterConstants.optimizationPreferenceOptions.nonSpecific;\r\n const indexModel = this._createIndexModel(workingModel);\r\n const circuits = indexModel.results.components.circuits;\r\n const sortOrder = indexModel.results.components.actualStages.map((item: SecondOrderActualStage) => {\r\n return item.stageId ? item.stageId - 1 : null;\r\n });\r\n const sliderValues = this._getSizingSliderValues(circuits);\r\n const gainValues = this._getGainRatios(circuits);\r\n const sliderValuesSorted = [];\r\n const gainValuesSorted = [];\r\n\r\n // Circuits received is sort optimized but we need the inputs in stage alphabetical order.\r\n for (let i = 0; i < sortOrder.length; i++) {\r\n const index = sortOrder.indexOf(i);\r\n if (sliderValues[index] && gainValues[index]) {\r\n sliderValuesSorted.push(sliderValues[index] as SliderInput);\r\n gainValuesSorted.push(gainValues[index] as SliderInput);\r\n }\r\n }\r\n\r\n return { sortOrder: sortOrder, sliderValues: sliderValuesSorted, gainValues: gainValuesSorted };\r\n }\r\n\r\n // Gets the current values of component sizing and gain regardless of optimization\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // Returns: hash object containing the component sizing values and gain values per stage\r\n getSliderValues(inputModel: ComponentSelectionInput): SliderValues {\r\n const workingModel = this.clone(inputModel);\r\n const indexModel = this._createIndexModel(workingModel);\r\n const circuits = indexModel.results.components.circuits;\r\n\r\n const sliderValues = this._getSizingSliderValues(circuits);\r\n const gainValues = this._getGainRatios(circuits);\r\n\r\n const sortOrder = indexModel.results.components.actualStages.map((item: SecondOrderActualStage) => {\r\n return item.stageId ? item.stageId - 1 : null;\r\n });\r\n const sliderValuesSorted = [];\r\n const gainValuesSorted = [];\r\n\r\n // Circuits received is sort optimized but we need the inputs in stage alphabetical order.\r\n for (let i = 0; i < sortOrder.length; i++) {\r\n const index = sortOrder.indexOf(i);\r\n if (sliderValues[index] && gainValues[index]) {\r\n sliderValuesSorted.push(sliderValues[index] as SliderInput);\r\n gainValuesSorted.push(gainValues[index] as SliderInput);\r\n }\r\n }\r\n\r\n return { sliderValues: sliderValuesSorted, gainValues: gainValuesSorted };\r\n }\r\n\r\n // Create a working copy of the whole model\r\n // Used for computing the individual stage inputs\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // Returns: indexModel - a copy of the whole model with working component selection inputs\r\n _createIndexModel(inputModel: ComponentSelectionInput): IndexModel {\r\n const workingModel = this.clone(inputModel);\r\n const indexModel = new IndexModel(this.model.opAmpSource);\r\n indexModel.inputs.filterType = this.model.inputs.filterType;\r\n indexModel.inputs.specifications = this.model.inputs.specifications;\r\n indexModel.inputs.components = workingModel;\r\n\r\n return indexModel;\r\n }\r\n\r\n // Get component sizing slider (min, max, value)\r\n // Inputs:\r\n // - circuits : stage circuit\r\n // Returns: sliderValues - component sizing slider object\r\n _getSizingSliderValues(circuits: SallenKeyLowPassCircuit[]): SliderInput[] {\r\n const sliderValues = circuits.map((item: SallenKeyLowPassCircuit) => {\r\n return this.stageAdvisor.getComponentSizingValues(item);\r\n });\r\n return sliderValues;\r\n }\r\n\r\n // Get gain slider (min, max, value)\r\n // Inputs:\r\n // - circuits : stage circuit\r\n // Returns: sliderValues - gain slider object\r\n _getGainRatios(circuits: SallenKeyLowPassCircuit[]): SliderInput[] {\r\n const sliderValues = circuits.map((item: SallenKeyLowPassCircuit) => {\r\n return this.stageAdvisor.getGainRatio(item);\r\n });\r\n return sliderValues;\r\n }\r\n\r\n // Rebuild the OpAmps per stage when the user changes the optimization\r\n // (Technically it is an array of OpAmps but the values are just the same)\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // Returns: hash object containing an empty sortOrder (force to sort to default) and the list of OpAmps per stage\r\n getOpAmpsFromOptimization(inputModel: ComponentSelectionInput): OpAmpsFromOptimization {\r\n let opAmpSelection = null;\r\n let isValidCircuit = true;\r\n const workingModel = this.clone(inputModel);\r\n const indexModel = new IndexModel(this.model.opAmpSource);\r\n indexModel.inputs.filterType = this.model.inputs.filterType;\r\n indexModel.inputs.specifications = this.model.inputs.specifications;\r\n workingModel.compensateForGbw = false; // Getting the Parts needs the Compensate for GBW to be turned off. This is a scratchpad model so this is ok.\r\n workingModel.individualStageInputs = []; // Since we are switching to Pick for Me, we throw away all component sizing, gain and implementation and we rebuild\r\n const targetStages = indexModel.results.specifications.targetStagesWithDistributedGain;\r\n const newStages = [];\r\n for (let i = 0; i < targetStages.length; i++) {\r\n const stageItem = this.stageAdvisor.generate(targetStages[i], null, null, null, null);\r\n isValidCircuit =\r\n isValidCircuit &&\r\n ((stageItem.componentSizing.enabled && stageItem.componentSizing.value !== -1) ||\r\n (!stageItem.componentSizing.enabled && stageItem.componentSizing.value === -1)) &&\r\n ((stageItem.gainRatio.enabled && stageItem.gainRatio.value !== -1) ||\r\n (!stageItem.gainRatio.enabled && stageItem.gainRatio.value === -1));\r\n stageItem.stageLetter = targetStages[i].stageLetter;\r\n newStages.push(stageItem);\r\n }\r\n workingModel.individualStageInputs = newStages;\r\n indexModel.inputs.components = workingModel;\r\n const individualStageInputs = getStageInputsInImplementationOrder(\r\n workingModel.individualStageInputs,\r\n indexModel.results.components.detailsOfCircuits,\r\n );\r\n if (isValidCircuit) {\r\n const modelParams = {\r\n circuits: indexModel.results.components.circuits,\r\n individualStageInputs: individualStageInputs,\r\n vsPlus: workingModel.vsPlus,\r\n vsMinus: workingModel.vsMinus,\r\n optimization: workingModel.optimization,\r\n stopbandFrequency: indexModel.results.components.stopbandFrequency,\r\n };\r\n const params = indexModel.opAmpSource.getFilterOpampsParams(modelParams);\r\n const opAmpsList = getAppropriateOpAmps(\r\n params.opAmps,\r\n params.circuits,\r\n params.vsPlus,\r\n params.vsMinus,\r\n params.optimization,\r\n params.stopbandFrequency,\r\n params.applyAdditionalCriteria,\r\n );\r\n\r\n opAmpSelection = opAmpsList.length > 0 ? getOpampNames(opAmpsList, indexModel) : null;\r\n }\r\n const retOpAmps = [];\r\n for (let i = 0; i < individualStageInputs.length; i++) {\r\n retOpAmps.push(opAmpSelection ? (opAmpSelection[i] as string) : 'ideal');\r\n }\r\n // indexModel = null;\r\n return { sortOrder: [], opAmps: retOpAmps };\r\n }\r\n\r\n // Checks if there is an error that results in an error or no suitable OpAmp found\r\n // Inputs:\r\n // - inputModel : Component Selection Input model\r\n // - errorList : Array list of errors\r\n // Returns: true if an error is found or if one or more opamps are \"ideal\", otherwise false\r\n isComponentResultError(inputModel: ComponentSelectionInput, errorList: ValidationError[]): boolean {\r\n const errorItem = errorList.find((item: ValidationError) => componentResultErrors.includes(item.id));\r\n const opAmpIdeal =\r\n inputModel.individualStageInputs.find((item: IndividualStageInput) => item.opAmp === 'ideal') &&\r\n errorList.find((item: ValidationError) => item.id !== 'selectedOpAmpIsIdeal');\r\n return typeof errorItem !== 'undefined' || typeof opAmpIdeal !== 'undefined';\r\n }\r\n\r\n // Checks if the tab has restrictions that cause it to disable the succeeding steps in the wizard\r\n // Returns: ideals - true if there is one or more ideal opamps, otherwise false\r\n hasRestrictions(): boolean {\r\n const ideals = this.hasIdealOpAmps();\r\n return ideals;\r\n }\r\n\r\n // Checks if the one or more of the individual stages has an ideal op amp assigned to it\r\n // Returns: result - true if there is one of more ideal opamps, otherwise false\r\n hasIdealOpAmps(): boolean {\r\n let result = false;\r\n const data = this.model.inputs.components;\r\n if (!isNullOrUndefined(data)) {\r\n const stageInputs = data.individualStageInputs;\r\n const resultItem = stageInputs.find((stageItem: IndividualStageInput) => {\r\n return stageItem.opAmp === 'ideal';\r\n });\r\n result = typeof resultItem !== 'undefined';\r\n }\r\n return result;\r\n }\r\n\r\n // This function checks if the selected OpAmp (I want to choose) specification falls within\r\n // the recommended limits of that stage.\r\n // Inputs:\r\n // - stageIndex : index of the actual stages array\r\n // - opAmp : OpAmp name for that stage\r\n isRecommendedOpAmp(\r\n stageIndex: number,\r\n opAmp: string,\r\n stage: IndividualStageInput,\r\n workingModel: ComponentSelectionInput,\r\n ): boolean {\r\n const indexModel = this._createIndexModel(workingModel);\r\n const modelParams = {\r\n circuits: indexModel.results.components.circuits[workingModel.sortOrder.indexOf(stageIndex)],\r\n individualStageInputs: stage,\r\n vsPlus: indexModel.inputs.components.vsPlus,\r\n vsMinus: indexModel.inputs.components.vsMinus,\r\n optimization: indexModel.inputs.components.optimization,\r\n stopbandFrequency: indexModel.results.components.stopbandFrequency,\r\n };\r\n const params = indexModel.opAmpSource.getFilterOpampsParams(modelParams);\r\n const recommendedOpAmps = evaluateOpAmps(\r\n params.opAmps,\r\n params.circuits,\r\n params.vsPlus,\r\n params.vsMinus,\r\n params.optimization,\r\n params.stopbandFrequency,\r\n )\r\n ?.filter((opamp) => {\r\n return opamp.status === 'recommended';\r\n })\r\n .map((opamp) => {\r\n return opamp.partNumber;\r\n });\r\n\r\n return recommendedOpAmps.includes(opAmp);\r\n }\r\n}\r\n","import IndividualStageInput from '../inputs/component-selection/individual-stage';\r\nimport SliderInput from '../inputs/component-selection/slider';\r\nimport Implementation from '../implementation/implementation';\r\nimport Optimization from '../optimization/optimization';\r\nimport FilterConstants from '../../filter-constants';\r\nimport {\r\n generateCapacitorRange,\r\n generateGainRange,\r\n getMaximumValueIndex,\r\n getMinimumValueIndex,\r\n getValueIndex,\r\n} from '../utils/slider';\r\nimport { computeCompensateLoop } from '../../utils/common';\r\nimport MathUtils from '../utils/math';\r\nimport Series from '../tolerances/series';\r\nimport SeriesPrecision from '../tolerances/series-precision';\r\nimport SecondOrder from '../stages/second-order';\r\nimport FirstOrder from '../stages/first-order';\r\nimport Capacitor from '../components/capacitor';\r\nimport ToleranceInput from '../inputs/tolerance';\r\nimport ActualSecondOrder from '../stages/actual-second-order';\r\nimport ActualFirstOrder from '../stages/actual-first-order';\r\nimport SecondOrderTargetStage from '../stages/second-order';\r\nimport IndexModel from '..';\r\nimport SallenKeyLowPassCircuit from '../implementation/sallen-key/low-pass/circuit';\r\nimport TargetStage from '../stages/target-stage';\r\nimport C1 from '../../models/components/c1';\r\nimport R3 from '../../models/components/r3';\r\nimport FirstOrderLowPassCircuit from '../implementation/first-order/low-pass/circuit';\r\nimport InductorBandPass from '../implementation/inductor/band-pass/circuit';\r\nimport InductorHighPassCircuit from '../implementation/inductor/high-pass/circuit';\r\nimport SallenKeyHighPassCircuit from '../implementation/sallen-key/high-pass/circuit';\r\nimport MultipleFeedbackHighPassCircuit from '../implementation/multiple-feedback/high-pass/circuit';\r\nimport MultipleFeedbackLowPassCircuit from '../implementation/multiple-feedback/low-pass/circuit';\r\n\r\nconst _defaults = {\r\n optimization: FilterConstants.optimizationType.power,\r\n};\r\n\r\nexport type Circuit =\r\n | (SallenKeyLowPassCircuit & { c2?: unknown & { value: number } } & { c5?: unknown & { value: number } } & {\r\n r5?: unknown & { value: number };\r\n } & { k?: unknown & { value: number } })\r\n | (FirstOrderLowPassCircuit & { c2?: unknown & { value: number } } & { c5?: unknown & { value: number } } & {\r\n r2?: unknown & { value: number };\r\n } & { r5?: unknown & { value: number } } & { k?: unknown & { value: number } })\r\n | (InductorBandPass & { c2?: unknown & { value: number } } & { c5?: unknown & { value: number } } & {\r\n r2?: unknown & { value: number };\r\n } & { r5?: unknown & { value: number } } & { k?: unknown & { value: number } })\r\n | (InductorHighPassCircuit & { c2?: unknown & { value: number } } & { c5?: unknown & { value: number } } & {\r\n r2?: unknown & { value: number };\r\n } & { r5?: unknown & { value: number } } & { k?: unknown & { value: number } })\r\n | (SallenKeyHighPassCircuit & { c5?: unknown & { value: number } } & { r5?: unknown & { value: number } } & {\r\n k?: unknown & { value: number };\r\n })\r\n | (MultipleFeedbackHighPassCircuit & { r3?: unknown & { value: number } } & { r4?: unknown & { value: number } } & {\r\n r5?: unknown & { value: number };\r\n } & { k?: unknown & { value: number } })\r\n | (MultipleFeedbackLowPassCircuit & { c5?: unknown & { value: number } } & { r3?: unknown & { value: number } } & {\r\n r4?: unknown & { value: number };\r\n } & { k?: unknown & { value: number } });\r\n\r\nexport type StageInput = IndividualStageInput & {\r\n legacyGainSliderValue: string;\r\n legacySizingSliderValue: string;\r\n compensateForGbw: boolean;\r\n};\r\n\r\ntype C1Object = C1 & {\r\n capacitorMaximumLimitMultiplier: number;\r\n};\r\n\r\n////////////////////////////////////////////////////////////////////////////////////\r\n// individual-stage - Advisor for stage inputs when user enters components tab //\r\n////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class IndividualStageAdvisor {\r\n // model = null; // takes in the domain model\r\n model: IndexModel;\r\n\r\n constructor(model: IndexModel) {\r\n this.model = model;\r\n }\r\n // Creates the individual stages input model\r\n // Inputs:\r\n // - data : input model values, if this is null, defaults are used\r\n // Returns: individual stages input model\r\n generate(\r\n stage: SecondOrderTargetStage,\r\n data: IndividualStageInput | null,\r\n isOldDesign: boolean | null,\r\n legacySizingSliderValue: number | null,\r\n legacyGainSliderValue: number | null,\r\n ): IndividualStageInput {\r\n return new IndividualStageInput(\r\n data ? data : this.getDefaults(stage, isOldDesign, legacySizingSliderValue, legacyGainSliderValue),\r\n );\r\n }\r\n\r\n // Returns the default values for a stage given a specific implementation\r\n // Inputs:\r\n // - stage : target stage information\r\n // - implementationInput : stage implementation\r\n // - stageInput : individual stage input\r\n // Returns: default values of the individual stage input based on target stage, implementation, and other stage input information\r\n getImplementationDefaults(\r\n stage: SecondOrderTargetStage,\r\n implementationInput: string,\r\n stageInput?: StageInput,\r\n ): IndividualStageInput {\r\n const implementationObj = Implementation.create({\r\n selectedImplementation: implementationInput,\r\n filter: stage.filter,\r\n });\r\n\r\n return this._getStageDefaults(stage, implementationObj, stageInput);\r\n }\r\n\r\n // Returns the default values for a stage\r\n // Inputs:\r\n // - stage : stage information\r\n // - isOldDesign: flag that checks if the design came from an older filter wizard application\r\n // - legacySizingSliderValue : value of the component sizing slider for older designs\r\n // - legacyGainSliderValue : value of the gain slider for older designs\r\n // Returns: stage input default values\r\n getDefaults(\r\n stage: SecondOrderTargetStage,\r\n isOldDesign: boolean | null,\r\n legacySizingSliderValue: number | null,\r\n legacyGainSliderValue: number | null,\r\n ): IndividualStageInput {\r\n const implementationObj = Implementation.create({\r\n selectedImplementation: stage.defaultImplementation,\r\n filter: stage.filter,\r\n });\r\n\r\n const stageDefaults = this._getStageDefaults(stage, implementationObj);\r\n\r\n if (isOldDesign) {\r\n const circuit = this._getCircuit(stage, implementationObj);\r\n stageDefaults.componentSizing.value = this._getSliderValueFromLegacy(circuit.c1, legacySizingSliderValue);\r\n stageDefaults.gainRatio.value = this._getGainSliderValueFromLegacy(circuit.r3, legacyGainSliderValue);\r\n }\r\n\r\n return stageDefaults;\r\n }\r\n\r\n // Creates a circuit based on target stage, implementation and stage input information\r\n // Inputs:\r\n // - stage : target stage information\r\n // - implementationObj: implementation object\r\n // - stageInput : individual stage input\r\n // Returns: actual stage object\r\n _getCircuit(stage: SecondOrderTargetStage, implementationObj: Implementation, stageInput?: StageInput): Circuit {\r\n const optimization = Optimization.create({ optimization: _defaults.optimization });\r\n const circuit = implementationObj.createCircuit(stage.stageFp, stage.gain, stage.stageQ, optimization) as Circuit;\r\n let masterCapacitorValue = circuit.masterCapacitor.value;\r\n let r3Value = circuit.r3 ? circuit.r3.value : -1;\r\n let opAmp = FilterConstants.idealOpAmp;\r\n if (stageInput) {\r\n const c1Index = stageInput.componentSizing.value;\r\n let r3Index = stageInput.gainRatio.value;\r\n const capacitorValues = generateCapacitorRange(Series.eSeries24);\r\n const gainValues = generateGainRange(Series.eSeries96);\r\n if (!!circuit.r3 && !!circuit.r3.value && r3Index === -1) {\r\n const r3Maximum = circuit.r3.maximum;\r\n const r3Minimum = circuit.r3.minimum;\r\n const r3Value = circuit.r3.value;\r\n r3Index = getValueIndex(gainValues, r3Minimum, r3Maximum, r3Value);\r\n }\r\n\r\n masterCapacitorValue = capacitorValues[c1Index];\r\n r3Value = gainValues[r3Index];\r\n opAmp = stageInput.opAmp;\r\n }\r\n\r\n const opAmpSource = this.model.opAmpSource;\r\n const componentsInput = this.model.inputs.components;\r\n const stopbandFrequency = this.model.inputs.specifications.stopbandFrequency;\r\n const compensateForGbw = stageInput ? stageInput.compensateForGbw : false;\r\n const compensateLoop = computeCompensateLoop(compensateForGbw);\r\n\r\n const actualStagesPropertiesHash = {\r\n targetStage: stage,\r\n selectedImplementation: implementationObj.selectedImplementation,\r\n compensateLoop: compensateLoop,\r\n opAmp: opAmp,\r\n optimization: optimization,\r\n masterCapacitorValue: masterCapacitorValue,\r\n r3Value: r3Value,\r\n stopbandFrequency: stopbandFrequency,\r\n componentsInput: componentsInput,\r\n opAmpSource: opAmpSource,\r\n };\r\n\r\n let res = null;\r\n if (stage instanceof FirstOrder) {\r\n res = ActualFirstOrder.create(actualStagesPropertiesHash);\r\n } else {\r\n res = ActualSecondOrder.create(actualStagesPropertiesHash);\r\n }\r\n\r\n return res.circuit;\r\n }\r\n\r\n // Returns the default values for a stage\r\n // Inputs:\r\n // - stage : target stage information\r\n // - implementationObj: implementation object\r\n // - stageInput : individual stage input\r\n // Returns: default value for the individual stage input\r\n _getStageDefaults(\r\n stage: SecondOrderTargetStage,\r\n implementationObj: Implementation,\r\n stageInput?: StageInput,\r\n ): IndividualStageInput {\r\n const circuit = this._getCircuit(stage, implementationObj, stageInput);\r\n const componentSizing = this.getComponentSizingValues(circuit);\r\n const gainRatio = this.getGainRatio(circuit);\r\n\r\n return {\r\n stageLetter: null,\r\n implementation: implementationObj.selectedImplementation,\r\n componentSizing: componentSizing,\r\n gainRatio: gainRatio,\r\n opAmp: FilterConstants.idealOpAmp,\r\n implementationSelection: this._getImplementationSelection(stage, implementationObj.selectedImplementation),\r\n };\r\n }\r\n\r\n // Creates a Copy of the Individual Stage Input Model\r\n // Inputs:\r\n // - sourceStage : model to be copied from\r\n // Returns: result - a newly created individual stage input model with values copied from the source model\r\n clone(sourceStage: StageInput): IndividualStageInput {\r\n const result = new IndividualStageInput() as StageInput;\r\n result.implementation = sourceStage.implementation;\r\n result.componentSizing = this._cloneSlider(sourceStage.componentSizing);\r\n result.gainRatio = this._cloneSlider(sourceStage.gainRatio);\r\n result.opAmp = sourceStage.opAmp;\r\n result.implementationSelection = { selections: [], selectedItem: null };\r\n for (let i = 0; i < sourceStage.implementationSelection.selections.length; i++) {\r\n result.implementationSelection.selections.push(sourceStage.implementationSelection.selections[i]);\r\n }\r\n result.implementationSelection.selectedItem = sourceStage.implementationSelection.selectedItem;\r\n result.legacyGainSliderValue = sourceStage.legacyGainSliderValue;\r\n result.legacySizingSliderValue = sourceStage.legacySizingSliderValue;\r\n result.stageLetter = sourceStage.stageLetter;\r\n return result;\r\n }\r\n\r\n // Creates a Copy of the Individual Slider Model\r\n // Inputs:\r\n // - sourceSlider - model to be copied from\r\n // Returns: result - a newly created input model with values copied from the source model\r\n _cloneSlider(sourceSlider: SliderInput): SliderInput {\r\n const result = new SliderInput();\r\n result.enabled = sourceSlider.enabled;\r\n result.minimum = sourceSlider.minimum;\r\n result.maximum = sourceSlider.maximum;\r\n result.value = sourceSlider.value;\r\n return result;\r\n }\r\n\r\n // Creates a component sizing object with minimum, maximum and value\r\n // Inputs:\r\n // - circuit - stage circuit data\r\n // Returns: result - a slider object containing minimum, maximum and selected value, as well as if the slider is enabled\r\n getComponentSizingValues(circuit: Circuit): SliderInput {\r\n const sliderValues = generateCapacitorRange(Series.eSeries24);\r\n const maximumIndex = getMaximumValueIndex(sliderValues, circuit.masterCapacitor.maximum, SeriesPrecision.eSeries24);\r\n const minimumIndex = getMinimumValueIndex(sliderValues, circuit.masterCapacitor.minimum, SeriesPrecision.eSeries24);\r\n const sliderValueIndex = getValueIndex(\r\n sliderValues,\r\n circuit.masterCapacitor.minimum,\r\n circuit.masterCapacitor.maximum,\r\n circuit.masterCapacitor.value,\r\n SeriesPrecision.eSeries24,\r\n );\r\n\r\n const result = new SliderInput({\r\n enabled: true,\r\n maximum: maximumIndex,\r\n minimum: minimumIndex,\r\n value: sliderValueIndex,\r\n });\r\n\r\n return result;\r\n }\r\n\r\n // Creates a gain ratio object with minimum, maximum and value\r\n // Inputs:\r\n // - circuit - stage circuit data\r\n // Returns: result - a slider object containing minimum, maximum and selected value, as well as if the slider is enabled\r\n getGainRatio(circuit: Circuit): SliderInput {\r\n const tolerances = this.model.inputs.tolerances;\r\n const allowGainChange = circuit.allowGainChange;\r\n const k = circuit.k ? circuit.k.value : null;\r\n // in determining gain resistors, gain is formulated as 1 / k\r\n const gain = 1 / (k as number);\r\n const maximum = circuit.r3 ? circuit.r3.maximum : null;\r\n const minimumR3 = circuit.r3 ? circuit.r3.minimum : null;\r\n // in components-factory > createR4FromR3AndGain function, r4IdealValue is formulated as:\r\n // let r4IdealValue = r3Value * (gain - 1)\r\n // minimum resistance for ideal, 1%, 5%, and 10% tolerance is 1 and 10 for 0.1% and 0.5%\r\n // so substituting it to r4IdealValue produces below expression where minimumIdealR3 is the r3Value\r\n let minimumIdealR3 = FilterConstants.Limits.RSMALL_COMP_LIMIT / (gain - 1);\r\n if (tolerances && (tolerances.resistorTolerance === '0.1%' || tolerances.resistorTolerance === '0.5%')) {\r\n minimumIdealR3 = 10 / (gain - 1);\r\n }\r\n const minimum = Math.max(minimumR3 as number, minimumIdealR3);\r\n\r\n let value = circuit.r3 ? circuit.r3.value : null;\r\n if (allowGainChange) {\r\n if (value > maximum) {\r\n value = maximum;\r\n }\r\n if (value < minimum) {\r\n value = minimum;\r\n }\r\n }\r\n\r\n const series = Series.eSeries96;\r\n const sliderValues = generateGainRange(series);\r\n const maximumIndex = getMaximumValueIndex(sliderValues, maximum, SeriesPrecision.eSeries96);\r\n const minimumIndex = getMinimumValueIndex(sliderValues, minimum, SeriesPrecision.eSeries96);\r\n const sliderValueIndex = getValueIndex(sliderValues, minimum, maximum, value, SeriesPrecision.eSeries96);\r\n\r\n const result = new SliderInput({\r\n enabled: !!allowGainChange,\r\n maximum: maximumIndex,\r\n minimum: minimumIndex,\r\n value: sliderValueIndex,\r\n });\r\n\r\n return result;\r\n }\r\n\r\n // Creates a implementation object with possible implementations and selected one\r\n // Inputs:\r\n // - targetStage - target stage data\r\n // - selectedImplementation - selected implementation\r\n // Returns: result - implementation object containing a list of implementations and the selected implementation\r\n _getImplementationSelection(\r\n targetStage: TargetStage,\r\n selectedImplementation: string,\r\n ): { selections: string[]; selectedItem: string } {\r\n const filterName = targetStage.filter.name;\r\n const result: { selections: string[]; selectedItem: string } = { selections: [], selectedItem: '' };\r\n if (\r\n targetStage instanceof SecondOrder &&\r\n (filterName === FilterConstants.filterType.lowPass || filterName === FilterConstants.filterType.highPass) &&\r\n selectedImplementation !== FilterConstants.implementationType.inductor\r\n ) {\r\n result.selections.push(FilterConstants.implementationType.sallenKey);\r\n result.selections.push(FilterConstants.implementationType.multipleFeedback);\r\n result.selectedItem = selectedImplementation;\r\n } else {\r\n result.selections = [selectedImplementation];\r\n result.selectedItem = selectedImplementation;\r\n }\r\n return result;\r\n }\r\n\r\n // Computes for the component sizing slider value based on legacy filter wizard designs\r\n // Inputs:\r\n // - c1 - c1 object\r\n // - sliderValue - legacy slider value\r\n // Returns: sliderValueIndex - computed component sizing slider value\r\n _getSliderValueFromLegacy(c1: C1Object, sliderValue: number | null): number {\r\n const toleranceInput = new ToleranceInput({\r\n capacitorTolerance: FilterConstants.capacitorTolerance.one,\r\n capacitorPreferredSeries: 'E24',\r\n });\r\n const c1New = Capacitor.create({\r\n idealValue: c1.idealValue,\r\n capacitorMinimumLimitMultiplier: c1.capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier: c1.capacitorMaximumLimitMultiplier,\r\n rcRatio: sliderValue,\r\n });\r\n\r\n return getValueIndex(\r\n generateCapacitorRange(Series.eSeries24),\r\n c1.minimum,\r\n c1.maximum,\r\n c1New.toCommercialComponent(toleranceInput).getNominalValue(),\r\n );\r\n }\r\n\r\n // Computes for the gain ratio slider value based on legacy filter wizard designs\r\n // Inputs:\r\n // - r3 - r3 object\r\n // - sliderValue - legacy slider value\r\n // Returns: sliderValueIndex - computed gain ratio sizing slider value\r\n _getGainSliderValueFromLegacy(r3: R3, sliderValue: number | null): number {\r\n const value = r3.minimum * Math.pow(10, MathUtils.logBaseTen(r3.maximum / r3.minimum) * (1 - (sliderValue ?? 0)));\r\n return getValueIndex(generateGainRange(Series.eSeries96), r3.minimum, r3.maximum, value);\r\n }\r\n}\r\n","import NoiseInput from '../inputs/noise';\r\nimport Frequency from '../process-data/frequency';\r\nimport FilterConstants from '../../filter-constants';\r\nimport { formatFieldValue } from '../../utils/format';\r\nimport type IndexModel from '../index';\r\n\r\nexport default class NoiseAdvisor {\r\n model: IndexModel; // takes in the domain model\r\n\r\n constructor(model: IndexModel) {\r\n this.model = model;\r\n }\r\n\r\n // Creates the noise input model\r\n // Inputs:\r\n // - data : input model values, if this is null, defaults are used\r\n // Returns: noise input model\r\n generate(data: NoiseInput): NoiseInput {\r\n const filter = this.model.results.filter;\r\n const filterFrequencyRange = this.model.results.specifications.filterFrequencyRange;\r\n const stopFrequency = filterFrequencyRange.stopFrequency;\r\n return new NoiseInput(data ? data : { adcBandwidth: filter.getAdcFrequency(stopFrequency) });\r\n }\r\n\r\n // Creates a Copy of the Noise Input Model\r\n // Inputs:\r\n // - sourceStage : model to be copied from\r\n // Returns: result - a newly created noise input model with values copied from the source model\r\n clone(sourceModel: NoiseInput): NoiseInput {\r\n const result = new NoiseInput();\r\n result.adcBandwidth = sourceModel.adcBandwidth;\r\n return result;\r\n }\r\n\r\n // Validate Noise Input Model\r\n // Inputs:\r\n // - noiseInput : Noise Input model\r\n // - invalidFields : array of string containing fields with parse errors\r\n // Returns: result - Array of error messages\r\n validate(noiseInput: NoiseInput, invalidFields: Array): Array {\r\n const filterFrequencyRange = this.model.results.specifications.filterFrequencyRange;\r\n const startFrequency = filterFrequencyRange.startFrequency;\r\n const adcBandwidth = Math.max(noiseInput.adcBandwidth * 10, filterFrequencyRange.stopFrequency);\r\n\r\n const frequencyArray = Frequency.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: adcBandwidth,\r\n pointsPerDecade: filterFrequencyRange.pointsPerDecade,\r\n }).narrowFrequencyArray;\r\n const result = [];\r\n if (invalidFields.indexOf('adcBandwidth') === -1) {\r\n if (noiseInput.adcBandwidth < frequencyArray[1]) {\r\n const item = {\r\n tab: FilterConstants.tabs.components,\r\n fields: ['adcBandwidth'],\r\n id: 'adcBandwidthIsLessThanMinimum',\r\n parameters: {\r\n minimum: formatFieldValue(frequencyArray[1], FilterConstants.fieldTypes.Engineering, '3s'),\r\n maximum: FilterConstants.Limits.INFINITY.toString(),\r\n value: formatFieldValue(noiseInput.adcBandwidth, FilterConstants.fieldTypes.Engineering, '3s'),\r\n },\r\n };\r\n result.push(item);\r\n }\r\n }\r\n return result;\r\n }\r\n}\r\n","import { userEntryToNumber } from '@ebiz/pretty-num';\r\nimport { formatFieldValue } from '../../utils/format';\r\nimport SpecificationInput from '../inputs/specification';\r\nimport IndexModel from '../index';\r\nimport FilterConstants from '../../filter-constants';\r\nimport { VVtoDB } from '../utils/conversion';\r\nimport { camelize } from '@ember/string';\r\nimport type StageDetailResults from '../results/sub-results/stage-details';\r\nimport { FilterType, filters } from '../../models/filter/filter';\r\n\r\nconst _lowPassDefaults = {\r\n gain: 0,\r\n gainUnit: FilterConstants.gainUnits.db,\r\n filterResponseSlider: 50,\r\n passbandAttenuation: -3,\r\n stopbandAttenuation: -40,\r\n selectedResponseType: 'Butterworth',\r\n passbandFrequency: 10000,\r\n stopbandFrequency: 40000,\r\n centerFrequency: undefined,\r\n filterResponseValue: null,\r\n },\r\n _highPassDefaults = {\r\n gain: 0,\r\n gainUnit: FilterConstants.gainUnits.db,\r\n filterResponseSlider: 50,\r\n passbandAttenuation: -3,\r\n stopbandAttenuation: -40,\r\n selectedResponseType: 'Butterworth',\r\n passbandFrequency: 10000,\r\n stopbandFrequency: 2500,\r\n centerFrequency: undefined,\r\n filterResponseValue: null,\r\n },\r\n _bandPassDefaults = {\r\n gain: 0,\r\n gainUnit: FilterConstants.gainUnits.db,\r\n filterResponseSlider: 50,\r\n passbandAttenuation: -3,\r\n stopbandAttenuation: -40,\r\n selectedResponseType: 'Butterworth',\r\n passbandFrequency: 5000,\r\n stopbandFrequency: 40000,\r\n centerFrequency: 10000,\r\n filterResponseValue: null,\r\n },\r\n _limits = {\r\n // in V/V\r\n gainVV: { minimum: 1, maximum: 100 },\r\n passbandAttenuation: { minimum: -20, maximum: -0.1 },\r\n stopbandAttenuation: { minimum: -100, maximum: -1 },\r\n passbandFrequency: {\r\n lowPass: { minimum: 0.1, maximum: 50000000 },\r\n highPass: { minimum: 0.01, maximum: 1000000 },\r\n bandPass: { minimum: 0.01, maximum: 2000000 },\r\n },\r\n stopbandFrequency: {\r\n lowPass: { minimum: 0.1, maximum: 500000000 },\r\n highPass: { minimum: 0.001, maximum: 1000000 },\r\n bandPass: { minimum: 1, maximum: 100000000 },\r\n },\r\n centerFrequency: { minimum: 0.1, maximum: 10000000 },\r\n };\r\n\r\n////////////////////////////////////////////////////////////////////////////////////\r\n// specification - Advisor that runs when user goes into the specifications tab //\r\n////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class SpecificationAdvisor {\r\n model: IndexModel;\r\n\r\n constructor(model: IndexModel) {\r\n this.model = model;\r\n }\r\n\r\n get filterType(): string {\r\n return this.model.inputs.filterType;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // User Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Creates the specifications input model\r\n // Inputs:\r\n // - data : input model values, if this is null, defaults are used\r\n // Returns: specifications input model\r\n generate(data: SpecificationInput): SpecificationInput {\r\n let result = data;\r\n if (!data) {\r\n const filterName = this.model.inputs.filterType;\r\n result = _lowPassDefaults;\r\n if (filterName === FilterConstants.filterType.highPass) {\r\n result = _highPassDefaults;\r\n } else if (filterName === FilterConstants.filterType.bandPass) {\r\n result = _bandPassDefaults;\r\n }\r\n }\r\n return new SpecificationInput(result);\r\n }\r\n\r\n // Creates a Copy of the Model\r\n // Inputs:\r\n // - sourceModel : model to be copied from\r\n // Returns: result - a newly created input model with values copied from the source model\r\n clone(sourceModel: SpecificationInput): SpecificationInput {\r\n const result = new SpecificationInput();\r\n result.passbandAttenuation = sourceModel.passbandAttenuation;\r\n result.stopbandAttenuation = sourceModel.stopbandAttenuation;\r\n result.filterResponseSlider = sourceModel.filterResponseSlider;\r\n result.filterResponseValue = sourceModel.filterResponseValue;\r\n result.selectedResponseType = sourceModel.selectedResponseType;\r\n result.passbandFrequency = sourceModel.passbandFrequency;\r\n result.stopbandFrequency = sourceModel.stopbandFrequency;\r\n result.centerFrequency = sourceModel.centerFrequency;\r\n result.gain = sourceModel.gain;\r\n result.gainUnit = sourceModel.gainUnit;\r\n return result;\r\n }\r\n\r\n // Validate Specification Inputs\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - Array of error messages\r\n validate(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): Array {\r\n let result: Array = [];\r\n result.push(this._validateGain(specificationsInput, nameArrayOfFailedFields));\r\n result.push(this._validatePassbandFrequency(specificationsInput, nameArrayOfFailedFields));\r\n result.push(this._validateStopbandFrequency(specificationsInput, nameArrayOfFailedFields));\r\n result.push(this._validatePassbandAttenuation(specificationsInput, nameArrayOfFailedFields));\r\n result.push(this._validateStopbandAttenuation(specificationsInput, nameArrayOfFailedFields));\r\n result.push(this._validateCenterFrequency(specificationsInput, nameArrayOfFailedFields));\r\n result.push(this._validatePassbandVsStopbandFrequency(specificationsInput, nameArrayOfFailedFields));\r\n result.push(this._validatePassbandVsStopbandAttenuation(specificationsInput, nameArrayOfFailedFields));\r\n result = result.filter((p) => {\r\n return !!p;\r\n });\r\n if (result.length === 0) {\r\n const errorAttenuation = this._validatePassbandFrequencyVsPassbandAttenuation(\r\n specificationsInput,\r\n nameArrayOfFailedFields,\r\n );\r\n if (errorAttenuation !== null) result.push(errorAttenuation);\r\n if (result.length === 0) {\r\n const errorOrder = this._validateOrder(specificationsInput, nameArrayOfFailedFields);\r\n if (errorOrder !== null) result.push(errorOrder);\r\n if (result.length === 0) {\r\n const errorQ = this._validateQ(specificationsInput, nameArrayOfFailedFields);\r\n if (errorQ !== null) result.push(errorQ);\r\n if (result.length === 0) {\r\n const errorFp = this._validateFp(specificationsInput, nameArrayOfFailedFields);\r\n if (errorFp !== null) result.push(errorFp);\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Gain Value\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for gain (if any)\r\n _validateGain(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n if (nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.gain) === -1) {\r\n const limits = Object.assign({}, _limits.gainVV);\r\n if (specificationsInput.gainUnit === FilterConstants.gainUnits.db) {\r\n limits.minimum = VVtoDB(limits.minimum);\r\n limits.maximum = VVtoDB(limits.maximum);\r\n }\r\n if (specificationsInput.gain < limits.minimum || specificationsInput.gain > limits.maximum) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [FilterConstants.fields.inputs.specifications.gain],\r\n id: 'gainNotInRange',\r\n parameters: {\r\n minimum: formatFieldValue(limits.minimum, FilterConstants.fieldTypes.NumericDecimal, '3s'),\r\n maximum: formatFieldValue(limits.maximum, FilterConstants.fieldTypes.NumericDecimal, '3s'),\r\n value: formatFieldValue(specificationsInput.gain, FilterConstants.fieldTypes.NumericDecimal, '3s'),\r\n unit: specificationsInput.gainUnit,\r\n },\r\n };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Passband Frequency Value\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for passband frequency (if any)\r\n _validatePassbandFrequency(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n if (nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.passbandFrequency) === -1) {\r\n const filterName: 'lowPass' | 'highPass' | 'bandPass' = this.model.inputs.filterType;\r\n if (\r\n specificationsInput.passbandFrequency < _limits.passbandFrequency[filterName].minimum ||\r\n specificationsInput.passbandFrequency > _limits.passbandFrequency[filterName].maximum\r\n ) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [FilterConstants.fields.inputs.specifications.passbandFrequency],\r\n id: 'passbandFrequencyNotInRange',\r\n parameters: {\r\n minimum: formatFieldValue(\r\n _limits.passbandFrequency[filterName].minimum,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n maximum: formatFieldValue(\r\n _limits.passbandFrequency[filterName].maximum,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n value: formatFieldValue(\r\n specificationsInput.passbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n },\r\n };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Passband Attenuation Value\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for passband attenuation (if any)\r\n _validatePassbandAttenuation(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n if (nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.passbandAttenuation) === -1) {\r\n if (\r\n specificationsInput.passbandAttenuation < _limits.passbandAttenuation.minimum ||\r\n specificationsInput.passbandAttenuation > _limits.passbandAttenuation.maximum\r\n ) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [FilterConstants.fields.inputs.specifications.passbandAttenuation],\r\n id: 'passbandAttenuationNotInRange',\r\n parameters: {\r\n minimum: formatFieldValue(\r\n _limits.passbandAttenuation.minimum,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n maximum: formatFieldValue(\r\n _limits.passbandAttenuation.maximum,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n value: formatFieldValue(\r\n specificationsInput.passbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n },\r\n };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates if Passband Attenuation > Minimum Value at Minimum Low Pass Frequency\r\n // or Maximum High Pass / Band Pass Frequency\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for passband attenuation (if any)\r\n _validatePassbandFrequencyVsPassbandAttenuation(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n const filter = this.model && this.model.inputs ? this.model.inputs.filterType : null;\r\n if (nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.passbandAttenuation) === -1) {\r\n let passbandFrequencyRatio = null;\r\n let frequencyLimit = null;\r\n if (filter === FilterConstants.filterType.lowPass) {\r\n passbandFrequencyRatio = specificationsInput.passbandFrequency / _limits.passbandFrequency.lowPass.minimum;\r\n frequencyLimit = _limits.passbandFrequency.lowPass.minimum;\r\n } else if (filter === FilterConstants.filterType.bandPass) {\r\n passbandFrequencyRatio = _limits.passbandFrequency.bandPass.maximum / specificationsInput.passbandFrequency;\r\n frequencyLimit = _limits.passbandFrequency.bandPass.maximum;\r\n } else {\r\n passbandFrequencyRatio = _limits.passbandFrequency.highPass.maximum / specificationsInput.passbandFrequency;\r\n frequencyLimit = _limits.passbandFrequency.highPass.maximum;\r\n }\r\n const frequencyDependentAttenuationLimit = -1 * 20 * Math.log10(passbandFrequencyRatio / 0.707);\r\n if (specificationsInput.passbandAttenuation < frequencyDependentAttenuationLimit) {\r\n const errorTemplateMessage =\r\n filter === FilterConstants.filterType.lowPass\r\n ? 'passbandAttenuationLowGreaterThan'\r\n : 'passbandAttenuationHighBandGreaterThan';\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [\r\n FilterConstants.fields.inputs.specifications.passbandAttenuation,\r\n FilterConstants.fields.inputs.specifications.passbandFrequency,\r\n ],\r\n id: errorTemplateMessage,\r\n parameters: {\r\n minimum: formatFieldValue(\r\n frequencyDependentAttenuationLimit,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n maximum: formatFieldValue(_limits.passbandAttenuation, FilterConstants.fieldTypes.NumericDecimal, '3s'),\r\n frequency: formatFieldValue(frequencyLimit, FilterConstants.fieldTypes.Engineering, '3s'),\r\n value: formatFieldValue(\r\n specificationsInput.passbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n },\r\n };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Stopband Frequency Value\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for stopband frequency (if any)\r\n _validateStopbandFrequency(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n if (nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.stopbandFrequency) === -1) {\r\n const filterName: 'lowPass' | 'highPass' | 'bandPass' = this.model.inputs.filterType;\r\n if (\r\n specificationsInput.stopbandFrequency < _limits.stopbandFrequency[filterName].minimum ||\r\n specificationsInput.stopbandFrequency > _limits.stopbandFrequency[filterName].maximum\r\n ) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [FilterConstants.fields.inputs.specifications.stopbandFrequency],\r\n id: 'stopbandFrequencyNotInRange',\r\n parameters: {\r\n minimum: formatFieldValue(\r\n _limits.stopbandFrequency[filterName].minimum,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n maximum: formatFieldValue(\r\n _limits.stopbandFrequency[filterName].maximum,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n value: formatFieldValue(\r\n specificationsInput.stopbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n },\r\n };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Stopband Attenuation Value\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for stopband attenuation (if any)\r\n _validateStopbandAttenuation(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n if (nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.stopbandAttenuation) === -1) {\r\n if (\r\n specificationsInput.stopbandAttenuation < _limits.stopbandAttenuation.minimum ||\r\n specificationsInput.stopbandAttenuation > _limits.stopbandAttenuation.maximum\r\n ) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [FilterConstants.fields.inputs.specifications.stopbandAttenuation],\r\n id: 'stopbandAttenuationNotInRange',\r\n parameters: {\r\n minimum: formatFieldValue(\r\n _limits.stopbandAttenuation.minimum,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n maximum: formatFieldValue(\r\n _limits.stopbandAttenuation.maximum,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n value: formatFieldValue(\r\n specificationsInput.stopbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n },\r\n };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Center Frequency Value\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for center frequency (if any)\r\n _validateCenterFrequency(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n if (this.model.inputs.filterType === FilterConstants.filterType.bandPass) {\r\n if (nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.centerFrequency) === -1) {\r\n if (\r\n specificationsInput.centerFrequency < _limits.centerFrequency.minimum ||\r\n specificationsInput.centerFrequency > _limits.centerFrequency.maximum\r\n ) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [FilterConstants.fields.inputs.specifications.centerFrequency],\r\n id: 'centerFrequencyNotInRange',\r\n parameters: {\r\n minimum: formatFieldValue(_limits.centerFrequency.minimum, FilterConstants.fieldTypes.Engineering, '3s'),\r\n maximum: formatFieldValue(_limits.centerFrequency.maximum, FilterConstants.fieldTypes.Engineering, '3s'),\r\n value: formatFieldValue(\r\n specificationsInput.centerFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n },\r\n };\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates if Passband Frequncy >= Stopband Frequency (For Low Pass & Band Pass Filters)\r\n // or if Passband Frequncy <= Stopband Frequency (For High Pass Filters)\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for comparing passband and stopband frequency (if any)\r\n _validatePassbandVsStopbandFrequency(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n const filter = this.model && this.model.inputs ? this.model.inputs.filterType : null;\r\n if (\r\n nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.passbandFrequency) === -1 &&\r\n nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.stopbandFrequency) === -1\r\n ) {\r\n if (filter === FilterConstants.filterType.lowPass || filter === FilterConstants.filterType.bandPass) {\r\n if (specificationsInput.passbandFrequency >= specificationsInput.stopbandFrequency) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [\r\n FilterConstants.fields.inputs.specifications.passbandFrequency,\r\n FilterConstants.fields.inputs.specifications.stopbandFrequency,\r\n ],\r\n id: 'passbandIsGreaterThanStopband',\r\n parameters: {\r\n passbandFrequency: formatFieldValue(\r\n specificationsInput.passbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n stopbandFrequency: formatFieldValue(\r\n specificationsInput.stopbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n },\r\n };\r\n }\r\n } else {\r\n if (specificationsInput.passbandFrequency <= specificationsInput.stopbandFrequency) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [\r\n FilterConstants.fields.inputs.specifications.passbandFrequency,\r\n FilterConstants.fields.inputs.specifications.stopbandFrequency,\r\n ],\r\n id: 'stopbandIsGreaterThanPassband',\r\n parameters: {\r\n passbandFrequency: formatFieldValue(\r\n specificationsInput.passbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n stopbandFrequency: formatFieldValue(\r\n specificationsInput.stopbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n },\r\n };\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates if Stopband Attenuation >= Passband Attenuation\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for comparing passband and stopband attenuation (if any)\r\n _validatePassbandVsStopbandAttenuation(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n if (\r\n nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.passbandAttenuation) === -1 &&\r\n nameArrayOfFailedFields.indexOf(FilterConstants.fields.inputs.specifications.stopbandAttenuation) === -1\r\n ) {\r\n if (specificationsInput.stopbandAttenuation >= specificationsInput.passbandAttenuation) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [\r\n FilterConstants.fields.inputs.specifications.passbandAttenuation,\r\n FilterConstants.fields.inputs.specifications.stopbandAttenuation,\r\n ],\r\n id: 'stopbandIsGreaterThanPassbandAttenuation',\r\n parameters: {\r\n passbandAttenuation: formatFieldValue(\r\n specificationsInput.passbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n stopbandAttenuation: formatFieldValue(\r\n specificationsInput.stopbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n },\r\n };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates Filter Order (must be a number and must not be greater than 10)\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for filter order (if any)\r\n _validateOrder(\r\n specificationsInput: SpecificationInput,\r\n nameArrayOfFailedFields: Array,\r\n ): ValidationError | null {\r\n let result = null;\r\n if (nameArrayOfFailedFields.length === 0) {\r\n // const filter = Filter.create({\r\n // selectedFilterType: this.model.inputs.filterType,\r\n // selectedResponseType: specificationsInput.selectedResponseType,\r\n // });\r\n // const filters: Filter = { lowPass: LowPass, highPass: HighPass, bandPass: BandPass };\r\n let order = null;\r\n try {\r\n order = filters[this.model.inputs.filterType as keyof FilterType].getOrder({\r\n filterResponseType: specificationsInput.selectedResponseType,\r\n passbandFrequency: specificationsInput.passbandFrequency,\r\n passbandAttenuation: specificationsInput.passbandAttenuation,\r\n stopbandFrequency: specificationsInput.stopbandFrequency,\r\n stopbandAttenuation: specificationsInput.stopbandAttenuation,\r\n centerFrequency: specificationsInput.centerFrequency,\r\n filterResponseValue: specificationsInput.filterResponseValue,\r\n });\r\n } catch (e) {\r\n //eslint-disable no-empty\r\n }\r\n if (!order || order <= 0 || order > FilterConstants.maxOrder) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [\r\n FilterConstants.fields.inputs.specifications.passbandAttenuation,\r\n FilterConstants.fields.inputs.specifications.stopbandAttenuation,\r\n FilterConstants.fields.inputs.specifications.passbandFrequency,\r\n FilterConstants.fields.inputs.specifications.stopbandFrequency,\r\n 'filterResponse',\r\n ],\r\n id: 'highOrderFiltersUnsupported',\r\n parameters: { order: 'N' },\r\n };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates if Q does not exceed 50\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for Q factor (if any)\r\n _validateQ(specificationsInput: SpecificationInput, nameArrayOfFailedFields: Array): ValidationError | null {\r\n let result = null;\r\n if (nameArrayOfFailedFields.length === 0) {\r\n const indexModel = new IndexModel(this.model.opAmpSource);\r\n indexModel.inputs.filterType = this.model.inputs.filterType;\r\n indexModel.inputs.specifications = specificationsInput;\r\n const detailsOfStages = indexModel.results.specifications.detailsOfStages;\r\n const stagesWithLargeQ = detailsOfStages.find((item: StageDetailResults) => {\r\n return userEntryToNumber(item.stageQ.target) > 50;\r\n });\r\n if (stagesWithLargeQ) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [\r\n FilterConstants.fields.inputs.specifications.passbandFrequency,\r\n FilterConstants.fields.inputs.specifications.stopbandFrequency,\r\n FilterConstants.fields.inputs.specifications.centerFrequency,\r\n ],\r\n id: 'stageQTooLarge',\r\n parameters: { qValue: stagesWithLargeQ.stageQ.target },\r\n };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Validates fp values for Bandpass filters with Lowpass and Highpass stages\r\n // This case usually happens when the center frequency is set too low or too high\r\n // Inputs:\r\n // - specificationsInput : Specification Input model\r\n // - nameArrayOfFailedFields : array of string containing fields with parse errors\r\n // Returns: result - hash object containing error information for Q factor (if any)\r\n _validateFp(specificationsInput: SpecificationInput, nameArrayOfFailedFields: Array): ValidationError | null {\r\n let result = null;\r\n if (this.model.inputs.filterType === FilterConstants.filterType.bandPass) {\r\n if (nameArrayOfFailedFields.length === 0) {\r\n const indexModel = new IndexModel(this.model.opAmpSource);\r\n indexModel.inputs.filterType = this.model.inputs.filterType;\r\n indexModel.inputs.specifications = specificationsInput;\r\n const detailsOfStages = indexModel.results.specifications.detailsOfStages;\r\n for (let i = 0; i < detailsOfStages.length; i++) {\r\n const stage = detailsOfStages[i];\r\n const stageFilter = camelize(stage.filterName.substring(10).replace(/_/g, '-'));\r\n const stageFp = userEntryToNumber(stage.stageFp.target);\r\n if (\r\n stageFilter === FilterConstants.filterType.lowPass &&\r\n stageFp > _limits.passbandFrequency.lowPass.maximum\r\n ) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [\r\n FilterConstants.fields.inputs.specifications.passbandFrequency,\r\n FilterConstants.fields.inputs.specifications.centerFrequency,\r\n ],\r\n id: 'centerFrequencyTooHigh',\r\n parameters: {},\r\n };\r\n break;\r\n } else if (\r\n stageFilter === FilterConstants.filterType.highPass &&\r\n stageFp < _limits.stopbandFrequency.highPass.minimum\r\n ) {\r\n result = {\r\n tab: FilterConstants.tabs.specifications,\r\n fields: [\r\n FilterConstants.fields.inputs.specifications.passbandFrequency,\r\n FilterConstants.fields.inputs.specifications.centerFrequency,\r\n ],\r\n id: 'centerFrequencyTooLow',\r\n parameters: {},\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Checks if the tab has restrictions that cause it to disable the succeeding steps in the wizard\r\n // Returns: false - There are currently no restrictions for Specifications\r\n hasRestrictions(): boolean {\r\n return false;\r\n }\r\n}\r\n","import ToleranceInput from '../inputs/tolerance';\r\nimport FilterConstants from '../../filter-constants';\r\nimport { isNullOrUndefined } from '../../utils/common';\r\nimport type IndexModel from '../index';\r\nimport ComponentsAdvisor from '../../models/advisors/component-selection';\r\n\r\nimport IndividualStageInput from '../inputs/component-selection/individual-stage';\r\n\r\nconst _defaults = {\r\n capacitorTolerance: FilterConstants.capacitorTolerance.five,\r\n resistorTolerance: FilterConstants.resistorTolerance.one,\r\n inductorTolerance: FilterConstants.inductorTolerance.five,\r\n opAmpGbwTolerance: FilterConstants.gbwTolerance.twenty,\r\n capacitorPreferredSeries: FilterConstants.eSeries.E24,\r\n resistorPreferredSeries: FilterConstants.eSeries.E96,\r\n inductorPreferredSeries: FilterConstants.eSeries.E12,\r\n};\r\n\r\n////////////////////////////////////////////////////////////////////////////////////\r\n// tolerance - Advisor that runs when user goes into the tolerances tab //\r\n////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class ToleranceAdvisor {\r\n model: IndexModel;\r\n componentAdvisor: ComponentsAdvisor;\r\n\r\n constructor(model: IndexModel) {\r\n this.model = model;\r\n this.componentAdvisor = new ComponentsAdvisor(this.model);\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // User Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Creates the tolerance input model\r\n // Inputs:\r\n // - data : input model values, if this is null, defaults are used\r\n // Returns: tolerance input model\r\n generate(data: ToleranceInput): ToleranceInput {\r\n return new ToleranceInput(data ? data : _defaults);\r\n }\r\n\r\n // Creates a Copy of the Model\r\n // Inputs:\r\n // - sourceModel : model to be copied from\r\n // Returns: result - a newly created input model with values copied from the source model\r\n clone(sourceModel: ToleranceInput): ToleranceInput {\r\n const result = new ToleranceInput();\r\n\r\n result.capacitorToleranceList = sourceModel.capacitorToleranceList;\r\n result.resistorToleranceList = sourceModel.resistorToleranceList;\r\n result.inductorToleranceList = sourceModel.inductorToleranceList;\r\n result.opAmpGbwToleranceList = sourceModel.opAmpGbwToleranceList;\r\n result.capacitorPreferredSeriesList = sourceModel.capacitorPreferredSeriesList;\r\n result.resistorPreferredSeriesList = sourceModel.resistorPreferredSeriesList;\r\n result.inductorPreferredSeriesList = sourceModel.inductorPreferredSeriesList;\r\n result.capacitorTolerance = sourceModel.capacitorTolerance;\r\n result.resistorTolerance = sourceModel.resistorTolerance;\r\n result.inductorTolerance = sourceModel.inductorTolerance;\r\n result.opAmpGbwTolerance = sourceModel.opAmpGbwTolerance;\r\n result.capacitorPreferredSeries = sourceModel.capacitorPreferredSeries;\r\n result.resistorPreferredSeries = sourceModel.resistorPreferredSeries;\r\n result.inductorPreferredSeries = sourceModel.inductorPreferredSeries;\r\n return result;\r\n }\r\n\r\n // Checks if any of the stages has an inductor implementation\r\n // Returns: true if one or more stages has an inductor implementation, otherwise false\r\n hasInductors(): boolean {\r\n return this.model.inputs.components.individualStageInputs.some((item: IndividualStageInput) => {\r\n return item.implementation === FilterConstants.implementationType.inductor;\r\n });\r\n }\r\n\r\n // Validate Tolerance Inputs\r\n // Currently we do not validate the dropdown inputs in tolerances tab\r\n // The two parameters in the validate function are not used, however, we need to keep them\r\n // consistent as we are using typescript as this is called from the controller.\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n validate(_toleranceInput: ToleranceInput, _nameArrayOfFailedFields: Array): Array {\r\n return [];\r\n }\r\n\r\n // Checks if the tab has restrictions that cause it to disable the succeeding steps in the wizard\r\n // Returns: ideals - true if there is one of more tolerances or preferred series are set to \"ideal\"\r\n hasRestrictions(): boolean {\r\n return this.hasIdealValues();\r\n }\r\n\r\n // Checks if the one or more of the tolerance dropdown values are set to \"ideal\"\r\n // Returns: result - true if there is one of more ideal values, otherwise false\r\n hasIdealValues(): boolean {\r\n let result = false;\r\n if (!isNullOrUndefined(this.model.inputs.tolerances)) {\r\n result =\r\n this.model.inputs.tolerances.capacitorTolerance === 'ideal' ||\r\n this.model.inputs.tolerances.resistorTolerance === 'ideal' ||\r\n this.model.inputs.tolerances.opAmpGbwTolerance === 'ideal' ||\r\n this.model.inputs.tolerances.capacitorPreferredSeries === 'ideal' ||\r\n this.model.inputs.tolerances.resistorPreferredSeries === 'ideal' ||\r\n (this.hasInductors() &&\r\n (this.model.inputs.tolerances.inductorTolerance === 'ideal' ||\r\n this.model.inputs.tolerances.inductorPreferredSeries === 'ideal'));\r\n }\r\n return result;\r\n }\r\n\r\n updateComponentsModel(toleranceModel: ToleranceInput): void {\r\n this.model.inputs.tolerances.resistorTolerance = toleranceModel.resistorTolerance;\r\n\r\n const workingModel = this.model.inputs.components;\r\n const sliderValues = (this.componentAdvisor as ComponentsAdvisor).getSliderValues(workingModel);\r\n for (let i = 0; i < workingModel.individualStageInputs.length; i++) {\r\n const individualStageInput = workingModel.individualStageInputs[i];\r\n individualStageInput.gainRatio = sliderValues.gainValues[i];\r\n }\r\n\r\n this.model.inputs.components = workingModel;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport OpAmpValidation from './op-amp-validation';\r\nimport * as CommonUtils from '../../utils/common';\r\n\r\nexport default class OpAmpSelection extends EmberObject {\r\n data = null;\r\n limits = null;\r\n marginalLimits = null;\r\n componentsInput = null;\r\n gbw = null;\r\n\r\n partNumber = null;\r\n opAmpStatus = null;\r\n packageCode = null;\r\n vNoise = null;\r\n iNoise = null;\r\n minStableGain = null;\r\n vintage = null;\r\n vos = null;\r\n spiceModels = null;\r\n polesZeroes = null;\r\n\r\n opAmpRecommended = null;\r\n opAmpMarginal = null;\r\n opAmpMarginalHasNumberChannelsError = null;\r\n opAmpDisabled = null;\r\n init() {\r\n if (!!this.data && this.gbw === null) {\r\n set(this, 'gbw', Number(this.data.gbw));\r\n }\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.data)) {\r\n this.partNumber = this.data.partNumber;\r\n this.opAmpStatus = this.data.status;\r\n this.packageCode = this.data.packageCode;\r\n this.vNoise = this.data.vNoise;\r\n this.iNoise = this.data.iNoise;\r\n this.minStableGain = this.data.minStableGain;\r\n this.vintage = this.data.vintage;\r\n this.vos = this.data.vos;\r\n this.spiceModels = this.data.spiceModels;\r\n this.polesZeroes = this.data.polesZeroes;\r\n }\r\n\r\n this.opAmpRecommended = {\r\n status: 'amp_status_recommended',\r\n comment: 'amp_status_recommended',\r\n commentComparer: 'comment_dropDown_recommended',\r\n selectable: true,\r\n recommendedFlag: true,\r\n };\r\n\r\n this.opAmpMarginal = {\r\n status: 'amp_status_marginal',\r\n comment: 'amp_status_not_recommended',\r\n commentComparer: 'comment_dropDown_notRecommended',\r\n selectable: true,\r\n recommendedFlag: false,\r\n };\r\n\r\n this.opAmpMarginalHasNumberChannelsError = {\r\n status: 'amp_status_marginal',\r\n comment: 'amp_status_not_recommended',\r\n commentComparer: 'comment_dropDown_notRecommended',\r\n selectable: true,\r\n recommendedFlag: false,\r\n };\r\n\r\n this.opAmpDisabled = {\r\n status: 'amp_status_disabled',\r\n comment: 'amp_status_not_allowed',\r\n commentComparer: 'comment_dropDown_notAllowed',\r\n selectable: false,\r\n recommendedFlag: true,\r\n };\r\n }\r\n\r\n @computed('data') get statusText() {\r\n return this.data ? this.data.statusText : undefined;\r\n }\r\n\r\n @computed('data') get price() {\r\n return this.data ? this.data.price : undefined;\r\n }\r\n\r\n @computed('data') get iBias() {\r\n return this.data ? Number(this.data.iBias) : Number.NaN;\r\n }\r\n\r\n @computed('data') get minSupplyVoltage() {\r\n return this.data ? Number(this.data.minSupplyVoltage) : Number.NaN;\r\n }\r\n\r\n @computed('data') get maxSupplyVoltage() {\r\n return this.data ? Number(this.data.maxSupplyVoltage) : Number.NaN;\r\n }\r\n\r\n @computed('data') get numberChannels() {\r\n return this.data ? Number(this.data.numberChannels) : Number.NaN;\r\n }\r\n\r\n @computed('data') get rOut() {\r\n return this.data ? Number(this.data.rOut) : Number.NaN;\r\n }\r\n\r\n @computed('data') get slewRate() {\r\n return this.data ? Number(this.data.slewRate) : Number.NaN;\r\n }\r\n\r\n @computed('data') get inHeadroomPlus() {\r\n return this.data ? Number(this.data.inHeadroomPlus) : Number.NaN;\r\n }\r\n\r\n @computed('data') get outHeadroomPlus() {\r\n return this.data ? Number(this.data.outHeadroomPlus) : Number.NaN;\r\n }\r\n\r\n @computed('data') get inHeadroomMinus() {\r\n return this.data ? Number(this.data.inHeadroomMinus) : Number.NaN;\r\n }\r\n\r\n @computed('data') get outHeadroomMinus() {\r\n return this.data ? Number(this.data.outHeadroomMinus) : Number.NaN;\r\n }\r\n\r\n @computed('data') get supplyCurrent() {\r\n return this.data ? Number(this.data.supplyCurrent) : Number.NaN;\r\n }\r\n\r\n @computed('data') get feedbackMethod() {\r\n var result = this.data ? (this.data.architecture.indexOf('Current Feedback') > -1 ? 'Current' : 'Voltage') : null;\r\n return result;\r\n }\r\n\r\n @computed('limits', 'data', 'marginalLimits', 'componentsInput') get validation() {\r\n var limits = this.limits;\r\n var marginalLimits = this.marginalLimits;\r\n var componentsInput = this.marginalLimits;\r\n var opAmp = EmberObject.create({\r\n name: this.name,\r\n status: this.opAmpStatus,\r\n feedbackMethod: this.feedbackMethod,\r\n minStableGain: this.minStableGain,\r\n gbw: this.gbw,\r\n minSupplyVoltage: this.minSupplyVoltage,\r\n maxSupplyVoltage: this.maxSupplyVoltage,\r\n packageCode: this.packageCode,\r\n numberChannels: this.numberChannels,\r\n rOut: this.rOut,\r\n supplyCurrent: this.supplyCurrent,\r\n slewRate: this.slewRate,\r\n inHeadroomPlus: this.inHeadroomPlus,\r\n outHeadroomPlus: this.outHeadroomPlus,\r\n inHeadroomMinus: this.inHeadroomMinus,\r\n outHeadroomMinus: this.outHeadroomMinus,\r\n iBias: this.iBias,\r\n });\r\n var result = OpAmpValidation.create({\r\n opAmp: opAmp,\r\n limits: limits,\r\n marginalLimits: marginalLimits,\r\n componentsInput: componentsInput,\r\n });\r\n return result;\r\n }\r\n\r\n @computed('validation') get opAmpState() {\r\n var opAmpNotAllowed = this.validation.opAmpNotAllowed;\r\n var opAmpMarginal = this.validation.opAmpMarginal;\r\n var whyNotTextArray = this.validation.whyNotTextArray;\r\n var numberChannels = this.validation.numberChannels;\r\n var result = this.opAmpRecommended;\r\n\r\n if (opAmpMarginal) {\r\n result = this.opAmpMarginal;\r\n }\r\n\r\n if (opAmpNotAllowed) {\r\n if (whyNotTextArray.length === 1 && numberChannels !== '') {\r\n result = this.opAmpMarginal;\r\n } else {\r\n result = this.opAmpDisabled;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmpState') get status() {\r\n return this.opAmpState.status;\r\n }\r\n @computed('opAmpState') get comment() {\r\n return this.opAmpState.comment;\r\n }\r\n @computed('opAmpState') get commentComparer() {\r\n return this.opAmpState.commentComparer;\r\n }\r\n @computed('opAmpState') get selectable() {\r\n return this.opAmpState.selectable;\r\n }\r\n @computed('opAmpState') get recommendedFlag() {\r\n return this.opAmpState.recommendedFlag;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\nimport { inject } from '@ember/service';\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport WhyNot from './why-not';\r\n\r\nexport default class extends EmberObject {\r\n @inject('logger') logger;\r\n\r\n opAmp = null;\r\n limits = null;\r\n marginalLimits = null;\r\n componentsInput = null;\r\n\r\n @computed('componentsInput') get refV() {\r\n var vsMinus = this.componentsInput.vsMinus;\r\n var vsPlus = this.componentsInput.vsPlus;\r\n var result = 0;\r\n if (vsMinus === 0) {\r\n result = vsPlus / 2;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp') get partNumber() {\r\n var name = this.opAmp.partNumber;\r\n var result = '';\r\n if (!name) {\r\n result = 'whyNotText_blankName';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp') get status() {\r\n var status = this.opAmp.status;\r\n var result = '';\r\n if (status === FilterConstants.ampStatus.obsolete) {\r\n result = 'whyNotText_status_obsolete';\r\n } else if (status === FilterConstants.ampStatus.lastTimeBuy) {\r\n result = 'whyNotText_status_lastTimeBuy';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp') get feedbackMethod() {\r\n var feedbackMethod = this.opAmp.feedbackMethod;\r\n var result = '';\r\n if (feedbackMethod === 'Current') {\r\n result = 'whyNotText_error_feedback';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'limits') get minStableGain() {\r\n var minStableGain = this.opAmp.minStableGain;\r\n var stabilityGain = this.limits.specialGain;\r\n var compPin = !!this.opAmp.spiceModels && this.opAmp.spiceModels.compPin;\r\n var result = null;\r\n if (minStableGain > stabilityGain) {\r\n if (compPin) {\r\n result = WhyNot.create({\r\n messageId: 'whyNotText_error_minStableGain',\r\n value: stabilityGain,\r\n additionalMessage: 'whyNotText_error_compCapAmp',\r\n });\r\n } else {\r\n result = WhyNot.create({ messageId: 'whyNotText_error_minStableGain', value: stabilityGain });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'limits') get gbw() {\r\n var gbw = this.opAmp.gbw;\r\n var minOpAmpGbw = this.limits.gbw;\r\n var result = '';\r\n if (minOpAmpGbw > gbw) {\r\n result = 'whyNotText_error_GBW';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'componentsInput') get supplyVoltage() {\r\n var vsPlus = this.componentsInput.vsPlus;\r\n var vsMinus = this.componentsInput.vsMinus;\r\n var minSupplyVoltage = this.opAmp.minSupplyVoltage;\r\n var maxSupplyVoltage = this.opAmp.maxSupplyVoltage;\r\n var supplySpan = vsPlus - vsMinus;\r\n var result = '';\r\n if (supplySpan < minSupplyVoltage) {\r\n result = 'whyNotText_error_supplyVoltageLow';\r\n } else if (supplySpan > maxSupplyVoltage) {\r\n result = 'whyNotText_error_supplyVoltageHigh';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp') get numberChannels() {\r\n var packageCode = this.opAmp.packageCode;\r\n var numberChannels = this.opAmp.numberChannels;\r\n var result = '';\r\n if (!packageCode) {\r\n this.logger.error('no package code');\r\n } else {\r\n if (numberChannels > 2) {\r\n if (numberChannels === 4) {\r\n result = 'whyNotText_error_quadOpAmp';\r\n } else {\r\n result = 'whyNotText_error_channelSupport';\r\n }\r\n } else if (numberChannels === 2) {\r\n if (\r\n packageCode.indexOf('R-8') === -1 &&\r\n packageCode.indexOf('RD-8-1') === -1 &&\r\n packageCode.indexOf('RD-8-2') === -1 && //SOICs\r\n packageCode.indexOf('RM-8') === -1\r\n ) {\r\n result = 'whyNotText_error_packageIncompatible';\r\n }\r\n } else if (numberChannels === 1) {\r\n if (\r\n packageCode.indexOf('R-8') === -1 &&\r\n packageCode.indexOf('RD-8-1') === -1 &&\r\n packageCode.indexOf('RD-8-2') === -1 && //SOICs\r\n packageCode.indexOf('RJ-5') === -1 &&\r\n packageCode.indexOf('RJ-6') === -1\r\n ) {\r\n result = 'whyNotText_error_packageIncompatible';\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'limits') get rOut() {\r\n var rOut = this.opAmp.rOut;\r\n var gbw = this.opAmp.gbw;\r\n var supplyCurrent = this.opAmp.supplyCurrent;\r\n var maxROutOverGbw = this.limits.rOutOverGBW;\r\n var result = '';\r\n if (rOut && rOut > 0) {\r\n if (maxROutOverGbw < rOut / gbw) {\r\n result = 'whyNotText_error_outputImpedenceHigh';\r\n }\r\n } else if (!rOut || rOut === 0) {\r\n var proxyRout = 0.3 / supplyCurrent;\r\n if (maxROutOverGbw < proxyRout / gbw) {\r\n result = 'whyNotText_error_outputImpedenceHigh';\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'limits') get slewRate() {\r\n var slewRate = this.opAmp.slewRate;\r\n var minSlew = this.limits.slewRate;\r\n var result = '';\r\n if (slewRate < minSlew) {\r\n result = 'whyNotText_error_slewRateLow';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'componentsInput', 'refV') get positiveInput() {\r\n var vsPlus = this.componentsInput.vsPlus;\r\n var inHeadroomPlus = this.opAmp.inHeadroomPlus;\r\n var refV = this.refV;\r\n var result = '';\r\n if (vsPlus - inHeadroomPlus - 0.1 <= refV) {\r\n result = 'whyNotText_error_notEnoughPositiveInput';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'componentsInput', 'refV') get positiveOutput() {\r\n var vsPlus = this.componentsInput.vsPlus;\r\n var outHeadroomPlus = this.opAmp.outHeadroomPlus;\r\n var refV = this.refV;\r\n var result = '';\r\n if (vsPlus - outHeadroomPlus - 0.1 <= refV) {\r\n result = 'whyNotText_error_notEnoughPositiveOutput';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'componentsInput', 'refV') get negativeInput() {\r\n var vsPlus = this.componentsInput.vsPlus;\r\n var inHeadroomMinus = this.opAmp.inHeadroomMinus;\r\n var refV = this.refV;\r\n var result = '';\r\n if (vsPlus - inHeadroomMinus - 0.1 <= refV) {\r\n result = 'whyNotText_error_notEnoughNegativeInput';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'componentsInput', 'refV') get negativeOutput() {\r\n var vsPlus = this.componentsInput.vsPlus;\r\n var outHeadroomMinus = this.opAmp.outHeadroomMinus;\r\n var refV = this.refV;\r\n var result = '';\r\n if (vsPlus - outHeadroomMinus - 0.1 <= refV) {\r\n result = 'whyNotText_error_notEnoughNegativeOutput';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp', 'limits') get iBias() {\r\n var iBias = this.opAmp.iBias;\r\n var maxBias = this.limits.iBias;\r\n var result = '';\r\n if (iBias > maxBias) {\r\n result = 'amp_status_ibias_high';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('positiveInput', 'positiveOutput', 'negativeInput', 'negativeOutput') get inputOutputValidationArray() {\r\n var positiveInput = this.positiveInput;\r\n var positiveOutput = this.positiveOutput;\r\n var negativeInput = this.negativeInput;\r\n var negativeOutput = this.negativeOutput;\r\n var result = [positiveInput, positiveOutput, negativeInput, negativeOutput];\r\n return result;\r\n }\r\n\r\n @computed(\r\n 'opAmp',\r\n 'name',\r\n 'status',\r\n 'feedbackMethod',\r\n 'minStableGain',\r\n 'gbw',\r\n 'supplyVoltage',\r\n 'numberChannels',\r\n 'rOut',\r\n 'slewRate',\r\n )\r\n get initialValidationArray() {\r\n var name = this.name;\r\n var status = this.status;\r\n var feedbackMethod = this.feedbackMethod;\r\n var minStableGain = this.minStableGain;\r\n var gbw = this.gbw;\r\n var supplyVoltage = this.supplyVoltage;\r\n var numberChannels = this.numberChannels;\r\n var rOut = this.rOut;\r\n var slewRate = this.slewRate;\r\n var result = [name, status, feedbackMethod, minStableGain, gbw, supplyVoltage, numberChannels, rOut, slewRate];\r\n return result;\r\n }\r\n\r\n @computed('initialValidationArray') get initialValidationHasErrors() {\r\n var initialValidationArray = this.initialValidationArray;\r\n var hasError =\r\n initialValidationArray.filter((item) => {\r\n return item && item !== '';\r\n }).length > 0;\r\n return hasError;\r\n }\r\n\r\n @computed('inputOutputValidationArray', 'initialValidationHasErrors', 'iBias') get whyNotTextArray() {\r\n var inputOutputValidationArray = this.inputOutputValidationArray;\r\n var initialValidationArray = this.initialValidationArray;\r\n var initialValidationHasErrors = this.initialValidationHasErrors;\r\n var iBias = this.iBias;\r\n\r\n var result = initialValidationArray;\r\n if (!initialValidationHasErrors) {\r\n result.push(inputOutputValidationArray);\r\n }\r\n\r\n result.push(iBias);\r\n result = [].concat.apply([], result);\r\n result = result.filter((item) => {\r\n return item && item !== '';\r\n });\r\n return result;\r\n }\r\n\r\n @computed('whyNotTextArray') get opAmpNotAllowed() {\r\n var whyNotTextArray = this.whyNotTextArray;\r\n var result = whyNotTextArray.length > 0;\r\n return result;\r\n }\r\n\r\n @computed('marginalLimits', 'opAmp') get marginalGbwLow() {\r\n var marginalLimitsGbw = this.marginalLimits.gbw;\r\n var gbw = this.opAmp.gbw;\r\n var result = '';\r\n if (marginalLimitsGbw > gbw) {\r\n result = 'amp_status_gbw_low';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmp') get marginalStatus() {\r\n var status = this.opAmp.status;\r\n var result = '';\r\n if (status === FilterConstants.ampStatus.prerelease) {\r\n result = 'amp_status_prerelease';\r\n } else if (status === FilterConstants.ampStatus.not_recommended_for_new_designs) {\r\n result = 'amp_status_not_recommended_for_new_designs';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('marginalLimits', 'opAmp') get marginalROutHigh() {\r\n var recommendedROutOverGbw = this.marginalLimits.rOutOverGBW;\r\n var rOut = this.opAmp.rOut;\r\n var gbw = this.opAmp.gbw;\r\n var result = '';\r\n if (recommendedROutOverGbw < rOut / gbw) {\r\n result = 'amp_status_rout_high';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('marginalLimits', 'opAmp') get marginalIBias() {\r\n var maxBias = this.marginalLimits.iBias;\r\n var iBias = this.opAmp.iBias;\r\n var result = '';\r\n if (iBias > maxBias) {\r\n result = 'amp_status_ibias_high';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('marginalGbwLow', 'marginalStatus', 'marginalROutHigh', 'marginalIBias') get marginalWhy() {\r\n var marginalGbwLow = this.marginalGbwLow;\r\n var marginalStatus = this.marginalStatus;\r\n var marginalROutHigh = this.marginalROutHigh;\r\n var marginalIBias = this.marginalIBias;\r\n var result = [marginalGbwLow, marginalStatus, marginalROutHigh, marginalIBias];\r\n result = result.filter((item) => {\r\n return item && item !== '';\r\n });\r\n return result;\r\n }\r\n\r\n @computed('marginalWhy') get opAmpMarginal() {\r\n var marginalWhy = this.marginalWhy;\r\n return marginalWhy.length > 0;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport default class WhyNot extends EmberObject {\r\n messageId = null;\r\n value = null;\r\n additionalMessage = null;\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject, { set } from '@ember/object';\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport * as CircuitUtils from '../utils/circuit';\r\nimport * as CapacitorToleranceUtils from '../tolerances/capacitor-tolerance-utils';\r\nimport * as CommonUtils from '../../utils/common';\r\nimport { computeNominalValue } from '../tolerances/tolerance-utils';\r\n\r\n//\r\n// The idea behind a these components (capacitor, resistor, inductor) is we have classes that encapsulate\r\n// how each of them are created.\r\n// c1's difference from capacitor class is c1 gets the nominal and adjust it\r\n// to within the limits. Capacitor only computes the closest nominalValue.\r\n// sizingAdjustedValue for c1 is adjusted based from the computed r1 value.\r\n// sizingAdjustedValue for capacitor class is adjusted based from the ratio\r\n// of c1 value to its limits.\r\n//\r\n// Lifecycle: This component is created with the\r\n// 1. ideal value (component value based from computation, aka. textbook component in the old app, or ideal value),\r\n// 2. a multiplier to get the minimum limit.\r\n// 3. a multiplier to get the maximum limit.\r\n//\r\n// The ideal value is not directly used in here. It's only used to get the limits which are in turn used to compute\r\n// a value based from c1's current value in comparison to its minimum and maximum (rcRatio).\r\n//\r\n// Construction: C1.create({idealValue: idealValue, capacitorMaximumLimitMultiplier: capacitorMaximumLimitMultiplier, capacitorMinimumLimitMultiplier: capacitorMinimumLimitMultiplier})\r\n// Hash:\r\n// hash = {\r\n// idealValue: { number },\r\n// capacitorMaximumLimitMultiplier: { number },\r\n// capacitorMinimumLimitMultiplier: { number }\r\n// }\r\n// Create: C1.create(hash);\r\n// @inputProperty { number } idealValue - The computed value based from a given c1.\r\n// @inputProperty { number } capacitorMaximumLimitMultiplier - A value computed from the ideal values of all the components. Used to compute this component's maximum limit.\r\n// @inputProperty { number } capacitorMinimumLimitMultiplier - A value computed from the ideal values of all the components used to compute this component's minimum limit.\r\n// @inputProperty { FilterConstants.sizing } sizing - Indication whether the value of r1 is going towards its max or min. the value of this component is adjusted depending on the sizing\r\n//\r\n// @getterProperty { number } nominalValue - The computed commercial value. This matches the value of capacitors that are available in the market.\r\n// @getterProperty { number[] } toleranceArray - The nominal value multiplied to each of the elements of the array. The array consists of different tolerance multipliers.\r\n// @getterProperty { FilterConstants.capacitorTolerance } finalTolerance - If the desired tolerance fails to get the nominal, there's a process that goes through all the available tolerance options to get the nominal value.\r\n// @getterProperty { FilterConstants.capacitorTolerance } desiredTolerance - the selected capacitor tolerance or the default if none.\r\n// @getterProperty { bool } isCommercial - True if this component is already converted into a commercial capacitor. False if not.\r\n//\r\n// @computed { number } maximum - the capacitor instance's maximum limit\r\n// @computed { number } minimum - the capacitor instance's minimum limit\r\n// @computed { number } sizingAdjustedValue - The computed ideal value adjusted to be within the limits.\r\n// @computed { number } value - the ideal value if the component is not commercial, the nominal value if the component is already converted to a commercial one.\r\n// @method { this } toCommercialComponent() - converts the component into its commercial version.\r\n// @method { number } getNominalValue() - gets the nominal value. Can only be accessed when the component is already a commercial one.\r\nexport default class C1 extends EmberObject {\r\n name = FilterConstants.capacitorNames.c1;\r\n idealValue = null;\r\n maximumLimitMultiplier = null;\r\n capacitorMinimumLimitMultiplier = null;\r\n sizing = null;\r\n isCommercial = null;\r\n nominalValue = null;\r\n toleranceArray = null;\r\n finalTolerance = null;\r\n desiredTolerance = null;\r\n toleranceInput = null;\r\n\r\n init() {\r\n super.init();\r\n set(this, 'isCommercial', false);\r\n\r\n this.minimum =\r\n CommonUtils.isNullOrUndefined(this.minimum) || this.minimum === 0\r\n ? CircuitUtils.computeCapacitorLimit(this.idealValue, this.capacitorMinimumLimitMultiplier)\r\n : this.minimum;\r\n this.maximum =\r\n CommonUtils.isNullOrUndefined(this.maximum) || this.maximum === 0\r\n ? CircuitUtils.computeCapacitorLimit(this.idealValue, this.capacitorMaximumLimitMultiplier)\r\n : this.maximum;\r\n this.value = this.adjustCapacitorValueToCircuitSizing(this.idealValue, this.sizing, this.minimum, this.maximum);\r\n }\r\n\r\n // ToCommercialComponent converts the component to the commercial equivalent.\r\n toCommercialComponent(toleranceInput) {\r\n set(this, 'toleranceInput', toleranceInput);\r\n let valueAdjusted = this.adjustCapacitorValueToCircuitSizing(\r\n this.idealValue,\r\n this.sizing,\r\n this.minimum,\r\n this.maximum,\r\n );\r\n let tolInput = !toleranceInput ? CircuitUtils.createToleranceInputDefaults() : toleranceInput;\r\n // var nominalValue = CapacitorToleranceUtils.computeNominalValue(valueAdjusted, tolInput, 'closest');\r\n var nominalValue = computeNominalValue(valueAdjusted, tolInput.capacitorPreferredSeries, 'closest');\r\n var minimum = this.minimum;\r\n var maximum = this.maximum;\r\n\r\n if (nominalValue < minimum) {\r\n // nominalValue = CapacitorToleranceUtils.computeNominalValue(minimum, tolInput, 'up');\r\n nominalValue = computeNominalValue(minimum, tolInput.capacitorPreferredSeries, 'up');\r\n } else if (nominalValue > maximum) {\r\n // nominalValue = CapacitorToleranceUtils.computeNominalValue(maximum, tolInput, 'down');\r\n nominalValue = computeNominalValue(maximum, tolInput.capacitorPreferredSeries, 'down');\r\n }\r\n\r\n let toleranceValues = CapacitorToleranceUtils.getToleranceValues(nominalValue, tolInput.capacitorTolerance);\r\n set(this, 'value', nominalValue);\r\n set(this, 'toleranceArray', toleranceValues.toleranceArray);\r\n set(this, 'finalTolerance', toleranceValues.finalTolerance);\r\n set(this, 'desiredTolerance', tolInput.capacitorTolerance);\r\n set(this, 'isCommercial', true);\r\n\r\n return this;\r\n }\r\n\r\n getNominalValue(toleranceInput) {\r\n if (this.isCommercial) return this.value;\r\n\r\n let tolInput = !toleranceInput ? CircuitUtils.createToleranceInputDefaults() : toleranceInput;\r\n // var nominalValue = CapacitorToleranceUtils.computeNominalValue(this.value, tolInput, 'closest');\r\n var nominalValue = computeNominalValue(this.value, tolInput.capacitorPreferredSeries, 'closest');\r\n return nominalValue;\r\n }\r\n\r\n adjustCapacitorValueToCircuitSizing(idealValue, circuitSizing, capacitorMinimum, capacitorMaximum) {\r\n let result = idealValue;\r\n // if the resistor value is towards the tiny end, capacitor should be big and vice versa\r\n if (circuitSizing === FilterConstants.sizing.tiny) {\r\n result = capacitorMaximum;\r\n } else if (circuitSizing === FilterConstants.sizing.big) {\r\n result = capacitorMinimum;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject, { set } from '@ember/object';\r\n\r\nimport * as CircuitUtils from '../utils/circuit';\r\nimport * as CapacitorToleranceUtils from '../tolerances/capacitor-tolerance-utils';\r\nimport * as CommonUtils from '../../utils/common';\r\nimport { computeNominalValue } from '../tolerances/tolerance-utils';\r\n\r\n//\r\n// The idea behind a these components (capacitor, resistor, inductor) is we have classes that encapsulate\r\n// how each of them are created. There is a c1 class that is a type of capacitor with the difference with this class being\r\n// in how the commercial value is computed. Commercial (Nominal) value for capacitor is always the closest to the ideal value.\r\n// c1 will adjust depending on whether it goes beyond its limits.\r\n//\r\n// Lifecycle: This component is created with the\r\n// 1. ideal value (component value based from computation, aka. textbook component in the old app, or ideal value),\r\n// 2. a multiplier to get the minimum limit.\r\n// 3. a multiplier to get the maximum limit.\r\n//\r\n// The ideal value is not directly used in here. It's only used to get the limits which are in turn used to compute\r\n// a value based from c1's current value in comparison to its minimum and maximum (rcRatio).\r\n//\r\n// Construction: Capacitor.create({idealValue: idealValue, capacitorMaximumLimitMultiplier: capacitorMaximumLimitMultiplier, capacitorMinimumLimitMultiplier: capacitorMinimumLimitMultiplier})\r\n// Hash:\r\n// hash = {\r\n// idealValue: { number },\r\n// capacitorMaximumLimitMultiplier: { number },\r\n// capacitorMinimumLimitMultiplier: { number }\r\n// }\r\n// Create: Capacitor.create(hash);\r\n// @inputProperty { number } idealValue - The computed value based from a given c1.\r\n// @inputProperty { number } capacitorMaximumLimitMultiplier - A value computed from the ideal values of all the components. Used to compute this component's maximum limit.\r\n// @inputProperty { number } capacitorMinimumLimitMultiplier - A value computed from the ideal values of all the components used to compute this component's minimum limit.\r\n// @inputProperty { number } rcRatio - The value of c1 relative to its minimum and maximum logarithmically.\r\n// @inputProperty { FilterConstants.sizing } sizing - Indication whether the value of r1 is going towards its max or min.\r\n// @getterProperty { number } nominalValue - The computed commercial value. This matches the value of capacitors that are available in the market.\r\n// @getterProperty { number[] } toleranceArray - The nominal value multiplied to each of the elements of the array. The array consists of different tolerance multipliers.\r\n// @getterProperty { FilterConstants.capacitorTolerance } finalTolerance - If the desired tolerance fails to get the nominal, there's a process that goes through all the available tolerance options to get the nominal value.\r\n// @getterProperty { FilterConstants.capacitorTolerance } desiredTolerance - the selected capacitor tolerance or the default if none.\r\n// @getterProperty { bool } isCommercial - True if this component is already converted into a commercial capacitor. False if not.\r\n// @computed { number } maximum - the capacitor instance's maximum limit\r\n// @computed { number } minimum - the capacitor instance's minimum limit\r\n// @computed { number } sizingAdjustedValue - The computed ideal value based from the limits and the rcRatio\r\n// @computed { number } value - the ideal value if the component is not commercial, the nominal value if the component is already converted to a commercial one.\r\n// @method { this } toCommercialComponent() - converts the component into its commercial version.\r\n// @method { number } getNominalValue() - gets the nominal value. Can only be accessed when the component is already a commercial one.\r\nexport default class Capacitor extends EmberObject {\r\n idealValue = null;\r\n capacitorMinimumLimitMultiplier = null;\r\n capacitorMaximumLimitMultiplier;\r\n rcRatio;\r\n sizing = null;\r\n nominalValue = null;\r\n toleranceArray = null;\r\n finalTolerance = null;\r\n isCommercial = null;\r\n\r\n init() {\r\n super.init();\r\n set(this, 'isCommercial', false);\r\n\r\n this.minimum =\r\n CommonUtils.isNullOrUndefined(this.minimum) || this.minimum === 0\r\n ? CircuitUtils.computeCapacitorLimit(this.idealValue, this.capacitorMinimumLimitMultiplier)\r\n : this.minimum;\r\n this.maximum =\r\n CommonUtils.isNullOrUndefined(this.maximum) || this.maximum === 0\r\n ? CircuitUtils.computeCapacitorLimit(this.idealValue, this.capacitorMaximumLimitMultiplier)\r\n : this.maximum;\r\n this.value = CircuitUtils.computeComponentValueFromMinMaxAndRcRatio(this.minimum, this.maximum, 1 - this.rcRatio);\r\n }\r\n\r\n toCommercialComponent(toleranceInput) {\r\n set(this, 'toleranceInput', toleranceInput);\r\n let valueAdjusted = CircuitUtils.computeComponentValueFromMinMaxAndRcRatio(\r\n this.minimum,\r\n this.maximum,\r\n 1 - this.rcRatio,\r\n );\r\n let tolInput = !toleranceInput ? CircuitUtils.createToleranceInputDefaults() : toleranceInput;\r\n // var nominalValue = CapacitorToleranceUtils.computeNominalValue(valueAdjusted, tolInput, 'closest');\r\n var nominalValue = computeNominalValue(valueAdjusted, tolInput.capacitorPreferredSeries, 'closest');\r\n let toleranceValues = CapacitorToleranceUtils.getToleranceValues(nominalValue, tolInput.capacitorTolerance);\r\n\r\n set(this, 'value', nominalValue);\r\n set(this, 'toleranceArray', toleranceValues.toleranceArray);\r\n set(this, 'desiredTolerance', tolInput.capacitorTolerance);\r\n set(this, 'finalTolerance', toleranceValues.finalTolerance);\r\n set(this, 'isCommercial', true);\r\n\r\n return this;\r\n }\r\n\r\n getNominalValue() {\r\n if (!this.isCommercial) throw 'component is not yet commercial. Call toCommercialComponent() first.';\r\n\r\n return this.value;\r\n }\r\n}\r\n","import C1 from './c1';\r\nimport Capacitor from './capacitor';\r\nimport Inductor from './inductor';\r\nimport R3 from './r3';\r\nimport R4 from './r4';\r\nimport Resistor from './resistor';\r\n\r\nexport function createC1(c1IdealValue, capacitorMinimumLimitMultiplier, capacitorMaximumLimitMultiplier, sizing) {\r\n let result = C1.create({\r\n idealValue: c1IdealValue,\r\n capacitorMinimumLimitMultiplier: capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier: capacitorMaximumLimitMultiplier,\r\n sizing: sizing,\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function createC1MinAndMaxDefined(c1IdealValue, minimum, maximum, sizing) {\r\n let result = C1.create({\r\n idealValue: c1IdealValue,\r\n minimum: minimum,\r\n maximum: maximum,\r\n sizing: sizing,\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function createC2(\r\n c2IdealValue,\r\n capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier,\r\n sizing,\r\n rcRatioInverse,\r\n) {\r\n let result = Capacitor.create({\r\n idealValue: c2IdealValue,\r\n capacitorMinimumLimitMultiplier: capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier: capacitorMaximumLimitMultiplier,\r\n sizing: sizing,\r\n rcRatio: rcRatioInverse,\r\n });\r\n return result;\r\n}\r\n\r\nexport function createC5(\r\n c5IdealValue,\r\n capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier,\r\n sizing,\r\n rcRatioInverse,\r\n) {\r\n let result = Capacitor.create({\r\n idealValue: c5IdealValue,\r\n capacitorMinimumLimitMultiplier: capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier: capacitorMaximumLimitMultiplier,\r\n sizing: sizing,\r\n rcRatio: rcRatioInverse,\r\n });\r\n return result;\r\n}\r\n\r\nexport function createR1(\r\n r1IdealValue,\r\n capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier,\r\n sizing,\r\n rcRatioInverse,\r\n) {\r\n let result = Resistor.create({\r\n idealValue: r1IdealValue,\r\n capacitorMinimumLimitMultiplier: capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier: capacitorMaximumLimitMultiplier,\r\n sizing: sizing,\r\n rcRatio: rcRatioInverse,\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function createR1MinAndMaxDefined(r1IdealValue, minimum, maximum, sizing, rcRatioInverse) {\r\n let result = Resistor.create({\r\n idealValue: r1IdealValue,\r\n minimum: minimum,\r\n maximum: maximum,\r\n sizing: sizing,\r\n rcRatio: rcRatioInverse,\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function createR2(\r\n r2IdealValue,\r\n capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier,\r\n sizing,\r\n rcRatioInverse,\r\n) {\r\n return Resistor.create({\r\n idealValue: r2IdealValue,\r\n capacitorMinimumLimitMultiplier: capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier: capacitorMaximumLimitMultiplier,\r\n sizing: sizing,\r\n rcRatio: rcRatioInverse,\r\n });\r\n}\r\n\r\nexport function createR2MinMaxDefined(r2IdealValue, minimum, maximum, sizing, rcRatioInverse) {\r\n return Resistor.create({\r\n idealValue: r2IdealValue,\r\n minimum: minimum,\r\n maximum: maximum,\r\n sizing: sizing,\r\n rcRatio: rcRatioInverse,\r\n });\r\n}\r\n\r\nexport function createR3(r3NominalValue, resistorMinimumLimitMultiplier, resistorMaximumLimitMultiplier) {\r\n let result = R3.create({\r\n idealValue: r3NominalValue,\r\n resistorMinimumLimitMultiplier: resistorMinimumLimitMultiplier,\r\n resistorMaximumLimitMultiplier: resistorMaximumLimitMultiplier,\r\n });\r\n return result;\r\n}\r\n\r\nexport function createR4(r4IdealValue, resistorMinimumLimitMultiplier, resistorMaximumLimitMultiplier) {\r\n let result = R4.create({\r\n idealValue: r4IdealValue,\r\n resistorMinimumLimitMultiplier: resistorMinimumLimitMultiplier,\r\n resistorMaximumLimitMultiplier: resistorMaximumLimitMultiplier,\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function createR4FromR3AndGain(r3Value, gain, resistorMinimumLimitMultiplier, resistorMaximumLimitMultiplier) {\r\n let r4IdealValue = r3Value * (gain - 1);\r\n let result = createR4(r4IdealValue, resistorMinimumLimitMultiplier, resistorMaximumLimitMultiplier);\r\n return result;\r\n}\r\n\r\nexport function createR5(\r\n r5IdealValue,\r\n capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier,\r\n sizing,\r\n rcRatioInverse,\r\n) {\r\n return Resistor.create({\r\n idealValue: r5IdealValue,\r\n capacitorMinimumLimitMultiplier: capacitorMinimumLimitMultiplier,\r\n capacitorMaximumLimitMultiplier: capacitorMaximumLimitMultiplier,\r\n sizing: sizing,\r\n rcRatio: rcRatioInverse,\r\n });\r\n}\r\n\r\nexport function createInductor(l1IdealValue, minimum, maximum, rcRatioInverse) {\r\n var result = Inductor.create({\r\n idealValue: l1IdealValue,\r\n minimum: minimum,\r\n maximum: maximum,\r\n rcRatio: rcRatioInverse,\r\n });\r\n return result;\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject, { set } from '@ember/object';\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport * as CircuitUtils from '../utils/circuit';\r\nimport * as InductorToleranceUtils from '../tolerances/inductor-tolerance-utils';\r\nimport { computeNominalValue } from '../tolerances/tolerance-utils';\r\n\r\n//\r\n// The idea behind a these components (capacitor, resistor, inductor) is we have classes that encapsulate\r\n// how each of them are created. There is a c1 class that is a type of capacitor with the difference with this class being\r\n// in how the commercial value is computed. Commercial (Nominal) value for capacitor is always the closest to the ideal value.\r\n// c1 will adjust depending on whether it goes beyond its limits.\r\n//\r\n// Lifecycle: This component is created with the\r\n// 1. ideal value (component value based from computation, aka. textbook component in the old app, or ideal value),\r\n// 2. a multiplier to get the minimum limit.\r\n// 3. a multiplier to get the maximum limit.\r\n//\r\n// The ideal value is not directly used in here. It's only used to get the limits which are in turn used to compute\r\n// a value based from c1's current value in comparison to its minimum and maximum (rcRatio).\r\n//\r\n// Construction: Capacitor.create({minimum: minimum, maximum: maximum, rcRatio: rcRatio})\r\n// Hash:\r\n// hash = {\r\n// minimum: { number },\r\n// maximum: { number },\r\n// rcRatio: { number }\r\n// }\r\n// Create: Capacitor.create(hash);\r\n// @inputProperty { number } rcRatio - The value of c1 relative to its minimum and maximum logarithmically.\r\n// @inputProperty { number } maximum - the capacitor instance's maximum limit\r\n// @inputProperty { number } minimum - the capacitor instance's minimum limit\r\n//\r\n// @getterProperty { number } nominalValue - The computed commercial value. This matches the value of capacitors that are available in the market.\r\n// @getterProperty { number[] } toleranceArray - The nominal value multiplied to each of the elements of the array. The array consists of different tolerance multipliers.\r\n// @getterProperty { FilterConstants.capacitorTolerance } finalTolerance - If the desired tolerance fails to get the nominal, there's a process that goes through all the available tolerance options to get the nominal value.\r\n// @getterProperty { FilterConstants.capacitorTolerance } desiredTolerance - the selected capacitor tolerance or the default if none.\r\n// @getterProperty { bool } isCommercial - True if this component is already converted into a commercial capacitor. False if not.\r\n//\r\n// @computed { number } sizingAdjustedValue - The computed ideal value based from the limits and the rcRatio\r\n// @computed { number } value - the ideal value if the component is not commercial, the nominal value if the component is already converted to a commercial one.\r\n// @method { this } toCommercialComponent() - converts the component into its commercial version.\r\n// @method { number } getNominalValue() - gets the nominal value. Can only be accessed when the component is already a commercial one.\r\nexport default class Inductor extends EmberObject {\r\n name = FilterConstants.inductorNames.l1;\r\n minimum = null;\r\n maximum = null;\r\n rcRatio = null;\r\n isCommercial = null;\r\n nominalValue = null;\r\n toleranceArray = null;\r\n finalTolerance = null;\r\n desiredTolerance = null;\r\n toleranceInput = null;\r\n\r\n init() {\r\n super.init();\r\n set(this, 'isCommercial', false);\r\n this.value = CircuitUtils.computeComponentValueFromMinMaxAndRcRatio(this.minimum, this.maximum, this.rcRatio);\r\n }\r\n\r\n toCommercialComponent(toleranceInput) {\r\n set(this, 'toleranceInput', toleranceInput);\r\n let valueAdjusted = CircuitUtils.computeComponentValueFromMinMaxAndRcRatio(\r\n this.minimum,\r\n this.maximum,\r\n this.rcRatio,\r\n );\r\n let tolInput = !toleranceInput ? CircuitUtils.createToleranceInputDefaults() : toleranceInput;\r\n // let nominalValue = InductorToleranceUtils.computeNominalValue(\r\n // valueAdjusted,\r\n // tolInput,\r\n // FilterConstants.roundDirection.closest\r\n // );\r\n let nominalValue = computeNominalValue(valueAdjusted, tolInput.inductorPreferredSeries, 'closest');\r\n let toleranceValues = InductorToleranceUtils.getToleranceValues(nominalValue, tolInput.inductorTolerance);\r\n\r\n set(this, 'value', nominalValue);\r\n set(this, 'toleranceArray', toleranceValues.toleranceArray);\r\n set(this, 'finalTolerance', toleranceValues.finalTolerance);\r\n set(this, 'desiredTolerance', tolInput.inductorTolerance);\r\n set(this, 'isCommercial', true);\r\n\r\n return this;\r\n }\r\n\r\n getNominalValue() {\r\n if (!this.isCommercial) throw 'component is not yet commercial. Call toCommercialComponent() first.';\r\n\r\n return this.value;\r\n }\r\n\r\n copyComponent() {\r\n let result = Inductor.create({\r\n idealValue: this.idealValue,\r\n minimum: this.minimum,\r\n maximum: this.maximum,\r\n sizing: this.sizing,\r\n });\r\n set(result, 'value', this.value);\r\n set(result, 'isCommercial', this.isCommercial);\r\n if (this.isCommercial) {\r\n set(result, 'toleranceArray', this.toleranceArray);\r\n set(result, 'desiredTolerance', this.desiredTolerance);\r\n set(result, 'finalTolerance', this.finalTolerance);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject, { set } from '@ember/object';\r\n\r\nimport * as CircuitUtils from '../utils/circuit';\r\nimport * as CommonUtils from '../../utils/common';\r\nimport * as ResistorToleranceUtils from '../tolerances/resistor-tolerance-utils';\r\nimport { computeNominalValue } from '../tolerances/tolerance-utils';\r\n\r\n//\r\n// The idea behind a these components (capacitor, resistor, inductor) is we have classes that encapsulate\r\n// how each of them are created.\r\n// R4 is a gain resistor. Meaning if the specs requires gain,\r\n// r3 and r4 are added in the circuit. Not all circuits support gains.\r\n// r3's nominal value is kept within the limits unlike in r4 where we\r\n// compute for the closest nominalValue. The reason being, ideally,\r\n// r4 will be within the limits if r3 is also within the limits.\r\n//\r\n// Lifecycle: This component is created with the\r\n// 1. ideal value (component value based from computation, aka. textbook component in the old app, or ideal value),\r\n// 2. a multiplier to get the minimum limit.\r\n// 3. a multiplier to get the maximum limit.\r\n//\r\n// This is the component that changes when the gain slider is changed. This component is like c1 where it is ensured\r\n// that the final result will be within the limits.\r\n//\r\n// Construction: R3.create({idealValue: idealValue, resistorMaximumLimitMultiplier: resistorMaximumLimitMultiplier, resistorMinimumLimitMultiplier: resistorMinimumLimitMultiplier})\r\n// Hash:\r\n// hash = {\r\n// idealValue: { number },\r\n// resistorMaximumLimitMultiplier: { number },\r\n// resistorMinimumLimitMultiplier: { number }\r\n// }\r\n// Create: Capacitor.create(hash);\r\n// @inputProperty { number } idealValue - The computed value based from a given c1.\r\n// @inputProperty { number } resistorMaximumLimitMultiplier - A value computed from the ideal values of all the components. Used to compute this component's maximum limit.\r\n// @inputProperty { number } resistorMinimumLimitMultiplier - A value computed from the ideal values of all the components used to compute this component's minimum limit.\r\n\r\n// @getterProperty { number } nominalValue - The computed commercial value. This matches the value of capacitors that are available in the market.\r\n// @getterProperty { number[] } toleranceArray - The nominal value multiplied to each of the elements of the array. The array consists of different tolerance multipliers.\r\n// @getterProperty { FilterConstants.capacitorTolerance } finalTolerance - If the desired tolerance fails to get the nominal, there's a process that goes through all the available tolerance options to get the nominal value.\r\n// @getterProperty { FilterConstants.capacitorTolerance } desiredTolerance - the selected capacitor tolerance or the default if none.\r\n// @getterProperty { bool } isCommercial - True if this component is already converted into a commercial capacitor. False if not.\r\n\r\n// @computed { number } maximum - the capacitor instance's maximum limit\r\n// @computed { number } minimum - the capacitor instance's minimum limit\r\n// @computed { number } value - the ideal value if the component is not commercial, the nominal value if the component is already converted to a commercial one.\r\n// @method { this } toCommercialComponent() - converts the component into its commercial version.\r\n// @method { number } getNominalValue() - gets the nominal value. Can only be accessed when the component is already a commercial one.\r\nexport default class R3 extends EmberObject {\r\n idealValue = null;\r\n resistorMaximumLimitMultiplier = null;\r\n resistorMinimumLimitMultiplier = null;\r\n nominalValue = null;\r\n toleranceArray = null;\r\n finalTolerance = null;\r\n isCommercial = null;\r\n definedValue = null;\r\n\r\n init() {\r\n super.init();\r\n set(this, 'isCommercial', false);\r\n\r\n this.minimum =\r\n CommonUtils.isNullOrUndefined(this.minimum) || this.minimum === 0\r\n ? CircuitUtils.computeGainResistorLimit(this.idealValue, this.resistorMinimumLimitMultiplier)\r\n : this.minimum;\r\n this.maximum =\r\n CommonUtils.isNullOrUndefined(this.maximum) || this.maximum === 0\r\n ? CircuitUtils.computeGainResistorLimit(this.idealValue, this.resistorMaximumLimitMultiplier)\r\n : this.maximum;\r\n this.value = this.idealValue;\r\n }\r\n\r\n toCommercialComponent(toleranceInput) {\r\n set(this, 'toleranceInput', toleranceInput);\r\n\r\n let tolInput = !toleranceInput ? CircuitUtils.createToleranceInputDefaults() : toleranceInput;\r\n // let nominalValue = ResistorToleranceUtils.computeNominalValue(this.idealValue, tolInput, 'closest');\r\n let nominalValue = computeNominalValue(this.idealValue, tolInput.resistorPreferredSeries, 'closest');\r\n var minimum = this.minimum;\r\n var maximum = this.maximum;\r\n\r\n if (nominalValue < minimum) {\r\n // nominalValue = ResistorToleranceUtils.computeNominalValue(this.idealValue, tolInput, 'up');\r\n nominalValue = computeNominalValue(this.idealValue, tolInput.resistorPreferredSeries, 'up');\r\n } else if (nominalValue > maximum) {\r\n // nominalValue = ResistorToleranceUtils.computeNominalValue(this.idealValue, tolInput, 'down');\r\n nominalValue = computeNominalValue(this.idealValue, tolInput.resistorPreferredSeries, 'down');\r\n }\r\n\r\n let toleranceValues = ResistorToleranceUtils.getToleranceValues(nominalValue, tolInput.resistorTolerance);\r\n set(this, 'value', nominalValue);\r\n set(this, 'toleranceArray', toleranceValues.toleranceArray);\r\n set(this, 'finalTolerance', toleranceValues.finalTolerance);\r\n set(this, 'desiredTolerance', tolInput.resistorTolerance);\r\n set(this, 'isCommercial', true);\r\n\r\n return this;\r\n }\r\n\r\n setValue(value) {\r\n if (value < this.minimum) set(this, 'idealValue', this.minimum);\r\n else if (value > this.maximum) set(this, 'idealValue', this.maximum);\r\n else set(this, 'idealValue', value);\r\n\r\n set(this, 'value', this.idealValue);\r\n return this;\r\n }\r\n\r\n getNominalValue() {\r\n if (!this.isCommercial) throw 'component is not yet commercial. Call toCommercialComponent() first.';\r\n\r\n return this.value;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject, { set } from '@ember/object';\r\n\r\nimport * as CircuitUtils from '../utils/circuit';\r\nimport * as ResistorToleranceUtils from '../tolerances/resistor-tolerance-utils';\r\nimport * as CommonUtils from '../../utils/common';\r\nimport { computeNominalValue } from '../tolerances/tolerance-utils';\r\n\r\n//\r\n// The idea behind a these components (capacitor, resistor, inductor) is we have classes that encapsulate\r\n// how each of them are created.\r\n// R4 is a gain resistor. Meaning if the specs requires gain,\r\n// r3 and r4 are added in the circuit. Not all circuits support gains.\r\n// r4's value is based off from r3 value.\r\n//\r\n// Lifecycle: This component is created with the\r\n// 1. ideal value (component value based from computation, aka. textbook component in the old app, or ideal value),\r\n// 2. a multiplier to get the minimum limit.\r\n// 3. a multiplier to get the maximum limit.\r\n//\r\n// R4 is almost the same as r3. This however, only gets the closest nominal. It doesn't check whether it's beyond the limits.\r\n//\r\n// Construction: R4.create({idealValue: idealValue, resistorMaximumLimitMultiplier: resistorMaximumLimitMultiplier, resistorMinimumLimitMultiplier: resistorMinimumLimitMultiplier})\r\n// Hash:\r\n// hash = {\r\n// idealValue: { number },\r\n// maximumLimitMultipler: { number },\r\n// resistorMinimumLimitMultiplier: { number }\r\n// }\r\n// Create: Capacitor.create(hash);\r\n// @inputProperty { number } idealValue - The computed value based from a given c1.\r\n// @inputProperty { number } resistorMaximumLimitMultiplier - A value computed from the ideal values of all the components. Used to compute this component's maximum limit.\r\n// @inputProperty { number } resistorMinimumLimitMultiplier - A value computed from the ideal values of all the components used to compute this component's minimum limit.\r\n\r\n// @getterProperty { number } nominalValue - The computed commercial value. This matches the value of capacitors that are available in the market.\r\n// @getterProperty { number[] } toleranceArray - The nominal value multiplied to each of the elements of the array. The array consists of different tolerance multipliers.\r\n// @getterProperty { FilterConstants.capacitorTolerance } finalTolerance - If the desired tolerance fails to get the nominal, there's a process that goes through all the available tolerance options to get the nominal value.\r\n// @getterProperty { FilterConstants.capacitorTolerance } desiredTolerance - the selected capacitor tolerance or the default if none.\r\n// @getterProperty { bool } isCommercial - True if this component is already converted into a commercial capacitor. False if not.\r\n\r\n// @computed { number } baseResistorValue - if the idealValue is given, it is returned as baseResistorValue else, if we're given a\r\n// r3Value and a gain, we can use them instead.\r\n// @computed { number } maximum - the capacitor instance's maximum limit\r\n// @computed { number } minimum - the capacitor instance's minimum limit\r\n// @computed { number } value - the ideal value if the component is not commercial, the nominal value if the component is already converted to a commercial one.\r\n// @method { this } toCommercialComponent() - converts the component into its commercial version.\r\n// @method { number } getNominalValue() - gets the nominal value. Can only be accessed when the component is already a commercial one.\r\n\r\nexport default class R4 extends EmberObject {\r\n idealValue = null;\r\n r3Value = null;\r\n gain = null;\r\n resistorMaximumLimitMultiplier = null;\r\n resistorMinimumLimitMultiplier = null;\r\n nominalValue = null;\r\n toleranceArray = null;\r\n finalTolerance = null;\r\n isCommercial = null;\r\n init() {\r\n super.init();\r\n set(this, 'isCommercial', false);\r\n let baseResistorValue = CommonUtils.isNullOrUndefined(this.idealValue)\r\n ? this.r3Value * (this.gain - 1)\r\n : this.idealValue;\r\n this.minimum =\r\n CommonUtils.isNullOrUndefined(this.minimum) || this.minimum === 0\r\n ? CircuitUtils.computeGainResistorLimit(baseResistorValue, this.resistorMinimumLimitMultiplier)\r\n : this.minimum;\r\n this.maximum =\r\n CommonUtils.isNullOrUndefined(this.maximum) || this.maximum === 0\r\n ? CircuitUtils.computeGainResistorLimit(baseResistorValue, this.resistorMaximumLimitMultiplier)\r\n : this.maximum;\r\n this.value = baseResistorValue;\r\n }\r\n\r\n toCommercialComponent(toleranceInput) {\r\n set(this, 'toleranceInput', toleranceInput);\r\n let tolInput = !toleranceInput ? CircuitUtils.createToleranceInputDefaults() : toleranceInput;\r\n // let nominalValue = ResistorToleranceUtils.computeNominalValue(this.idealValue, tolInput, 'closest');\r\n let nominalValue = computeNominalValue(this.idealValue, tolInput.resistorPreferredSeries, 'closest');\r\n let toleranceValues = ResistorToleranceUtils.getToleranceValues(nominalValue, tolInput.resistorTolerance);\r\n\r\n set(this, 'value', nominalValue);\r\n set(this, 'toleranceArray', toleranceValues.toleranceArray);\r\n set(this, 'finalTolerance', toleranceValues.finalTolerance);\r\n set(this, 'desiredTolerance', tolInput.resistorTolerance);\r\n set(this, 'isCommercial', true);\r\n\r\n return this;\r\n }\r\n\r\n getNominalValue() {\r\n if (!this.isCommercial) throw 'component is not yet commercial. Call toCommercialComponent() first.';\r\n\r\n return this.value;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject, { set } from '@ember/object';\r\n\r\nimport * as CircuitUtils from '../utils/circuit';\r\nimport * as CommonUtils from '../../utils/common';\r\nimport * as ResistorToleranceUtils from '../tolerances/resistor-tolerance-utils';\r\nimport { computeNominalValue } from '../tolerances/tolerance-utils';\r\n\r\n//\r\n// The idea behind a these components (capacitor, resistor, inductor) is we have classes that encapsulate\r\n// how each of them are created. This class is used for creating a resistor.\r\n//\r\n// Lifecycle: This component is created with the\r\n// 1. ideal value (component value based from computation, aka. textbook component in the old app, or ideal value),\r\n// 2. a multiplier to get the minimum limit.\r\n// 3. a multiplier to get the maximum limit.\r\n//\r\n// The ideal value is not directly used in here. It's only used to get the limits which are in turn used to compute\r\n// a value based from c1's current value in comparison to its minimum and maximum (rcRatio).\r\n//\r\n// Construction: Capacitor.create({idealValue: idealValue, capacitorMaximumLimitMultiplier: capacitorMaximumLimitMultiplier, capacitorMinimumLimitMultiplier: capacitorMinimumLimitMultiplier})\r\n// Hash:\r\n// hash = {\r\n// idealValue: { number },\r\n// capacitorMaximumLimitMultiplier: { number },\r\n// capacitorMinimumLimitMultiplier: { number }\r\n// }\r\n// Create: Capacitor.create(hash);\r\n// @inputProperty { number } idealValue - The computed value based from a given c1.\r\n// @inputProperty { number } capacitorMaximumLimitMultiplier - The capacitor's minimum limit multiplier\r\n// @inputProperty { number } capacitorMinimumLimitMultiplier - The capacitor's maximum limit multiplier\r\n// @inputProperty { number } rcRatio - The value of c1 relative to its minimum and maximum logarithmically.\r\n// @inputProperty { FilterConstants.sizing } sizing - Indication whether the value of r1 is going towards its max or min.\r\n// @getterProperty { number } nominalValue - The computed commercial value. This matches the value of capacitors that are available in the market.\r\n// @getterProperty { number[] } toleranceArray - The nominal value multiplied to each of the elements of the array. The array consists of different tolerance multipliers.\r\n// @getterProperty { FilterConstants.capacitorTolerance } finalTolerance - If the desired tolerance fails to get the nominal, there's a process that goes through all the available tolerance options to get the nominal value.\r\n// @getterProperty { FilterConstants.capacitorTolerance } desiredTolerance - the selected capacitor tolerance or the default if none.\r\n// @getterProperty { bool } isCommercial - True if this component is already converted into a commercial capacitor. False if not.\r\n// @computed { number } maximum - the capacitor instance's maximum limit\r\n// @computed { number } minimum - the capacitor instance's minimum limit\r\n// @computed { number } sizingAdjustedValue - The computed ideal value based from the limits and the rcRatio\r\n// @computed { number } value - the ideal value if the component is not commercial, the nominal value if the component is already converted to a commercial one.\r\n// @method { this } toCommercialComponent() - converts the component into its commercial version.\r\n// @method { number } getNominalValue() - gets the nominal value. Can only be accessed when the component is already a commercial one.\r\nexport default class Resistor extends EmberObject {\r\n idealValue = null;\r\n capacitorMaximumLimitMultiplier = null;\r\n capacitorMinimumLimitMultiplier = null;\r\n nominalValue = null;\r\n toleranceArray = null;\r\n finalTolerance = null;\r\n isCommercial = null;\r\n maximum = null;\r\n minimum = null;\r\n init() {\r\n super.init();\r\n set(this, 'isCommercial', false);\r\n\r\n this.maximum =\r\n CommonUtils.isNullOrUndefined(this.maximum) || this.maximum === 0\r\n ? CircuitUtils.computeResistorLimit(this.idealValue, this.capacitorMinimumLimitMultiplier)\r\n : this.maximum;\r\n this.minimum =\r\n CommonUtils.isNullOrUndefined(this.minimum) || this.minimum === 0\r\n ? CircuitUtils.computeResistorLimit(this.idealValue, this.capacitorMaximumLimitMultiplier)\r\n : this.minimum;\r\n this.value = CircuitUtils.computeComponentValueFromMinMaxAndRcRatio(this.minimum, this.maximum, this.rcRatio);\r\n }\r\n\r\n toCommercialComponent(toleranceInput) {\r\n set(this, 'toleranceInput', toleranceInput);\r\n let valueAdjusted = CircuitUtils.computeComponentValueFromMinMaxAndRcRatio(\r\n this.minimum,\r\n this.maximum,\r\n this.rcRatio,\r\n );\r\n let tolInput = !toleranceInput ? CircuitUtils.createToleranceInputDefaults() : toleranceInput;\r\n // let nominalValue = ResistorToleranceUtils.computeNominalValue(valueAdjusted, tolInput, 'closest');\r\n let nominalValue = computeNominalValue(valueAdjusted, tolInput.resistorPreferredSeries, 'closest');\r\n let toleranceValues = ResistorToleranceUtils.getToleranceValues(nominalValue, tolInput.resistorTolerance);\r\n\r\n set(this, 'value', nominalValue);\r\n set(this, 'toleranceArray', toleranceValues.toleranceArray);\r\n set(this, 'finalTolerance', toleranceValues.finalTolerance);\r\n set(this, 'desiredTolerance', tolInput.resistorTolerance);\r\n set(this, 'isCommercial', true);\r\n\r\n return this;\r\n }\r\n\r\n getNominalValue() {\r\n if (!this.isCommercial) throw 'component is not yet commercial. Call toCommercialComponent() first.';\r\n\r\n return this.value;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport default class BaseFilterResponse extends EmberObject {\r\n getNumberOfStages(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n filterResponseValue,\r\n ) {\r\n var orderNum = this.getOrder(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n filterResponseValue,\r\n );\r\n var result = orderNum % 2 === 0 ? 0 : 1;\r\n result += (orderNum - result) / 2;\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport default EmberObject.create({\r\n orders: [\r\n /*1st order*/\r\n { nthOrder: 1, stages: [{ stageQ: 0.5, stageFp: 1, stageFz: 1, stageId: 1, orderType: 1, gain: 1 }] },\r\n { nthOrder: 2, stages: [{ stageQ: 0.57735, stageFp: 1.732051, stageFz: 1, stageId: 1, orderType: 2, gain: 1 }] },\r\n {\r\n nthOrder: 3,\r\n stages: [\r\n { stageQ: 0.5, stageFp: 2.322185, stageFz: 1, stageId: 1, orderType: 1, gain: 1 },\r\n { stageQ: 0.691047, stageFp: 2.541541, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n {\r\n nthOrder: 4,\r\n stages: [\r\n { stageQ: 0.521935, stageFp: 3.023265, stageFz: 1, stageId: 1, orderType: 2, gain: 1 },\r\n { stageQ: 0.805538, stageFp: 3.389366, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n {\r\n nthOrder: 5,\r\n stages: [\r\n { stageQ: 0.5, stageFp: 3.646739, stageFz: 1, stageId: 1, orderType: 1, gain: 1 },\r\n { stageQ: 0.563536, stageFp: 3.777894, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n { stageQ: 0.916477, stageFp: 4.261023, stageFz: 1, stageId: 3, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n {\r\n nthOrder: 6,\r\n stages: [\r\n { stageQ: 0.510318, stageFp: 4.336027, stageFz: 1, stageId: 1, orderType: 2, gain: 1 },\r\n { stageQ: 0.611195, stageFp: 4.566489, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n { stageQ: 1.023314, stageFp: 5.149177, stageFz: 1, stageId: 3, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n {\r\n nthOrder: 7,\r\n stages: [\r\n { stageQ: 0.5, stageFp: 4.971787, stageFz: 1, stageId: 1, orderType: 1, gain: 1 },\r\n { stageQ: 0.532356, stageFp: 5.066206, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n { stageQ: 0.660821, stageFp: 5.37927, stageFz: 1, stageId: 3, orderType: 2, gain: 1 },\r\n { stageQ: 1.126258, stageFp: 6.049528, stageFz: 1, stageId: 4, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n {\r\n nthOrder: 8,\r\n stages: [\r\n { stageQ: 0.505991, stageFp: 5.654841, stageFz: 1, stageId: 1, orderType: 2, gain: 1 },\r\n { stageQ: 0.559609, stageFp: 5.825353, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n { stageQ: 0.710852, stageFp: 6.210415, stageFz: 1, stageId: 3, orderType: 2, gain: 1 },\r\n { stageQ: 1.225669, stageFp: 6.959311, stageFz: 1, stageId: 4, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n {\r\n nthOrder: 9,\r\n stages: [\r\n { stageQ: 0.5, stageFp: 6.297019, stageFz: 1, stageId: 1, orderType: 1, gain: 1 },\r\n { stageQ: 0.519709, stageFp: 6.370971, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n { stageQ: 0.589406, stageFp: 6.606561, stageFz: 1, stageId: 3, orderType: 2, gain: 1 },\r\n { stageQ: 0.760611, stageFp: 7.056097, stageFz: 1, stageId: 4, orderType: 2, gain: 1 },\r\n { stageQ: 1.321912, stageFp: 7.876639, stageFz: 1, stageId: 5, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n {\r\n nthOrder: 10,\r\n stages: [\r\n { stageQ: 0.503913, stageFp: 6.976213, stageFz: 1, stageId: 1, orderType: 2, gain: 1 },\r\n { stageQ: 0.537552, stageFp: 7.112128, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n { stageQ: 0.62047, stageFp: 7.405346, stageFz: 1, stageId: 3, orderType: 2, gain: 1 },\r\n { stageQ: 0.809791, stageFp: 7.913633, stageFz: 1, stageId: 4, orderType: 2, gain: 1 },\r\n { stageQ: 1.415309, stageFp: 8.800154, stageFz: 1, stageId: 5, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n {\r\n nthOrder: 11,\r\n stages: [\r\n { stageQ: 0.5, stageFp: 7.62234, stageFz: 1, stageId: 1, orderType: 1, gain: 1 },\r\n { stageQ: 0.513291, stageFp: 7.683178, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n { stageQ: 0.557758, stageFp: 7.873187, stageFz: 1, stageId: 3, orderType: 2, gain: 1 },\r\n { stageQ: 0.65213, stageFp: 8.218579, stageFz: 1, stageId: 4, orderType: 2, gain: 1 },\r\n { stageQ: 0.858254, stageFp: 8.781055, stageFz: 1, stageId: 5, orderType: 2, gain: 1 },\r\n { stageQ: 1.506143, stageFp: 9.728848, stageFz: 1, stageId: 6, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n {\r\n nthOrder: 12,\r\n stages: [\r\n { stageQ: 0.502756, stageFp: 8.298907, stageFz: 1, stageId: 1, orderType: 2, gain: 1 },\r\n { stageQ: 0.525936, stageFp: 8.412108, stageFz: 1, stageId: 2, orderType: 2, gain: 1 },\r\n { stageQ: 0.579367, stageFp: 8.650615, stageFz: 1, stageId: 3, orderType: 2, gain: 1 },\r\n { stageQ: 0.684008, stageFp: 9.043961, stageFz: 1, stageId: 4, orderType: 2, gain: 1 },\r\n { stageQ: 0.905947, stageFp: 9.656868, stageFz: 1, stageId: 5, orderType: 2, gain: 1 },\r\n { stageQ: 1.594657, stageFp: 10.66195, stageFz: 1, stageId: 6, orderType: 2, gain: 1 },\r\n ],\r\n },\r\n ],\r\n});\r\n","import { copy } from 'ember-copy';\r\nimport BaseFilterResponse from './base-filter-response';\r\nimport BesselJson from './bessel-json';\r\nimport Frequency from '../process-data/frequency';\r\nimport FilterConstants from '../../filter-constants';\r\nimport LowPass from '../filter/low-pass';\r\nimport * as StageUtils from '../utils/stage';\r\nimport * as ResultsUtils from '../utils/results';\r\nimport * as ConversionUtils from '../utils/conversion';\r\n\r\n/**\r\n@function closest_point\r\n@param {int} passbandAttenuation Passband attenuation provided by the user\r\n@param {object} cmag object containing the magnitude of the order\r\n@returns two closest point indices.\r\n@description

This function takes input as the passband attenuation from the user, magnitude array, frequency array finds the two closest points in the magnitude array

\r\n

Search through the magnitude array to find the two points closest to the users specified passband attenuation

\r\n

INPUT : User specified passband attenuation, magnitude array , frequency points

\r\n

OUTPUT : closest index 1 , closest index 2

\r\n*/\r\nvar closest_point = function (passbandAttenuation, magArray) {\r\n var closest1 = magArray[0];\r\n var prev = Math.abs(magArray[0] - passbandAttenuation);\r\n for (var s = 0; s < magArray.length; s++) {\r\n var diff = Math.abs(magArray[s] - passbandAttenuation);\r\n\r\n if (diff < prev) {\r\n prev = diff;\r\n closest1 = magArray[s];\r\n }\r\n }\r\n var index1 = magArray.indexOf(closest1); // first closest index obtained.\r\n magArray.splice(index1, 1);\r\n var closest2 = magArray[0];\r\n prev = Math.abs(magArray[0] - passbandAttenuation);\r\n for (var k = 0; k <= magArray.length; k++) {\r\n var diff2 = Math.abs(magArray[k] - passbandAttenuation);\r\n if (diff2 < prev) {\r\n prev = diff2;\r\n closest2 = magArray[k];\r\n }\r\n }\r\n\r\n magArray.splice(index1, 0, closest1);\r\n var index2 = magArray.indexOf(closest2);\r\n\r\n return [index1, index2]; // returns indices of two closest point\r\n};\r\n\r\n/**\r\n@function linear_interpolate\r\n@param {object} fp object containing the array of frequency points\r\n@param {object} b object containing the two closest point indices\r\n@param {object} cmag object containing the magnitude of the order\r\n@param {int} passbandAttenuation Passband attenuation provided by the user\r\n@returns normalized passband frequency\r\n@description

This function takes input as the passband attenuation from the user, magnitude array, two closest points in the magnitude array and returns normalized passband frequency

\r\n

Based on the two points found above, linearly interpolate their corresponding frequency points to find the frequency of the user's specified passband attenuation.We will call this the normalized passband frequency.

\r\n

function to linearly interpolate the frequency array

\r\n

INPUT : frequency point array, closest indices, magnitude array , user specifies passband attenuation

\r\n

OUTPUT : normalized passband frequency

\r\n*/\r\nvar linear_interpolate = function (fp, b, magArray, passbandAttenuation) {\r\n var d = b[0];\r\n var e = b[1];\r\n var x1 = magArray[d];\r\n var y1 = fp[d];\r\n var x2 = magArray[e];\r\n var y2 = fp[e];\r\n var x3 = passbandAttenuation;\r\n var y3 = y1 + ((x3 - x1) * (y2 - y1)) / (x2 - x1);\r\n var normalized_pass_freq = y3;\r\n\r\n return normalized_pass_freq;\r\n};\r\n\r\n/**\r\n@function norm_stop_freq\r\n@param {object} li object containing the normalized passband frequency.\r\n@param {int} stopbandFrequency Stopband frequency provided by the user\r\n@param {int} passbandFrequency Passband frequency provided by the user\r\n@description function to create normalized stopband frequency\r\n

normalized stopband frequency = normalized passband frequency * user's stopband frequency / user's passband frequency

\r\n

INPUT : normalized passband frequency

\r\n

OUTPUT :normalized stopband frequency

\r\n*/\r\nvar norm_stop_freq = function (li, stopbandFrequency, passbandFrequency) {\r\n var normalized_stop_freq = li * (stopbandFrequency / passbandFrequency);\r\n\r\n return normalized_stop_freq;\r\n};\r\n\r\n/**\r\n@function closest_freq_points\r\n@param {object} fp object containing the array of frequency points\r\n@param {object} p object containing the normalized stopband frequency\r\n@returns two closest point indices of the frequency point array.\r\n@description

This function takes input as the frequency array and normalized stopband frequency and finds the two closest points in the frequency array

\r\n

Search through frequency array to find the two points closest to the normalized stopband frequency

\r\n

INPUT : frequency points,normalized stopband frequency

\r\n

OUTPUT : closest index 1 , closest index 2

\r\n*/\r\nvar closest_freq_points = function (fp, p) {\r\n var closestfreq1 = fp[0];\r\n var prev = Math.abs(fp[0] - p);\r\n\r\n for (var s = 0; s < fp.length; s++) {\r\n var diff = Math.abs(fp[s] - p);\r\n\r\n if (diff < prev) {\r\n prev = diff;\r\n closestfreq1 = fp[s];\r\n }\r\n }\r\n\r\n var indexfreq1 = fp.indexOf(closestfreq1);\r\n fp.splice(indexfreq1, 1);\r\n var closestfreq2 = fp[0];\r\n var prev2 = Math.abs(fp[0] - p);\r\n for (var k = 0; k <= fp.length; k++) {\r\n var diff2 = Math.abs(fp[k] - p);\r\n\r\n if (diff2 < prev2) {\r\n prev2 = diff2;\r\n closestfreq2 = fp[k];\r\n }\r\n }\r\n\r\n fp.splice(indexfreq1, 0, closestfreq1);\r\n var indexfreq2 = fp.indexOf(closestfreq2);\r\n\r\n return [indexfreq1, indexfreq2];\r\n};\r\n\r\n/**\r\n@function linear_interpolate_mag\r\n@param {object} fp object containing the array of frequency points\r\n@param {object} h object containing the two closest point indices in the frequency array\r\n@param {object} cmag object containing the magnitude of the order\r\n@param {object} p normalized stop band frequency\r\n@returns normalized passband attenuation\r\n@description

This function takes input as the frequency array,normalized stopband frequency, magnitude array, two closest points in the frequency array and returns normalized passband attenuation

\r\n

Based on the two frequency points found above, linearly interpolate the magnitude array to find the calculated stopband attenuation. You will use this value to determine when you exit the loop

\r\n

function to linearly interpolate the magnitude array

\r\n

INPUT : frequency point array, closest indices,magnitude array,normalized stopband frequency

\r\n

OUTPUT : normalized passband attenuation

\r\n*/\r\nvar linear_interpolate_mag = function (fp, h, magArray, p) {\r\n var d = h[0];\r\n var e = h[1];\r\n var y1 = magArray[d];\r\n var x1 = fp[d];\r\n var y2 = magArray[e];\r\n var x2 = fp[e];\r\n var x3 = p;\r\n var y3 = y1 + ((x3 - x1) * (y2 - y1)) / (x2 - x1);\r\n var normalized_pass_att = y3;\r\n\r\n return normalized_pass_att;\r\n};\r\n\r\nexport default class Bessel extends BaseFilterResponse {\r\n name = FilterConstants.responseType.bessel;\r\n\r\n /**\r\n Bessel Low Pass Algorithm\r\n LAST UPDATED : 09/05/2012 2:31 PM\r\n @author Created by : Archita Ghosh on behalf of Collaborative Consulting and ADI\r\n @function Bessel_lowpass -This is a Bessel low pass filter algorithm.\r\n @param {float} passbandAttenuation - passband attenuation from the user in dB. Always a negative number.\r\n @param {float} stopbandAttenuation - stopband attenuation from the user in dB. Always a negative number.\r\n @param {float} passbandFrequency - passband frequency from the user in Hz. \r\n @param {float} stopbandFrequency - stopband frequency from the user in Hz. \r\n @description This function calculated the Bessel response for low pass filter\r\n

Do until (calculated stopband attenuation < user's specified stopband attenuation) or (loop index > MAXORDER)

\r\n

{

\r\n

Pull stage information from the 2D array of Bessel values for the order corresponding to the loop index.

\r\n

Compute magnitude array using Calculating Phase and Magnitude for many stages - Ideal

\r\n

Search through the magnitude array to find the two points closest to the users specified passband attenuation. (Note: make sure units of what you are comparing are the same: either V/V or dB)

\r\n

Based on the two points found above, linearly interpolate their corresponding frequency points to find the frequency of the user's specified passband attenuation. We will call this the normalized passband frequency.

\r\n

normalized stopband frequency = normalized passband frequency * user's stopband frequency / user's passband frequency

\r\n

Search through frequency array to find the two points closest to the normalized stopband frequency.

\r\n

Based on the two frequency points found above, linearly interpolate the magnitude array to find the calculated stopband attenuation. You will use this value to determine when you exit the loop. (Note: make sure units same: V/V or dB.)

\r\n

}

\r\n */\r\n lowPass(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency) {\r\n var besselJson = this.createBesselTable(passbandFrequency);\r\n var orderDiv = this.findAppropriateOrder(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n besselJson,\r\n );\r\n var stageGroup = this.getTargetStageGroup(orderDiv, besselJson);\r\n var result = StageUtils.createTargetStages(stageGroup.stages);\r\n\r\n return result;\r\n }\r\n\r\n getTargetStageGroup(orderDiv, besselJson) {\r\n var result = besselJson.find((item) => {\r\n return item.nthOrder === orderDiv.order;\r\n });\r\n var div = orderDiv.div;\r\n result.stages.forEach((stage) => {\r\n stage.stageFp = stage.stageFp * div;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n findAppropriateOrder(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency, besselJson) {\r\n let MAXORDER = FilterConstants.maxOrder;\r\n var passbandAttenuationVV = ConversionUtils.dBtoVV(passbandAttenuation);\r\n var stopbandAttenuationVV = ConversionUtils.dBtoVV(stopbandAttenuation);\r\n var frequencyArray = this._getFrequency(passbandFrequency, stopbandFrequency);\r\n var besselTable = null;\r\n var div = null;\r\n\r\n for (var i = 0; i < besselJson.length; i++) {\r\n var stageGroup = besselJson[i];\r\n var stages = stageGroup.stages;\r\n var individualStagesMagnitude = stages.map((stage) => {\r\n var filterAmplitudeArray = this._computeFilterAmplitude(stage, frequencyArray);\r\n var stageMagnitude = filterAmplitudeArray.map((filterAmplitude) => {\r\n return filterAmplitude.magnitude();\r\n });\r\n\r\n return stageMagnitude;\r\n });\r\n\r\n var magnitudeArray = ResultsUtils.getMagnitudeArray(individualStagesMagnitude);\r\n let clMagPoint = closest_point(passbandAttenuationVV, magnitudeArray);\r\n let normPassFreq = linear_interpolate(frequencyArray, clMagPoint, magnitudeArray, passbandAttenuationVV);\r\n let normStopFreq = norm_stop_freq(normPassFreq, stopbandFrequency, passbandFrequency);\r\n let clFreqPoint = closest_freq_points(frequencyArray, normStopFreq);\r\n let cal_stopbandAttenuationVV = linear_interpolate_mag(frequencyArray, clFreqPoint, magnitudeArray, normStopFreq);\r\n besselTable = stageGroup;\r\n div = passbandFrequency / normPassFreq;\r\n if (cal_stopbandAttenuationVV < stopbandAttenuationVV || i > MAXORDER) {\r\n break;\r\n }\r\n }\r\n\r\n var result = { order: -1, div: div };\r\n\r\n if (besselTable !== null) {\r\n result.order = besselTable.nthOrder;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getOrder(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency) {\r\n var besselJson = this.createBesselTable(passbandFrequency);\r\n var appropriateOrder = this.findAppropriateOrder(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n besselJson,\r\n );\r\n return appropriateOrder.order;\r\n }\r\n\r\n /*This function creates a bessel table, scaled by the user's passband frequency, that can be used to calculate the bessel order*/\r\n createBesselTable(passbandFrequency) {\r\n var stageGroupArray = copy(BesselJson.orders, true);\r\n var result = stageGroupArray.map((stageGroup) => {\r\n stageGroup.stages.forEach((stage) => {\r\n stage.stageFp = stage.stageFp * passbandFrequency;\r\n });\r\n\r\n return stageGroup;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n _getFrequency(passbandFrequency, stopbandFrequency) {\r\n const startFrequency = passbandFrequency / 100;\r\n const stopFrequency = stopbandFrequency * 100;\r\n const pointsPerDecade = 100;\r\n\r\n const result = Frequency.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: stopFrequency,\r\n pointsPerDecade: pointsPerDecade,\r\n }).narrowFrequencyArray;\r\n\r\n return result;\r\n }\r\n\r\n _computeFilterAmplitude(stage, frequencyArray) {\r\n var result = null;\r\n var stageFp = stage.stageFp;\r\n var stageQ = stage.stageQ;\r\n var gain = stage.gain;\r\n\r\n if (stage.orderType === 1) {\r\n result = LowPass.createFirstOrderFilterAmplitude(stageFp, gain, frequencyArray);\r\n } else {\r\n result = LowPass.createSecondOrderFilterAmplitude(stageFp, stageQ, gain, frequencyArray);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _getMagnitudeArray() {}\r\n}\r\n","import BaseFilterResponse from './base-filter-response';\r\nimport Butterworth from './butterworth';\r\nimport Bessel from './bessel';\r\nimport FilterConstants from '../../filter-constants';\r\nimport * as Complex from '../process-data/complex';\r\nimport * as StageUtils from '../utils/stage';\r\n\r\n/**\r\nBessel Butterworth Low Pass Alogorithm\r\nCreated Jan 10, 2013 Matt Duff\r\n\r\nThis function creates a Bessel Butterworth transitional filter.\r\n\r\nIt first calculates the minimum Butterworth order required to meet the customer's requirements. From this order, it then steps \r\nthrough the Bessel table, combining Butterworth and Bessel poles. Once this table is created, it does a brute force\r\nsearch for the minimum order that meets the customer's requirements - just like we do in the Bessel function.\r\n\r\nInput Variables:\r\npassbandAttenuation - Passband attenuation in dB; always a negative number\r\nstopbandAttenuation - Stopband attenuation in dB; always a negative number\r\npassbandFrequency - Passband frequency in Hz\r\nstopbandFrequency - Stopband frequency in Hz\r\nm - number between 0 and 1. Sets ratio of Bessel to Butterworth. 0=all Butterworth 1=all Bessel\r\n\r\noutput is 2D array consisting of\r\n- error object containing errorFlag and errorMessage (which are left blank to be set in a higher level function)\r\n- array of stage information\r\n*/\r\n\r\nexport default class ButterworthBessel extends BaseFilterResponse {\r\n bessel = Bessel.create();\r\n butterworth = Butterworth.create();\r\n name = FilterConstants.responseType.butterworthBessel;\r\n reverse2ndOrderStages(stages) {\r\n stages.reverse();\r\n var lastIndex = stages.length - 1;\r\n if (stages[lastIndex].orderType === 1) {\r\n var firstOrderStage = stages.pop();\r\n stages.unshift(firstOrderStage);\r\n }\r\n\r\n return stages;\r\n }\r\n\r\n /*This function combines 1D butterworth and bessel stages arrays into a 1D butterworthbessel array, according to the ratio, m */\r\n combineBesselandButterworthStage(butterworthStage, besselStage, butterworthBesselRatio) {\r\n var comboPoles = [];\r\n\r\n var complexButterworthInfluence, complexBesselInfluence;\r\n\r\n var complexButterworthPoles = this.fpAndQToPoles(butterworthStage);\r\n var complexBesselPoles = this.fpAndQToPoles(besselStage);\r\n\r\n for (var i = 0; i < complexButterworthPoles.length; i++) {\r\n complexButterworthInfluence = Complex.complexNumberRaisedToPower(\r\n complexButterworthPoles[i],\r\n butterworthBesselRatio,\r\n );\r\n complexBesselInfluence = Complex.complexNumberRaisedToPower(complexBesselPoles[i], 1 - butterworthBesselRatio);\r\n comboPoles[i] = complexButterworthInfluence.mult(complexBesselInfluence);\r\n }\r\n\r\n return this.polesToFpAndQ(butterworthStage, comboPoles);\r\n }\r\n\r\n /*This function takes in the fp and Q information in the stage array and converts it to an array of poles*/\r\n fpAndQToPoles(stage) {\r\n var wo = stage.stageFp * 2 * Math.PI;\r\n var complexPoles;\r\n var complexOne = Complex.createComplex(1, 0);\r\n var real;\r\n\r\n if (stage.orderType === 1) {\r\n complexPoles = [Complex.createComplex(wo, 0)];\r\n }\r\n\r\n if (stage.orderType === 2) {\r\n real = 1 - 4 * stage.stageQ * stage.stageQ;\r\n\r\n var complexUndersqrt = Complex.createComplex(real, 0);\r\n real = (-1 * wo) / (2 * stage.stageQ);\r\n var complexMultiplier = Complex.createComplex(real, 0);\r\n\r\n var complexRoot = Complex.complexNumberRaisedToPower(complexUndersqrt, 0.5); //compute square root\r\n var pole1 = complexMultiplier.mult(complexOne.subs(complexRoot));\r\n var pole2 = complexMultiplier.mult(complexOne.plus(complexRoot));\r\n complexPoles = [pole1, pole2];\r\n }\r\n\r\n return complexPoles;\r\n }\r\n\r\n /*This function takes an array of poles converts it to stage information\r\n Inputs:\r\n stagesTemplate: contains all stage information except for fp and Q (this function will overwrite the fp and Q)\r\n poles: array of complex numbers representing the pole information\r\n Output:\r\n array of stage information\r\n */\r\n polesToFpAndQ(stage, poles) {\r\n var wo, fp, Q;\r\n\r\n if (poles.length === 1) {\r\n wo = poles[0].real;\r\n Q = stage.stageQ;\r\n }\r\n\r\n if (poles.length === 2) {\r\n var complexPolesProduct = poles[0].mult(poles[1]);\r\n var complexRoot = Complex.complexNumberRaisedToPower(complexPolesProduct, 0.5); //compute square root\r\n wo = complexRoot.magnitude();\r\n\r\n var complexPolesSum = poles[0].plus(poles[1]);\r\n var complexQuotient = complexRoot.divide(complexPolesSum);\r\n var complexZero = Complex.createComplex(0, 0);\r\n var complexNegated = complexZero.subs(complexQuotient);\r\n Q = complexNegated.magnitude();\r\n }\r\n\r\n fp = wo / (2 * Math.PI);\r\n stage.stageQ = Q;\r\n stage.stageFp = fp;\r\n\r\n return stage;\r\n }\r\n\r\n lowPass(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency, butterworthBesselRatio) {\r\n var stageGroup = this.getTargetStageGroup(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n butterworthBesselRatio,\r\n );\r\n var result = StageUtils.createTargetStages(stageGroup.stages);\r\n /*reverse 2nd order stage order so it matches LabVIEW. Doesn't really matter, but should make the QA folks more comfortable.*/\r\n //lowPassFilterOutput[1].stages = reverse2ndOrderStages(lowPassFilterOutput[1].stages);\r\n /*Actually doesn't make a difference. Maybe distribute gain function changes order????*/\r\n\r\n return result;\r\n }\r\n\r\n getTargetStageGroup(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n butterworthBesselRatio,\r\n ) {\r\n var besselButterworthTable = this._getBesselButterworthTable(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n butterworthBesselRatio,\r\n );\r\n var orderDiv = this._findAppropriateOrder(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n besselButterworthTable,\r\n );\r\n var result = this.bessel.getTargetStageGroup(orderDiv, besselButterworthTable);\r\n return result;\r\n }\r\n\r\n _findAppropriateOrder(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n besselButterworthTable,\r\n ) {\r\n var orderDiv = this.bessel.findAppropriateOrder(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n besselButterworthTable,\r\n );\r\n return orderDiv;\r\n }\r\n\r\n _getBesselButterworthTable(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n butterworthBesselRatio,\r\n ) {\r\n var besselButterworthTable = [];\r\n\r\n var besselTable = this.bessel.createBesselTable(passbandFrequency);\r\n var tableLength = besselTable.length;\r\n\r\n //figure out Butterworth order and cutoff frequency\r\n var orderNum = this.butterworth.getOrder(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n );\r\n var fp = this.butterworth.calculateButterworthPoleFrequency(passbandAttenuation, orderNum, passbandFrequency);\r\n\r\n var orderCounter = 0;\r\n var stages = [];\r\n\r\n //start counting at Butterworth order, since order of Bessel Butterworth will be this or higher\r\n while (orderCounter + orderNum <= tableLength && orderCounter + orderNum <= FilterConstants.maxOrder) {\r\n var currentOrder = orderCounter + orderNum;\r\n var butterworthStages = this.butterworth.butterworthStagesGivenOrderAndCutoff(currentOrder, fp);\r\n\r\n //now rearrange butterworth array so that lowest Q values in 2nd order functions, so it's just like the bessel array.\r\n butterworthStages = this.reverse2ndOrderStages(butterworthStages);\r\n\r\n //subtract 1 from our count, since order x in the table is at index x-1 (i.e. computer languages start counting from 0)\r\n var besselStages = besselTable[currentOrder - 1].stages;\r\n\r\n for (var i = 0; i < besselStages.length; i++) {\r\n // var besselJsonStageValues = besselStages[i];\r\n stages[i] = this.combineBesselandButterworthStage(\r\n butterworthStages[i],\r\n besselStages[i],\r\n butterworthBesselRatio,\r\n );\r\n }\r\n\r\n besselButterworthTable.push({ nthOrder: currentOrder, stages: stages.slice() });\r\n\r\n orderCounter++;\r\n }\r\n\r\n return besselButterworthTable;\r\n }\r\n\r\n getOrder(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency, butterworthBesselRatio) {\r\n var besselButterworthTable = this._getBesselButterworthTable(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n butterworthBesselRatio,\r\n );\r\n var orderDiv = this._findAppropriateOrder(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n besselButterworthTable,\r\n );\r\n return orderDiv.order;\r\n }\r\n}\r\n","import BaseFilterResponse from './base-filter-response';\r\nimport FilterConstants from '../../filter-constants';\r\nimport MathUtils from '../utils/math';\r\nimport * as StageUtils from '../utils/stage';\r\nimport { filters } from '../../models/filter/filter';\r\n\r\nexport default class Butterworth extends BaseFilterResponse {\r\n name = FilterConstants.responseType.butterworth;\r\n\r\n /**\r\n @function calculateButterworthPoleFrequency\r\n @param passbandAttenuation {int} passband attenuation from the user in dB; always a negative number\r\n @param order {int} returned order from calculate_order function\r\n @param passbandFrequency {int} passband frequency from the user in Hz\r\n @description takes in passband attenuation, order as calculated and the passband frequency to calculate pole frequency\r\n @returns butterworth pole frequency(fp)\r\n */\r\n calculateButterworthPoleFrequency(negPassbandAttenuation, order, passbandFrequency) {\r\n //need positive numbers for formula to work (turn negatives to positive)\r\n const passbandAttenuation = negPassbandAttenuation * -1;\r\n\r\n var first = 0.1 * passbandAttenuation;\r\n var fp = Math.pow(10, first) - 1;\r\n fp = Math.sqrt(fp);\r\n var fpPower = -1 / order;\r\n fp = Math.pow(fp, fpPower);\r\n fp = fp * passbandFrequency;\r\n\r\n return fp;\r\n }\r\n\r\n butterworthStagesGivenOrderAndCutoff(orderNum, fp) {\r\n //Butterworth pole angles of 2nd order stages\r\n var poleAngles = this._calculateButterworthPoleAngles(orderNum);\r\n\r\n //Q of second order stages\r\n var qArray = this._calculateButterworthQ(poleAngles);\r\n\r\n //build array of orders\r\n var loopCount = Math.floor(orderNum / 2);\r\n var result = [];\r\n var stageId = 1;\r\n\r\n //check if the order is odd\r\n\r\n if (orderNum % 2 !== 0) {\r\n var firstOrder = {\r\n stageQ: Math.sqrt(2) / 2,\r\n stageFp: fp,\r\n stageFz: 1,\r\n stageId: stageId,\r\n filter: filters[FilterConstants.filterType.lowPass], //LowPass.create(),\r\n orderType: 1,\r\n gain: 1,\r\n };\r\n result.push(firstOrder);\r\n stageId++;\r\n }\r\n\r\n for (var k = 0; k < loopCount; k++) {\r\n var secondOrder = {\r\n stageQ: qArray[k],\r\n stageFp: fp,\r\n stageFz: 1,\r\n stageId: stageId,\r\n filter: filters[FilterConstants.filterType.lowPass], //LowPass.create(),\r\n orderType: 2,\r\n gain: 1,\r\n };\r\n result.push(secondOrder);\r\n stageId++;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n Butterworth Algorithm\r\n @function Butterworth_lowpass - This is a Butterworth filter algorithm.\r\n @param {int} passbandAttenuation - passband attenuation from the user in dB; always a negative number\r\n @param {int} stopbandAttenuation - stopband attenuation from the user in dB; always a negative number\r\n @param {int} passbandFrequency - passband frequency from the user in Hz\r\n @param {int} stopbandFrequency - stopband frequency from the user in Hz\r\n @description This function calculates the butterworth filter response\r\n @returns {array} stageObjects array of stageObjects containing order,fp,Q,fz, and gain properties\r\n */\r\n lowPass(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency) {\r\n var result = null;\r\n\r\n //find filter order\r\n var orderNum = this.getOrder(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency);\r\n if (orderNum <= FilterConstants.maxOrder) {\r\n //get the 3dB cutoff frequency\r\n var fp = this.calculateButterworthPoleFrequency(passbandAttenuation, orderNum, passbandFrequency);\r\n //now get the stages\r\n var stageValues = this.butterworthStagesGivenOrderAndCutoff(orderNum, fp);\r\n result = StageUtils.createTargetStages(stageValues);\r\n } else {\r\n throw 'Cannot go beyond 5 stages';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n @function getOrder\r\n @param passbandAttenuation {int} passband attenuation in dB; always a negative number\r\n @param stopbandAttenuation {int} stopband attenuation in dB; always a negative number\r\n @param passbandFrequency {int} passband frequency in Hz\r\n @param stopbandFrequency {int} stopband frequency in Hz\r\n @description takes in passband attenuation, stopband attenuation, passband frequency, and stopband frequency to figure out order\r\n @returns butterworth order\r\n */\r\n getOrder(negPassbandAttenuation, negStopbandAttenuation, passbandFrequency, stopbandFrequency) {\r\n //need positive numbers for formula to work (turn negatives to positive)\r\n const passbandAttenuation = negPassbandAttenuation * -1;\r\n const stopbandAttenuation = negStopbandAttenuation * -1;\r\n\r\n var nFractional, order;\r\n var innerNumerator = 0.1 * stopbandAttenuation;\r\n var innerDenominator = 0.1 * passbandAttenuation;\r\n\r\n var innerNumerator1 = Math.pow(10, innerNumerator) - 1;\r\n var innerDenominator1 = Math.pow(10, innerDenominator) - 1;\r\n\r\n var logTermTop = innerNumerator1 / innerDenominator1;\r\n logTermTop = MathUtils.logBaseTen(logTermTop);\r\n\r\n var logTermBottom = stopbandFrequency / passbandFrequency;\r\n\r\n nFractional = 2 * MathUtils.logBaseTen(logTermBottom);\r\n\r\n //Get nFractional\r\n nFractional = logTermTop / nFractional;\r\n\r\n //round nFractional to next integer up to get order\r\n order = Math.ceil(nFractional);\r\n\r\n return order;\r\n }\r\n\r\n /**\r\n @function calculateQ\r\n @param poleAnglesArray {array} poleAngles of 2nd order\r\n @returns Q {array} Q Array\r\n @description calculates Q from thetaK within poleAnglesArray\r\n */\r\n _calculateButterworthQ(poleAnglesArray) {\r\n var resultQ = [];\r\n\r\n //loop through thetaKArray perform QoK = 1/ 2*cos(thetaK)\r\n for (var i = 0; i < poleAnglesArray.length; i++) {\r\n var stepOne = 2 * Math.cos(poleAnglesArray[i]);\r\n var stepTwo = 1 / stepOne;\r\n resultQ.push(stepTwo);\r\n }\r\n\r\n return resultQ;\r\n }\r\n\r\n /**\r\n @function calculatePoleAngles\r\n @param order {int} order of 2nd order stage for butterworth\r\n @returns {array} [order,thetaK]\r\n @description pushes Butterworth pole angles of 2nd order stages\r\n */\r\n _calculateButterworthPoleAngles(order) {\r\n var thetaK,\r\n result = [],\r\n thetaKrad;\r\n\r\n for (var k = 1; k <= Math.floor(order / 2); k++) {\r\n var stepOne = 2 * k + order - 1;\r\n var stepTwo = stepOne / order;\r\n var stepThree = 90 * stepTwo;\r\n var stepFour = stepThree - 180;\r\n thetaK = stepFour;\r\n thetaKrad = thetaK * (Math.PI / 180); // converting thetaK into radians\r\n result.push(thetaKrad);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import BaseFilterResponse from './base-filter-response';\r\nimport MathUtils from '../utils/math';\r\nimport FilterConstants from '../../filter-constants';\r\nimport * as StageUtils from '../utils/stage';\r\n\r\nexport default class Chebyshev extends BaseFilterResponse {\r\n name = FilterConstants.responseType.chebyshev;\r\n\r\n /**\r\n Chebyshev Algorithm\r\n @function Chebyshev_lowpass - This is a Chebyshev filter algorithm.\r\n @param {int} passbandAttenuation - passband attenuation from the user in dB\r\n @param {int} stopbandAttenuation - stopband attenuation from the user in dB\r\n @param {int} passbandFrequency - passband frequency from the user in Hz\r\n @param {int} stopbandFrequency - stopband frequency from the user in Hz\r\n @param {int} passbandRipple - passband ripple from the user in dB\r\n @description This function calculates the chebyshev filter response\r\n @returns {array} stageObjects array of stageObjects containing order,fp,Q,fz, and gain properties\r\n */\r\n lowPass(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency, passbandRipple) {\r\n //get fK\r\n var rippleX = Math.pow(10, 0.1 * passbandRipple) - 1;\r\n var { fripple_k, fK } = this._computefk(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n passbandRipple,\r\n );\r\n\r\n //loop t}hrough fK get closest index >= passbandFrequency\r\n var orderNum = this._getClosestNum(passbandFrequency, fK);\r\n\r\n //get a\r\n var a = this._calculateA(orderNum, rippleX);\r\n\r\n //build magK array\r\n var magK = this._magK(a, orderNum);\r\n\r\n var fp_nominal = fripple_k[orderNum - 1][1] * (passbandFrequency / fK[orderNum - 1]);\r\n //calculate q_K, fp_k build array\r\n var qKfp = this._calculateQ(magK, orderNum, fp_nominal);\r\n\r\n var stageValues = [];\r\n if (orderNum <= FilterConstants.maxOrder) {\r\n //build array of objects\r\n var loopCount = Math.floor(orderNum / 2);\r\n\r\n var stageId = 1;\r\n\r\n var m = Math.floor(orderNum / 2);\r\n\r\n //check if the order is odd\r\n if (orderNum % 2 !== 0) {\r\n var sqrtTwobyTwo = Math.sqrt(2) / 2;\r\n var firstOrder = {\r\n stageQ: sqrtTwobyTwo,\r\n stageFp: qKfp[m][1],\r\n stageFz: 1,\r\n stageId: stageId,\r\n orderType: 1,\r\n gain: 1,\r\n };\r\n stageValues.push(firstOrder);\r\n stageId++;\r\n }\r\n\r\n if (orderNum % 2 !== 0) {\r\n m = m + 1;\r\n }\r\n\r\n for (var k = 0; k < loopCount; k++) {\r\n var secondOrder = {\r\n stageQ: qKfp[m][0],\r\n stageFp: qKfp[m][1],\r\n stageFz: 1,\r\n stageId: stageId,\r\n orderType: 2,\r\n gain: 1,\r\n };\r\n stageValues.push(secondOrder);\r\n stageId++;\r\n m++;\r\n }\r\n }\r\n\r\n var result = StageUtils.createTargetStages(stageValues);\r\n return result;\r\n }\r\n\r\n getOrder(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency, passbandRipple) {\r\n var _computefk = this._computefk(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n passbandRipple,\r\n );\r\n //loop through fK get closest index >= passbandFrequency\r\n var result = this._getClosestNum(passbandFrequency, _computefk.fK);\r\n return result;\r\n }\r\n\r\n /**\r\n @function getClosestValue\r\n @param {int} passbandFrequency - passbandFrequency - passband frequency from the user in db\r\n @param {array} fKArray - array of fK values\r\n @description this function gets the closest arrayIndex >=passbandFrequency\r\n @returns {int} nearestIndex- closest index >= passbandFrequency\r\n */\r\n _getClosestNum(passbandFrequency, fKArray) {\r\n var nearestIndex = null,\r\n neardiff = null;\r\n\r\n for (var x = 0; x < fKArray.length; x++) {\r\n if (fKArray[x] >= passbandFrequency) {\r\n var diff = Math.abs(fKArray[x] - passbandFrequency);\r\n\r\n if (diff <= neardiff || neardiff === null) {\r\n neardiff = diff;\r\n nearestIndex = x + 1;\r\n }\r\n }\r\n }\r\n\r\n return nearestIndex;\r\n }\r\n\r\n _computefk(negPassbandAttenuation, negStopbandAttenuation, passbandFrequency, stopbandFrequency, passbandRipple) {\r\n //need positive numbers for formula to work (turn negatives to positive)\r\n const passbandAttenuation = negPassbandAttenuation * -1;\r\n const stopbandAttenuation = negStopbandAttenuation * -1;\r\n\r\n var rippleX = Math.pow(10, 0.1 * passbandRipple) - 1;\r\n var stopX_odd = Math.pow(10, 0.1 * stopbandAttenuation) - 1;\r\n var passX_odd = Math.pow(10, 0.1 * passbandAttenuation) - 1;\r\n var stopX_even = Math.pow(10, 0.1 * (stopbandAttenuation + passbandRipple)) - 1;\r\n var passX_even = Math.pow(10, 0.1 * (passbandAttenuation + passbandRipple)) - 1;\r\n\r\n //get S_odd\r\n var s_odd = Math.sqrt(stopX_odd / rippleX);\r\n s_odd = MathUtils.aCosh(s_odd);\r\n\r\n //get S_even\r\n var s_even = Math.sqrt(stopX_even / rippleX);\r\n s_even = MathUtils.aCosh(s_even);\r\n\r\n //get P_odd\r\n var p_odd = Math.sqrt(passX_odd / rippleX);\r\n p_odd = MathUtils.aCosh(p_odd);\r\n\r\n //get P_even\r\n var p_even = Math.sqrt(passX_even / rippleX);\r\n p_even = MathUtils.aCosh(p_even);\r\n\r\n //get fripple_k\r\n var fripple_k = this._fRippleK(stopbandFrequency, s_odd, s_even);\r\n\r\n //get fK\r\n var result = this._fK(fripple_k, p_odd, p_even, passbandFrequency);\r\n return { fripple_k: fripple_k, fK: result };\r\n }\r\n\r\n /**\r\n @function fK\r\n @param {array} fripple_k -array of values as calculated in _fRippleK function\r\n @returns {array} f array\r\n @description this function loops through fRipple_k array performs calculations and outputs an fK array\r\n */\r\n _fK(fripple_k, p_odd, p_even) {\r\n var result = [],\r\n stepOne,\r\n stepTwo;\r\n\r\n for (var k = 0; k <= 19; k++) {\r\n //get fripple_k * this.get('math').cosh(p/k)\r\n if (fripple_k[k][0] % 2 === 0) {\r\n stepOne = MathUtils.cosh(p_even / fripple_k[k][0]);\r\n stepTwo = fripple_k[k][1] * stepOne;\r\n }\r\n if (fripple_k[k][0] % 2 !== 0) {\r\n stepOne = MathUtils.cosh(p_odd / fripple_k[k][0]);\r\n stepTwo = fripple_k[k][1] * stepOne;\r\n }\r\n\r\n result.push(stepTwo);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n @function _fRippleK\r\n @param {int} stopbandFrequency - stopband frequency from the user in Hz\r\n @returns {array} [k, stopbandFrequency/cosh(s/k)]\r\n @description this function calculates fripple_k\r\n */\r\n _fRippleK(stopbandFrequency, s_odd, s_even) {\r\n var result = [];\r\n var coshSK;\r\n var stepTwo;\r\n for (var k = 1; k <= 20; k++) {\r\n //if k is even\r\n if (k % 2 === 0) {\r\n coshSK = MathUtils.cosh(s_even / k);\r\n stepTwo = stopbandFrequency / coshSK;\r\n }\r\n if (k % 2 !== 0) {\r\n coshSK = MathUtils.cosh(s_odd / k);\r\n stepTwo = stopbandFrequency / coshSK;\r\n }\r\n\r\n result.push([k, stepTwo]);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n @function magK\r\n @param {int} a value calculated from _calculateA function\r\n @param {int} n orderNum\r\n @returns {array} magK [sqRt(realK^2 + imagK^2),realK] result\r\n @description This function calculates realK (-sinh a sin (180(2k-1)/2n), imagK (cosh a cos (180(2k-1)/2n) and magK (sqrt(realK2+imagK2)\r\n */\r\n _magK(a, n) {\r\n var result = [];\r\n\r\n for (var k = 1; k <= n; k++) {\r\n var stepOne = 2 * k - 1;\r\n var stepTwo = (stepOne / (2 * n)) * Math.PI;\r\n\r\n //stepTwo = stepTwo * (Math.PI / 180);\r\n //get realK\r\n var sinThree = Math.sin(stepTwo);\r\n var sinhFive = -1 * MathUtils.sinh(a) * sinThree;\r\n var realKsqr = sinhFive * sinhFive;\r\n\r\n //get imagK\r\n var imagKThree = Math.cos(stepTwo);\r\n var imagK = MathUtils.cosh(a) * imagKThree;\r\n var imagKsqr = imagK * imagK;\r\n\r\n result.push([Math.sqrt(realKsqr + imagKsqr), sinhFive]);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n @function _calculateA\r\n @param {int} n index number closest to passbandFrequency\r\n @param {int} rippleX passband ripple supplied by user\r\n @returns {int} result of 1/n asinh(1/sqRt(rippleX)\r\n */\r\n _calculateA(n, rippleX) {\r\n var a = MathUtils.asinh(1 / Math.sqrt(rippleX));\r\n a = (1 / n) * a;\r\n\r\n return a;\r\n }\r\n\r\n /**\r\n @function _calculateQ\r\n @param {array} magK result of magK function\r\n @param {array} realK result of realK function\r\n @param {int} n index number closest to passbandFrequency\r\n @returns {array} [qK, fp_k] result\r\n */\r\n _calculateQ(magK, n, fp_nominal) {\r\n var result = [];\r\n\r\n for (var k = 0; k < magK.length; k++) {\r\n var qK = magK[k][0] / (-2 * magK[k][1]);\r\n\r\n var fp_K = magK[k][0] * fp_nominal;\r\n\r\n result.push([qK, fp_K]);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport Chebyshev from './chebyshev';\r\nimport Butterworth from './butterworth';\r\nimport Bessel from './bessel';\r\nimport ButterworthBessel from './butterworth-bessel';\r\n\r\nexport default class FilterResponse extends EmberObject {\r\n selectedResponseType;\r\n @computed('selectedResponseType') get instance() {\r\n var selectedResponseType = this.selectedResponseType;\r\n var result = Butterworth.create();\r\n if (selectedResponseType === FilterConstants.responseType.chebyshev) {\r\n result = Chebyshev.create();\r\n } else if (selectedResponseType === FilterConstants.responseType.bessel) {\r\n result = Bessel.create();\r\n } else if (selectedResponseType === FilterConstants.responseType.butterworthBessel) {\r\n result = ButterworthBessel.create();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('instance') get name() {\r\n return this.instance.name;\r\n }\r\n\r\n lowPass(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency, filterResponseValue) {\r\n var instance = this.instance;\r\n var result = instance.lowPass(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n filterResponseValue,\r\n );\r\n return result;\r\n }\r\n\r\n getOrder(passbandAttenuation, stopbandAttenuation, passbandFrequency, stopbandFrequency, filterResponseValue) {\r\n var instance = this.instance;\r\n var result = instance.getOrder(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n filterResponseValue,\r\n );\r\n return result;\r\n }\r\n\r\n getNumberOfStages(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n filterResponseValue,\r\n ) {\r\n var instance = this.instance;\r\n var result = instance.getNumberOfStages(\r\n passbandAttenuation,\r\n stopbandAttenuation,\r\n passbandFrequency,\r\n stopbandFrequency,\r\n filterResponseValue,\r\n );\r\n return result;\r\n }\r\n}\r\n","/**\r\n * high-pass.ts describes a high-pass filter meeting the provided specifications.\r\n * It provides all the methods promised by `FilterSignature`.\r\n * It uses wide-band or narrow-band approaches, depending on how wide the passband is.\r\n * In a narrow-band implementation, each stage helps shape both skirts.\r\n * Like low-pass or high-pass circuits, a narrow-band band-pass filter can only have five stages.\r\n * In contrast, a wide-band implementation uses a combination of high-pass and low-pass stages to shape the skirts independently.\r\n * A wide-band filter can have up to six stages, three for each skirt.\r\n */\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport WideBand from './band-pass/wide-band';\r\nimport NarrowBand from './band-pass/narrow-band';\r\nimport FrequencyRange from '../process-data/frequency';\r\nimport MathUtils from '../utils/math';\r\nimport { Complex, createComplex } from '../process-data/complex';\r\nimport { createTimeAxis } from '../formulas/time-axis';\r\nimport { SpecificationParameters, FilterSignature, FilterStage, StepResponse } from './filter';\r\n\r\nexport default {\r\n get name(): string {\r\n return FilterConstants.filterType.bandPass;\r\n },\r\n\r\n getStages(specificationParameters: SpecificationParameters): FilterStage[] {\r\n let stages = [];\r\n if (2.5 * specificationParameters.centerFrequency < specificationParameters.passbandFrequency) {\r\n stages = WideBand.getStages(specificationParameters);\r\n } else {\r\n stages = NarrowBand.getStages(specificationParameters);\r\n }\r\n\r\n const stageLetterArray = FilterConstants.stageLetter;\r\n const result = stages.map((item: FilterStage, index: number) => {\r\n item.stageLetter = stageLetterArray[index] ?? '';\r\n item.stageId = index + 1;\r\n\r\n return item;\r\n });\r\n\r\n return result;\r\n },\r\n\r\n getOrder(specificationParameters: SpecificationParameters): number {\r\n let result = -1;\r\n if (2.5 * specificationParameters.centerFrequency < specificationParameters.passbandFrequency) {\r\n result = WideBand.getOrder(specificationParameters);\r\n } else {\r\n result = NarrowBand.getOrder(specificationParameters);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n getNumberOfStages(specificationParameters: SpecificationParameters): number {\r\n let result = -1;\r\n if (2.5 * specificationParameters.centerFrequency < specificationParameters.passbandFrequency) {\r\n result = WideBand.getNumberOfStages(specificationParameters);\r\n } else {\r\n result = NarrowBand.getNumberOfStages(specificationParameters);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n getFilterFrequencyRange(\r\n stopbandFrequency: number,\r\n _passbandFrequency?: number,\r\n centerFrequency?: number,\r\n ): FrequencyRange {\r\n const centerFreq = centerFrequency ?? 0;\r\n const startFrequency =\r\n Math.sqrt(stopbandFrequency * stopbandFrequency + centerFreq * centerFreq) - stopbandFrequency;\r\n const stopFrequency = (centerFreq * centerFreq) / startFrequency;\r\n const pointsPerDecade = 200 / MathUtils.logBaseTen(stopFrequency / startFrequency);\r\n const decade = Math.log10(stopFrequency) - Math.log10(startFrequency);\r\n\r\n const result = FrequencyRange.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: stopFrequency,\r\n pointsPerDecade: pointsPerDecade,\r\n decade: decade,\r\n });\r\n return result;\r\n },\r\n\r\n getActualStageSpecFrequency(frequencyArray: FrequencyRange): FrequencyRange {\r\n const startFrequency = frequencyArray.startFrequency;\r\n const stopFrequency = frequencyArray.stopFrequency;\r\n const pointsPerDecade = 100 / MathUtils.logBaseTen(stopFrequency / startFrequency);\r\n\r\n const result = FrequencyRange.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: stopFrequency,\r\n pointsPerDecade: pointsPerDecade,\r\n });\r\n return result;\r\n },\r\n\r\n createFirstOrderFilterAmplitude(): void {\r\n throw 'No implementation for band pass first order stages';\r\n },\r\n\r\n createSecondOrderFilterAmplitude(fp: number, Q: number, gain: number, frequencyArray: number[]): Complex[] {\r\n return frequencyArray.map((frequency) => {\r\n const f = frequency;\r\n const complexGain = createComplex(gain, 0);\r\n const complexNum = complexGain.mult(createComplex(0, (f * fp) / Q));\r\n const complexDenom = createComplex(fp * fp - f * f, (f * fp) / Q);\r\n const res = complexNum.divide(complexDenom);\r\n\r\n return res;\r\n });\r\n },\r\n\r\n createTimeAxis(passbandFrequency: number, stopbandFrequency: number): number[] {\r\n const fCutOff = Math.sqrt(passbandFrequency * stopbandFrequency) / 5;\r\n return createTimeAxis(fCutOff);\r\n },\r\n\r\n setupFirstOrderStepResponse(): void {\r\n throw 'No implementation for band pass first order stages';\r\n },\r\n\r\n setupSecondOrderStepResponse(stageFp: number, stageQ: number, gain: number): StepResponse {\r\n const result = { w0: stageFp * 2 * Math.PI, Q: stageQ, a: 0, b: 0, c: 0 };\r\n result.b = (gain * result.w0) / result.Q;\r\n return result;\r\n },\r\n\r\n getImpulseArrayFirstElement(): number {\r\n return 0;\r\n },\r\n\r\n getSecondOrderStageImplementation(stageFp: number, stageQ: number, gain: number): string {\r\n let result = FilterConstants.implementationType.deliyannisFriend;\r\n if (\r\n stageFp * gain * (0.5 + stageQ) > FilterConstants.Limits.INDUCTOR_PREFERRED_FREQ_X_GAIN_X_Q &&\r\n stageFp > FilterConstants.Limits.INDUCTOR_ALLOWED_FREQ\r\n ) {\r\n result = FilterConstants.implementationType.inductor;\r\n }\r\n\r\n return result;\r\n },\r\n\r\n //getMaxFrequency used in voltage range calculations. We don't look at magnitudes beyond this frequency for voltage range because we don't care if they get clipped.\r\n getMaxFrequency(stopbandFrequency: number, _frequencyArray?: number[], stageFp?: number): number {\r\n const fp = stageFp ?? 0;\r\n return (stopbandFrequency + Math.sqrt(stopbandFrequency * stopbandFrequency + 4 * fp * fp)) / 2;\r\n },\r\n\r\n getAdcFrequency(stopFrequency: number): number {\r\n return stopFrequency;\r\n },\r\n} as FilterSignature;\r\n","import FilterResponse from 'filter-wizard/models/filter-response/filter-response';\r\nimport FilterConstants from '../../../filter-constants';\r\nimport SecondOrderStage from '../../stages/second-order';\r\nimport { SpecificationParameters, FilterStage } from '../filter';\r\n\r\nexport default {\r\n getStages(specificationParameters: SpecificationParameters): FilterStage[] {\r\n const filterResponse = FilterResponse.create({ selectedResponseType: specificationParameters.filterResponseType });\r\n\r\n const stages = filterResponse.lowPass(\r\n specificationParameters.passbandAttenuation,\r\n specificationParameters.stopbandAttenuation,\r\n 1,\r\n this._getFStop(specificationParameters.passbandFrequency, specificationParameters.stopbandFrequency),\r\n specificationParameters.filterResponseValue,\r\n );\r\n const qUser = specificationParameters.centerFrequency / specificationParameters.passbandFrequency;\r\n const narrowBandStages = stages.map((item: SecondOrderStage) => {\r\n let resultStage = null;\r\n if (item.order === 2) {\r\n // returns an array of two elements\r\n resultStage = this.narrowBandSecondOrder(item, qUser, specificationParameters.centerFrequency);\r\n } else {\r\n // returns a single element\r\n resultStage = this.narrowBandFirstOrder(item, qUser, specificationParameters.centerFrequency);\r\n }\r\n\r\n return resultStage;\r\n });\r\n\r\n // narrowBandStages is a mix of one element and an array of two elements.\r\n // to get the narrow band, it should be flattened.\r\n const result: FilterStage[] = [].concat(...narrowBandStages);\r\n\r\n return result.map((stage: FilterStage) => {\r\n stage.stageType = FilterConstants.filterType.bandPass;\r\n stage.stageFz = 0;\r\n return stage;\r\n });\r\n },\r\n\r\n getOrder(specificationParameters: SpecificationParameters): number {\r\n const filterResponse = FilterResponse.create({ selectedResponseType: specificationParameters.filterResponseType });\r\n const order = filterResponse.getOrder(\r\n specificationParameters.passbandAttenuation,\r\n specificationParameters.stopbandAttenuation,\r\n 1,\r\n this._getFStop(specificationParameters.passbandFrequency, specificationParameters.stopbandFrequency),\r\n specificationParameters.filterResponseValue,\r\n );\r\n return order * 2;\r\n },\r\n\r\n getNumberOfStages(specificationParameters: SpecificationParameters): number {\r\n const order = this.getOrder(specificationParameters);\r\n return order / 2;\r\n },\r\n\r\n narrowBandFirstOrder(stage: SecondOrderStage, qUser: number, centerFrequency: number): SecondOrderStage {\r\n return SecondOrderStage.create({\r\n stage: stage.order,\r\n stageQ: qUser / stage.stageFp,\r\n stageFp: centerFrequency,\r\n gain: stage.gain,\r\n stageFz: 0,\r\n });\r\n },\r\n\r\n narrowBandSecondOrder(stage: SecondOrderStage, qUser: number, centerFrequency: number): SecondOrderStage[] {\r\n const a = stage.stageFp / stage.stageQ;\r\n const b = stage.stageFp * stage.stageFp;\r\n const plusTerm = (2 * qUser) / a + b / (2 * a * qUser);\r\n const q = Math.sqrt((qUser / a) * (plusTerm + Math.sqrt(plusTerm * plusTerm - 1)));\r\n const f1 = (a * q) / (2 * qUser) + 0.5 * Math.sqrt(b / (qUser * qUser) - 1 / (q * q));\r\n\r\n const f2 = 1 / f1;\r\n\r\n const fp = centerFrequency * f1;\r\n const fpNext = centerFrequency * f2;\r\n\r\n const oneByf1minusf1 = 1 / f1 - f1;\r\n const oneByf2minusf2 = 1 / f2 - f2;\r\n\r\n const gain = Math.sqrt(1 + q * q * oneByf1minusf1 * oneByf1minusf1);\r\n const gainNext = Math.sqrt(1 + q * q * oneByf2minusf2 * oneByf2minusf2);\r\n\r\n const newStage = SecondOrderStage.create({ stage: stage.order, stageQ: q, stageFp: fp, gain: gain, stageFz: 0 });\r\n const nextStage = SecondOrderStage.create({\r\n stage: stage.order,\r\n stageQ: q,\r\n stageFp: fpNext,\r\n gain: gainNext,\r\n stageFz: 0,\r\n });\r\n\r\n return [newStage, nextStage];\r\n },\r\n\r\n // returns stopband frequency\r\n _getFStop(passbandFrequency: number, stopbandFrequency: number): number {\r\n return stopbandFrequency / passbandFrequency;\r\n },\r\n};\r\n","import FilterConstants from 'filter-wizard/filter-constants';\r\nimport { FilterType, filters, SpecificationParameters, FilterStage } from '../filter';\r\n\r\nexport default {\r\n getStages(specificationParameters: SpecificationParameters): FilterStage[] {\r\n const lowPassStages = this.computeWideBandLowPass(specificationParameters);\r\n const highPassStages = this.computeWideBandHighPass(specificationParameters);\r\n\r\n let result = lowPassStages.concat(highPassStages);\r\n result = result.map((stage: FilterStage) => {\r\n stage.stageFz = 0;\r\n return stage;\r\n });\r\n return result;\r\n },\r\n\r\n getOrder(specificationParameters: SpecificationParameters): number {\r\n const fPassLowPass = this._getFPassLowPass(\r\n specificationParameters.passbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n const fStopLowPass = this._getFStopLowPass(\r\n specificationParameters.stopbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n\r\n const lowPass = filters[FilterConstants.filterType.lowPass as keyof FilterType];\r\n const lowPassOrder = lowPass.getOrder({\r\n filterResponseType: specificationParameters.filterResponseType,\r\n passbandFrequency: fPassLowPass,\r\n stopbandFrequency: fStopLowPass,\r\n passbandAttenuation: specificationParameters.passbandAttenuation,\r\n stopbandAttenuation: specificationParameters.stopbandAttenuation,\r\n centerFrequency: specificationParameters.centerFrequency,\r\n filterResponseValue: specificationParameters.filterResponseValue,\r\n });\r\n\r\n const fPassHighPass = this._getFPassHighPass(\r\n specificationParameters.passbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n const fStopHighPass = this._getFStopHighPass(\r\n specificationParameters.stopbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n\r\n const highPass = filters[FilterConstants.filterType.highPass as keyof FilterType];\r\n const highPassOrder = highPass.getOrder({\r\n filterResponseType: specificationParameters.filterResponseType,\r\n passbandFrequency: fPassHighPass,\r\n stopbandFrequency: fStopHighPass,\r\n passbandAttenuation: specificationParameters.passbandAttenuation,\r\n stopbandAttenuation: specificationParameters.stopbandAttenuation,\r\n centerFrequency: specificationParameters.centerFrequency,\r\n filterResponseValue: specificationParameters.filterResponseValue,\r\n });\r\n\r\n return lowPassOrder + highPassOrder;\r\n },\r\n\r\n getNumberOfStages(specificationParameters: SpecificationParameters): number {\r\n const fPassLowPass = this._getFPassLowPass(\r\n specificationParameters.passbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n const fStopLowPass = this._getFStopLowPass(\r\n specificationParameters.stopbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n\r\n const lowPass = filters[FilterConstants.filterType.lowPass as keyof FilterType];\r\n const lowPassOrder = lowPass.getNumberOfStages({\r\n filterResponseType: specificationParameters.filterResponseType,\r\n passbandFrequency: fPassLowPass,\r\n stopbandFrequency: fStopLowPass,\r\n passbandAttenuation: specificationParameters.passbandAttenuation,\r\n stopbandAttenuation: specificationParameters.stopbandAttenuation,\r\n centerFrequency: specificationParameters.centerFrequency,\r\n filterResponseValue: specificationParameters.filterResponseValue,\r\n });\r\n\r\n const fPassHighPass = this._getFPassHighPass(\r\n specificationParameters.passbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n const fStopHighPass = this._getFStopHighPass(\r\n specificationParameters.stopbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n\r\n const highPass = filters[FilterConstants.filterType.highPass as keyof FilterType];\r\n const highPassOrder = highPass.getNumberOfStages({\r\n filterResponseType: specificationParameters.filterResponseType,\r\n passbandFrequency: fPassHighPass,\r\n stopbandFrequency: fStopHighPass,\r\n passbandAttenuation: specificationParameters.passbandAttenuation,\r\n stopbandAttenuation: specificationParameters.stopbandAttenuation,\r\n centerFrequency: specificationParameters.centerFrequency,\r\n filterResponseValue: specificationParameters.filterResponseValue,\r\n });\r\n return lowPassOrder + highPassOrder;\r\n },\r\n\r\n computeWideBandLowPass(specificationParameters: SpecificationParameters): FilterStage[] {\r\n const fPass = this._getFPassLowPass(\r\n specificationParameters.passbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n const fStop = this._getFStopLowPass(\r\n specificationParameters.stopbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n\r\n const lowPass = filters[FilterConstants.filterType.lowPass as keyof FilterType];\r\n const result = lowPass.getStages({\r\n filterResponseType: specificationParameters.filterResponseType,\r\n passbandFrequency: fPass,\r\n stopbandFrequency: fStop,\r\n passbandAttenuation: specificationParameters.passbandAttenuation,\r\n stopbandAttenuation: specificationParameters.stopbandAttenuation,\r\n centerFrequency: specificationParameters.centerFrequency,\r\n filterResponseValue: specificationParameters.filterResponseValue,\r\n });\r\n\r\n return result.map((stage: FilterStage) => {\r\n stage.filter = lowPass;\r\n return stage;\r\n });\r\n },\r\n\r\n computeWideBandHighPass(specificationParameters: SpecificationParameters): FilterStage[] {\r\n const fPass = this._getFPassHighPass(\r\n specificationParameters.passbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n const fStop = this._getFStopHighPass(\r\n specificationParameters.stopbandFrequency,\r\n specificationParameters.centerFrequency,\r\n );\r\n\r\n const highPass = filters[FilterConstants.filterType.highPass as keyof FilterType];\r\n const result = highPass.getStages({\r\n filterResponseType: specificationParameters.filterResponseType,\r\n passbandFrequency: fPass,\r\n stopbandFrequency: fStop,\r\n passbandAttenuation: specificationParameters.passbandAttenuation,\r\n stopbandAttenuation: specificationParameters.stopbandAttenuation,\r\n centerFrequency: specificationParameters.centerFrequency,\r\n filterResponseValue: specificationParameters.filterResponseValue,\r\n });\r\n\r\n return result.map((stage) => {\r\n stage.filter = highPass;\r\n return stage;\r\n });\r\n },\r\n\r\n // returns low pass passband frequency\r\n _getFPassLowPass(passbandFrequency: number, centerFrequency: number): number {\r\n return this._getFPass(passbandFrequency, centerFrequency, 1);\r\n },\r\n\r\n // returns high pass passband frequency\r\n _getFPassHighPass(passbandFrequency: number, centerFrequency: number): number {\r\n return this._getFPass(passbandFrequency, centerFrequency, -1);\r\n },\r\n\r\n // returns passband frequency\r\n _getFPass(passbandFrequency: number, centerFrequency: number, multiplier: number): number {\r\n return (\r\n (multiplier * passbandFrequency +\r\n Math.sqrt(passbandFrequency * passbandFrequency + 4 * centerFrequency * centerFrequency)) /\r\n 2\r\n );\r\n },\r\n\r\n // returns low pass stopband frequency\r\n _getFStopLowPass(stopbandFrequency: number, centerFrequency: number): number {\r\n return this._getFStop(stopbandFrequency, centerFrequency, 1);\r\n },\r\n\r\n // returns high pass stopband frequency\r\n _getFStopHighPass(stopbandFrequency: number, centerFrequency: number): number {\r\n return this._getFStop(stopbandFrequency, centerFrequency, -1);\r\n },\r\n\r\n // returns stopband frequency\r\n _getFStop(stopbandFrequency: number, centerFrequency: number, multipler: number): number {\r\n return (\r\n (multipler * stopbandFrequency +\r\n Math.sqrt(stopbandFrequency * stopbandFrequency + 4 * centerFrequency * centerFrequency)) /\r\n 2\r\n );\r\n },\r\n};\r\n","import LowPass from '../../models/filter/low-pass';\r\nimport HighPass from '../../models/filter/high-pass';\r\nimport BandPass from '../../models/filter/band-pass';\r\nimport { Complex } from '../process-data/complex';\r\nimport FrequencyRange from '../process-data/frequency';\r\n\r\n/**\r\n * Where code knows which filter it wants, it can import that filter and use it directly.\r\n * The FilterType interface and filters object permit using a variable representing the type of filter.\r\n * ```\r\n * filters[chosenFilterType].getStages(...)\r\n * ```\r\n */\r\nexport interface FilterType {\r\n lowPass: typeof LowPass;\r\n highPass: typeof HighPass;\r\n bandPass: typeof BandPass;\r\n}\r\n\r\nexport const filters: FilterType = {\r\n get highPass() {\r\n return HighPass;\r\n },\r\n get bandPass() {\r\n return BandPass;\r\n },\r\n get lowPass() {\r\n return LowPass;\r\n },\r\n};\r\n\r\n/**\r\n * `FilterStage` is the returned value that describes a stage of a filter.\r\n */\r\nexport type FilterStage = {\r\n filter: typeof LowPass | typeof HighPass | typeof BandPass;\r\n stageType: string;\r\n stageLetter: string;\r\n stageFp: number;\r\n stageFz: number;\r\n stageId: number;\r\n};\r\n\r\n/**\r\n * `SpecificationParameters` collects data passed into a filter to perform various calculations\r\n */\r\nexport type SpecificationParameters = {\r\n filterResponseType: string;\r\n passbandFrequency: number;\r\n stopbandFrequency: number;\r\n passbandAttenuation: number;\r\n stopbandAttenuation: number;\r\n centerFrequency: number;\r\n filterResponseValue: number;\r\n};\r\n\r\n/**\r\n * The step response data returned by the `create{First/Second}OrderStepResponse` filter methods.\r\n */\r\nexport type StepResponse = {\r\n w0: number;\r\n Q: number;\r\n a: number;\r\n b: number;\r\n c: number;\r\n};\r\n\r\n/**\r\n * `FilterSignature` is the set of methods that each of the filters deliver\r\n */\r\nexport interface FilterSignature {\r\n get name(): string;\r\n getStages: (specificationParameters: SpecificationParameters) => FilterStage[];\r\n getOrder: (specificationParameters: SpecificationParameters) => number;\r\n getNumberOfStages: (specificationParameters: SpecificationParameters) => number;\r\n getFilterFrequencyRange: (\r\n stopbandFrequency: number,\r\n passbandFrequency?: number,\r\n centerFrequency?: number,\r\n ) => FrequencyRange;\r\n getActualStageSpecFrequency: (frequencyArray: FrequencyRange | number) => FrequencyRange;\r\n createFirstOrderFilterAmplitude: (fp?: number, gain?: number, frequencyArray?: number[]) => Complex[] | void;\r\n createSecondOrderFilterAmplitude: (fp: number, Q: number, gain: number, frequencyArray: number[]) => Complex[];\r\n createTimeAxis: (passbandFrequency: number, stopbandFrequency?: number) => number[];\r\n setupFirstOrderStepResponse: (stageFp?: number, gain?: number) => StepResponse | void;\r\n setupSecondOrderStepResponse: (stageFp: number, stageQ: number, gain: number) => StepResponse;\r\n getImpulseArrayFirstElement: (gain?: number) => number;\r\n getSecondOrderStageImplementation: (stageFp?: number, stageQ?: number, gain?: number) => string;\r\n getMaxFrequency: (stopbandFrequency: number, frequencyArray?: number[], stageFp?: number) => number;\r\n getAdcFrequency: (stopFrequency: number) => number;\r\n}\r\n","/**\r\n * high-pass.ts describes a high-pass filter meeting the provided specifications.\r\n * It provides all the methods promised by `FilterSignature`.\r\n */\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport FrequencyRange from '../process-data/frequency';\r\nimport { Complex, createComplex } from '../process-data/complex';\r\nimport { createTimeAxis } from '../formulas/time-axis';\r\nimport FilterResponse from '../filter-response/filter-response';\r\nimport { SpecificationParameters, FilterSignature, FilterStage, StepResponse } from './filter';\r\n\r\nexport default {\r\n get name(): string {\r\n return FilterConstants.filterType.highPass;\r\n },\r\n\r\n getStages(specificationParameters: SpecificationParameters): FilterStage[] {\r\n const filterResponse = FilterResponse.create({ selectedResponseType: specificationParameters.filterResponseType });\r\n const stages = filterResponse.lowPass(\r\n specificationParameters.passbandAttenuation,\r\n specificationParameters.stopbandAttenuation,\r\n 1,\r\n _getFStop(specificationParameters.passbandFrequency, specificationParameters.stopbandFrequency),\r\n specificationParameters.filterResponseValue,\r\n );\r\n const stageLetterArray = FilterConstants.stageLetter;\r\n\r\n return stages.map((item: FilterStage, index: number) => {\r\n item.stageType = FilterConstants.filterType.highPass;\r\n item.stageLetter = stageLetterArray[index] ?? '';\r\n item.stageFp = specificationParameters.passbandFrequency / item.stageFp;\r\n item.stageFz = 0;\r\n\r\n return item;\r\n });\r\n },\r\n\r\n getOrder(specificationParameters: SpecificationParameters): number {\r\n const filterResponse = FilterResponse.create({ selectedResponseType: specificationParameters.filterResponseType });\r\n\r\n return filterResponse.getOrder(\r\n specificationParameters.passbandAttenuation,\r\n specificationParameters.stopbandAttenuation,\r\n 1,\r\n _getFStop(specificationParameters.passbandFrequency, specificationParameters.stopbandFrequency),\r\n specificationParameters.filterResponseValue,\r\n );\r\n },\r\n\r\n getNumberOfStages(specificationParameters: SpecificationParameters): number {\r\n const filterResponse = FilterResponse.create({ selectedResponseType: specificationParameters.filterResponseType });\r\n\r\n return filterResponse.getNumberOfStages(\r\n specificationParameters.passbandAttenuation,\r\n specificationParameters.stopbandAttenuation,\r\n 1,\r\n _getFStop(specificationParameters.passbandFrequency, specificationParameters.stopbandFrequency),\r\n specificationParameters.filterResponseValue,\r\n );\r\n },\r\n\r\n getFilterFrequencyRange(stopbandFrequency: number, passbandFrequency: number): FrequencyRange {\r\n const startFrequency = stopbandFrequency / 10;\r\n const stopFrequency = passbandFrequency * 1000;\r\n const decade = Math.log10(stopFrequency) - Math.log10(startFrequency);\r\n\r\n const result = FrequencyRange.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: stopFrequency,\r\n pointsPerDecade: 100,\r\n decade: decade,\r\n });\r\n\r\n return result;\r\n },\r\n\r\n getActualStageSpecFrequency(loopFp: number): FrequencyRange {\r\n const startFrequency = loopFp / 5;\r\n const stopFrequency = loopFp * 2;\r\n\r\n const result = FrequencyRange.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: stopFrequency,\r\n pointsPerDecade: 50,\r\n });\r\n\r\n return result;\r\n },\r\n\r\n createFirstOrderFilterAmplitude(fp: number, gain: number, frequencyArray: number[]): Complex[] {\r\n return frequencyArray.map((frequency) => {\r\n const complexGain = createComplex(gain, 0);\r\n const complexNum = createComplex(0, (complexGain.real * frequency) / fp);\r\n const res = complexNum.divide(createComplex(1, frequency / fp));\r\n return res;\r\n });\r\n },\r\n\r\n createSecondOrderFilterAmplitude(fp: number, Q: number, gain: number, frequencyArray: number[]): Complex[] {\r\n return frequencyArray.map((frequency) => {\r\n const complexGain = createComplex(gain, 0);\r\n const complexDenom = createComplex(\r\n (fp * fp - frequency * frequency) / (-1 * frequency * frequency),\r\n (frequency * fp) / Q / (-1 * frequency * frequency),\r\n );\r\n const res = complexGain.divide(complexDenom);\r\n\r\n return res;\r\n });\r\n },\r\n\r\n createTimeAxis(passbandFrequency: number): number[] {\r\n return createTimeAxis((passbandFrequency * 10) / 10);\r\n },\r\n\r\n setupFirstOrderStepResponse(stageFp: number, gain: number): StepResponse {\r\n return { w0: stageFp * 2 * Math.PI, Q: 0, c: 0, a: 0, b: -1 * gain };\r\n },\r\n\r\n setupSecondOrderStepResponse(stageFp: number, stageQ: number, gain: number): StepResponse {\r\n return { w0: stageFp * 2 * Math.PI, Q: stageQ, a: gain, b: 0, c: 0 };\r\n },\r\n\r\n getImpulseArrayFirstElement(gain: number): number {\r\n return gain;\r\n },\r\n\r\n getSecondOrderStageImplementation(): string {\r\n // TODO: relax restriction and make the inductor implementation for high pass work properly one day when and if it comes to it\r\n // if (\r\n // stageFp * gain * (0.5 + stageQ) > FilterConstants.Limits.INDUCTOR_PREFERRED_FREQ_X_GAIN_X_Q &&\r\n // stageFp > FilterConstants.Limits.INDUCTOR_ALLOWED_FREQ\r\n // ) {\r\n // result = FilterConstants.implementationType.inductor;\r\n // }\r\n\r\n return FilterConstants.implementationType.sallenKey;\r\n },\r\n\r\n //getMaxFrequency used in voltage range calculations. We don't look at magnitudes beyond this frequency for voltage range because we don't care if they get clipped.\r\n getMaxFrequency(_stopbandFrequency: number, frequencyArray: number[]): number {\r\n return Math.max(...frequencyArray);\r\n },\r\n\r\n getAdcFrequency(stopFrequency: number): number {\r\n return stopFrequency / 10;\r\n },\r\n} as FilterSignature;\r\n\r\nfunction _getFStop(passbandFrequency: number, stopbandFrequency: number): number {\r\n return passbandFrequency / stopbandFrequency;\r\n}\r\n","/**\r\n * low-pass.ts describes a low-pass filter meeting the provided specifications.\r\n * It provides all the methods promised by `FilterSignature`.\r\n */\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport FrequencyRange from '../process-data/frequency';\r\nimport { Complex, createComplex } from '../process-data/complex';\r\nimport { createTimeAxis } from '../formulas/time-axis';\r\nimport FilterResponse from '../filter-response/filter-response';\r\nimport { SpecificationParameters, FilterSignature, FilterStage, StepResponse } from './filter';\r\n\r\nexport default {\r\n get name(): string {\r\n return FilterConstants.filterType.lowPass;\r\n },\r\n\r\n getStages(specificationParameters: SpecificationParameters): FilterStage[] {\r\n const filterResponse = FilterResponse.create({ selectedResponseType: specificationParameters.filterResponseType });\r\n const stages = filterResponse.lowPass(\r\n specificationParameters.passbandAttenuation,\r\n specificationParameters.stopbandAttenuation,\r\n specificationParameters.passbandFrequency,\r\n specificationParameters.stopbandFrequency,\r\n specificationParameters.filterResponseValue,\r\n );\r\n\r\n return stages.map((item: FilterStage, index: number) => {\r\n item.stageType = FilterConstants.filterType.lowPass;\r\n item.stageLetter = FilterConstants.stageLetter[index] ?? '';\r\n\r\n return item;\r\n });\r\n },\r\n\r\n getOrder(specificationParameters: SpecificationParameters): number {\r\n const filterResponse = FilterResponse.create({ selectedResponseType: specificationParameters.filterResponseType });\r\n return filterResponse.getOrder(\r\n specificationParameters.passbandAttenuation,\r\n specificationParameters.stopbandAttenuation,\r\n specificationParameters.passbandFrequency,\r\n specificationParameters.stopbandFrequency,\r\n specificationParameters.filterResponseValue,\r\n );\r\n },\r\n\r\n getNumberOfStages(specificationParameters: SpecificationParameters): number {\r\n const filterResponse = FilterResponse.create({ selectedResponseType: specificationParameters.filterResponseType });\r\n return filterResponse.getNumberOfStages(\r\n specificationParameters.passbandAttenuation,\r\n specificationParameters.stopbandAttenuation,\r\n specificationParameters.passbandFrequency,\r\n specificationParameters.stopbandFrequency,\r\n specificationParameters.filterResponseValue,\r\n );\r\n },\r\n\r\n getFilterFrequencyRange(stopbandFrequency: number, passbandFrequency: number): FrequencyRange {\r\n const startFrequency = passbandFrequency / 10;\r\n const stopFrequency = stopbandFrequency * 10;\r\n const decade = Math.log10(stopFrequency) - Math.log10(startFrequency);\r\n\r\n const result = FrequencyRange.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: stopFrequency,\r\n pointsPerDecade: 100,\r\n decade: decade,\r\n });\r\n\r\n return result;\r\n },\r\n\r\n getActualStageSpecFrequency(loopFp: number): FrequencyRange {\r\n const startFrequency = loopFp / 5;\r\n const stopFrequency = loopFp * 2;\r\n\r\n const result = FrequencyRange.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: stopFrequency,\r\n pointsPerDecade: 50,\r\n });\r\n\r\n return result;\r\n },\r\n\r\n createFirstOrderFilterAmplitude(fp: number, gain: number, frequencyArray: number[]): Complex[] {\r\n return frequencyArray.map((frequency) => {\r\n const complexGain = createComplex(gain, 0);\r\n const complexDenom = createComplex(1, frequency / fp);\r\n return complexGain.divide(complexDenom);\r\n });\r\n },\r\n\r\n createSecondOrderFilterAmplitude(fp: number, Q: number, gain: number, frequencyArray: number[]): Complex[] {\r\n return frequencyArray.map((frequency) => {\r\n const complexGain = createComplex(gain, 0);\r\n const complexDenom = createComplex(\r\n (fp * fp - frequency * frequency) / (fp * fp),\r\n (frequency * fp) / Q / (fp * fp),\r\n );\r\n return complexGain.divide(complexDenom);\r\n });\r\n },\r\n\r\n /**\r\n * stopbandFrequency in params was removed to satisfy linting rules.\r\n */\r\n createTimeAxis(passbandFrequency: number): number[] {\r\n return createTimeAxis((passbandFrequency / 10) * 10);\r\n },\r\n\r\n setupFirstOrderStepResponse(stageFp: number, gain: number): StepResponse {\r\n return { a: gain, b: gain, c: 0, w0: stageFp * 2 * Math.PI, Q: 0 };\r\n },\r\n\r\n setupSecondOrderStepResponse(stageFp: number, stageQ: number, gain: number): StepResponse {\r\n const result = { w0: stageFp * 2 * Math.PI, Q: stageQ, a: 0, b: 0, c: 0 };\r\n result.c = gain * result.w0 * result.w0;\r\n return result;\r\n },\r\n\r\n getImpulseArrayFirstElement(): number {\r\n return 0;\r\n },\r\n\r\n getSecondOrderStageImplementation(stageFp: number, stageQ: number, gain: number): string {\r\n let result = FilterConstants.implementationType.sallenKey;\r\n if (\r\n stageFp * gain * (0.5 + stageQ) > FilterConstants.Limits.INDUCTOR_PREFERRED_FREQ_X_GAIN_X_Q &&\r\n stageFp > FilterConstants.Limits.INDUCTOR_ALLOWED_FREQ\r\n ) {\r\n result = FilterConstants.implementationType.inductor;\r\n }\r\n\r\n return result;\r\n },\r\n\r\n //getMaxFrequency used in voltage range calculations. We don't look at magnitudes beyond this frequency for voltage range because we don't care if they get clipped.\r\n getMaxFrequency(stopbandFrequency: number): number {\r\n return stopbandFrequency;\r\n },\r\n\r\n getAdcFrequency(stopFrequency: number): number {\r\n return stopFrequency / 10;\r\n },\r\n} as FilterSignature;\r\n","export default class {\r\n createArray(startFreq, stopFreq, pointsPerDecade) {\r\n var multiplier = Math.pow(10, 1 / pointsPerDecade);\r\n\r\n var i = 0;\r\n var result = [];\r\n result.push(startFreq);\r\n do {\r\n result[i + 1] = result[i] * multiplier;\r\n i++;\r\n } while (result[i] < stopFreq);\r\n\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../filter-constants';\r\nimport FirstOrderStage from '../stages/first-order';\r\nimport { filters } from '../../models/filter/filter';\r\n\r\n//TODO: DELETE THIS FILE\r\nexport default class {\r\n getRmsNoise(totalSpectralNoiseRto, frequencyArray, adcBandwidth) {\r\n // var filter = Filter.create({ selectedFilterType: FilterConstants.filterType.lowPass });\r\n var stage = FirstOrderStage.create({\r\n stageQ: Math.sqrt(2) / 2,\r\n stageFp: adcBandwidth,\r\n gain: 1,\r\n stageId: 1,\r\n filter: filters[FilterConstants.filterType.lowPass],\r\n frequencyArray: frequencyArray,\r\n });\r\n var adcResponseCurve = stage.magnitude;\r\n\r\n /*Filter noise by adc bandwidth curve*/\r\n var adcFilteredNoise = [];\r\n for (var i = 0; i < frequencyArray.length; i++) {\r\n adcFilteredNoise[i] = adcResponseCurve[i] * totalSpectralNoiseRto[i];\r\n }\r\n\r\n var rmsNoise = 0;\r\n // Loop through the frequency array until a value is found that's not less than the ADC bandwidth.\r\n for (i = 1; i < frequencyArray.length; i++) {\r\n var frequencySpan = frequencyArray[i] - frequencyArray[i - 1];\r\n var noiseAverage = (adcFilteredNoise[i] + adcFilteredNoise[i - 1]) / 2;\r\n var noiseRootHz = noiseAverage * Math.sqrt(frequencySpan);\r\n\r\n // Calculate the RMS noise.\r\n rmsNoise = Math.sqrt(rmsNoise * rmsNoise + noiseRootHz * noiseRootHz);\r\n }\r\n\r\n return rmsNoise;\r\n }\r\n getPeakToPeakNoise(totalSpectralNoiseRto, frequencyArray, adcBandwidth) {\r\n var rmsNoise = this.getRmsNoise(totalSpectralNoiseRto, frequencyArray, adcBandwidth);\r\n var result = rmsNoise * 6.6;\r\n return result;\r\n }\r\n getEquivalentNumberOfBitsArray(totalSpectralNoiseRto, frequencyArray, adcBandwidth) {\r\n var ADC_RANGES = [1, 2, 5, 10];\r\n var peakToPeakNoise = this.getPeakToPeakNoise(totalSpectralNoiseRto, frequencyArray, adcBandwidth);\r\n var result = [];\r\n // Loop through the static list of ADC ranges.\r\n for (var i = 0; i < ADC_RANGES.length; i++) {\r\n // Calculate the equivalent number of bits, and associate it with it's ADC input range.\r\n var equivalentNumberOfBitsObj = {\r\n adcInputRange: ADC_RANGES[i],\r\n equivalentNumberOfBits: Math.log(ADC_RANGES[i] / peakToPeakNoise) / Math.log(2),\r\n };\r\n\r\n // Add the object to the array.\r\n result.push(equivalentNumberOfBitsObj);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","export function createTimeAxis(fCutOff) {\r\n /*pointsInStepResponse sets the number of points in the graph It is a compromise between speed and accuracy. \r\n jqplot in takes about 300 ms to plot 512 points in firefox in Jan 2013. However smaller numbers of points start \r\n to show choppiness in plots with lots of ripple like bandpass*/\r\n var pointsInStepResponse = 512;\r\n\r\n var timeConstant = 1 / (2 * Math.PI * fCutOff);\r\n\r\n var t50 = timeConstant * 25;\r\n\r\n var maxXaxis = t50.toPrecision(2); // rounding off to two significant digits\r\n\r\n var stepSize = maxXaxis / pointsInStepResponse;\r\n\r\n var result = [];\r\n for (var k = 0; k < pointsInStepResponse; k++) {\r\n result[k] = k * stepSize;\r\n }\r\n\r\n return result;\r\n}\r\n","export default class {\r\n getBiggestRoomOpAmpFromList(vsMinus, vsPlus, opAmpsList, totalGain) {\r\n //voltage room\r\n var voltageRoom = this.opAmpVoltageRoom(\r\n vsMinus,\r\n vsPlus,\r\n opAmpsList[0].inHeadroomPlus,\r\n opAmpsList[0].outHeadroomPlus,\r\n opAmpsList[0].inHeadroomMinus,\r\n opAmpsList[0].outHeadroomMinus,\r\n );\r\n var biggestRoom = Math.min(voltageRoom.inRoom, voltageRoom.outRoom / totalGain);\r\n var result = null;\r\n for (var i = 0; i < opAmpsList.length; i++) {\r\n var curAmp = opAmpsList[i];\r\n voltageRoom = this.opAmpVoltageRoom(\r\n vsMinus,\r\n vsPlus,\r\n curAmp.inHeadroomPlus,\r\n curAmp.outHeadroomPlus,\r\n curAmp.inHeadroomMinus,\r\n curAmp.outHeadroomMinus,\r\n );\r\n var room = Math.min(voltageRoom.inRoom, voltageRoom.outRoom / totalGain);\r\n\r\n if (room >= biggestRoom) {\r\n biggestRoom = room;\r\n result = curAmp;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n /**\r\n @function opampVoltageRoom\r\n @parameter {int} negVS -Vs\r\n @parameter {int} posVS +Vs\r\n @parameter {int} inputHrVPlus opamp.InputHeadroomV+\r\n @parameter {int} outputHrPlus opamp.OutputHeadroomV+\r\n @parameter {int} inputHrVMinus opamp.InputHeadroomV-\r\n @parameter {int} outputHrVMinus opamp.OutputHeadroomV-\r\n @description calculates inRoom,outRoom,inMax,inMin,outMax,outMin from negVS,posVS,amp vars\r\n @returns {object} voltageObject contains inRoom,outRoom,inMax,inMin,outMax,outMin\r\n */\r\n //inputHrVPlus,outputHrVPlus,inputHrVMinus,outputHrVminus is supposed to come from an opamp object from the DB\r\n opAmpVoltageRoom(negVSText, posVSText, inputHrVPlusText, outputHrVPlusText, inputHrVMinusText, outputHrVMinusText) {\r\n var refV, inMax, inMin, outMax, outMin, posInRoom, posOutRoom, negInRoom, negOutRoom, inRoom, outRoom, retObj;\r\n const negVS = parseFloat(negVSText);\r\n const posVS = parseFloat(posVSText);\r\n const inputHrVPlus = parseFloat(inputHrVPlusText);\r\n const outputHrVPlus = parseFloat(outputHrVPlusText);\r\n const inputHrVMinus = parseFloat(inputHrVMinusText);\r\n const outputHrVMinus = parseFloat(outputHrVMinusText);\r\n\r\n if (negVS === 0) {\r\n refV = posVS / 2;\r\n } else {\r\n refV = 0;\r\n }\r\n\r\n inMax = posVS - inputHrVPlus;\r\n inMin = negVS + inputHrVMinus;\r\n outMax = posVS - outputHrVPlus;\r\n outMin = negVS + outputHrVMinus;\r\n\r\n posInRoom = inMax - refV;\r\n posOutRoom = outMax - refV;\r\n negInRoom = refV - inMin;\r\n negOutRoom = refV - outMin;\r\n inRoom = Math.min(posInRoom, negInRoom);\r\n outRoom = Math.min(posOutRoom, negOutRoom);\r\n\r\n retObj = { inRoom: inRoom, outRoom: outRoom, inMax: inMax, inMin: inMin, outMax: outMax, outMin: outMin };\r\n\r\n return retObj;\r\n }\r\n}\r\n","import FilterConstants from '../../filter-constants';\r\n\r\nexport function getResponseType(sliderValue: string): string | null {\r\n const responseTypeSlider = Number(sliderValue);\r\n let result = null;\r\n if (responseTypeSlider < FilterConstants.slider.chebyshevLimit) {\r\n result = FilterConstants.responseType.chebyshev;\r\n } else if (\r\n responseTypeSlider >= FilterConstants.slider.chebyshevLimit &&\r\n responseTypeSlider <= FilterConstants.slider.butterworthLimit\r\n ) {\r\n result = FilterConstants.responseType.butterworth;\r\n } else if (\r\n responseTypeSlider > FilterConstants.slider.butterworthLimit &&\r\n responseTypeSlider < FilterConstants.slider.besselButterworthLimit\r\n ) {\r\n result = FilterConstants.responseType.butterworthBessel;\r\n } else if (responseTypeSlider >= FilterConstants.slider.besselButterworthLimit) {\r\n result = FilterConstants.responseType.bessel;\r\n }\r\n return result;\r\n}\r\n\r\nexport function getResponseValue(sliderValue: string, passbandAttenuation: string): number {\r\n const responseTypeSlider = Number(sliderValue);\r\n const responseType = getResponseType(sliderValue);\r\n let result = null;\r\n if (responseType === FilterConstants.responseType.chebyshev) {\r\n result = _computeChebyshevFilterResponseValue(responseTypeSlider, Number(passbandAttenuation));\r\n } else if (responseType === FilterConstants.responseType.butterworthBessel) {\r\n result = _computedButterworthBesselFilterResponseValue(responseTypeSlider);\r\n }\r\n return Number(result);\r\n}\r\n\r\nfunction _computeChebyshevFilterResponseValue(inputSliderValue: number, passbandAttenuation: number): number {\r\n const staticValue = FilterConstants.slider.chebyshevLimit;\r\n let sliderValue = inputSliderValue;\r\n if (sliderValue < 0) sliderValue = 0;\r\n\r\n /*Our ripple will always be a percentage of the passband attenuation. It needs to be positive, so we multiply by -1*/\r\n const aPassPositive = passbandAttenuation * -1;\r\n\r\n /*When sliderValue = 0, the ripple is always aPassPositive. When sliderValue = AdiFW.filterConstants.slider.chebyshevLimit (if it could reach there), the ripple is always zero.\r\n The bender variable sets what happens in between. If it is set at 1, the transition is completely linear. If it is set at higher numbers\r\n then we bend the curve so it is an exponential. In other words, the higher the number, the closer the values are to zero when the slider is in the middle.\r\n \r\n Our bender value is set to 14.6. With the 0 to 46 sliderValue range we have, and with the -3dB aPassPositive default, this give us a good number range. \r\n For example the number range includes the following values that customers will often want to see: 0.1, 0.2, 0.5, 1, 2, 3. If the number of sliderValues were ever adjusted, \r\n then the bender value should be tweaked.*/\r\n\r\n const bender = 14.6;\r\n\r\n const percentValue = sliderValue / staticValue;\r\n const term1 = aPassPositive * Math.pow(bender, -percentValue);\r\n const term2 = 1 - percentValue;\r\n let result = term1 * term2;\r\n\r\n /*Prevent Chebyshev from showing 0*/\r\n if (result < 0.01) {\r\n result = 0.01;\r\n }\r\n\r\n /*Round to one digit for the bigger numbers so that chebyshev settings land on even rather than weird values*/\r\n if (result < 1) {\r\n result = Number(result.toFixed(2));\r\n } else {\r\n result = Number(result.toFixed(1));\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction _computedButterworthBesselFilterResponseValue(sliderValue: number): number {\r\n const staticValue = FilterConstants.slider.besselButterworthLimit;\r\n let result = staticValue - sliderValue;\r\n result = result / (FilterConstants.slider.besselButterworthLimit - FilterConstants.slider.butterworthLimit);\r\n result = Number(result.toFixed(2));\r\n\r\n return result;\r\n}\r\n","import { dBtoVV, VVtoDB } from '../utils/conversion';\r\n\r\nexport function changeGainUnits(gain: number, gainUnit: string): number {\r\n let result: number;\r\n if (gainUnit === 'dB') {\r\n result = VVtoDB(gain);\r\n } else {\r\n result = dBtoVV(gain);\r\n }\r\n\r\n return result;\r\n}\r\n","import Optimization from '../optimization/optimization';\r\nimport Implementation from '../implementation/implementation';\r\nimport CircuitResults from '../results/circuit-results';\r\nimport { applyAdditionalCriteria } from '../../services/opamps/ratings';\r\nimport { getStageInputsInImplementationOrder } from '../utils/stage';\r\nimport { getTopOpAmp } from '@ebiz/aditools-filter/recommendations';\r\nimport FilterConstants from 'filter-wizard/filter-constants';\r\n\r\nexport function getOpampNames(opAmpsList, indexModel) {\r\n const individualStageInputs = getStageInputsInImplementationOrder(\r\n indexModel.inputs.components.individualStageInputs,\r\n indexModel.results.components.detailsOfCircuits,\r\n );\r\n\r\n const noiseResistanceParams = _getNoiseResistanceParams(indexModel);\r\n const noiseResistance = _getNoiseResistance(\r\n noiseResistanceParams.circuits,\r\n noiseResistanceParams.adcBandwidth,\r\n noiseResistanceParams.frequencyArray,\r\n );\r\n\r\n const modelParams = {\r\n opAmpsList: opAmpsList,\r\n circuits: indexModel.results.components.circuits,\r\n individualStageInputs: individualStageInputs,\r\n vsPlus: indexModel.inputs.components.vsPlus,\r\n vsMinus: indexModel.inputs.components.vsMinus,\r\n optimization: indexModel.inputs.components.optimization,\r\n stopbandFrequency: indexModel.results.components.stopbandFrequency,\r\n totalGain: indexModel.results.specifications.totalGain,\r\n };\r\n const params = indexModel.opAmpSource.getFilterOpampsParams(modelParams);\r\n const topOpAmp = getTopOpAmp(\r\n params.opAmps,\r\n params.circuits,\r\n params.vsPlus,\r\n params.vsMinus,\r\n params.optimization,\r\n noiseResistance,\r\n indexModel.results.specifications.totalGain,\r\n params.stopbandFrequency,\r\n applyAdditionalCriteria,\r\n );\r\n\r\n const targetStages = indexModel.results.specifications.targetStagesWithDistributedGain;\r\n const opampNames = targetStages.map(() => {\r\n if (topOpAmp && topOpAmp.partNumber) {\r\n return topOpAmp.partNumber;\r\n }\r\n });\r\n\r\n return opampNames;\r\n}\r\n\r\nexport function getCircuitValues(circuits, individualStageInputs) {\r\n if (Array.isArray(circuits)) {\r\n return circuits.map((circuit, index) => {\r\n const type = circuit.algorithm === 'lowpassV2' ? 'lowpass' : circuit.algorithm;\r\n return {\r\n c1: circuit.c1 ? (typeof circuit.c1.value !== 'undefined' ? circuit.c1.value : circuit.c1) : null,\r\n c2: circuit.c2 ? (typeof circuit.c2.value !== 'undefined' ? circuit.c2.value : circuit.c2) : null,\r\n c5: circuit.c5 ? (typeof circuit.c5.value !== 'undefined' ? circuit.c5.value : circuit.c5) : null,\r\n fp: circuit.stageFp,\r\n gain: circuit.gain,\r\n implementation: getImplementation(individualStageInputs[index].implementation),\r\n q: circuit.stageQ,\r\n r1: circuit.r1 ? (typeof circuit.r1.value !== 'undefined' ? circuit.r1.value : circuit.r1) : null,\r\n r2: circuit.r2 ? (typeof circuit.r2.value !== 'undefined' ? circuit.r2.value : circuit.r2) : null,\r\n r3: circuit.r3 ? (typeof circuit.r3.value !== 'undefined' ? circuit.r3.value : circuit.r3) : null,\r\n r4: circuit.r4 ? (typeof circuit.r4.value !== 'undefined' ? circuit.r4.value : circuit.r4) : null,\r\n r5: circuit.r5 ? (typeof circuit.r5.value !== 'undefined' ? circuit.r5.value : circuit.r5) : null,\r\n type: type,\r\n };\r\n });\r\n } else {\r\n const type = circuits.algorithm === 'lowpassV2' ? 'lowpass' : circuits.algorithm;\r\n return [\r\n {\r\n c1: circuits.c1 ? (typeof circuits.c1.value !== 'undefined' ? circuits.c1.value : circuits.c1) : null,\r\n c2: circuits.c2 ? (typeof circuits.c2.value !== 'undefined' ? circuits.c2.value : circuits.c2) : null,\r\n c5: circuits.c5 ? (typeof circuits.c5.value !== 'undefined' ? circuits.c5.value : circuits.c5) : null,\r\n fp: circuits.stageFp,\r\n gain: circuits.gain,\r\n implementation: getImplementation(individualStageInputs.implementation),\r\n q: circuits.stageQ,\r\n r1: circuits.r1 ? (typeof circuits.r1.value !== 'undefined' ? circuits.r1.value : circuits.r1) : null,\r\n r2: circuits.r2 ? (typeof circuits.r2.value !== 'undefined' ? circuits.r2.value : circuits.r2) : null,\r\n r3: circuits.r3 ? (typeof circuits.r3.value !== 'undefined' ? circuits.r3.value : circuits.r3) : null,\r\n r4: circuits.r4 ? (typeof circuits.r4.value !== 'undefined' ? circuits.r4.value : circuits.r4) : null,\r\n r5: circuits.r5 ? (typeof circuits.r5.value !== 'undefined' ? circuits.r5.value : circuits.r5) : null,\r\n type: type,\r\n },\r\n ];\r\n }\r\n}\r\n\r\nexport function getImplementation(implementation) {\r\n if (implementation === FilterConstants.implementationType.firstOrder) {\r\n return 'activeFirstOrder';\r\n }\r\n if (implementation === FilterConstants.implementationType.inductor) {\r\n return 'activeInductor';\r\n }\r\n if (implementation === FilterConstants.implementationType.deliyannisFriend) {\r\n return 'multipleFeedback';\r\n }\r\n return implementation;\r\n}\r\n\r\nfunction _getNoiseResistance(circuits, adcBandwidth, frequencyArray) {\r\n var highVNoiseOpAmp = { gbw: 1e12, rOut: 1e-12, vNoise: 1e-6, iNoise: 0 };\r\n var circuitResultsCopy = [];\r\n for (let i = 0; i < circuits.length; i++) {\r\n let circuitCopy = circuits[i];\r\n circuitCopy.opAmp = highVNoiseOpAmp;\r\n if (i > 0) {\r\n circuitCopy.previousCircuit = circuitResultsCopy[i - 1];\r\n }\r\n\r\n let circuitResult = CircuitResults.create({\r\n circuit: circuitCopy,\r\n adcBandwidth: adcBandwidth,\r\n frequencyArray: frequencyArray,\r\n });\r\n circuitResultsCopy.push(circuitResult);\r\n }\r\n\r\n var lastIndex = circuitResultsCopy.length - 1;\r\n var spectralDensityHighVNoise = circuitResultsCopy[lastIndex].noiseGroup.totalSpectralNoiseReferredToOutputArray;\r\n\r\n var highINoiseOpAmp = { gbw: 1e12, rOut: 1e-12, vNoise: 0, iNoise: 1e-6 };\r\n circuitResultsCopy = [];\r\n for (let i = 0; i < circuits.length; i++) {\r\n let circuitCopy = circuits[i];\r\n circuitCopy.opAmp = highINoiseOpAmp;\r\n if (i > 0) {\r\n circuitCopy.previousCircuit = circuitResultsCopy[i - 1];\r\n }\r\n\r\n let circuitResult = CircuitResults.create({\r\n circuit: circuitCopy,\r\n adcBandwidth: adcBandwidth,\r\n frequencyArray: frequencyArray,\r\n });\r\n circuitResultsCopy.push(circuitResult);\r\n }\r\n\r\n var spectralDensityHighINoise = circuitResultsCopy[lastIndex].noiseGroup.totalSpectralNoiseReferredToOutputArray;\r\n\r\n var length = spectralDensityHighVNoise.length;\r\n var averageResistance = null;\r\n for (let j = 0; j < length; j++) {\r\n var noiseResistance = spectralDensityHighINoise[j] / spectralDensityHighVNoise[j];\r\n averageResistance += noiseResistance / length;\r\n }\r\n\r\n return averageResistance;\r\n}\r\n\r\nfunction _getNoiseResistanceParams(indexModel) {\r\n const optimizationType = indexModel.inputs.components.optimization;\r\n const noiseInput = indexModel.inputs.noise;\r\n const specificationResults = indexModel.results.specifications;\r\n const targetStages = specificationResults.targetStagesWithDistributedGain;\r\n\r\n const adcBandwidth =\r\n noiseInput && noiseInput.adcBandwidth\r\n ? noiseInput.adcBandwidth\r\n : specificationResults.filter.getAdcFrequency(specificationResults.filterFrequencyRange.stopFrequency);\r\n\r\n const frequencyArray = targetStages.map((stage) => {\r\n return stage.stageFp;\r\n });\r\n\r\n const optimization = Optimization.create({ optimization: optimizationType });\r\n const circuits = _getCircuits(targetStages, optimization);\r\n\r\n return {\r\n adcBandwidth: adcBandwidth,\r\n frequencyArray: frequencyArray,\r\n circuits: circuits,\r\n };\r\n}\r\n\r\nfunction _getCircuits(targetStages, optimization) {\r\n var circuitsArray = [];\r\n\r\n for (let i = 0; i < targetStages.length; i++) {\r\n var stage = targetStages[i];\r\n var defaultImplementation = stage.defaultImplementation;\r\n var implementation = Implementation.create({\r\n selectedImplementation: defaultImplementation,\r\n filter: stage.filter,\r\n });\r\n\r\n var stageFp = stage.stageFp;\r\n var stageQ = stage.stageQ;\r\n var gain = stage.gain;\r\n\r\n let circuit = implementation.createCircuit(stageFp, gain, stageQ, optimization);\r\n\r\n circuitsArray.push(circuit);\r\n }\r\n\r\n return circuitsArray;\r\n}\r\n","import EmberObject from '@ember/object';\r\nimport FilterConstants from '../../filter-constants';\r\n\r\nexport default class BaseImplementation extends EmberObject {\r\n getGbwTolerance(circuit, gbwTolerance) {\r\n var result = [];\r\n var gbw = circuit.opAmp.gbw;\r\n\r\n if (gbwTolerance === FilterConstants.gbwTolerance.twenty) {\r\n result.push(gbw * 0.8, gbw * 1, gbw * 1.2);\r\n } else {\r\n result.push(gbw);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getStageValuesFromCircuit(circuit) {\r\n return this.instance.getStageValuesFromCircuit(circuit);\r\n }\r\n}\r\n","import { computed } from '@ember/object';\r\nimport BaseActualFilterAmplitude from '../../implementation-common/base-actual-filter-amplitude';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as Complex from '../../../process-data/complex';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default BaseActualFilterAmplitude.extend({\r\n components: null,\r\n frequency: null,\r\n implementation: null,\r\n whoAmI: 'app/models/implementation/deliyannis-friend/band-pass/actual-filter-amplitude.js',\r\n complexAlphaPlus: Complex.createComplex(0, 0),\r\n rx: computed('r1', 'r2', function () {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var result = CommonUtils.parallel(r1, r2);\r\n return result;\r\n }),\r\n _R5RXCsqrSsqr: computed('rx', 'c1', 'r5', 'sSquared', function () {\r\n var rx = this.rx;\r\n var sSquared = this.sSquared;\r\n var r5 = this.r5;\r\n var c1 = this.c1;\r\n var result = r5 * rx * sSquared * c1 * c1;\r\n return result;\r\n }),\r\n complexROut: computed('opAmp', function () {\r\n var rOut = this.opAmp.rOut;\r\n var result = Complex.createComplex(rOut, 0);\r\n return result;\r\n }),\r\n complexBetaPlus: computed('r3', 'r4', 'sImaginary', function () {\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var sImaginary = this.sImaginary;\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var complexBetaDenom = Complex.createComplex(\r\n r3 + r4,\r\n r4 * r3 * FilterConstants.Limits.PARASITIC_INPUT_CAP * sImaginary,\r\n );\r\n var result = complexR3.divide(complexBetaDenom);\r\n\r\n return result;\r\n }),\r\n complexDenominator: computed('c1', 'r5', 'sImaginary', '_R5RXCsqrSsqr', 'rx', function () {\r\n var sImaginary = this.sImaginary;\r\n var R5RXCsqrSsqr = this._R5RXCsqrSsqr;\r\n var rx = this.rx;\r\n var c1 = this.c1;\r\n var r5 = this.r5;\r\n var twoRXCplusR5C = 2 * rx * c1 + r5 * c1;\r\n var result = Complex.createComplex(1 + R5RXCsqrSsqr, twoRXCplusR5C * sImaginary);\r\n return result;\r\n }),\r\n complexBetaMinus: computed('_R5RXCsqrSsqr', 'rx', 'c1', 'sImaginary', 'complexDenominator', function () {\r\n var R5RXCsqrSsqr = this._R5RXCsqrSsqr;\r\n var complexDenominator = this.complexDenominator;\r\n var rx = this.rx;\r\n var c1 = this.c1;\r\n var sImaginary = this.sImaginary;\r\n var complexBetaminusNumerator = Complex.createComplex(1 + R5RXCsqrSsqr, 2 * rx * c1 * sImaginary);\r\n var result = complexBetaminusNumerator.divide(complexDenominator);\r\n return result;\r\n }),\r\n complexRParallel: computed('rx', 'c1', 'r3', 'r4', 'r5', 'opAmp', 'sSquared', 'sImaginary', function () {\r\n var rx = this.rx;\r\n var sSquared = this.sSquared;\r\n var sImaginary = this.sImaginary;\r\n\r\n var complexZlookbackFront = Complex.createComplex(rx, 0);\r\n var r5 = this.r5;\r\n var c1 = this.c1;\r\n var complexZlookbackEndDenom = Complex.createComplex(r5 * c1 * c1 * sSquared, 2 * c1 * sImaginary);\r\n var complexZlookbackEndNum = Complex.createComplex(1, r5 * c1 * sImaginary);\r\n var complexZlookback = complexZlookbackFront.plus(complexZlookbackEndNum.divide(complexZlookbackEndDenom));\r\n\r\n var complexOne = Complex.createComplex(1, 0);\r\n var rOut = this.opAmp.rOut;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var rParallelwithoutzlookback = CommonUtils.parallel(rOut, r3 + r4);\r\n var result = complexOne.divide(\r\n complexOne.divide(complexZlookback).plus(Complex.createComplex(1 / rParallelwithoutzlookback, 0)),\r\n );\r\n return result;\r\n }),\r\n complexFF: computed('complexRParallel', 'r1', function () {\r\n var complexRParallel = this.complexRParallel;\r\n var r1 = this.r1;\r\n var complexR1 = Complex.createComplex(r1, 0);\r\n var result = complexRParallel.divide(complexR1);\r\n return result;\r\n }),\r\n complexAlphaMinus: computed('sImaginary', 'complexDenominator', 'rx', 'c1', 'r1', 'r5', function () {\r\n var complexDenominator = this.complexDenominator;\r\n var sImaginary = this.sImaginary;\r\n var rx = this.rx;\r\n var r5 = this.r5;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var alphaMinusReal = (r5 * c1 * rx) / r1;\r\n var result = Complex.createComplex(0, alphaMinusReal * sImaginary).divide(complexDenominator);\r\n return result;\r\n }),\r\n inputImpedance: computed('r1', 'r2', 'r5', 'c1', 'c2', 'sImaginary', 'complexAmplitude', function () {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var sImaginary = this.sImaginary;\r\n var complexAmplitude = this.complexAmplitude;\r\n\r\n var complexOne = Complex.createComplex(1, 0);\r\n var complexC1s = Complex.createComplex(0, 0);\r\n complexC1s.imaginary = c1 * sImaginary;\r\n\r\n //This is the admittance for C1 in parallel with C2 + R5 in series\r\n let y2 = complexOne.divide(Complex.createComplex(r5, -1 / (c2 * sImaginary)));\r\n let y1 = complexC1s;\r\n let ySum = y1.plus(y2);\r\n\r\n //Find our junction voltage using the formula: vjunction = (v1y1 + v2y2 +v3y3)/(y1+y2+y3)\r\n //Since we're assuming vIn = 1 as our test voltage, voltage at the op amp output is complexAmplitude\r\n let vJunctionNum = Complex.complexify(1 / r1).plus(complexAmplitude.mult(ySum));\r\n let vJunctionDenom = Complex.complexify(1 / r1 + 1 / r2).plus(ySum);\r\n let vJunction = vJunctionNum.divide(vJunctionDenom);\r\n\r\n //Input current would be (vin - vJunction)/R1. If we use vIn = 1 as our test voltage, then we can just flip to get input impedance.\r\n let result = Complex.complexify(r1).divide(complexOne.subs(vJunction));\r\n\r\n return result;\r\n\r\n //Alternate method. This also works, but math is not intuitive.\r\n // let oneMinusTransferFunction = complexOne.subs(complexAmplitude);\r\n // let denominator = oneMinusTransferFunction.mult(ySum).plus(Complex.complexify(1/r2));\r\n // let complexR1 = Complex.complexify(r1);\r\n // let numerator = Complex.complexify(1 + r1/r2).plus(complexR1.mult(ySum));\r\n // return numerator.divide(denominator);\r\n }),\r\n computeMagnitude(complexAlphaMinus, complexFF) {\r\n let complexAlphaPlus = this.complexAlphaPlus;\r\n let complexA = this.complexA;\r\n let amplitudeDenominator = this.amplitudeDenominator;\r\n let amplitudeNumerator = this._computeAmplitudeNumerator(complexAlphaPlus, complexAlphaMinus, complexA, complexFF);\r\n let complexAmplitude = this._computeComplexAmplitude(amplitudeNumerator, amplitudeDenominator);\r\n return complexAmplitude.magnitude();\r\n },\r\n});\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport * as ReverseImplementation from './reverse-implementation';\r\nimport BigHugeCircuit from './big-huge-circuit';\r\nimport BaseBigHugeCircuitGroup from '../../implementation-common/base-big-huge-circuit-group';\r\n\r\nexport default class DeliyannisBandPassBigHugeCircuitGroup extends BaseBigHugeCircuitGroup {\r\n circuit;\r\n reverseImplementation = ReverseImplementation;\r\n @computed('circuit', 'nominalValues', 'reverseImplementation', 'gbwArray') get circuits() {\r\n var circuit = this.circuit;\r\n var nominalGbw = circuit.opAmp.gbw;\r\n var nominalValues = this.nominalValues;\r\n var reverseImplementation = this.reverseImplementation;\r\n var c1ToleranceArray = circuit.c1.toleranceArray;\r\n var c2ToleranceArray = circuit.c2.toleranceArray;\r\n var r1ToleranceArray = circuit.r1.toleranceArray;\r\n var r2ToleranceArray = circuit.r2.toleranceArray;\r\n var r3ToleranceArray = circuit.r3.toleranceArray;\r\n var r4ToleranceArray = circuit.r4.toleranceArray;\r\n var r5ToleranceArray = circuit.r5.toleranceArray;\r\n var linkedArrayOne = circuit.r1.value ? r1ToleranceArray : r2ToleranceArray;\r\n var linkedArrayTwo = circuit.c1.value ? c1ToleranceArray : c2ToleranceArray;\r\n var inverseArray = circuit.r3.value ? r3ToleranceArray : r4ToleranceArray;\r\n\r\n var r4Start = r3ToleranceArray.length - 1;\r\n var gbwArray = this.gbwArray;\r\n var bigHugeCircuitArray = [];\r\n gbwArray.forEach((gbwValue) => {\r\n linkedArrayOne.forEach((linkedOne, indexLinkedArrayOne) => {\r\n var r1Value = r1ToleranceArray[indexLinkedArrayOne];\r\n var r2Value = r2ToleranceArray[indexLinkedArrayOne];\r\n inverseArray.forEach((inverseItem, indexInverseArray) => {\r\n var r3Value = r3ToleranceArray[indexInverseArray];\r\n var r4Value = r4ToleranceArray[r4Start - indexInverseArray];\r\n r5ToleranceArray.forEach((r5Value) => {\r\n linkedArrayTwo.forEach((linkedTwo, indexLinkedArrayTwo) => {\r\n var c1Value = c1ToleranceArray[indexLinkedArrayTwo];\r\n var c2Value = c2ToleranceArray[indexLinkedArrayTwo];\r\n let item = BigHugeCircuit.create({\r\n c1: c1Value,\r\n c2: c2Value,\r\n r1: r1Value,\r\n r2: r2Value,\r\n r3: r3Value,\r\n r4: r4Value,\r\n r5: r5Value,\r\n opAmpGbw: gbwValue,\r\n nominalValues: nominalValues,\r\n nominalGbw: nominalGbw,\r\n reverseImplementation: reverseImplementation,\r\n });\r\n bigHugeCircuitArray.push(item);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n var result = this.setNormalizers(bigHugeCircuitArray);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseBigHugeCircuit from '../../implementation-common/big-huge-circuit';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class DeliyannisBandPassBigHugeCircuit extends BaseBigHugeCircuit {\r\n @computed('c1', 'c2', 'r1', 'r2', 'r3', 'r4', 'r5', 'opAmpGbw') get circuitStageValues() {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var r5 = this.r5;\r\n var opAmpGbw = this.opAmpGbw;\r\n var result = ReverseImplementation.computeFromComponentValues(c1, c2, r1, r2, r3, r4, r5, opAmpGbw);\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\n\r\nexport function computeCapacitorLimitMultipliers(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue, r5IdealValue) {\r\n let maxMultiplier = computeCapacitorMaximumLimitMultiplier(\r\n c1IdealValue,\r\n c2IdealValue,\r\n r1IdealValue,\r\n r2IdealValue,\r\n r5IdealValue,\r\n );\r\n let minMultiplier = computeCapacitorMinimumLimitMultiplier(\r\n c1IdealValue,\r\n c2IdealValue,\r\n r1IdealValue,\r\n r2IdealValue,\r\n r5IdealValue,\r\n );\r\n return {\r\n capacitorMinimumLimitMultiplier: minMultiplier,\r\n capacitorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nexport function computeGainResistorLimitMultipliers(r3IdealValue, r4IdealValue) {\r\n let minMultiplier = CircuitUtils.getResistorMinimumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n let maxMultiplier = CircuitUtils.getResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n return {\r\n resistorMinimumLimitMultiplier: minMultiplier,\r\n resistorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nfunction computeCapacitorMaximumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue, r5IdealValue) {\r\n var cmax = Math.max(c1IdealValue, c2IdealValue);\r\n var initialcapacitorMaximumLimitMultiplier = FilterConstants.Limits.CBIG_COMP_LIMIT / cmax;\r\n var r1TinyTemp = r1IdealValue / initialcapacitorMaximumLimitMultiplier;\r\n var r2TinyTemp = r2IdealValue / initialcapacitorMaximumLimitMultiplier;\r\n var r5TinyTemp = r5IdealValue / initialcapacitorMaximumLimitMultiplier;\r\n var result = initialcapacitorMaximumLimitMultiplier;\r\n if (CommonUtils.parallel(r1TinyTemp, r2TinyTemp) < FilterConstants.Limits.RSMALL_LOAD_LIMIT) {\r\n result = (result * CommonUtils.parallel(r1TinyTemp, r2TinyTemp)) / FilterConstants.Limits.RSMALL_LOAD_LIMIT;\r\n r5TinyTemp = r5IdealValue / result;\r\n }\r\n\r\n if (r5TinyTemp < FilterConstants.Limits.RSMALL_LOAD_LIMIT) {\r\n result = (result * r5TinyTemp) / FilterConstants.Limits.RSMALL_LOAD_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMinimumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue, r5IdealValue) {\r\n var cmin = Math.min(c1IdealValue, c2IdealValue);\r\n var r1 = r1IdealValue;\r\n var r2 = r2IdealValue;\r\n var r5 = r5IdealValue;\r\n var biggestR = null;\r\n\r\n if (CommonUtils.isNearInfinity(r2)) {\r\n biggestR = Math.max(r1, r5);\r\n } else {\r\n biggestR = Math.max(r1, r2, r5);\r\n }\r\n\r\n var result = FilterConstants.Limits.CSMALL_COMP_LIMIT / cmin;\r\n var biggestR2 = biggestR / result;\r\n if (biggestR2 > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n result = (result * biggestR2) / FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport NoiseGroup from './noise-group';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport DeliyannisFriendCircuit from './circuit';\r\nimport * as DeliyannisFriendCircuitLimitsUtils from './circuit-limits-utils';\r\nimport * as ComponentFactory from '../../../components/components-factory';\r\nimport NoPositiveFeedback from './component-feedbacks/no-positive-feedback';\r\nimport PositiveFeedback from './component-feedbacks/positive-feedback';\r\nimport { getImplementation } from '../../../gestures/optimization';\r\n\r\nimport { calculateFilterComponents } from '@ebiz/aditools-filter';\r\n\r\n// This class contains the logic on how a multiple feedback band pass / deliyannis-friend band pass is created.\r\n// A circuit is created from the stage properties stageFp, stageQ, and gain, and the optimization;\r\nexport default class DeliyannisBandPassCircuit extends EmberObject {\r\n // Inputs on create\r\n stageFp;\r\n stageQ;\r\n gain;\r\n optimization;\r\n algorithm;\r\n\r\n // Process output - something used internally but on other classes\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths;\r\n q0;\r\n k;\r\n sizing;\r\n frequency;\r\n\r\n // Figures output - used internally and also as output in the figures\r\n needReferenceStage = true;\r\n c1;\r\n c2;\r\n r1;\r\n r2;\r\n r3;\r\n r4;\r\n r5;\r\n masterCapacitor;\r\n allowGainChange;\r\n\r\n // For cGov params of calculateFilterComponents - aditools-filter\r\n c1IdealValue;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'stageFp, stageQ, gain, optimization, and algorithm should not be null';\r\n }\r\n\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = DeliyannisFriendCircuit;\r\n this.supportedComponents = ['c1', 'c2', 'r1', 'r2', 'r3', 'r4', 'r5'];\r\n this.idealOpAmpValuePaths = ['r5', 'q0', 'k'];\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.initialCapacitorValue)) {\r\n this.c1IdealValue = this._computeC1IdealValue(this.initialCapacitorValue);\r\n } else {\r\n this.c1IdealValue = this._computeC1IdealValue();\r\n }\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = DeliyannisFriendCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n idealValues.r5IdealValue,\r\n );\r\n const gainResistorLimits = DeliyannisFriendCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits, gainResistorLimits);\r\n }\r\n\r\n _computeIdealValues() {\r\n const implementation = getImplementation(FilterConstants.implementationType.deliyannisFriend);\r\n const rGain = this._getFeedback().r3Value + this._getFeedback().r4Value;\r\n const c1IdealValue = this.c1IdealValue;\r\n const params = {\r\n type: this.algorithm,\r\n implementation: implementation,\r\n fp: this.stageFp,\r\n gain: this.gain,\r\n q: this.stageQ,\r\n cGov: c1IdealValue,\r\n rGainOrCCross: rGain,\r\n };\r\n const filterComponents = calculateFilterComponents(\r\n params.type,\r\n params.implementation,\r\n params.fp,\r\n params.gain,\r\n params.q,\r\n params.cGov,\r\n params.rGainOrCCross,\r\n );\r\n\r\n return {\r\n c1IdealValue: filterComponents.c1,\r\n c2IdealValue: filterComponents.c2,\r\n r1IdealValue: filterComponents.r1,\r\n r2IdealValue: filterComponents.r2,\r\n r3IdealValue: filterComponents.r3,\r\n r4IdealValue: filterComponents.r4,\r\n r5IdealValue: filterComponents.r5,\r\n };\r\n }\r\n\r\n _getFeedback() {\r\n const a = this.gain / (2 * this.stageQ * this.stageQ);\r\n const r3PlusR4 = this.optimization.determineStartingR3R4Value(this.stageFp);\r\n let result = null;\r\n if (this.stageQ < 10 && a < 1) {\r\n result = NoPositiveFeedback.create({ stageQ: this.stageQ, gain: this.gain });\r\n } else {\r\n result = PositiveFeedback.create({ stageQ: this.stageQ, a: a, gain: this.gain, r3PlusR4: r3PlusR4 });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _computeR3R4Gain() {\r\n return 1 / this._getFeedback().k;\r\n }\r\n\r\n _computeC1IdealValue(value) {\r\n return value ? value : CircuitUtils.computeMasterCapacitorValue(this.optimization, this.stageFp);\r\n }\r\n\r\n // Private\r\n // computes for the the output values.\r\n _computeComponents(idealValues, capacitorLimits, gainResistorLimits) {\r\n this.sizing = this._getSizing(idealValues, capacitorLimits);\r\n let r3NominalValue = ComponentFactory.createR3(idealValues.r3IdealValue, null, null).toCommercialComponent().value;\r\n this.allowGainChange = CircuitUtils.getGainChangeSupportStatus(r3NominalValue, idealValues.r4IdealValue);\r\n this.c1 = ComponentFactory.createC1(\r\n idealValues.c1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n );\r\n this.masterCapacitor = this.c1;\r\n let rcRatioInverse = CircuitUtils.getInverseOfMasterCapacitorRatio(this.c1);\r\n this.c2 = ComponentFactory.createC2(\r\n idealValues.c2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r2 = this._getR2(idealValues, capacitorLimits, rcRatioInverse);\r\n this.r3 = ComponentFactory.createR3(\r\n r3NominalValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n this.r4 = this._getR4(idealValues, capacitorLimits);\r\n this.r5 = ComponentFactory.createR5(\r\n idealValues.r5IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.q0 = { value: this._getFeedback().q0 };\r\n this.k = { value: this._getFeedback().k };\r\n this.frequency =\r\n 1 /\r\n (2 *\r\n Math.PI *\r\n Math.sqrt(CommonUtils.parallel(this.r1.value, this.r2.value) * this.r5.value * this.c1.value * this.c2.value));\r\n\r\n this.idealValues = idealValues;\r\n this.capacitorLimits = capacitorLimits;\r\n this.gainResistorLimits = gainResistorLimits;\r\n }\r\n\r\n // Private\r\n // Gets the sizing\r\n _getSizing(idealValues, capacitorLimits) {\r\n let r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n );\r\n return CircuitUtils.getResistorSize(r1);\r\n }\r\n\r\n // Private\r\n // Computes for the r2\r\n _getR2(idealValues, capacitorLimits, rcRatioInverse) {\r\n var result = null;\r\n if (CommonUtils.isNearInfinity(idealValues.r2IdealValue))\r\n result = ComponentFactory.createR2MinMaxDefined(\r\n idealValues.r2IdealValue,\r\n FilterConstants.Limits.INFINITY,\r\n FilterConstants.Limits.INFINITY,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n else\r\n result = ComponentFactory.createR2(\r\n idealValues.r2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n\r\n return result;\r\n }\r\n\r\n // Private\r\n // Computes for the R4. This is dependent on the value of R3\r\n // R4 may have an ideal value but it is recomputed here based on gain and R3\r\n // since it should adjust depending on the current value of R3.\r\n // (If r3 is not present or idealValue is 0 or INFINITY, we use the idealValue)\r\n // R3 may change due to the user changing the slider position or r3 adjusting to its nominal value.\r\n // R3 may also change when changing the e-series in the tolerance tab.\r\n _getR4(idealValues, gainResistorLimits) {\r\n let result = null;\r\n if (idealValues.r3IdealValue !== 0 && idealValues.r3IdealValue !== FilterConstants.Limits.INFINITY) {\r\n result = ComponentFactory.createR4FromR3AndGain(\r\n this.r3.value,\r\n this._computeR3R4Gain(),\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n } else {\r\n result = ComponentFactory.createR4(\r\n idealValues.r4IdealValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Public\r\n // function used for the gain slider.\r\n // This accepts a new value of the r3 and computes for the new value of R4.\r\n changeGainValues(newR3Value) {\r\n if (this.allowGainChange) {\r\n this.r3 = this.r3.setValue(newR3Value);\r\n this.updateR4();\r\n }\r\n }\r\n\r\n updateR4() {\r\n this.r4 = this._getR4(this.idealValues, this.gainResistorLimits);\r\n }\r\n\r\n // Public\r\n // function used when the RC slider is changed.\r\n changeInitialCapacitor(value) {\r\n this.c1IdealValue = this._computeC1IdealValue(value);\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = DeliyannisFriendCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n idealValues.r5IdealValue,\r\n );\r\n const gainResistorLimits = DeliyannisFriendCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits, gainResistorLimits);\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../../filter-constants';\r\n\r\nexport default class extends EmberObject {\r\n stageQ;\r\n gain;\r\n init() {\r\n super.init();\r\n set(this, 'q0', this.stageQ);\r\n set(this, 'h', this.gain);\r\n this.k = 0;\r\n this.r3Value = 0;\r\n this.r4Value = FilterConstants.Limits.INFINITY;\r\n }\r\n\r\n @computed('h', 'q0') get b() {\r\n return this.h / 2 / (this.q0 * this.q0);\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport * as CircuitUtils from '../../../../utils/circuit';\r\n\r\nexport default class PositiveFeedback extends EmberObject {\r\n stageQ;\r\n gain;\r\n a;\r\n r3PlusR4;\r\n\r\n @computed('stageQ', 'a', 'gain') get q0() {\r\n var stageQ = this.stageQ;\r\n var gain = this.gain;\r\n var a = this.a;\r\n var result = 0;\r\n\r\n //According to Van Valkenburg textbook, this is close to an optimal at 1.5,\r\n //Paul Fleischer paper indicates something slightly higher might be better\r\n //Yet my experiments indicate higher numbers are better still for lowest tolerance issues.\r\n //Only reason I haven't set it higher is because the ratio between R1 and R2 gets to be really big. Choosing 5 keeps the ratio at 100.\r\n var qHat = 5;\r\n\r\n if (a < 1) {\r\n result = qHat;\r\n } else {\r\n a = 0.9999999999;\r\n result = (-(a + gain) + Math.sqrt((a + gain) * (a + gain) - 8 * a * a * stageQ * stageQ)) / (-4 * a * stageQ);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('q0', 'stageQ') get k() {\r\n var q0 = this.q0;\r\n var stageQ = this.stageQ;\r\n var alpha = (1 / (2 * q0 * q0)) * (1 - q0 / stageQ);\r\n var result = alpha / (1 + alpha);\r\n return result;\r\n }\r\n @computed('gain', 'q0', 'stageQ', 'k') get h() {\r\n var gain = this.gain;\r\n var q0 = this.q0;\r\n var stageQ = this.stageQ;\r\n var k = this.k;\r\n var result = gain * (q0 / stageQ) * (1 - k);\r\n return result;\r\n }\r\n\r\n @computed('k', 'r3PlusR4') get r3AndR4() {\r\n var k = this.k;\r\n var r3PlusR4 = this.r3PlusR4;\r\n var result = CircuitUtils.computeR3AndR4(r3PlusR4, 1 / k);\r\n return result;\r\n }\r\n @computed('r3AndR4') get r3Value() {\r\n var result = this.r3AndR4.r3;\r\n return result;\r\n }\r\n\r\n @computed('r3AndR4') get r4Value() {\r\n var result = this.r3AndR4.r4;\r\n return result;\r\n }\r\n\r\n @computed('h', 'q0') get b() {\r\n return this.h / 2 / (this.q0 * this.q0);\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class DeliyannisBandPassIdealOpAmp extends EmberObject {\r\n // Inputs\r\n r5 = null;\r\n q0 = null;\r\n k = null;\r\n optimization = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n specialGain = 1;\r\n name = 'ideal';\r\n rOutOverGBW = FilterConstants.Limits.INFINITY;\r\n slewRate = 0;\r\n\r\n init() {\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r5) ||\r\n CommonUtils.isNullOrUndefined(this.q0) ||\r\n CommonUtils.isNullOrUndefined(this.k) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r5, q0, k, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.gbw = this.computeGbw();\r\n this.rOut = this.computeROut(this.gbw);\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = this.r5;\r\n return dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n }\r\n\r\n computeROut(gbw) {\r\n return this.rOutOverGBW * gbw;\r\n }\r\n\r\n computeGbw() {\r\n var allowedError = this.optimization.opAmpRequirementSpecValues.allowedError;\r\n var k = this.k;\r\n var epsilon = (allowedError + 1) * (allowedError + 1) - 1;\r\n var result = ((2 * this.q0) / (epsilon / this.stageFp)) * (1 / ((1 - k) * (1 - k)));\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport * as FeedForwardStepResponse from '../../../step-response/feed-forward';\r\nimport Circuit from './circuit';\r\nimport BigHugeCircuitGroup from './big-huge-circuit-group';\r\nimport BaseMain from '../../implementation-common/base-main';\r\nimport PieWedge from '../../implementation-common/base-pie-wedge';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class DeliyannicBandPassMain extends BaseMain {\r\n bigHugeCircuitGroupModel;\r\n algorithm;\r\n\r\n init() {\r\n this.bigHugeCircuitGroupModel = BigHugeCircuitGroup;\r\n this.reverseImplementation = ReverseImplementation;\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = (circuit.r3.value + circuit.r4.value) / circuit.r3.value;\r\n var result = FeedForwardStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n\r\n createBigHugeCircuitGroup(commercialCircuit, toleranceInput) {\r\n return this.bigHugeCircuitGroupModel.create({ circuit: commercialCircuit, toleranceInput: toleranceInput });\r\n }\r\n\r\n getInterestingCircuits(commercialCircuit, toleranceInput) {\r\n var pieWedgeTable = [];\r\n var bigHugeCircuitGroup = this.bigHugeCircuitGroupModel.create({\r\n circuit: commercialCircuit,\r\n toleranceInput: toleranceInput,\r\n });\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -180,\r\n range: 10,\r\n explanatoryText: 'low Q mid fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -135,\r\n range: 15,\r\n explanatoryText: 'low Q low fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -90,\r\n range: 10,\r\n explanatoryText: 'mid Q low fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -45,\r\n range: 15,\r\n explanatoryText: 'high Q low fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -20,\r\n range: 15,\r\n explanatoryText: 'high Q med-low fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 0,\r\n range: 10,\r\n explanatoryText: 'high Q mid fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 20,\r\n range: 15,\r\n explanatoryText: 'high Q med-high fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 45,\r\n range: 15,\r\n explanatoryText: 'high Q high fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 90,\r\n range: 15,\r\n explanatoryText: 'mid Q high fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 135,\r\n range: 10,\r\n explanatoryText: 'low Q high fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n\r\n var result = pieWedgeTable.map((pieWedge) => {\r\n return pieWedge.interestingCircuit;\r\n });\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class DeliyannisBandPassNoiseGroup extends BaseNoiseGroup {\r\n c1;\r\n c2;\r\n r1;\r\n r2;\r\n r3;\r\n r4;\r\n r5;\r\n opAmp;\r\n frequencyArray;\r\n magnitude;\r\n\r\n @computed('c1', 'r1', 'r3', 'r4', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var r5 = this.r5;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexRParallelArray = filterAmplitude.map((item) => {\r\n return item.complexRParallel;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var rxArray = filterAmplitude.map((item) => {\r\n return item.rx;\r\n });\r\n var complexDenominatorArray = filterAmplitude.map((item) => {\r\n return item.complexDenominator;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var noiseSource = NoiseSource.create({\r\n c1: c1,\r\n c2: c2,\r\n r1: r1,\r\n r2: r2,\r\n r3: r3,\r\n r4: r4,\r\n r5: r5,\r\n opAmp: opAmp,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var complexRParallel = complexRParallelArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n var rx = rxArray[index];\r\n var complexDenominator = complexDenominatorArray[index];\r\n return noiseSource.totalNoise(item, complexDenominator, complexRParallel, rx, sImaginary);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport * as R2 from './noise-sources/r2';\r\nimport * as R3 from './noise-sources/r3';\r\nimport * as R4 from './noise-sources/r4';\r\nimport * as R5 from './noise-sources/r5';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class DeliyannisBandPassNoiseSource extends EmberObject {\r\n c1 = null;\r\n c2 = null;\r\n r1 = null;\r\n r2 = null;\r\n r3 = null;\r\n r4 = null;\r\n r5 = null;\r\n opAmp = null;\r\n _r1Noise(filterAmplitude, complexDenominator, complexRParallel, rx, sImaginary) {\r\n var r1 = this.r1;\r\n var c1 = this.c1;\r\n var r5 = this.r5;\r\n var complexAlphaMinus = R1.computeComplexAlphaMinus(complexDenominator, c1, r1, r5, rx, sImaginary);\r\n var complexFF = R1.computeComplexFF(complexRParallel, r1);\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r2Noise(filterAmplitude, complexDenominator, complexRParallel, rx, sImaginary) {\r\n var c1 = this.c1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n var complexAlphaMinus = R2.computeComplexAlphaMinus(complexDenominator, c1, r2, r5, rx, sImaginary);\r\n var complexFF = R2.computeComplexFF(complexRParallel, r2);\r\n var value = Math.sqrt(r2 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r3Noise(filterAmplitude, complexRParallel) {\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaMinus = R3.computeComplexAlphaMinus(r3, r4);\r\n var complexFF = R3.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r3 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r4Noise(filterAmplitude, complexRParallel) {\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaMinus = R4.computeComplexAlphaMinus(r3, r4);\r\n var complexFF = R4.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r4 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r5Noise(filterAmplitude, complexDenominator, rx, sImaginary) {\r\n var c1 = this.c1;\r\n var r5 = this.r5;\r\n var complexAlphaMinus = R5.computeComplexAlphaMinus(complexDenominator, c1, rx, sImaginary);\r\n var complexFF = R5.computeComplexFF();\r\n var value = Math.sqrt(r5 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpNegCurrent(filterAmplitude, complexRParallel) {\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaMinus = OpAmpNegCurrent.computeComplexAlphaMinus(r3, r4);\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(complexRParallel, r3, r4);\r\n var value = this.opAmp.iNoise;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpPosCurrent(filterAmplitude, complexDenominator, complexRParallel, rx, sImaginary) {\r\n var c1 = this.c1;\r\n var r5 = this.r5;\r\n var complexAlphaMinus = OpAmpPosCurrent.computeComplexAlphaMinus(complexDenominator, c1, r5, rx, sImaginary);\r\n var complexFF = OpAmpPosCurrent.computeComplexFF(complexRParallel);\r\n var value = this.iNoise;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpVoltage(filterAmplitude) {\r\n var complexAlphaMinus = OpAmpVoltage.computeComplexAlphaMinus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = this.vNoise;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n totalNoise(filterAmplitude, complexDenominator, complexRParallel, rx, sImaginary) {\r\n var r1Noise = this._r1Noise(filterAmplitude, complexDenominator, complexRParallel, rx, sImaginary);\r\n var r2Noise = this._r2Noise(filterAmplitude, complexDenominator, complexRParallel, rx, sImaginary);\r\n var r3Noise = this._r3Noise(filterAmplitude, complexRParallel);\r\n var r4Noise = this._r4Noise(filterAmplitude, complexRParallel);\r\n var r5Noise = this._r5Noise(filterAmplitude, complexDenominator, rx, sImaginary);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(filterAmplitude, complexRParallel);\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude, complexDenominator, complexRParallel, rx, sImaginary);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude);\r\n var noiseArray = [r1Noise, r2Noise, r3Noise, r4Noise, r5Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as CommonUtils from '../../../../../utils/common';\r\nimport * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(r3, r4) {\r\n var result = Complex.createComplex(-1 * CommonUtils.parallel(r3, r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var result = complexR3.mult(complexRParallel.divide(Complex.createComplex(r3 + r4, 0)));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, c1, r5, rx, sImaginary) {\r\n var result = Complex.createComplex(r5, r5 * 2 * sImaginary * rx * c1).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel) {\r\n return complexRParallel;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus() {\r\n return Complex.createComplex(1, 0);\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, c1, r1, r5, rx, sImaginary) {\r\n var result = Complex.createComplex(0, (sImaginary * r5 * c1 * rx) / r1).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r1) {\r\n var complexR1 = Complex.createComplex(r1, 0);\r\n var result = complexRParallel.divide(complexR1);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, c1, r2, r5, rx, sImaginary) {\r\n var result = Complex.createComplex(0, (sImaginary * r5 * c1 * rx) / r2).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r2) {\r\n var complexR2 = Complex.createComplex(r2, 0);\r\n var result = complexRParallel.divide(complexR2);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r4) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR1 = Complex.createComplex(r3 + r4, 0);\r\n var result = complexRParallel.divide(complexR1);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r3) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR1 = Complex.createComplex(r3 + r4, 0);\r\n var result = complexRParallel.divide(complexR1);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, c1, rx, sImaginary) {\r\n var result = Complex.createComplex(1, 2 * sImaginary * rx * c1).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport function computeFromComponentValues(c1, c2, r1, r2, r3, r4, r5, gbw) {\r\n var resOne = 1 / (1 / r1 + 1 / r2);\r\n var resTwo = r5;\r\n var w0 = 1 / Math.sqrt(resOne * resTwo * c1 * c2);\r\n var fp = w0 / 2 / Math.PI;\r\n var q0 = (1 / 2) * Math.sqrt(resTwo / resOne);\r\n var a = resOne / r1;\r\n var gain0 = ((1 / 2) * a * resTwo) / resOne;\r\n var q;\r\n var gain;\r\n var k;\r\n var alpha;\r\n\r\n if (r4 > 1e20) {\r\n q = q0;\r\n gain = gain0;\r\n k = 0;\r\n } else {\r\n k = r3 / (r3 + r4);\r\n alpha = k / (1 - k);\r\n q = q0 / (1 - 2 * alpha * q0 * q0);\r\n gain = (gain0 * q) / q0 / (1 - k);\r\n }\r\n\r\n var epsilon = ((2 * q0) / (gbw / fp)) * (1 / ((1 - k) * (1 - k)));\r\n var errorplusOne = Math.sqrt(1 + epsilon);\r\n fp = fp / errorplusOne;\r\n q = q / errorplusOne;\r\n\r\n var result = EmberObject.create({ stageQ: q, stageFp: fp, gain: gain });\r\n return result;\r\n}\r\n\r\nexport function execute(circuit) {\r\n var r1 = circuit.r1.value;\r\n var r2 = circuit.r2.value;\r\n var r3 = circuit.r3 ? circuit.r3.value : null;\r\n var r4 = circuit.r4 ? circuit.r4.value : null;\r\n var r5 = circuit.r5.value;\r\n var c1 = circuit.c1.value;\r\n var c2 = circuit.c2.value;\r\n var gbw = circuit.opAmp.gbw;\r\n return this.computeFromComponentValues(c1, c2, r1, r2, r3, r4, r5, gbw);\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport FilterConstants from '../../../filter-constants';\r\nimport DeliyannisBandPass from './band-pass/main';\r\nimport BaseImplementation from '../base-implementation';\r\nimport * as CommonUtils from '../../../utils/common';\r\n\r\nexport default class DeliyannisFriend extends BaseImplementation {\r\n filter;\r\n preferredAlgorithm;\r\n stageFp;\r\n gain;\r\n frequencyArray;\r\n stageQ;\r\n name = FilterConstants.implementationType.deliyannisFriend;\r\n\r\n @computed('filter') get instance() {\r\n var filter = this.filter;\r\n var result = null;\r\n var algorithm = this.algorithm;\r\n\r\n if (filter.name === FilterConstants.filterType.bandPass) {\r\n result = DeliyannisBandPass.create({ algorithm: algorithm });\r\n } else {\r\n throw 'Filter type not supported';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('name', 'preferredAlgorithm') get algorithm() {\r\n var filter = this.filter;\r\n var name = this.name;\r\n var preferredAlgorithm = this.preferredAlgorithm;\r\n\r\n if (!CommonUtils.isNullOrUndefined(preferredAlgorithm)) {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n const algorithm = preferredAlgorithm[`${name}|${filter.name}`];\r\n return algorithm;\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n } else {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n return FilterConstants.model.inputs.components.defaultAlgorithm['sallenKey|lowPass'];\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n }\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n return this.instance.getStepValues(idealStep, circuit, timeAxis);\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n return this.instance.createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue);\r\n }\r\n\r\n createBigHugeCircuitGroup(circuit, toleranceInput) {\r\n return this.instance.createBigHugeCircuitGroup(circuit, toleranceInput);\r\n }\r\n\r\n getInterestingCircuits(commercialCircuit, toleranceInput) {\r\n return this.instance.getInterestingCircuits(commercialCircuit, toleranceInput);\r\n }\r\n}\r\n","import { computed } from '@ember/object';\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport BaseActualFilterAmplitude from '../../implementation-common/base-actual-filter-amplitude';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default BaseActualFilterAmplitude.extend({\r\n whoAmI: 'app/models/implementation/first-order/common/actual-filter-amplitude.js',\r\n complexAlphaPlus: Complex.createComplex(0, 0),\r\n complexBetaPlus: Complex.createComplex(0, 0),\r\n complexRParallel: computed('r3', 'r4', 'opAmp', function () {\r\n var rOut = this.opAmp.rOut;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var rParallel = CommonUtils.parallel(rOut, r3 + r4);\r\n var result = Complex.createComplex(rParallel, 0);\r\n return result;\r\n }),\r\n complexFF: Complex.createComplex(0, 0),\r\n complexAlphaMinus: Complex.createComplex(0, 0),\r\n complexBetaMinus: computed('r3', 'r4', 'sImaginary', function () {\r\n var sImaginary = this.sImaginary;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var complexBetaDenom = Complex.createComplex(\r\n r3 + r4,\r\n r4 * r3 * FilterConstants.Limits.PARASITIC_INPUT_CAP * sImaginary,\r\n );\r\n var result = complexR3.divide(complexBetaDenom);\r\n return result;\r\n }),\r\n inputImpedance: computed('c1', 'r1', 'sImaginary', function () {\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var sImaginary = this.sImaginary;\r\n var result = Complex.createComplex(r1, -1 / (c1 * sImaginary));\r\n return result;\r\n }),\r\n});\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport * as ReverseImplementation from './reverse-implementation';\r\nimport BigHugeCircuit from './big-huge-circuit';\r\nimport BaseBigHugeCircuitGroup from '../../implementation-common/base-big-huge-circuit-group';\r\n\r\nexport default class FirstOrderCommonBigHugeCircuitGroup extends BaseBigHugeCircuitGroup {\r\n circuit;\r\n reverseImplementation = ReverseImplementation;\r\n\r\n @computed('circuit', 'nominalValues', 'reverseImplementation', 'gbwArray') get circuits() {\r\n var circuit = this.circuit;\r\n var nominalGbw = circuit.opAmp.gbw;\r\n var nominalValues = this.nominalValues;\r\n var reverseImplementation = this.reverseImplementation;\r\n var c1ToleranceArray = circuit.c1.toleranceArray;\r\n var r1ToleranceArray = circuit.r1.toleranceArray;\r\n var r3ToleranceArray = circuit.r3.toleranceArray;\r\n var r4ToleranceArray = circuit.r4.toleranceArray;\r\n var inverseArray = circuit.r3.value ? r3ToleranceArray : r4ToleranceArray;\r\n\r\n var r4Start = r3ToleranceArray.length - 1;\r\n var gbwArray = this.gbwArray;\r\n var bigHugeCircuitArray = [];\r\n gbwArray.forEach((gbwValue) => {\r\n r1ToleranceArray.forEach((r1Value) => {\r\n inverseArray.forEach((inverseValue, index) => {\r\n var r3Value = r3ToleranceArray[index];\r\n var r4Value = r4ToleranceArray[r4Start - index];\r\n c1ToleranceArray.forEach((c1Value) => {\r\n let item = BigHugeCircuit.create({\r\n c1: c1Value,\r\n r1: r1Value,\r\n r3: r3Value,\r\n r4: r4Value,\r\n opAmpGbw: gbwValue,\r\n nominalValues: nominalValues,\r\n nominalGbw: nominalGbw,\r\n reverseImplementation: reverseImplementation,\r\n });\r\n bigHugeCircuitArray.push(item);\r\n });\r\n });\r\n });\r\n });\r\n\r\n var result = this.setNormalizers(bigHugeCircuitArray);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseBigHugeCircuit from '../../implementation-common/big-huge-circuit';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class FirstOrderCommonBigHugeCircuit extends BaseBigHugeCircuit {\r\n @computed('c1', 'r1', 'r3', 'r4') get circuitStageValues() {\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var result = ReverseImplementation.computeFromComponentValues(c1, r1, r3, r4);\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../../../filter-constants';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\n\r\nexport function computeCapacitorLimitMultipliers(c1IdealValue, r1IdealValue) {\r\n let maxMultiplier = computeCapacitorMaximumLimitMultiplier(c1IdealValue, r1IdealValue);\r\n let minMultiplier = computeCapacitorMinimumLimitMultiplier(c1IdealValue, r1IdealValue);\r\n return {\r\n capacitorMinimumLimitMultiplier: minMultiplier,\r\n capacitorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nexport function computeGainResistorLimitMultipliers(r3IdealValue, r4IdealValue) {\r\n let minMultiplier = CircuitUtils.getResistorMinimumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n let maxMultiplier = CircuitUtils.getResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n return {\r\n resistorMinimumLimitMultiplier: minMultiplier,\r\n resistorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nfunction computeCapacitorMaximumLimitMultiplier(c1IdealValue, r1IdealValue) {\r\n var result = FilterConstants.Limits.CBIG_COMP_LIMIT / c1IdealValue;\r\n var r1Tiny = r1IdealValue / result;\r\n\r\n if (r1Tiny < FilterConstants.Limits.RSMALL_LOAD_LIMIT) {\r\n result = (result * r1Tiny) / FilterConstants.Limits.RSMALL_LOAD_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMinimumLimitMultiplier(c1IdealValue, r1IdealValue) {\r\n var result = FilterConstants.Limits.CSMALL_COMP_LIMIT / c1IdealValue;\r\n var r1Big = r1IdealValue / result;\r\n\r\n if (r1Big > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n result = (result * r1Big) / FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as FirstOrderCommonCircuitLimitsUtils from './circuit-limits-utils';\r\nimport * as ComponentFactory from '../../../components/components-factory';\r\nimport { getImplementation } from '../../../gestures/optimization';\r\n\r\nimport { calculateFilterComponents } from '@ebiz/aditools-filter';\r\n\r\n// Encapsulates the creation of circuit components for stage properties and optimization\r\n// This is used for both first-order lowpass and first-order highpass.\r\n// A circuit is created from the stage properties stageFp, stageQ, and gain, and the optimization;\r\n\r\nexport default class FirstOrderCommonCircuit extends EmberObject {\r\n // Inputs\r\n stageFp;\r\n stageQ;\r\n gain;\r\n optimization;\r\n algorithm;\r\n\r\n // Figures output - used internally and also as output in the figures\r\n c1;\r\n r1;\r\n r3;\r\n r4;\r\n masterCapacitor;\r\n allowGainChange;\r\n sizing;\r\n frequency;\r\n\r\n // For cGov params of calculateFilterComponents - aditools-filter\r\n c1IdealValue;\r\n\r\n init() {\r\n super.init();\r\n if (\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'stageFp, stageQ, gain, optimization, and algorithm should not be null';\r\n }\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.initialCapacitorValue)) {\r\n this.c1IdealValue = this._computeC1IdealValue(this.initialCapacitorValue);\r\n } else {\r\n this.c1IdealValue = this._computeC1IdealValue();\r\n }\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = FirstOrderCommonCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.r1IdealValue,\r\n );\r\n const gainResistorLimits = FirstOrderCommonCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits, gainResistorLimits);\r\n }\r\n\r\n _computeIdealValues() {\r\n const implementation = getImplementation(FilterConstants.implementationType.firstOrder);\r\n const rGain = this._computeR3AndR4().r3 + this._computeR3AndR4().r4;\r\n const c1IdealValue = this.c1IdealValue;\r\n const params = {\r\n type: this.algorithm,\r\n implementation: implementation,\r\n fp: this.stageFp,\r\n gain: this.gain,\r\n q: this.stageQ,\r\n cGov: c1IdealValue,\r\n rGainOrCCross: rGain,\r\n };\r\n const filterComponents = calculateFilterComponents(\r\n params.type,\r\n params.implementation,\r\n params.fp,\r\n params.gain,\r\n params.q,\r\n params.cGov,\r\n params.rGainOrCCross,\r\n );\r\n\r\n return {\r\n c1IdealValue: filterComponents.c1,\r\n c2IdealValue: filterComponents.c2,\r\n r1IdealValue: filterComponents.r1,\r\n r2IdealValue: filterComponents.r2,\r\n r3IdealValue: filterComponents.r3,\r\n r4IdealValue: filterComponents.r4,\r\n };\r\n }\r\n\r\n _computeR3AndR4() {\r\n const r3PlusR4 = this.optimization.determineStartingR3R4Value(this.stageFp);\r\n return CircuitUtils.computeR3AndR4(r3PlusR4, this.gain);\r\n }\r\n\r\n _computeC1IdealValue(value) {\r\n return value ? value : CircuitUtils.computeMasterCapacitorValue(this.optimization, this.stageFp);\r\n }\r\n\r\n // Private\r\n _computeComponents(idealValues, capacitorLimits, gainResistorLimits) {\r\n let r3NominalValue = ComponentFactory.createR3(idealValues.r3IdealValue, null, null).toCommercialComponent().value;\r\n this.allowGainChange = CircuitUtils.getGainChangeSupportStatus(idealValues.r3IdealValue, idealValues.r4IdealValue);\r\n let r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n );\r\n this.sizing = CircuitUtils.getResistorSize(r1);\r\n this.c1 = ComponentFactory.createC1(\r\n idealValues.c1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n );\r\n this.masterCapacitor = this.c1;\r\n let rcRatioInverse = CircuitUtils.getInverseOfMasterCapacitorRatio(this.c1);\r\n this.r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r3 = ComponentFactory.createR3(\r\n r3NominalValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n this.r4 = this._getR4(idealValues, gainResistorLimits);\r\n this.frequency = 1 / (2 * Math.PI * this.r1.value * this.c1.value);\r\n\r\n this.idealValues = idealValues;\r\n this.capacitorLimits = capacitorLimits;\r\n this.gainResistorLimits = gainResistorLimits;\r\n }\r\n\r\n // Private\r\n // R4 may have an ideal value but it is recomputed here based on gain and R3\r\n // since it should adjust depending on the current value of R3.\r\n // (If r3 is not present or idealValue is 0 or INFINITY, we use the idealValue)\r\n // R3 may change due to the user changing the slider position or r3 adjusting to its nominal value.\r\n // R3 may also change when changing the e-series in the tolerance tab.\r\n _getR4(idealValues, gainResistorLimits) {\r\n let result = null;\r\n if (idealValues.r3IdealValue !== 0 && idealValues.r3IdealValue !== FilterConstants.Limits.INFINITY)\r\n result = ComponentFactory.createR4FromR3AndGain(\r\n this.r3.value,\r\n this.gain,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n else\r\n result = ComponentFactory.createR4(\r\n idealValues.r4IdealValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n\r\n return result;\r\n }\r\n\r\n //\r\n changeGainValues(newR3Value) {\r\n if (this.allowGainChange) {\r\n this.r3 = this.r3.setValue(newR3Value);\r\n this.updateR4();\r\n }\r\n }\r\n\r\n updateR4() {\r\n this.r4 = this._getR4(this.idealValues, this.gainResistorLimits);\r\n }\r\n\r\n changeInitialCapacitor(value) {\r\n this.c1IdealValue = this._computeC1IdealValue(value);\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = FirstOrderCommonCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.r1IdealValue,\r\n );\r\n const gainResistorLimits = FirstOrderCommonCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits, gainResistorLimits);\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport BaseMain from '../../implementation-common/base-main';\r\nimport PieWedge from '../../implementation-common/base-pie-wedge';\r\nimport BigHugeCircuitGroupCommon from './big-huge-circuit-group';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class FirstOrderCommonMain extends BaseMain {\r\n bigHugeCircuitGroupModel;\r\n reverseImplementation;\r\n init() {\r\n this.bigHugeCircuitGroupModel = BigHugeCircuitGroupCommon;\r\n this.reverseImplementation = ReverseImplementation;\r\n }\r\n\r\n getInterestingCircuits(commercialCircuit, toleranceInput) {\r\n var pieWedgeTable = [];\r\n var bigHugeCircuitGroup = this.bigHugeCircuitGroupModel.create({\r\n circuit: commercialCircuit,\r\n toleranceInput: toleranceInput,\r\n });\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -90,\r\n range: 10,\r\n explanatoryText: 'Low fps',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 90,\r\n range: 10,\r\n explanatoryText: 'High fps',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n\r\n var result = pieWedgeTable.map((pieWedge) => {\r\n return pieWedge.interestingCircuit;\r\n });\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport function computeFromComponentValues(c1, r1, r3, r4) {\r\n var gain = 1 + r4 / r3;\r\n var fp = 1 / (Math.PI * 2 * r1 * c1);\r\n var q = 0;\r\n var result = EmberObject.create({ stageQ: q, stageFp: fp, gain: gain });\r\n return result;\r\n}\r\n\r\nexport function execute(circuit) {\r\n var c1 = circuit.c1.value;\r\n var r1 = circuit.r1.value;\r\n var r3 = circuit.r3.value;\r\n var r4 = circuit.r4.value;\r\n return computeFromComponentValues(c1, r1, r3, r4);\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport FilterConstants from '../../../filter-constants';\r\nimport FirstOrderLowPass from './low-pass/main';\r\nimport FirstOrderHighPass from './high-pass/main';\r\nimport BaseImplementation from '../base-implementation';\r\nimport * as CommonUtils from '../../../utils/common';\r\n\r\nexport default class FirstOrderImplementation extends BaseImplementation {\r\n filter;\r\n preferredAlgorithm;\r\n stageFp;\r\n gain;\r\n frequencyArray;\r\n name = FilterConstants.implementationType.firstOrder;\r\n\r\n @computed('filter', 'stageFp', 'stageQ', 'gain', 'frequencyArray') get instance() {\r\n var filter = this.filter;\r\n var stageFp = this.stageFp;\r\n var stageQ = this.stageQ;\r\n var gain = this.gain;\r\n var frequencyArray = this.frequencyArray;\r\n var result = null;\r\n var algorithm = this.algorithm;\r\n\r\n var hash = { stageFp: stageFp, stageQ: stageQ, gain: gain, frequencyArray: frequencyArray, algorithm: algorithm };\r\n if (filter.name === FilterConstants.filterType.lowPass) {\r\n result = FirstOrderLowPass.create(hash);\r\n } else if (filter.name === FilterConstants.filterType.highPass) {\r\n result = FirstOrderHighPass.create(hash);\r\n } else {\r\n throw 'Filter type not supported';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('name', 'preferredAlgorithm') get algorithm() {\r\n var filter = this.filter;\r\n var name = this.name;\r\n var preferredAlgorithm = this.preferredAlgorithm;\r\n\r\n if (!CommonUtils.isNullOrUndefined(preferredAlgorithm)) {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n const algorithm = preferredAlgorithm[`${name}|${filter.name}`];\r\n return algorithm;\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n } else {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n return FilterConstants.model.inputs.components.defaultAlgorithm['sallenKey|lowPass'];\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n }\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n return this.instance.getStepValues(idealStep, circuit, timeAxis);\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n return this.instance.createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue);\r\n }\r\n\r\n createBigHugeCircuitGroup(circuit, toleranceInput) {\r\n return this.instance.createBigHugeCircuitGroup(circuit, toleranceInput);\r\n }\r\n\r\n getInterestingCircuits(commercialCircuit, toleranceInput) {\r\n return this.instance.getInterestingCircuits(commercialCircuit, toleranceInput);\r\n }\r\n}\r\n","import { computed } from '@ember/object';\r\nimport CommonActualFilterAmplitude from '../common/actual-filter-amplitude';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default CommonActualFilterAmplitude.extend({\r\n r1: null,\r\n c1: null,\r\n complexAlphaPlus: computed('r1', 'c1', 'sImaginary', function () {\r\n var sImaginary = this.sImaginary;\r\n\r\n var r1 = this.r1;\r\n var c1 = this.c1;\r\n\r\n var result = Complex.createComplex(0, r1 * c1 * sImaginary).divide(Complex.createComplex(1, r1 * c1 * sImaginary));\r\n return result;\r\n }),\r\n});\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport FirstOrderCommonCircuit from '../common/circuit';\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport NoiseGroup from './noise-group';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport HighPassFirstOrderCircuit from './circuit';\r\n\r\n// First-order highpass. This inherits for first-order common. Most of the logic for creating\r\n// the circuit components are in the base class.\r\nexport default class FirstOrderHighPassCircuit extends FirstOrderCommonCircuit {\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths;\r\n opAmp;\r\n needReferenceStage = true;\r\n init() {\r\n super.init();\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = HighPassFirstOrderCircuit;\r\n this.supportedComponents = ['c1', 'r1', 'r3', 'r4'];\r\n this.idealOpAmpValuePaths = ['r1', 'r3', 'r4'];\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class FirstOrderHighPassIdealOpAmp extends EmberObject {\r\n // Inputs\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n optimization = null;\r\n stageFp = null;\r\n gain = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n specialGain = null;\r\n name = 'ideal';\r\n slewRate = 0;\r\n rOutOverGBW = FilterConstants.Limits.INFINITY;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r1) ||\r\n CommonUtils.isNullOrUndefined(this.r3) ||\r\n CommonUtils.isNullOrUndefined(this.r4) ||\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r1, r3, r4, stageFp, gain, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.gbw = this.computeGbw();\r\n this.rOut = this.computeROut(this.gbw);\r\n this.specialGain = this.computeSpecialGain();\r\n }\r\n\r\n computeSpecialGain() {\r\n return 1 + this.r4 / this.r3;\r\n }\r\n\r\n computeGbw() {\r\n var fMultiplier = this.optimization.opAmpRequirementSpecValues.fMultiplier;\r\n var result = fMultiplier * this.stageFp * this.gain;\r\n return result;\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = this.r1;\r\n return dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n }\r\n\r\n computeROut(gbw) {\r\n return this.rOutOverGBW * gbw;\r\n }\r\n}\r\n","import * as RollOffStepResponse from '../../../step-response/roll-off';\r\nimport Circuit from './circuit';\r\nimport FirstOrderCommonMain from '../common/main';\r\n\r\nexport default class FirstOrderHighPassMain extends FirstOrderCommonMain {\r\n algorithm;\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = (circuit.r3.value + circuit.r4.value) / circuit.r3.value;\r\n var result = RollOffStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class FirstOrderHighPass extends BaseNoiseGroup {\r\n c1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n frequencyArray = null;\r\n opAmp = null;\r\n\r\n @computed('c1', 'r1', 'r3', 'r4', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexRParallelArray = filterAmplitude.map((item) => {\r\n return item.complexRParallel;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var noiseSource = NoiseSource.create({\r\n c1: c1,\r\n r1: r1,\r\n r3: r3,\r\n r4: r4,\r\n opAmp: opAmp,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var complexRParallel = complexRParallelArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n return noiseSource.totalNoise(item, complexRParallel, sImaginary);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport * as R3 from './noise-sources/r3';\r\nimport * as R4 from './noise-sources/r4';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class FirstOrderHighPassNoiseSource extends EmberObject {\r\n c1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n opAmp = null;\r\n _r1Noise(filterAmplitude, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r1 = this.r1;\r\n var c1 = this.c1;\r\n var complexAlphaPlus = R1.computeComplexAlphaPlus(c1, r1, sImaginary);\r\n var complexFF = R1.computeComplexFF();\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r3Noise(filterAmplitude, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = R3.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = R3.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r3 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r4Noise(filterAmplitude, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = R4.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = R4.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r4 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpNegCurrent(filterAmplitude, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = OpAmpNegCurrent.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(complexRParallel, r3, r4);\r\n var value = this.opAmp.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpPosCurrent(filterAmplitude, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var complexAlphaPlus = OpAmpPosCurrent.computeComplexAlphaPlus(c1, r1, sImaginary);\r\n var complexFF = OpAmpPosCurrent.computeComplexFF();\r\n var value = this.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpVoltage(filterAmplitude) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var complexAlphaPlus = OpAmpVoltage.computeComplexAlphaPlus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = this.vNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n totalNoise(filterAmplitude, complexRParallel, sImaginary) {\r\n var r1Noise = this._r1Noise(filterAmplitude, sImaginary);\r\n var r3Noise = this._r3Noise(filterAmplitude, complexRParallel);\r\n var r4Noise = this._r4Noise(filterAmplitude, complexRParallel);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(filterAmplitude, complexRParallel);\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude, sImaginary);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude);\r\n var noiseArray = [r1Noise, r3Noise, r4Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\nimport * as CommonUtils from '../../../../../utils/common';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex(-1 * CommonUtils.parallel(r3, r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var result = complexR3.mult(complexRParallel.divide(Complex.createComplex(r3 + r4, 0)));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, sImaginary) {\r\n var result = Complex.createComplex(r1, 0).divide(Complex.createComplex(1, r1 * c1 * sImaginary));\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus() {\r\n return Complex.createComplex(1, 0);\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, sImaginary) {\r\n var result = Complex.createComplex(0, r1 * c1 * sImaginary).divide(Complex.createComplex(1, r1 * c1 * sImaginary));\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n var result = Complex.createComplex(0, 0);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r4) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var result = complexRParallel.divide(Complex.createComplex(r3 + r4, 0));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r3) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var result = complexRParallel.divide(Complex.createComplex(r3 + r4, 0));\r\n return result;\r\n}\r\n","import { computed } from '@ember/object';\r\nimport FirstOrderActualFilterAmplitude from '../common/actual-filter-amplitude';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default FirstOrderActualFilterAmplitude.extend({\r\n c1: null,\r\n r1: null,\r\n complexAlphaPlus: computed('c1', 'r1', 'sImaginary', function () {\r\n var sImaginary = this.sImaginary;\r\n var complexOne = Complex.createComplex(1, 0);\r\n var r1 = this.r1;\r\n var c1 = this.c1;\r\n\r\n var result = complexOne.divide(Complex.createComplex(1, r1 * c1 * sImaginary));\r\n return result;\r\n }),\r\n});\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport FirstOrderCommonCircuit from '../common/circuit';\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport NoiseGroup from './noise-group';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport LowPassFirstOrderCircuit from './circuit';\r\nimport { isNearInfinity } from '../../../../utils/common';\r\n\r\n// First-order lowpass. This inherits for first-order common. Most of the logic for creating\r\n// the circuit components are in the base class.\r\nexport default class FirstOrderLowPassCircuit extends FirstOrderCommonCircuit {\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths; //components where the ideal-op-amp is dependent on. See the ideal op amp as to which components it's using for this configuration.\r\n init() {\r\n super.init();\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = LowPassFirstOrderCircuit;\r\n this.supportedComponents = ['c1', 'r1', 'r3', 'r4'];\r\n this.idealOpAmpValuePaths = ['r1', 'r3', 'r4'];\r\n }\r\n\r\n @computed('idealValues.r3IdealValue') get needReferenceStage() {\r\n var result = isNearInfinity(this.idealValues.r3IdealValue);\r\n return !result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class FirstOrderLowPassIdealOpAmp extends EmberObject {\r\n // Inputs\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n optimization = null;\r\n stageFp = null;\r\n gain = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n specialGain = null;\r\n name = 'ideal';\r\n slewRate = 0;\r\n rOutOverGBW = FilterConstants.Limits.INFINITY;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r1) ||\r\n CommonUtils.isNullOrUndefined(this.r3) ||\r\n CommonUtils.isNullOrUndefined(this.r4) ||\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r1, r3, r4, stageFp, gain, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.gbw = this.computeGbw();\r\n this.rOut = this.computeROut(this.gbw);\r\n this.specialGain = this.computeSpecialGain();\r\n }\r\n\r\n computeSpecialGain() {\r\n return 1 + this.r4 / this.r3;\r\n }\r\n\r\n computeGbw() {\r\n var allowedError = this.optimization.opAmpRequirementSpecValues.allowedError;\r\n var attenuation = 1 - allowedError;\r\n var fCutOff = this.stageFp / Math.sqrt(1 / (attenuation * attenuation) - 1);\r\n var gbw = fCutOff * this.gain;\r\n return gbw;\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = this.r1;\r\n return dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n }\r\n\r\n computeROut(gbw) {\r\n return this.rOutOverGBW * gbw;\r\n }\r\n}\r\n","import * as RollOffStepResponse from '../../../step-response/roll-off';\r\nimport Circuit from './circuit';\r\nimport FirstOrderCommonMain from '../common/main';\r\n\r\nexport default class FirstOrderLowPassMain extends FirstOrderCommonMain {\r\n algorithm;\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = (circuit.r3.value + circuit.r4.value) / circuit.r3.value;\r\n var result = RollOffStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class FirstOrderLowPass extends BaseNoiseGroup {\r\n c1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n frequencyArray = null;\r\n\r\n @computed('c1', 'r1', 'r3', 'r4', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexRParallelArray = filterAmplitude.map((item) => {\r\n return item.complexRParallel;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var noiseSource = NoiseSource.create({\r\n c1: c1,\r\n r1: r1,\r\n r3: r3,\r\n r4: r4,\r\n opAmp: opAmp,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var complexRParallel = complexRParallelArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n return noiseSource.totalNoise(item, complexRParallel, sImaginary);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport * as R3 from './noise-sources/r3';\r\nimport * as R4 from './noise-sources/r4';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class FirstOrderLowPassNoiseSource extends EmberObject {\r\n c1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n opAmp = null;\r\n _r1Noise(filterAmplitude, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r1 = this.r1;\r\n var c1 = this.c1;\r\n var complexAlphaPlus = R1.computeComplexAlphaPlus(c1, r1, sImaginary);\r\n var complexFF = R1.computeComplexFF();\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r3Noise(filterAmplitude, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = R3.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = R3.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r3 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r4Noise(filterAmplitude, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = R4.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = R4.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r4 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpNegCurrent(filterAmplitude, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = OpAmpNegCurrent.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(complexRParallel, r3, r4);\r\n var value = this.opAmp.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpPosCurrent(filterAmplitude, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var complexAlphaPlus = OpAmpPosCurrent.computeComplexAlphaPlus(c1, r1, sImaginary);\r\n var complexFF = OpAmpPosCurrent.computeComplexFF();\r\n var value = this.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpVoltage(filterAmplitude) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var complexAlphaPlus = OpAmpVoltage.computeComplexAlphaPlus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = this.vNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n totalNoise(filterAmplitude, complexRParallel, sImaginary) {\r\n var r1Noise = this._r1Noise(filterAmplitude, sImaginary);\r\n var r3Noise = this._r3Noise(filterAmplitude, complexRParallel);\r\n var r4Noise = this._r4Noise(filterAmplitude, complexRParallel);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(filterAmplitude, complexRParallel);\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude, sImaginary);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude);\r\n var noiseArray = [r1Noise, r3Noise, r4Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as CommonUtils from '../../../../../utils/common';\r\nimport * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex(-1 * CommonUtils.parallel(r3, r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var result = complexR3.mult(complexRParallel.divide(Complex.createComplex(r3 + r4, 0)));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, sImaginary) {\r\n var result = Complex.createComplex(r1, 0).divide(Complex.createComplex(1, r1 * c1 * sImaginary));\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus() {\r\n return Complex.createComplex(1, 0);\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, sImaginary) {\r\n var result = Complex.createComplex(1, 0).divide(Complex.createComplex(1, r1 * c1 * sImaginary));\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n var result = Complex.createComplex(0, 0);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r4) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var result = complexRParallel.divide(Complex.createComplex(r3 + r4, 0));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r3) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var result = complexRParallel.divide(Complex.createComplex(r3 + r4, 0));\r\n return result;\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport * as Complex from '../../process-data/complex';\r\n\r\nexport default class BaseActualFilterAmplitude extends EmberObject {\r\n opAmp = null;\r\n frequency = null;\r\n whoAmI = 'app/models/implementation/implementation-common/base-actual-filter-amplitude.js';\r\n // possibly pre populate sImaginary and sSquared and complexROut\r\n @computed('frequency') get sImaginary() {\r\n var frequency = this.frequency;\r\n var result = frequency * 2 * Math.PI;\r\n return result;\r\n }\r\n @computed('frequency') get sSquared() {\r\n var frequency = this.frequency;\r\n var result = -4 * Math.PI * Math.PI * frequency * frequency;\r\n return result;\r\n }\r\n @computed('opAmp') get complexROut() {\r\n var rOut = this.opAmp.rOut;\r\n var result = Complex.createComplex(rOut, 0);\r\n return result;\r\n }\r\n @computed('opAmp', 'sSquared', 'sImaginary', 'complexRParallel', 'complexROut')\r\n get complexA() {\r\n var sSquared = this.sSquared;\r\n var sImaginary = this.sImaginary;\r\n var complexRParallel = this.complexRParallel;\r\n var complexROut = this.complexROut;\r\n var result = null;\r\n if (this.opAmp.polesZeroes) {\r\n result = this._calculateComplexA_PolesAndZeroes(this.opAmp.polesZeroes, sImaginary);\r\n } else {\r\n result = this._calculateComplexA(complexRParallel, complexROut, sImaginary, sSquared);\r\n }\r\n return result;\r\n }\r\n @computed('complexAlphaPlus', 'complexAlphaMinus', 'complexA', 'complexFF')\r\n get amplitudeNumerator() {\r\n var complexAlphaPlus = this.complexAlphaPlus;\r\n var complexAlphaMinus = this.complexAlphaMinus;\r\n var complexA = this.complexA;\r\n var complexFF = this.complexFF;\r\n let result = this._computeAmplitudeNumerator(complexAlphaPlus, complexAlphaMinus, complexA, complexFF);\r\n return result;\r\n }\r\n @computed('complexBetaMinus', 'complexBetaPlus', 'complexA')\r\n get amplitudeDenominator() {\r\n var complexOne = Complex.createComplex(1, 0);\r\n var complexBetaMinus = this.complexBetaMinus;\r\n var complexBetaPlus = this.complexBetaPlus;\r\n var complexA = this.complexA;\r\n var result = complexOne.plus(complexBetaMinus.subs(complexBetaPlus).mult(complexA));\r\n return result;\r\n }\r\n @computed('amplitudeNumerator', 'amplitudeDenominator')\r\n get complexAmplitude() {\r\n var amplitudeNumerator = this.amplitudeNumerator;\r\n var amplitudeDenominator = this.amplitudeDenominator;\r\n var result = amplitudeNumerator.divide(amplitudeDenominator);\r\n return result;\r\n }\r\n @computed('complexAmplitude') get magnitude() {\r\n var complexAmplitude = this.complexAmplitude;\r\n var result = complexAmplitude.magnitude();\r\n return result;\r\n }\r\n @computed('complexAmplitude') get phase() {\r\n var complexAmplitude = this.complexAmplitude;\r\n var result = Math.atan2(complexAmplitude.imaginary, complexAmplitude.real);\r\n return result;\r\n }\r\n setFrequency(frequency) {\r\n set(this, 'frequency', frequency);\r\n }\r\n computeMagnitude(complexAlphaPlus, complexFF) {\r\n let complexAlphaMinus = this.complexAlphaMinus;\r\n let complexA = this.complexA;\r\n let amplitudeDenominator = this.amplitudeDenominator;\r\n let amplitudeNumerator = this._computeAmplitudeNumerator(complexAlphaPlus, complexAlphaMinus, complexA, complexFF);\r\n let complexAmplitude = this._computeComplexAmplitude(amplitudeNumerator, amplitudeDenominator);\r\n return complexAmplitude.magnitude();\r\n }\r\n _computeAmplitudeNumerator(complexAlphaPlus, complexAlphaMinus, complexA, complexFF) {\r\n var result = complexAlphaPlus.subs(complexAlphaMinus).mult(complexA).plus(complexFF);\r\n return result;\r\n }\r\n _computeComplexAmplitude(amplitudeNumerator, amplitudeDenominator) {\r\n var result = amplitudeNumerator.divide(amplitudeDenominator);\r\n return result;\r\n }\r\n _calculateComplexA_PolesAndZeroes(polesZeroes, sImaginary) {\r\n var i;\r\n var freq = sImaginary / (2 * Math.PI);\r\n\r\n //Try to keep our complex number declarations to just these three, since each new complex number is quite expensive\r\n var complexProduct = Complex.createComplex(0, 0);\r\n var complexDenom = Complex.createComplex(0, 0);\r\n var complexNum = Complex.createComplex(0, 0);\r\n\r\n //GBW/s\r\n complexProduct.real = 0;\r\n complexProduct.imaginary = (-1 * polesZeroes.gbw) / freq;\r\n\r\n //poles: p[i]/(s+p[i])\r\n for (i = 0; i < polesZeroes.p.length; i++) {\r\n complexNum.real = polesZeroes.p[i];\r\n complexNum.imaginary = 0;\r\n complexDenom.real = polesZeroes.p[i];\r\n complexDenom.imaginary = freq;\r\n complexProduct = complexNum.divide(complexDenom).mult(complexProduct);\r\n }\r\n\r\n //zeroes: (s+z[i])/z[i]\r\n for (i = 0; i < polesZeroes.z.length; i++) {\r\n complexNum.real = polesZeroes.z[i];\r\n complexNum.imaginary = freq;\r\n complexDenom.real = polesZeroes.z[i];\r\n complexDenom.imaginary = 0;\r\n complexProduct = complexNum.divide(complexDenom).mult(complexProduct);\r\n }\r\n\r\n //right half plan zero: (s-rhpz)/rhpz\r\n complexNum.real = -1 * polesZeroes.rhpz;\r\n complexNum.imaginary = freq;\r\n complexDenom.real = -1 * polesZeroes.rhpz;\r\n complexDenom.imaginary = 0;\r\n complexProduct = complexNum.divide(complexDenom).mult(complexProduct);\r\n\r\n return complexProduct;\r\n }\r\n _calculateComplexA(complexRParallel, complexROut, sImaginary, sSquared) {\r\n var GBW = this.opAmp.gbw;\r\n //we combined the last two terms in the word doc into one term so we could use a lot less complex math (to speed things up)\r\n var complexTopTerm = Complex.createComplex(8 * Math.PI * Math.PI * GBW * GBW, 0);\r\n var complexBottomTerm = Complex.createComplex(sSquared, 4 * Math.PI * GBW * sImaginary);\r\n return complexRParallel.divide(complexROut).mult(complexTopTerm.divide(complexBottomTerm));\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport FilterConstants from '../../../filter-constants';\r\n\r\nexport default class BigHugeCircuitGroup extends EmberObject {\r\n circuit = null;\r\n toleranceInput = null;\r\n reverseImplementation = null;\r\n @computed('toleranceInput', 'circuit') get gbwArray() {\r\n var toleranceInput = this.toleranceInput;\r\n var gbw = toleranceInput.opAmpGbwTolerance;\r\n var opAmpGbw = this.circuit.opAmp.gbw;\r\n var result = [opAmpGbw];\r\n if (gbw === FilterConstants.gbwTolerance.twenty) {\r\n result = [opAmpGbw * 0.8, opAmpGbw, opAmpGbw * 1.2];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit', 'reverseImplementation') get nominalValues() {\r\n var circuit = this.circuit;\r\n var result = this.reverseImplementation.execute(circuit);\r\n return result;\r\n }\r\n\r\n @computed('circuits') get magnitude() {\r\n var circuits = this.circuits;\r\n var result = circuits.map((circuit) => {\r\n return circuit.magnitude;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuits') get phase() {\r\n var circuits = this.circuits;\r\n var result = circuits.map((circuit) => {\r\n return circuit.phase;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get inputImpedanceMagnitude() {\r\n var result = this.circuit.inputImpedanceMagnitude;\r\n return result;\r\n }\r\n\r\n @computed('circuit') get inputImpedancePhase() {\r\n var result = this.circuit.inputImpedancePhase;\r\n return result;\r\n }\r\n\r\n setNormalizers(bigHugeCircuitArray) {\r\n var result = bigHugeCircuitArray;\r\n var absRealPartArray = result.map((item) => {\r\n return Math.abs(item.absoluteRealPart);\r\n });\r\n var absImaginaryPartArray = result.map((item) => {\r\n return Math.abs(item.absoluteImaginaryPart);\r\n });\r\n var maximumRealPart = Math.max.apply(Math, absRealPartArray);\r\n var maximumImaginaryPart = Math.max.apply(Math, absImaginaryPartArray);\r\n\r\n result.forEach((element) => {\r\n set(element, 'realPartNormalizer', maximumRealPart);\r\n set(element, 'imaginaryPartNormalizer', maximumImaginaryPart);\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport PieWedge from './base-pie-wedge';\r\n\r\nexport default class BaseMain extends EmberObject {\r\n bigHugeCircuitGroupModel = null;\r\n\r\n getInterestingCircuits(commercialCircuit, toleranceInput) {\r\n var pieWedgeTable = [];\r\n var bigHugeCircuitGroup = this.bigHugeCircuitGroupModel.create({\r\n circuit: commercialCircuit,\r\n toleranceInput: toleranceInput,\r\n });\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -180,\r\n range: 10,\r\n explanatoryText: 'low Q mid fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -135,\r\n range: 20,\r\n explanatoryText: 'low Q low fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -90,\r\n range: 10,\r\n explanatoryText: 'mid Q low fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: -45,\r\n range: 20,\r\n explanatoryText: 'high Q low fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 0,\r\n range: 10,\r\n explanatoryText: 'high Q mid fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 45,\r\n range: 20,\r\n explanatoryText: 'high Q high fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 90,\r\n range: 10,\r\n explanatoryText: 'mid Q high fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n pieWedgeTable.push(\r\n PieWedge.create({\r\n circuit: commercialCircuit,\r\n center: 135,\r\n range: 20,\r\n explanatoryText: 'low Q high fp',\r\n bigHugeCircuitGroup: bigHugeCircuitGroup,\r\n }),\r\n );\r\n\r\n var result = pieWedgeTable.map((pieWedge) => {\r\n return pieWedge.interestingCircuit;\r\n });\r\n return result;\r\n }\r\n\r\n createBigHugeCircuitGroup(commercialCircuit, toleranceInput) {\r\n return this.bigHugeCircuitGroupModel.create({ circuit: commercialCircuit, toleranceInput: toleranceInput });\r\n }\r\n\r\n getStageValuesFromCircuit(circuit) {\r\n return this.reverseImplementation.execute(circuit);\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nexport default class BaseNoiseGroup extends EmberObject {\r\n magnitude = null;\r\n previousNoiseGroup = null;\r\n\r\n @computed('previousNoiseGroup', 'magnitude') get spectralDensityMagnitude() {\r\n var previousNoiseGroup = this.previousNoiseGroup;\r\n var magnitude = this.magnitude;\r\n var result = magnitude;\r\n if (previousNoiseGroup) {\r\n var previousCircuitSpectralMagnitude = previousNoiseGroup.spectralDensityMagnitude;\r\n result = previousCircuitSpectralMagnitude.map((item, index) => {\r\n var val = magnitude[index] * item;\r\n return val;\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('noiseReferredToInputArray', 'previousNoiseGroup') get _spectralNoiseReferredToInputArray() {\r\n var noiseReferredToInputArray = this.noiseReferredToInputArray;\r\n var previousNoiseGroup = this.previousNoiseGroup;\r\n var result = noiseReferredToInputArray;\r\n if (previousNoiseGroup) {\r\n var previousSpectralDensityMagnitude = previousNoiseGroup.spectralDensityMagnitude;\r\n result = noiseReferredToInputArray.map((item, index) => {\r\n var res = item / previousSpectralDensityMagnitude[index];\r\n return res;\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('_spectralNoiseReferredToInputArray', 'previousNoiseGroup') get totalSpectralNoiseReferredToInputArray() {\r\n var previousNoiseGroup = this.previousNoiseGroup;\r\n var spectralNoise = this._spectralNoiseReferredToInputArray;\r\n var result = spectralNoise;\r\n if (previousNoiseGroup) {\r\n var previousTotalSpectralNoiseRTI = previousNoiseGroup.totalSpectralNoiseReferredToInputArray;\r\n result = spectralNoise.map((item, index) => {\r\n return Math.sqrt(item * item + previousTotalSpectralNoiseRTI[index] * previousTotalSpectralNoiseRTI[index]);\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n @computed('totalSpectralNoiseReferredToInputArray', 'spectralDensityMagnitude', 'magnitude')\r\n get totalSpectralNoiseReferredToOutputArray() {\r\n //console.time('totalSpectralNoiseReferredToInputArray');\r\n var totalSpectralNoiseReferredToInputArray = this.totalSpectralNoiseReferredToInputArray;\r\n //console.timeEnd('totalSpectralNoiseReferredToInputArray');\r\n var magnitude = this.spectralDensityMagnitude;\r\n var result = totalSpectralNoiseReferredToInputArray.map((item, index) => {\r\n return item * magnitude[index];\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport * as CircuitUtils from '../../utils/circuit';\r\n\r\nexport default class BasePieWedge extends EmberObject {\r\n center = null;\r\n range = null;\r\n explanatoryText = null;\r\n bigHugeCircuitGroup = null;\r\n circuit = null;\r\n /**\r\n * @description gets the interesting circuit among the array of big huge circuit.\r\n * @returns BigHugeCircuit\r\n */\r\n @computed('center', 'range', 'bigHugeCircuitGroup', 'circuit') get interestingCircuit() {\r\n var bigHugeCircuitArray = this.bigHugeCircuitGroup.circuits;\r\n var center = this.center;\r\n var range = this.range;\r\n\r\n var circuitsWithValidPhase = bigHugeCircuitArray.filter((circuit) => {\r\n var phase = circuit.phase;\r\n if (center - range / 2 < -180) {\r\n if (phase > 0) {\r\n phase = phase - 360;\r\n }\r\n }\r\n\r\n return center - range / 2 < phase && phase < center + range / 2;\r\n });\r\n\r\n var maxMagnitude = 0;\r\n var currentCircuit = null;\r\n var result = null;\r\n\r\n for (var i = 0; i < circuitsWithValidPhase.length; i++) {\r\n currentCircuit = circuitsWithValidPhase[i];\r\n var circuitMagnitude = currentCircuit.magnitude;\r\n if (circuitMagnitude > maxMagnitude) {\r\n maxMagnitude = circuitMagnitude;\r\n result = currentCircuit;\r\n }\r\n }\r\n\r\n let circuitCopy = null;\r\n if (result !== null) {\r\n circuitCopy = CircuitUtils.copyCircuit(this.circuit);\r\n var supportedComponents = circuitCopy.supportedComponents;\r\n\r\n for (let i = 0; i < supportedComponents.length; i++) {\r\n var property = supportedComponents[i];\r\n set(circuitCopy[property], 'value', result.get(property));\r\n }\r\n\r\n set(circuitCopy.opAmp, 'gbw', result.opAmpGbw);\r\n }\r\n\r\n return circuitCopy;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport * as ConversionUtils from '../../utils/conversion';\r\n\r\nexport default class BigHugeCircuit extends EmberObject {\r\n c1 = null;\r\n c2 = null;\r\n c5 = null;\r\n r1 = null;\r\n r2 = null;\r\n r3 = null;\r\n r4 = null;\r\n opAmpGbw = null;\r\n nominalGbw = null;\r\n nominalValues = null;\r\n realPartNormalizer = null;\r\n imaginaryPartNormalizer = null;\r\n\r\n @computed('realPart', 'imaginaryPart') get magnitude() {\r\n var realPart = this.realPart;\r\n var imaginaryPart = this.imaginaryPart;\r\n var result = Math.sqrt(realPart * realPart + imaginaryPart * imaginaryPart);\r\n return result;\r\n }\r\n\r\n @computed('realPart', 'imaginaryPart') get phase() {\r\n var realPart = this.realPart;\r\n var imaginaryPart = this.imaginaryPart;\r\n var result = Math.atan2(imaginaryPart, realPart);\r\n result = ConversionUtils.radianToDegree(result);\r\n return result;\r\n }\r\n\r\n @computed('nominalValues', 'circuitStageValues') get interimRealPart() {\r\n var circuitStageValues = this.circuitStageValues;\r\n var nominalValues = this.nominalValues;\r\n var nomGainQ = nominalValues.gain * nominalValues.stageQ;\r\n var result = circuitStageValues.gain * circuitStageValues.stageQ - nomGainQ;\r\n return result;\r\n }\r\n\r\n @computed('interimRealPart') get absoluteRealPart() {\r\n var interimRealPart = this.interimRealPart;\r\n var result = Math.abs(interimRealPart);\r\n return result;\r\n }\r\n\r\n @computed('nominalValues', 'circuitStageValues') get interimImaginaryPart() {\r\n var circuitStageValues = this.circuitStageValues;\r\n var nominalValues = this.nominalValues;\r\n var nominalFp = nominalValues.stageFp;\r\n var result = circuitStageValues.stageFp - nominalFp;\r\n return result;\r\n }\r\n\r\n @computed('interimImaginaryPart') get absoluteImaginaryPart() {\r\n var interimImaginaryPart = this.interimImaginaryPart;\r\n var result = Math.abs(interimImaginaryPart);\r\n return result;\r\n }\r\n\r\n @computed('interimRealPart', 'realPartNormalizer') get realPart() {\r\n var realPartNormalizer = this.realPartNormalizer;\r\n var result = this.interimRealPart;\r\n\r\n if (!!realPartNormalizer && realPartNormalizer > 0) {\r\n result = result / realPartNormalizer;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('opAmpGbw', 'nominalGbw') get _imaginaryAdder() {\r\n var gbw = this.opAmpGbw;\r\n var nominalGbw = this.nominalGbw;\r\n var gbwDelta = gbw - nominalGbw;\r\n var result = 0;\r\n if (gbwDelta < 0) {\r\n result = -1e-6;\r\n } else if (gbwDelta > 0) {\r\n result = 1e-6;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('interimImaginaryPart', 'imaginaryPartNormalizer', '_imaginaryAdder') get imaginaryPart() {\r\n var imaginaryPartNormalizer = this.imaginaryPartNormalizer;\r\n var _imaginaryAdder = this._imaginaryAdder;\r\n var result = this.interimImaginaryPart;\r\n\r\n if (!!imaginaryPartNormalizer && imaginaryPartNormalizer > 0) {\r\n result = result / imaginaryPartNormalizer + _imaginaryAdder;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport DeliyannisFriend from './deliyannis-friend/deliyannis-friend';\r\nimport FirstOrder from './first-order/first-order';\r\nimport Inductor from './inductor/inductor';\r\nimport MultipleFeedback from './multiple-feedback/multiple-feedback';\r\nimport SallenKey from './sallen-key/sallen-key';\r\n\r\nexport default class Implementation extends EmberObject {\r\n selectedImplementation;\r\n filter;\r\n preferredAlgorithm;\r\n\r\n @computed('selectedImplementation', 'filter', 'preferredAlgorithm') get instance() {\r\n var selectedImplementation = this.selectedImplementation;\r\n var filter = this.filter;\r\n var preferredAlgorithm = this.preferredAlgorithm;\r\n\r\n var result = null;\r\n var hash = { filter: filter, preferredAlgorithm: preferredAlgorithm };\r\n if (selectedImplementation === FilterConstants.implementationType.deliyannisFriend) {\r\n result = DeliyannisFriend.create(hash);\r\n } else if (selectedImplementation === FilterConstants.implementationType.firstOrder) {\r\n result = FirstOrder.create(hash);\r\n } else if (selectedImplementation === FilterConstants.implementationType.inductor) {\r\n result = Inductor.create(hash);\r\n } else if (selectedImplementation === FilterConstants.implementationType.multipleFeedback) {\r\n result = MultipleFeedback.create(hash);\r\n } else {\r\n result = SallenKey.create(hash);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('instance') get name() {\r\n return this.instance.name;\r\n }\r\n @computed('instance') get circuit() {\r\n return this.instance.circuit;\r\n }\r\n\r\n getStepValues(idealStep, components, timeAxis) {\r\n return this.instance.getStepValues(idealStep, components, timeAxis);\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n return this.instance.createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue);\r\n }\r\n\r\n getInterestingCircuits(commercialCircuit, toleranceInput) {\r\n return this.instance.getInterestingCircuits(commercialCircuit, toleranceInput);\r\n }\r\n\r\n getStageValuesFromCircuit(circuit) {\r\n return this.instance.getStageValuesFromCircuit(circuit);\r\n }\r\n\r\n createBigHugeCircuitGroup(circuit, toleranceInput) {\r\n return this.instance.createBigHugeCircuitGroup(circuit, toleranceInput);\r\n }\r\n}\r\n","import { computed } from '@ember/object';\r\nimport InductorActualFilterAmplitude from '../common/actual-filter-amplitude';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default InductorActualFilterAmplitude.extend({\r\n c1: null,\r\n l1: null,\r\n r1: null,\r\n complexAlphaMinus: Complex.createComplex(0, 0),\r\n complexBetaPlus: Complex.createComplex(0, 0),\r\n complexAlphaPlus: computed('c1', 'l1', 'r1', 'sSquared', 'sImaginary', function () {\r\n var sSquared = this.sSquared;\r\n var sImaginary = this.sImaginary;\r\n\r\n var c1 = this.c1;\r\n var l1 = this.l1;\r\n var r1 = this.r1;\r\n\r\n var result = Complex.createComplex(0, l1 * sImaginary).divide(\r\n Complex.createComplex(r1 * l1 * c1 * sSquared + r1, l1 * sImaginary),\r\n );\r\n return result;\r\n }),\r\n inputImpedance: computed('c1', 'l1', 'r1', 'sImaginary', function () {\r\n var r1 = this.r1;\r\n var l1 = this.l1;\r\n var c1 = this.c1;\r\n var complexR1 = Complex.createComplex(r1, 0);\r\n\r\n var sImaginary = this.sImaginary;\r\n var top = Complex.createComplex(l1 / c1, 0);\r\n var bottom = Complex.createComplex(0, l1 * sImaginary - 1 / (c1 * sImaginary));\r\n var result = complexR1.plus(top.divide(bottom));\r\n return result;\r\n }),\r\n});\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport { computed, set } from '@ember/object';\r\n\r\nimport * as ReverseImplementation from './reverse-implementation';\r\nimport BigHugeCircuit from './big-huge-circuit';\r\nimport BaseBigHugeCircuitGroup from '../../implementation-common/base-big-huge-circuit-group';\r\n\r\nexport default class InductorBIgHugeCircuitGroup extends BaseBigHugeCircuitGroup {\r\n circuit;\r\n reverseImplementation;\r\n init() {\r\n set(this, 'reverseImplementation', ReverseImplementation);\r\n }\r\n\r\n @computed('circuit', 'nominalValues', 'reverseImplementation', 'gbwArray') get circuits() {\r\n var circuit = this.circuit;\r\n var nominalGbw = circuit.opAmp.gbw;\r\n var nominalValues = this.nominalValues;\r\n var reverseImplementation = this.reverseImplementation;\r\n var l1ToleranceArray = circuit.l1.toleranceArray;\r\n var c1ToleranceArray = circuit.c1.toleranceArray;\r\n var r1ToleranceArray = circuit.r1.toleranceArray;\r\n var r3ToleranceArray = circuit.r3.toleranceArray;\r\n var r4ToleranceArray = circuit.r4.toleranceArray;\r\n var inverseArray = circuit.r3.value ? r3ToleranceArray : r4ToleranceArray;\r\n\r\n var r4Start = r3ToleranceArray.length - 1;\r\n var gbwArray = this.gbwArray;\r\n var bigHugeCircuitArray = [];\r\n gbwArray.forEach((gbwValue) => {\r\n r1ToleranceArray.forEach((r1Value) => {\r\n inverseArray.forEach((inverseValue, index) => {\r\n var r3Value = r3ToleranceArray[index];\r\n var r4Value = r4ToleranceArray[r4Start - index];\r\n l1ToleranceArray.forEach((l1Value) => {\r\n c1ToleranceArray.forEach((c1Value) => {\r\n let item = BigHugeCircuit.create({\r\n c1: c1Value,\r\n r1: r1Value,\r\n r3: r3Value,\r\n r4: r4Value,\r\n l1: l1Value,\r\n opAmpGbw: gbwValue,\r\n nominalValues: nominalValues,\r\n nominalGbw: nominalGbw,\r\n reverseImplementation: reverseImplementation,\r\n });\r\n bigHugeCircuitArray.push(item);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n var result = this.setNormalizers(bigHugeCircuitArray);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseBigHugeCircuit from '../../implementation-common/big-huge-circuit';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class InductorBandPass extends BaseBigHugeCircuit {\r\n @computed('c1', 'r1', 'r3', 'r4', 'l1') get circuitStageValues() {\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var l1 = this.l1;\r\n var result = ReverseImplementation.computeFromComponentValues(c1, r1, r3, r4, l1);\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../../../filter-constants';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\n\r\nexport function computeLimits(c1IdealValue, r1IdealValue, l1IdealValue) {\r\n let capacitorMinimumLimitMultiplier = computeCapacitorMinimumLimitMultiplier(c1IdealValue, l1IdealValue);\r\n let capacitorMaximumLimitMultiplier = computeCapacitorMaximumLimitMultiplier(c1IdealValue, l1IdealValue);\r\n let Q = r1IdealValue * Math.sqrt(c1IdealValue / l1IdealValue);\r\n let c1BigLimits = computeC1BigLimits(c1IdealValue, l1IdealValue, capacitorMaximumLimitMultiplier, Q);\r\n let c1TinyLimits = computeC1TinyLimits(c1IdealValue, l1IdealValue, capacitorMinimumLimitMultiplier, Q);\r\n return {\r\n c1Minimum: c1TinyLimits.c1Tiny,\r\n c1Maximum: c1BigLimits.c1Big,\r\n r1Minimum: c1BigLimits.r1Tiny,\r\n r1Maximum: c1TinyLimits.r1Big,\r\n l1Minimum: c1BigLimits.l1Tiny,\r\n l1Maximum: c1TinyLimits.l1Big,\r\n };\r\n}\r\n\r\nexport function computeGainResistorLimitMultipliers(r3IdealValue, r4IdealValue) {\r\n let minMultiplier = CircuitUtils.getResistorMinimumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n let maxMultiplier = computeResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n return {\r\n resistorMinimumLimitMultiplier: minMultiplier,\r\n resistorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nfunction computeResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue) {\r\n var maxLimit = CircuitUtils.getResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n var result = maxLimit;\r\n var rBig = r4IdealValue * maxLimit;\r\n if (rBig > 100e3) {\r\n result = (result * 100e3) / rBig;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMinimumLimitMultiplier(c1IdealValue, l1IdealValue) {\r\n var smallCapLimit = FilterConstants.Limits.CSMALL_COMP_LIMIT * 2; //20 pF\r\n var result = smallCapLimit / c1IdealValue;\r\n var l1Big = l1IdealValue / result;\r\n\r\n if (l1Big > FilterConstants.Limits.LBIG_COMP_LIMIT) {\r\n result = (l1Big / FilterConstants.Limits.LBIG_COMP_LIMIT) * result;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMaximumLimitMultiplier(c1IdealValue, l1IdealValue) {\r\n var result = FilterConstants.Limits.CBIG_COMP_LIMIT / c1IdealValue;\r\n var l1Tiny = l1IdealValue / result;\r\n\r\n if (l1Tiny < FilterConstants.Limits.LSMALL_COMP_LIMIT) {\r\n result = (l1Tiny / FilterConstants.Limits.LSMALL_COMP_LIMIT) * result;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeC1BigLimits(c1IdealValue, l1IdealValue, capacitorMaximumLimitMultiplier, Q) {\r\n let l1Tiny = l1IdealValue / capacitorMaximumLimitMultiplier;\r\n let c1Big = c1IdealValue * capacitorMaximumLimitMultiplier;\r\n let r1Tiny = Q / Math.sqrt(c1Big / l1Tiny);\r\n\r\n let multiplier = 1;\r\n let smallResLimit = FilterConstants.Limits.RSMALL_COMP_LIMIT * 20; //20 ohms\r\n if (r1Tiny < smallResLimit) {\r\n multiplier = r1Tiny / smallResLimit;\r\n }\r\n\r\n return {\r\n l1Tiny: l1Tiny / multiplier,\r\n c1Big: c1Big * multiplier,\r\n r1Tiny: r1Tiny < smallResLimit ? smallResLimit : r1Tiny,\r\n };\r\n}\r\n\r\nfunction computeC1TinyLimits(c1IdealValue, l1IdealValue, capacitorMinimumLimitMultiplier, Q) {\r\n let l1Big = l1IdealValue / capacitorMinimumLimitMultiplier;\r\n let c1Tiny = c1IdealValue * capacitorMinimumLimitMultiplier;\r\n let r1Big = Q / Math.sqrt(c1Tiny / l1Big);\r\n\r\n let multiplier = 1;\r\n if (r1Big > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n multiplier = r1Big / FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n }\r\n\r\n return {\r\n l1Big: l1Big / multiplier,\r\n c1Tiny: c1Tiny * multiplier,\r\n r1Big: r1Big > FilterConstants.Limits.RBIG_COMP_LIMIT ? FilterConstants.Limits.RBIG_COMP_LIMIT : r1Big,\r\n };\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport NoiseGroup from './noise-group';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport BandPassInductorCircuit from './circuit';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as InductorBandPassCircuitLimitsUtils from './circuit-limits-utils';\r\nimport * as ComponentFactory from '../../../components/components-factory';\r\nimport { getImplementation } from '../../../gestures/optimization';\r\n\r\nimport { calculateFilterComponents } from '@ebiz/aditools-filter';\r\n\r\n// Encapsulates the creation of circuit components for stage properties and optimization\r\n// A circuit is created from the stage properties stageFp, stageQ, and gain, and the optimization;\r\nexport default class InductorBandPass extends EmberObject {\r\n // Inputs\r\n stageFp;\r\n stageQ;\r\n gain;\r\n optimization;\r\n algorithm;\r\n\r\n // Process output - something used internally but on other classes\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths;\r\n componentLimits;\r\n frequency;\r\n sizing;\r\n\r\n // Figures output - used internally and also as output in the figures\r\n opAmp;\r\n needReferenceStage = true;\r\n c1;\r\n r1;\r\n r3;\r\n r4;\r\n l1;\r\n masterCapacitor;\r\n allowGainChange;\r\n\r\n // For cGov params of calculateFilterComponents - aditools-filter\r\n c1IdealValue;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'stageFp, stageQ, gain, optimization, and algorithm should not be null';\r\n }\r\n\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = BandPassInductorCircuit;\r\n this.supportedComponents = ['c1', 'l1', 'r1', 'r3', 'r4'];\r\n this.idealOpAmpValuePaths = ['r1', 'r3', 'r4'];\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.initialCapacitorValue)) {\r\n this.c1IdealValue = this._computeC1IdealValue(this.initialCapacitorValue);\r\n } else {\r\n this.c1IdealValue = this._computeC1IdealValue();\r\n }\r\n const idealValues = this._computeIdealValues();\r\n const componentLimits = InductorBandPassCircuitLimitsUtils.computeLimits(\r\n idealValues.c1IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.l1IdealValue,\r\n );\r\n const gainResistorLimits = InductorBandPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, componentLimits, gainResistorLimits);\r\n }\r\n\r\n _computeIdealValues() {\r\n const implementation = getImplementation(FilterConstants.implementationType.inductor);\r\n const rGain = this._computeR3AndR4().r3 + this._computeR3AndR4().r4;\r\n const c1IdealValue = this.c1IdealValue;\r\n const params = {\r\n type: this.algorithm,\r\n implementation: implementation,\r\n fp: this.stageFp,\r\n gain: this.gain,\r\n q: this.stageQ,\r\n cGov: c1IdealValue,\r\n rGainOrCCross: rGain,\r\n };\r\n const filterComponents = calculateFilterComponents(\r\n params.type,\r\n params.implementation,\r\n params.fp,\r\n params.gain,\r\n params.q,\r\n params.cGov,\r\n params.rGainOrCCross,\r\n );\r\n\r\n return {\r\n c1IdealValue: filterComponents.c1,\r\n c2IdealValue: filterComponents.c2,\r\n r1IdealValue: filterComponents.r1,\r\n r2IdealValue: filterComponents.r2,\r\n r3IdealValue: filterComponents.r3,\r\n r4IdealValue: filterComponents.r4,\r\n l1IdealValue: filterComponents.l1,\r\n };\r\n }\r\n\r\n _computeR3AndR4() {\r\n const r3PlusR4 = this.optimization.determineStartingR3R4Value(this.stageFp);\r\n return CircuitUtils.computeR3AndR4(r3PlusR4, this.gain);\r\n }\r\n\r\n _computeC1IdealValue(value) {\r\n return value ? value : CircuitUtils.computeMasterCapacitorValue(this.optimization, this.stageFp);\r\n }\r\n\r\n // Private\r\n _computeComponents(idealValues, componentLimits, gainResistorLimits) {\r\n let r3NominalValue = ComponentFactory.createR3(idealValues.r3IdealValue, null, null).toCommercialComponent().value;\r\n this.allowGainChange = CircuitUtils.getGainChangeSupportStatus(idealValues.r3IdealValue, idealValues.r4IdealValue);\r\n this.sizing = this._getSizing(idealValues, componentLimits);\r\n this.c1 = ComponentFactory.createC1MinAndMaxDefined(\r\n idealValues.c1IdealValue,\r\n componentLimits.c1Minimum,\r\n componentLimits.c1Maximum,\r\n this.sizing,\r\n );\r\n this.masterCapacitor = this.c1;\r\n let rcRatioInverse = CircuitUtils.getInverseOfMasterCapacitorRatio(this.c1);\r\n this.r1 = ComponentFactory.createR1MinAndMaxDefined(\r\n idealValues.r1IdealValue,\r\n componentLimits.r1Minimum,\r\n componentLimits.r1Maximum,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r3 = ComponentFactory.createR3(\r\n r3NominalValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n this.r4 = this._getR4(idealValues, gainResistorLimits);\r\n this.l1 = ComponentFactory.createInductor(\r\n idealValues.l1IdealValue,\r\n componentLimits.l1Minimum,\r\n componentLimits.l1Maximum,\r\n rcRatioInverse,\r\n );\r\n this.frequency = 1 / (2 * Math.PI * Math.sqrt(this.l1.value * this.c1.value));\r\n\r\n this.idealValues = idealValues;\r\n this.componentLimits = componentLimits;\r\n this.gainResistorLimits = gainResistorLimits;\r\n }\r\n\r\n // Private\r\n _getSizing(idealValues, componentLimits) {\r\n var r1Big = componentLimits.r1Maximum;\r\n var r1Tiny = componentLimits.r1Minimum;\r\n var r1IdealValue = idealValues.r1IdealValue;\r\n var result = null;\r\n if (r1IdealValue < r1Tiny) {\r\n result = FilterConstants.sizing.tiny;\r\n } else if (r1IdealValue > r1Big) {\r\n result = FilterConstants.sizing.big;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Private\r\n // R4 may have an ideal value but it is recomputed here based on gain and R3\r\n // since it should adjust depending on the current value of R3.\r\n // (If r3 is not present or idealValue is 0 or INFINITY, we use the idealValue)\r\n // R3 may change due to the user changing the slider position or r3 adjusting to its nominal value.\r\n // R3 may also change when changing the e-series in the tolerance tab.\r\n _getR4(idealValues, gainResistorLimits) {\r\n let result = null;\r\n if (idealValues.r3IdealValue !== 0 && idealValues.r3IdealValue !== FilterConstants.Limits.INFINITY)\r\n result = ComponentFactory.createR4FromR3AndGain(\r\n this.r3.value,\r\n this.gain,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n else\r\n result = ComponentFactory.createR4(\r\n idealValues.r4IdealValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n\r\n return result;\r\n }\r\n\r\n changeGainValues(newR3Value) {\r\n if (this.allowGainChange) {\r\n this.r3 = this.r3.setValue(newR3Value);\r\n this.updateR4();\r\n }\r\n }\r\n\r\n updateR4() {\r\n this.r4 = this._getR4(this.idealValues, this.gainResistorLimits);\r\n }\r\n\r\n changeInitialCapacitor(value) {\r\n this.c1IdealValue = this._computeC1IdealValue(value);\r\n const idealValues = this._computeIdealValues();\r\n const componentLimits = InductorBandPassCircuitLimitsUtils.computeLimits(\r\n idealValues.c1IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.l1IdealValue,\r\n );\r\n const gainResistorLimits = InductorBandPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, componentLimits, gainResistorLimits);\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class InductorBandPass extends EmberObject {\r\n // Inputs\r\n r3 = null;\r\n r4 = null;\r\n optimization = null;\r\n stageFp = null;\r\n gain = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n specialGain = null;\r\n name = 'ideal';\r\n slewRate = 0;\r\n rOutOverGBW = FilterConstants.Limits.INFINITY;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r3) ||\r\n CommonUtils.isNullOrUndefined(this.r4) ||\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r3, r4, stageFp, gain, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.gbw = this.computeGbw();\r\n this.rOut = this.computeROut(this.gbw);\r\n this.specialGain = this.computeSpecialGain();\r\n }\r\n\r\n computeSpecialGain() {\r\n return 1 + this.r4 / this.r3;\r\n }\r\n\r\n computeGbw() {\r\n var inductorMultiplier = this.optimization.opAmpRequirementSpecValues.inductorMultiplier;\r\n var result = inductorMultiplier * this.stageFp * this.gain;\r\n\r\n if (this.stageFp * this.gain > 100e6) {\r\n result = result / 2;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = 0;\r\n return dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n }\r\n\r\n computeROut(gbw) {\r\n return this.rOutOverGBW * gbw;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport * as RollOffStepResponse from '../../../step-response/roll-off';\r\nimport Circuit from './circuit';\r\nimport BigHugeCircuitGroup from './big-huge-circuit-group';\r\nimport BaseMain from '../../implementation-common/base-main';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class InductorBandPass extends BaseMain {\r\n bigHugeCircuitGroupModel;\r\n reverseImplementation;\r\n algorithm;\r\n\r\n init() {\r\n this.bigHugeCircuitGroupModel = BigHugeCircuitGroup;\r\n this.reverseImplementation = ReverseImplementation;\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = (circuit.r3.value + circuit.r4.value) / circuit.r3.value;\r\n var result = RollOffStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class InductorBandPassNoiseGroup extends BaseNoiseGroup {\r\n c1 = null;\r\n l1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n opAmp = null;\r\n frequencyArray = null;\r\n @computed('c1', 'l1', 'r1', 'r3', 'r4', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var c1 = this.c1;\r\n var l1 = this.l1;\r\n var r1 = this.r1;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexRParallelArray = filterAmplitude.map((item) => {\r\n return item.complexRParallel;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var sSquaredArray = filterAmplitude.map((item) => {\r\n return item.sSquared;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var noiseSource = NoiseSource.create({\r\n c1: c1,\r\n l1: l1,\r\n r1: r1,\r\n r3: r3,\r\n r4: r4,\r\n opAmp: opAmp,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var sSquared = sSquaredArray[index];\r\n var complexRParallel = complexRParallelArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n return noiseSource.totalNoise(item, complexRParallel, sImaginary, sSquared);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class InductorBandPass extends EmberObject {\r\n c1 = null;\r\n l1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n opAmp = null;\r\n\r\n _r1Noise(filterAmplitude, sImaginary, sSquared) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r1 = this.r1;\r\n var c1 = this.c1;\r\n var l1 = this.l1;\r\n var complexAlphaPlus = R1.computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared);\r\n var complexFF = R1.computeComplexFF();\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpNegCurrent(filterAmplitude, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = OpAmpNegCurrent.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(complexRParallel, r3, r4);\r\n var value = this.opAmp.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpPosCurrent(filterAmplitude, sImaginary, sSquared) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var l1 = this.l1;\r\n var complexAlphaPlus = OpAmpPosCurrent.computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared);\r\n var complexFF = OpAmpPosCurrent.computeComplexFF();\r\n var value = this.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpVoltage(filterAmplitude) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var complexAlphaPlus = OpAmpVoltage.computeComplexAlphaPlus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = this.vNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n totalNoise(filterAmplitude, complexRParallel, sImaginary, sSquared) {\r\n var r1Noise = this._r1Noise(filterAmplitude, sImaginary, sSquared);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(filterAmplitude, complexRParallel);\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude, sImaginary, sSquared);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude);\r\n var noiseArray = [r1Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\nimport * as CommonUtils from '../../../../../utils/common';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex(-1 * CommonUtils.parallel(r3, r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var result = complexR3.mult(complexRParallel.divide(Complex.createComplex(r3 + r4, 0)));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared) {\r\n var result = Complex.createComplex(0, r1 * l1 * sImaginary).divide(\r\n Complex.createComplex(r1 * l1 * c1 * sSquared + r1, l1 * sImaginary),\r\n );\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus() {\r\n return Complex.createComplex(1, 0);\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared) {\r\n var result = Complex.createComplex(0, l1 * sImaginary).divide(\r\n Complex.createComplex(r1 * l1 * c1 * sSquared + r1, l1 * sImaginary),\r\n );\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n var result = Complex.createComplex(0, 0);\r\n return result;\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport function computeFromComponentValues(c1, r1, r3, r4, l1) {\r\n var gain = 1 + r4 / r3;\r\n var wp = Math.sqrt(1 / (c1 * l1));\r\n var fp = wp / (Math.PI * 2);\r\n var q = r1 * Math.sqrt(c1 / l1);\r\n\r\n var result = EmberObject.create({ stageQ: q, stageFp: fp, gain: gain });\r\n return result;\r\n}\r\n\r\nexport function execute(circuit) {\r\n var r1 = circuit.r1.value;\r\n var r3 = circuit.r3 ? circuit.r3.value : null;\r\n var r4 = circuit.r4 ? circuit.r4.value : null;\r\n var c1 = circuit.c1.value;\r\n var l1 = circuit.l1.value;\r\n return this.computeFromComponentValues(c1, r1, r3, r4, l1);\r\n}\r\n","import { computed } from '@ember/object';\r\nimport BaseActualFilterAmplitude from '../../implementation-common/base-actual-filter-amplitude';\r\nimport * as Complex from '../../../process-data/complex';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default BaseActualFilterAmplitude.extend({\r\n r3: null,\r\n r4: null,\r\n opAmp: null,\r\n complexAlphaPlus: Complex.createComplex(0, 0),\r\n complexBetaPlus: Complex.createComplex(0, 0),\r\n complexRParallel: computed('r3', 'r4', 'opAmp', function () {\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var rOut = this.opAmp.rOut;\r\n var rParallel = CommonUtils.parallel(rOut, r3 + r4);\r\n var result = Complex.createComplex(rParallel, 0);\r\n return result;\r\n }),\r\n complexFF: Complex.createComplex(0, 0),\r\n complexAlphaMinus: Complex.createComplex(0, 0),\r\n complexBetaMinus: computed('r3', 'r4', 'sImaginary', function () {\r\n var sImaginary = this.sImaginary;\r\n\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var complexBetaDenom = Complex.createComplex(r3 + r4, r4 * r3 * 3e-12 * sImaginary);\r\n var result = complexR3.divide(complexBetaDenom);\r\n return result;\r\n }),\r\n});\r\n","import { computed } from '@ember/object';\r\nimport InductorActualFilterAmplitude from '../common/actual-filter-amplitude';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default InductorActualFilterAmplitude.extend({\r\n c1: null,\r\n l1: null,\r\n r1: null,\r\n opAmp: null,\r\n complexAlphaPlus: computed('c1', 'l1', 'r1', 'sSquared', 'sImaginary', function () {\r\n var sSquared = this.sSquared;\r\n var sImaginary = this.sImaginary;\r\n\r\n var c1 = this.c1;\r\n var l1 = this.l1;\r\n var r1 = this.r1;\r\n\r\n var result = Complex.createComplex(l1 * c1 * sSquared + 1, r1 * c1 * sImaginary).divide(\r\n Complex.createComplex(l1 * c1 * sSquared + 1, r1 * c1 * sImaginary),\r\n );\r\n return result;\r\n }),\r\n inputImpedance: computed('r1', 'c1', 'l1', 'sImaginary', function () {\r\n var r1 = this.r1;\r\n var l1 = this.l1;\r\n var c1 = this.c1;\r\n var sImaginary = this.sImaginary;\r\n var result = Complex.createComplex(r1, l1 * sImaginary - 1 / (c1 * sImaginary));\r\n return result;\r\n }),\r\n});\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport { computed, set } from '@ember/object';\r\n\r\nimport * as ReverseImplementation from './reverse-implementation';\r\nimport BigHugeCircuit from './big-huge-circuit';\r\nimport BaseBigHugeCircuitGroup from '../../implementation-common/base-big-huge-circuit-group';\r\n\r\nexport default class InductorHighPassBigHugeCircuitGroup extends BaseBigHugeCircuitGroup {\r\n circuit;\r\n reverseImplementation;\r\n\r\n init() {\r\n set(this, 'reverseImplementation', ReverseImplementation);\r\n }\r\n\r\n @computed('circuit', 'nominalValues', 'reverseImplementation', 'gbwArray') get circuits() {\r\n var circuit = this.circuit;\r\n var nominalGbw = circuit.opAmp.gbw;\r\n var nominalValues = this.nominalValues;\r\n var reverseImplementation = this.reverseImplementation;\r\n var l1ToleranceArray = circuit.l1.toleranceArray;\r\n var c1ToleranceArray = circuit.c1.toleranceArray;\r\n var r1ToleranceArray = circuit.r1.toleranceArray;\r\n var r3ToleranceArray = circuit.r3.toleranceArray;\r\n var r4ToleranceArray = circuit.r4.toleranceArray;\r\n var inverseArray = circuit.r3.value ? r3ToleranceArray : r4ToleranceArray;\r\n\r\n var r4Start = r3ToleranceArray.length - 1;\r\n var gbwArray = this.gbwArray;\r\n var bigHugeCircuitArray = [];\r\n gbwArray.forEach((gbwValue) => {\r\n r1ToleranceArray.forEach((r1Value) => {\r\n inverseArray.forEach((inverseValue, index) => {\r\n var r3Value = r3ToleranceArray[index];\r\n var r4Value = r4ToleranceArray[r4Start - index];\r\n l1ToleranceArray.forEach((l1Value) => {\r\n c1ToleranceArray.forEach((c1Value) => {\r\n let item = BigHugeCircuit.create({\r\n c1: c1Value,\r\n r1: r1Value,\r\n r3: r3Value,\r\n r4: r4Value,\r\n l1: l1Value,\r\n opAmpGbw: gbwValue,\r\n nominalValues: nominalValues,\r\n nominalGbw: nominalGbw,\r\n reverseImplementation: reverseImplementation,\r\n });\r\n bigHugeCircuitArray.push(item);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n var result = this.setNormalizers(bigHugeCircuitArray);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseBigHugeCircuit from '../../implementation-common/big-huge-circuit';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class InductorHighPassBigHugeCircuit extends BaseBigHugeCircuit {\r\n @computed('c1', 'r1', 'r3', 'r4', 'l1') get circuitStageValues() {\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var l1 = this.l1;\r\n var result = ReverseImplementation.computeFromComponentValues(c1, r1, r3, r4, l1);\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../../../filter-constants';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\n\r\nexport function computeLimits(c1IdealValue, r1IdealValue, l1IdealValue) {\r\n let capacitorMinimumLimitMultiplier = computeCapacitorMinimumLimitMultiplier(c1IdealValue, l1IdealValue);\r\n let capacitorMaximumLimitMultiplier = computeCapacitorMaximumLimitMultiplier(c1IdealValue, l1IdealValue);\r\n let Q = (1 / r1IdealValue) * Math.sqrt(l1IdealValue / c1IdealValue);\r\n let c1BigLimits = computeC1BigLimits(c1IdealValue, l1IdealValue, capacitorMaximumLimitMultiplier, Q);\r\n let c1TinyLimits = computeC1TinyLimits(c1IdealValue, l1IdealValue, capacitorMinimumLimitMultiplier, Q);\r\n return {\r\n c1Minimum: c1TinyLimits.c1Tiny,\r\n c1Maximum: c1BigLimits.c1Big,\r\n r1Minimum: c1BigLimits.r1Tiny,\r\n r1Maximum: c1TinyLimits.r1Big,\r\n l1Minimum: c1BigLimits.l1Tiny,\r\n l1Maximum: c1TinyLimits.l1Big,\r\n };\r\n}\r\n\r\nexport function computeGainResistorLimitMultipliers(r3IdealValue, r4IdealValue) {\r\n let minMultiplier = CircuitUtils.getResistorMinimumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n let maxMultiplier = computeResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n return {\r\n resistorMinimumLimitMultiplier: minMultiplier,\r\n resistorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nfunction computeResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue) {\r\n var maxLimit = CircuitUtils.getResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n var result = maxLimit;\r\n var rBig = r4IdealValue * maxLimit;\r\n if (rBig > 100e3) {\r\n result = (result * 100e3) / rBig;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMinimumLimitMultiplier(c1IdealValue, l1IdealValue) {\r\n var smallCapLimit = FilterConstants.Limits.CSMALL_COMP_LIMIT * 2; //20 pF\r\n var result = smallCapLimit / c1IdealValue;\r\n var l1Big = l1IdealValue / result;\r\n\r\n if (l1Big > FilterConstants.Limits.LBIG_COMP_LIMIT) {\r\n result = (l1Big / FilterConstants.Limits.LBIG_COMP_LIMIT) * result;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMaximumLimitMultiplier(c1IdealValue, l1IdealValue) {\r\n var result = FilterConstants.Limits.CBIG_COMP_LIMIT / c1IdealValue;\r\n var l1Tiny = l1IdealValue / result;\r\n\r\n if (l1Tiny < FilterConstants.Limits.LSMALL_COMP_LIMIT) {\r\n result = (l1Tiny / FilterConstants.Limits.LSMALL_COMP_LIMIT) * result;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeC1BigLimits(c1IdealValue, l1IdealValue, capacitorMaximumLimitMultiplier, Q) {\r\n var smallResLimit = FilterConstants.Limits.RSMALL_COMP_LIMIT * 20; //20 ohms\r\n var l1Tiny = l1IdealValue / capacitorMaximumLimitMultiplier;\r\n var c1Big = c1IdealValue * capacitorMaximumLimitMultiplier;\r\n var r1Tiny = (1 / Q) * Math.sqrt(l1Tiny / c1Big);\r\n\r\n if (r1Tiny < smallResLimit) {\r\n var multiplier = r1Tiny / smallResLimit;\r\n c1Big = c1Big * multiplier;\r\n l1Tiny = l1Tiny / multiplier;\r\n r1Tiny = smallResLimit;\r\n }\r\n\r\n return {\r\n l1Tiny: l1Tiny,\r\n c1Big: c1Big,\r\n r1Tiny: r1Tiny,\r\n };\r\n}\r\n\r\nfunction computeC1TinyLimits(c1IdealValue, l1IdealValue, capacitorMinimumLimitMultiplier, Q) {\r\n var l1Big = l1IdealValue / capacitorMinimumLimitMultiplier;\r\n var c1Tiny = c1IdealValue * capacitorMinimumLimitMultiplier;\r\n var r1Big = (1 / Q) * Math.sqrt(l1Big / c1Tiny);\r\n\r\n if (r1Big > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n var multiplier = r1Big / FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n l1Big = l1Big / multiplier;\r\n c1Tiny = c1Tiny * multiplier;\r\n r1Big = FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n }\r\n\r\n return {\r\n l1Big: l1Big,\r\n c1Tiny: c1Tiny,\r\n r1Big: r1Big,\r\n };\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport NoiseGroup from './noise-group';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport HighPassInductorCircuitModel from './circuit';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as InductorHighPassCircuitLimitsUtils from './circuit-limits-utils';\r\nimport * as ComponentFactory from '../../../components/components-factory';\r\nimport { getImplementation } from '../../../gestures/optimization';\r\n\r\nimport { calculateFilterComponents } from '@ebiz/aditools-filter';\r\n\r\n// Encapsulates the creation of components for inductor highpass.\r\nexport default class InductorHighPassCircuit extends EmberObject {\r\n // Inputs\r\n stageFp;\r\n stageQ;\r\n gain;\r\n optimization;\r\n algorithm;\r\n\r\n // Process output - something used internally but on other classes\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths;\r\n componentLimits;\r\n\r\n // Figures output - used internally and also as output in the figures\r\n opAmp;\r\n needReferenceStage = true;\r\n c1;\r\n r1;\r\n r3;\r\n r4;\r\n l1;\r\n masterCapacitor;\r\n allowGainChange;\r\n\r\n // For cGov params of calculateFilterComponents - aditools-filter\r\n c1IdealValue;\r\n\r\n init() {\r\n super.init();\r\n if (\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'stageFp, stageQ, gain, optimization, and algorithm should not be null';\r\n }\r\n\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = HighPassInductorCircuitModel;\r\n this.supportedComponents = ['c1', 'l1', 'r1', 'r3', 'r4'];\r\n this.idealOpAmpValuePaths = ['r1', 'r3', 'r4'];\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.initialCapacitorValue)) {\r\n this.c1IdealValue = this._computeC1IdealValue(this.initialCapacitorValue);\r\n } else {\r\n this.c1IdealValue = this._computeC1IdealValue();\r\n }\r\n const idealValues = this._computeIdealValues();\r\n const componentLimits = InductorHighPassCircuitLimitsUtils.computeLimits(\r\n idealValues.c1IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.l1IdealValue,\r\n );\r\n const gainResistorLimits = InductorHighPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, componentLimits, gainResistorLimits);\r\n\r\n // TODO: The missing code here is seen below; however, inductor isn't really supported\r\n // for high pass so this is might be something look at when it ends up getting used\r\n // this.idealValues = idealValues;\r\n // this.componentLimits = componentLimits;\r\n // this.gainResistorLimits = gainResistorLimits;\r\n }\r\n\r\n _computeIdealValues() {\r\n const implementation = getImplementation(FilterConstants.implementationType.inductor);\r\n const rGain = this._computeR3AndR4().r3 + this._computeR3AndR4().r4;\r\n const c1IdealValue = this.c1IdealValue;\r\n const params = {\r\n type: this.algorithm,\r\n implementation: implementation,\r\n fp: this.stageFp,\r\n gain: this.gain,\r\n q: this.stageQ,\r\n cGov: c1IdealValue,\r\n rGainOrCCross: rGain,\r\n };\r\n const filterComponents = calculateFilterComponents(\r\n params.type,\r\n params.implementation,\r\n params.fp,\r\n params.gain,\r\n params.q,\r\n params.cGov,\r\n params.rGainOrCCross,\r\n );\r\n\r\n return {\r\n c1IdealValue: filterComponents.c1,\r\n c2IdealValue: filterComponents.c2,\r\n r1IdealValue: filterComponents.r1,\r\n r2IdealValue: filterComponents.r2,\r\n r3IdealValue: filterComponents.r3,\r\n r4IdealValue: filterComponents.r4,\r\n l1IdealValue: filterComponents.l1,\r\n };\r\n }\r\n\r\n _computeR3AndR4() {\r\n const r3PlusR4 = this.optimization.determineStartingR3R4Value(this.stageFp);\r\n return CircuitUtils.computeR3AndR4(r3PlusR4, this.gain);\r\n }\r\n\r\n _computeC1IdealValue(value) {\r\n return value ? value : CircuitUtils.computeMasterCapacitorValue(this.optimization, this.stageFp);\r\n }\r\n\r\n _computeComponents(idealValues, componentLimits, gainResistorLimits) {\r\n let r3NominalValue = ComponentFactory.createR3(idealValues.r3IdealValue, null, null).toCommercialComponent().value;\r\n this.sizing = this._getSizing(idealValues, componentLimits);\r\n this.allowGainChange = CircuitUtils.getGainChangeSupportStatus(idealValues.r3IdealValue, idealValues.r4IdealValue);\r\n this.c1 = ComponentFactory.createC1MinAndMaxDefined(\r\n idealValues.c1IdealValue,\r\n componentLimits.c1Minimum,\r\n componentLimits.c1Maximum,\r\n this.sizing,\r\n );\r\n this.masterCapacitor = this.c1;\r\n let rcRatioInverse = CircuitUtils.getInverseOfMasterCapacitorRatio(this.c1);\r\n this.r1 = ComponentFactory.createR1MinAndMaxDefined(\r\n idealValues.r1IdealValue,\r\n componentLimits.r1Minimum,\r\n componentLimits.r1Maximum,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r3 = ComponentFactory.createR3(\r\n r3NominalValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n this.r4 = this._getR4(idealValues, gainResistorLimits);\r\n this.l1 = ComponentFactory.createInductor(\r\n idealValues.l1IdealValue,\r\n componentLimits.l1Minimum,\r\n componentLimits.l1Maximum,\r\n rcRatioInverse,\r\n );\r\n this.frequency = 1 / (2 * Math.PI * Math.sqrt(this.l1.value * this.c1.value));\r\n\r\n this.idealValues = idealValues;\r\n this.gainResistorLimits = gainResistorLimits;\r\n }\r\n\r\n _getSizing(idealValues, componentLimits) {\r\n let r1IdealValue = idealValues.r1IdealValue;\r\n let minimum = componentLimits.r1Minimum;\r\n let maximum = componentLimits.r1Maximum;\r\n let result = null;\r\n if (r1IdealValue < minimum) {\r\n result = FilterConstants.sizing.tiny;\r\n } else if (r1IdealValue > maximum) {\r\n result = FilterConstants.sizing.big;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // R4 may have an ideal value but it is recomputed here based on gain and R3\r\n // since it should adjust depending on the current value of R3.\r\n // (If r3 is not present or idealValue is 0 or INFINITY, we use the idealValue)\r\n // R3 may change due to the user changing the slider position or r3 adjusting to its nominal value.\r\n // R3 may also change when changing the e-series in the tolerance tab.\r\n _getR4(idealValues, gainResistorLimits) {\r\n let result = null;\r\n if (idealValues.r3IdealValue !== 0 && idealValues.r3IdealValue !== FilterConstants.Limits.INFINITY)\r\n result = ComponentFactory.createR4FromR3AndGain(\r\n this.r3.value,\r\n this.gain,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n else\r\n result = ComponentFactory.createR4(\r\n idealValues.r4IdealValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n\r\n return result;\r\n }\r\n\r\n changeGainValues(newR3Value) {\r\n if (this.allowGainChange) {\r\n this.r3 = this.r3.setValue(newR3Value);\r\n this.updateR4();\r\n }\r\n }\r\n\r\n updateR4() {\r\n this.r4 = this._getR4(this.idealValues, this.gainResistorLimits);\r\n }\r\n\r\n changeInitialCapacitor(value) {\r\n this.c1IdealValue = this._computeC1IdealValue(value);\r\n const idealValues = this._computeIdealValues();\r\n const componentLimits = InductorHighPassCircuitLimitsUtils.computeLimits(\r\n idealValues.c1IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.l1IdealValue,\r\n );\r\n const gainResistorLimits = InductorHighPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, componentLimits, gainResistorLimits);\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class InductorHighPass extends EmberObject {\r\n // Inputs\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n optimization = null;\r\n stageFp = null;\r\n gain = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n specialGain = null;\r\n name = 'ideal';\r\n slewRate = 0;\r\n rOutOverGBW = FilterConstants.Limits.INFINITY;\r\n\r\n init() {\r\n super.init();\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r1) ||\r\n CommonUtils.isNullOrUndefined(this.r3) ||\r\n CommonUtils.isNullOrUndefined(this.r4) ||\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r1, r3, r4, stageFp, gain, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.gbw = this.computeGbw();\r\n this.rOut = this.computeROut(this.gbw);\r\n this.specialGain = this.computeSpecialGain();\r\n }\r\n\r\n computeSpecialGain() {\r\n return 1 + this.r4 / this.r3;\r\n }\r\n\r\n computeGbw() {\r\n var inductorMultiplier = this.optimization.opAmpRequirementSpecValues.inductorMultiplier;\r\n var result = inductorMultiplier * this.stageFp * this.gain;\r\n return result;\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = this.r1;\r\n return dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n }\r\n\r\n computeROut(gbw) {\r\n return this.rOutOverGBW * gbw;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport * as RollOffStepResponse from '../../../step-response/roll-off';\r\nimport Circuit from './circuit';\r\nimport BigHugeCircuitGroup from './big-huge-circuit-group';\r\nimport BaseMain from '../../implementation-common/base-main';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class InductorHighPassMain extends BaseMain {\r\n bigHugeCircuitGroupModel;\r\n reverseImplementation;\r\n algorithm;\r\n\r\n init() {\r\n this.bigHugeCircuitGroupModel = BigHugeCircuitGroup;\r\n this.reverseImplementation = ReverseImplementation;\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = (circuit.r3.value + circuit.r4.value) / circuit.r3.value;\r\n var result = RollOffStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class InductorHighPassNoiseGroup extends BaseNoiseGroup {\r\n c1 = null;\r\n l1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n opAmp = null;\r\n frequencyArray = null;\r\n @computed('c1', 'l1', 'r1', 'r3', 'r4', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var c1 = this.c1;\r\n var l1 = this.l1;\r\n var r1 = this.r1;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexRParallelArray = filterAmplitude.map((item) => {\r\n return item.complexRParallel;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var sSquaredArray = filterAmplitude.map((item) => {\r\n return item.sSquared;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var noiseSource = NoiseSource.create({\r\n c1: c1,\r\n l1: l1,\r\n r1: r1,\r\n r3: r3,\r\n r4: r4,\r\n opAmp: opAmp,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var sSquared = sSquaredArray[index];\r\n var complexRParallel = complexRParallelArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n return noiseSource.totalNoise(item, complexRParallel, sImaginary, sSquared);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class InductorHighPassNoiseSource extends EmberObject {\r\n c1 = null;\r\n l1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n opAmp = null;\r\n _r1Noise(filterAmplitude, sImaginary, sSquared) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r1 = this.r1;\r\n var c1 = this.c1;\r\n var l1 = this.l1;\r\n var complexAlphaPlus = R1.computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared);\r\n var complexFF = R1.computeComplexFF();\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpNegCurrent(filterAmplitude, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = OpAmpNegCurrent.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(complexRParallel, r3, r4);\r\n var value = this.opAmp.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpPosCurrent(filterAmplitude, sImaginary, sSquared) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var l1 = this.l1;\r\n var complexAlphaPlus = OpAmpPosCurrent.computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared);\r\n var complexFF = OpAmpPosCurrent.computeComplexFF();\r\n var value = this.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpVoltage(filterAmplitude) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var complexAlphaPlus = OpAmpVoltage.computeComplexAlphaPlus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = this.vNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n totalNoise(filterAmplitude, complexRParallel, sImaginary, sSquared) {\r\n var r1Noise = this._r1Noise(filterAmplitude, sImaginary, sSquared);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(filterAmplitude, complexRParallel);\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude, sImaginary, sSquared);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude);\r\n var noiseArray = [r1Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\nimport * as CommonUtils from '../../../../../utils/common';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex(-1 * CommonUtils.parallel(r3, r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var result = complexR3.mult(complexRParallel.divide(Complex.createComplex(r3 + r4, 0)));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared) {\r\n var result = Complex.createComplex(r1, l1 * sImaginary).divide(\r\n Complex.createComplex(l1 * c1 * sSquared + 1, r1 * c1 * sImaginary),\r\n );\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus() {\r\n var result = Complex.createComplex(1, 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared) {\r\n var result = Complex.createComplex(1, 0).divide(Complex.createComplex(l1 * c1 * sSquared + 1, r1 * c1 * sImaginary));\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n var result = Complex.createComplex(0, 0);\r\n return result;\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport function computeFromComponentValues(c1, r1, r3, r4, l1) {\r\n var gain = 1 + r4 / r3;\r\n var wp = Math.sqrt(1 / (c1 * l1));\r\n var fp = wp / (Math.PI * 2);\r\n var q = (1 / r1) * Math.sqrt(l1 / c1);\r\n\r\n var result = EmberObject.create({ stageQ: q, stageFp: fp, gain: gain });\r\n return result;\r\n}\r\n\r\nexport function execute(circuit) {\r\n var r1 = circuit.r1.value;\r\n var r3 = circuit.r3 ? circuit.r3.value : null;\r\n var r4 = circuit.r4 ? circuit.r4.value : null;\r\n var c1 = circuit.c1.value;\r\n var l1 = circuit.l1.value;\r\n var result = this.computeFromComponentValues(c1, r1, r3, r4, l1);\r\n return result;\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport FilterConstants from '../../../filter-constants';\r\nimport InductorLowPass from './low-pass/main';\r\nimport InductorBandPass from './band-pass/main';\r\nimport InductorHighPass from './high-pass/main';\r\nimport BaseImplementation from '../base-implementation';\r\nimport * as CommonUtils from '../../../utils/common';\r\n\r\nexport default class Inductor extends BaseImplementation {\r\n filter;\r\n preferredAlgorithm;\r\n name = FilterConstants.implementationType.inductor;\r\n\r\n @computed('filter') get instance() {\r\n var filter = this.filter;\r\n var result = null;\r\n var algorithm = this.algorithm;\r\n\r\n if (filter.name === FilterConstants.filterType.lowPass) {\r\n result = InductorLowPass.create({ algorithm: algorithm });\r\n } else if (filter.name === FilterConstants.filterType.bandPass) {\r\n result = InductorBandPass.create({ algorithm: algorithm });\r\n } else {\r\n result = InductorHighPass.create({ algorithm: algorithm });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('name', 'preferredAlgorithm') get algorithm() {\r\n var filter = this.filter;\r\n var name = this.name;\r\n var preferredAlgorithm = this.preferredAlgorithm;\r\n\r\n if (!CommonUtils.isNullOrUndefined(preferredAlgorithm)) {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n const algorithm = preferredAlgorithm[`${name}|${filter.name}`];\r\n return algorithm;\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n } else {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n return FilterConstants.model.inputs.components.defaultAlgorithm['sallenKey|lowPass'];\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n }\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n return this.instance.getStepValues(idealStep, circuit, timeAxis);\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n return this.instance.createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue);\r\n }\r\n\r\n createBigHugeCircuitGroup(circuit, toleranceInput) {\r\n return this.instance.createBigHugeCircuitGroup(circuit, toleranceInput);\r\n }\r\n\r\n getInterestingCircuits(commercialCircuit, toleranceInput) {\r\n return this.instance.getInterestingCircuits(commercialCircuit, toleranceInput);\r\n }\r\n}\r\n","import { computed } from '@ember/object';\r\nimport InductorActualFilterAmplitude from '../common/actual-filter-amplitude';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default InductorActualFilterAmplitude.extend({\r\n c1: null,\r\n l1: null,\r\n r1: null,\r\n opAmp: null,\r\n complexAlphaPlus: computed('c1', 'l1', 'r1', 'sSquared', 'sImaginary', function () {\r\n var sSquared = this.sSquared;\r\n var sImaginary = this.sImaginary;\r\n var complexOne = Complex.createComplex(1, 0);\r\n\r\n var c1 = this.c1;\r\n var l1 = this.l1;\r\n var r1 = this.r1;\r\n\r\n var result = complexOne.divide(Complex.createComplex(l1 * c1 * sSquared + 1, r1 * c1 * sImaginary));\r\n return result;\r\n }),\r\n inputImpedance: computed('r1', 'c1', 'l1', 'sImaginary', function () {\r\n var r1 = this.r1;\r\n var l1 = this.l1;\r\n var c1 = this.c1;\r\n var sImaginary = this.sImaginary;\r\n var result = Complex.createComplex(r1, l1 * sImaginary - 1 / (c1 * sImaginary));\r\n return result;\r\n }),\r\n});\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport { computed, set } from '@ember/object';\r\n\r\nimport * as ReverseImplementation from './reverse-implementation';\r\nimport BigHugeCircuit from './big-huge-circuit';\r\nimport BaseBigHugeCircuitGroup from '../../implementation-common/base-big-huge-circuit-group';\r\n\r\nexport default class InductorLowPassBigHugeCircuitGroup extends BaseBigHugeCircuitGroup {\r\n circuit;\r\n reverseImplementation;\r\n\r\n init() {\r\n set(this, 'reverseImplementation', ReverseImplementation);\r\n }\r\n\r\n @computed('circuit', 'nominalValues', 'reverseImplementation', 'gbwArray') get circuits() {\r\n var circuit = this.circuit;\r\n var nominalGbw = circuit.opAmp.gbw;\r\n var nominalValues = this.nominalValues;\r\n var reverseImplementation = this.reverseImplementation;\r\n var l1ToleranceArray = circuit.l1.toleranceArray;\r\n var c1ToleranceArray = circuit.c1.toleranceArray;\r\n var r1ToleranceArray = circuit.r1.toleranceArray;\r\n var r3ToleranceArray = circuit.r3.toleranceArray;\r\n var r4ToleranceArray = circuit.r4.toleranceArray;\r\n var inverseArray = circuit.r3.value ? r3ToleranceArray : r4ToleranceArray;\r\n\r\n var r4Start = r3ToleranceArray.length - 1;\r\n var gbwArray = this.gbwArray;\r\n var bigHugeCircuitArray = [];\r\n gbwArray.forEach((gbwValue) => {\r\n r1ToleranceArray.forEach((r1Value) => {\r\n inverseArray.forEach((inverseValue, index) => {\r\n var r3Value = r3ToleranceArray[index];\r\n var r4Value = r4ToleranceArray[r4Start - index];\r\n l1ToleranceArray.forEach((l1Value) => {\r\n c1ToleranceArray.forEach((c1Value) => {\r\n let item = BigHugeCircuit.create({\r\n c1: c1Value,\r\n r1: r1Value,\r\n r3: r3Value,\r\n r4: r4Value,\r\n l1: l1Value,\r\n opAmpGbw: gbwValue,\r\n nominalValues: nominalValues,\r\n nominalGbw: nominalGbw,\r\n reverseImplementation: reverseImplementation,\r\n });\r\n bigHugeCircuitArray.push(item);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n var result = this.setNormalizers(bigHugeCircuitArray);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseBigHugeCircuit from '../../implementation-common/big-huge-circuit';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class InductorLowPassBigHugeCircuit extends BaseBigHugeCircuit {\r\n @computed('c1', 'r1', 'r3', 'r4', 'l1') get circuitStageValues() {\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var l1 = this.l1;\r\n var result = ReverseImplementation.computeFromComponentValues(c1, r1, r3, r4, l1);\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../../../filter-constants';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\n\r\nexport function computeLimits(c1IdealValue, r1IdealValue, l1IdealValue) {\r\n let capacitorMinimumLimitMultiplier = computeCapacitorMinimumLimitMultiplier(c1IdealValue, l1IdealValue);\r\n let capacitorMaximumLimitMultiplier = computeCapacitorMaximumLimitMultiplier(c1IdealValue, l1IdealValue);\r\n let Q = (1 / r1IdealValue) * Math.sqrt(l1IdealValue / c1IdealValue);\r\n let c1BigLimits = computeC1BigLimits(c1IdealValue, l1IdealValue, capacitorMaximumLimitMultiplier, Q);\r\n let c1TinyLimits = computeC1TinyLimits(c1IdealValue, l1IdealValue, capacitorMinimumLimitMultiplier, Q);\r\n return {\r\n c1Minimum: c1TinyLimits.c1Tiny,\r\n c1Maximum: c1BigLimits.c1Big,\r\n r1Minimum: c1BigLimits.r1Tiny,\r\n r1Maximum: c1TinyLimits.r1Big,\r\n l1Minimum: c1BigLimits.l1Tiny,\r\n l1Maximum: c1TinyLimits.l1Big,\r\n };\r\n}\r\n\r\nexport function computeGainResistorLimitMultipliers(r3IdealValue, r4IdealValue) {\r\n let minMultiplier = CircuitUtils.getResistorMinimumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n let maxMultiplier = computeResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n return {\r\n resistorMinimumLimitMultiplier: minMultiplier,\r\n resistorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nfunction computeResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue) {\r\n var maxLimit = CircuitUtils.getResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n var result = maxLimit;\r\n var rBig = r4IdealValue * maxLimit;\r\n if (rBig > 100e3) {\r\n result = (result * 100e3) / rBig;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMinimumLimitMultiplier(c1IdealValue, l1IdealValue) {\r\n var smallCapLimit = FilterConstants.Limits.CSMALL_COMP_LIMIT * 2; //20 pF\r\n var result = smallCapLimit / c1IdealValue;\r\n var l1Big = l1IdealValue / result;\r\n\r\n if (l1Big > FilterConstants.Limits.LBIG_COMP_LIMIT) {\r\n result = (l1Big / FilterConstants.Limits.LBIG_COMP_LIMIT) * result;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMaximumLimitMultiplier(c1IdealValue, l1IdealValue) {\r\n var result = FilterConstants.Limits.CBIG_COMP_LIMIT / c1IdealValue;\r\n var l1Tiny = l1IdealValue / result;\r\n\r\n if (l1Tiny < FilterConstants.Limits.LSMALL_COMP_LIMIT) {\r\n result = (l1Tiny / FilterConstants.Limits.LSMALL_COMP_LIMIT) * result;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeC1BigLimits(c1IdealValue, l1IdealValue, capacitorMaximumLimitMultiplier, Q) {\r\n var smallResLimit = FilterConstants.Limits.RSMALL_COMP_LIMIT * 20; //20 ohms\r\n var l1Tiny = l1IdealValue / capacitorMaximumLimitMultiplier;\r\n var c1Big = c1IdealValue * capacitorMaximumLimitMultiplier;\r\n var r1Tiny = (1 / Q) * Math.sqrt(l1Tiny / c1Big);\r\n\r\n if (r1Tiny < smallResLimit) {\r\n var multiplier = r1Tiny / smallResLimit;\r\n c1Big = c1Big * multiplier;\r\n l1Tiny = l1Tiny / multiplier;\r\n r1Tiny = smallResLimit;\r\n }\r\n\r\n return {\r\n l1Tiny: l1Tiny,\r\n c1Big: c1Big,\r\n r1Tiny: r1Tiny,\r\n };\r\n}\r\n\r\nfunction computeC1TinyLimits(c1IdealValue, l1IdealValue, capacitorMinimumLimitMultiplier, Q) {\r\n var l1Big = l1IdealValue / capacitorMinimumLimitMultiplier;\r\n var c1Tiny = c1IdealValue * capacitorMinimumLimitMultiplier;\r\n var r1Big = (1 / Q) * Math.sqrt(l1Big / c1Tiny);\r\n\r\n if (r1Big > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n var multiplier = r1Big / FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n l1Big = l1Big / multiplier;\r\n c1Tiny = c1Tiny * multiplier;\r\n r1Big = FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n }\r\n\r\n return {\r\n l1Big: l1Big,\r\n c1Tiny: c1Tiny,\r\n r1Big: r1Big,\r\n };\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport NoiseGroup from './noise-group';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport LowPassInductorCircuitModel from './circuit';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as InductorLowPassCircuitLimitsUtils from './circuit-limits-utils';\r\nimport * as ComponentFactory from '../../../components/components-factory';\r\nimport { getImplementation } from '../../../gestures/optimization';\r\n\r\nimport { calculateFilterComponents } from '@ebiz/aditools-filter';\r\n\r\n// Encapsulates the creation of components for inductor lowpass.\r\n// A circuit is created from the stage properties stageFp, stageQ, and gain, and the optimization;\r\nexport default class InductorLowPassCircuit extends EmberObject {\r\n // Inputs\r\n stageFp;\r\n stageQ;\r\n gain;\r\n optimization;\r\n algorithm;\r\n\r\n // Process output - something used internally but on other classes\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths;\r\n componentLimits;\r\n frequency;\r\n sizing;\r\n\r\n // Figures output - used internally and also as output in the figures\r\n needReferenceStage = true;\r\n opAmp;\r\n c1;\r\n r1;\r\n r3;\r\n r4;\r\n l1;\r\n allowGainChange;\r\n masterCapacitor;\r\n\r\n // For cGov params of calculateFilterComponents - aditools-filter\r\n c1IdealValue;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'stageFp, stageQ, gain, optimization, and algorithm should not be null';\r\n }\r\n\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = LowPassInductorCircuitModel;\r\n this.supportedComponents = ['c1', 'l1', 'r1', 'r3', 'r4'];\r\n this.idealOpAmpValuePaths = ['r1', 'r3', 'r4'];\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.initialCapacitorValue)) {\r\n this.c1IdealValue = this._computeC1IdealValue(this.initialCapacitorValue);\r\n } else {\r\n this.c1IdealValue = this._computeC1IdealValue();\r\n }\r\n const idealValues = this._computeIdealValues();\r\n const componentLimits = InductorLowPassCircuitLimitsUtils.computeLimits(\r\n idealValues.c1IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.l1IdealValue,\r\n );\r\n const gainResistorLimits = InductorLowPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, componentLimits, gainResistorLimits);\r\n }\r\n\r\n _computeIdealValues() {\r\n const rGain = this._computeR3AndR4().r3 + this._computeR3AndR4().r4;\r\n const c1IdealValue = this.c1IdealValue;\r\n const params = {\r\n type: this.algorithm,\r\n implementation: getImplementation(FilterConstants.implementationType.inductor),\r\n fp: this.stageFp,\r\n gain: this.gain,\r\n q: this.stageQ,\r\n cGov: c1IdealValue,\r\n rGainOrCCross: rGain,\r\n };\r\n const filterComponents = calculateFilterComponents(\r\n params.type,\r\n params.implementation,\r\n params.fp,\r\n params.gain,\r\n params.q,\r\n params.cGov,\r\n params.rGainOrCCross,\r\n );\r\n\r\n return {\r\n c1IdealValue: filterComponents.c1,\r\n c2IdealValue: filterComponents.c2,\r\n r1IdealValue: filterComponents.r1,\r\n r2IdealValue: filterComponents.r2,\r\n r3IdealValue: filterComponents.r3,\r\n r4IdealValue: filterComponents.r4,\r\n l1IdealValue: filterComponents.l1,\r\n };\r\n }\r\n\r\n _computeR3AndR4() {\r\n const r3PlusR4 = this.optimization.determineStartingR3R4Value(this.stageFp);\r\n return CircuitUtils.computeR3AndR4(r3PlusR4, this.gain);\r\n }\r\n\r\n _computeC1IdealValue(value) {\r\n return value ? value : CircuitUtils.computeMasterCapacitorValue(this.optimization, this.stageFp);\r\n }\r\n\r\n _computeComponents(idealValues, componentLimits, gainResistorLimits) {\r\n this.sizing = this._getSizing(idealValues, componentLimits);\r\n let r3NominalValue = ComponentFactory.createR3(idealValues.r3IdealValue, null, null).toCommercialComponent().value;\r\n this.allowGainChange = CircuitUtils.getGainChangeSupportStatus(idealValues.r3IdealValue, idealValues.r4IdealValue);\r\n this.c1 = ComponentFactory.createC1MinAndMaxDefined(\r\n idealValues.c1IdealValue,\r\n componentLimits.c1Minimum,\r\n componentLimits.c1Maximum,\r\n this.sizing,\r\n this.rcRatio,\r\n );\r\n this.masterCapacitor = this.c1;\r\n let rcRatioInverse = CircuitUtils.getInverseOfMasterCapacitorRatio(this.c1);\r\n this.r1 = ComponentFactory.createR1MinAndMaxDefined(\r\n idealValues.r1IdealValue,\r\n componentLimits.r1Minimum,\r\n componentLimits.r1Maximum,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r3 = ComponentFactory.createR3(\r\n r3NominalValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n this.r4 = this._getR4(idealValues, gainResistorLimits);\r\n this.l1 = ComponentFactory.createInductor(\r\n idealValues.l1IdealValue,\r\n componentLimits.l1Minimum,\r\n componentLimits.l1Maximum,\r\n rcRatioInverse,\r\n );\r\n this.frequency = 1 / (2 * Math.PI * Math.sqrt(this.l1.value * this.c1.value));\r\n\r\n this.idealValues = idealValues;\r\n this.componentLimits = componentLimits;\r\n this.gainResistorLimits = gainResistorLimits;\r\n }\r\n\r\n _getSizing(idealValues, componentLimits) {\r\n let r1IdealValue = idealValues.r1IdealValue;\r\n let minimum = componentLimits.r1Minimum;\r\n let maximum = componentLimits.r1Maximum;\r\n let result = null;\r\n if (r1IdealValue < minimum) {\r\n result = FilterConstants.sizing.tiny;\r\n } else if (r1IdealValue > maximum) {\r\n result = FilterConstants.sizing.big;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // R4 may have an ideal value but it is recomputed here based on gain and R3\r\n // since it should adjust depending on the current value of R3.\r\n // (If r3 is not present or idealValue is 0 or INFINITY, we use the idealValue)\r\n // R3 may change due to the user changing the slider position or r3 adjusting to its nominal value.\r\n // R3 may also change when changing the e-series in the tolerance tab.\r\n _getR4(idealValues, gainResistorLimits) {\r\n let result = null;\r\n if (idealValues.r3IdealValue !== 0 && idealValues.r3IdealValue !== FilterConstants.Limits.INFINITY)\r\n result = ComponentFactory.createR4FromR3AndGain(\r\n this.r3.value,\r\n this.gain,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n else\r\n result = ComponentFactory.createR4(\r\n idealValues.r4IdealValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n\r\n return result;\r\n }\r\n\r\n changeGainValues(newR3Value) {\r\n if (this.allowGainChange) {\r\n this.r3 = this.r3.setValue(newR3Value);\r\n this.updateR4();\r\n }\r\n }\r\n\r\n updateR4() {\r\n this.r4 = this._getR4(this.idealValues, this.gainResistorLimits);\r\n }\r\n\r\n changeInitialCapacitor(value) {\r\n this.c1IdealValue = this._computeC1IdealValue(value);\r\n const idealValues = this._computeIdealValues();\r\n const componentLimits = InductorLowPassCircuitLimitsUtils.computeLimits(\r\n idealValues.c1IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.l1IdealValue,\r\n );\r\n const gainResistorLimits = InductorLowPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, componentLimits, gainResistorLimits);\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class InductorLowPass extends EmberObject {\r\n // Inputs\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n optimization = null;\r\n stageFp = null;\r\n gain = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n specialGain = null;\r\n name = 'ideal';\r\n slewRate = 0;\r\n rOutOverGBW = FilterConstants.Limits.INFINITY;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r1) ||\r\n CommonUtils.isNullOrUndefined(this.r3) ||\r\n CommonUtils.isNullOrUndefined(this.r4) ||\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r1, r3, r4, stageFp, gain, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.gbw = this.computeGbw();\r\n this.rOut = this.computeROut(this.gbw);\r\n this.specialGain = this.computeSpecialGain();\r\n }\r\n\r\n computeSpecialGain() {\r\n return 1 + this.r4 / this.r3;\r\n }\r\n\r\n computeGbw() {\r\n var inductorMultiplier = this.optimization.opAmpRequirementSpecValues.inductorMultiplier;\r\n var result = inductorMultiplier * this.stageFp * this.gain;\r\n return result;\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = this.r1;\r\n return dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n }\r\n\r\n computeROut(gbw) {\r\n return this.rOutOverGBW * gbw;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport * as RollOffStepResponse from '../../../step-response/roll-off';\r\nimport Circuit from './circuit';\r\nimport BigHugeCircuitGroup from './big-huge-circuit-group';\r\nimport BaseMain from '../../implementation-common/base-main';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class InductorLowPassMain extends BaseMain {\r\n bigHugeCircuitGroupModel;\r\n reverseImplementation;\r\n algorithm;\r\n\r\n init() {\r\n this.bigHugeCircuitGroupModel = BigHugeCircuitGroup;\r\n this.reverseImplementation = ReverseImplementation;\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = (circuit.r3.value + circuit.r4.value) / circuit.r3.value;\r\n var result = RollOffStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class InductorLowPassNoiseGroup extends BaseNoiseGroup {\r\n c1 = null;\r\n l1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n opAmp = null;\r\n frequencyArray = null;\r\n @computed('c1', 'l1', 'r1', 'r3', 'r4', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var c1 = this.c1;\r\n var l1 = this.l1;\r\n var r1 = this.r1;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexRParallelArray = filterAmplitude.map((item) => {\r\n return item.complexRParallel;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var sSquaredArray = filterAmplitude.map((item) => {\r\n return item.sSquared;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var noiseSource = NoiseSource.create({\r\n c1: c1,\r\n l1: l1,\r\n r1: r1,\r\n r3: r3,\r\n r4: r4,\r\n opAmp: opAmp,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var sSquared = sSquaredArray[index];\r\n var complexRParallel = complexRParallelArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n return noiseSource.totalNoise(item, complexRParallel, sImaginary, sSquared);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class InductorLowPassNoiseSource extends EmberObject {\r\n c1 = null;\r\n l1 = null;\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n opAmp = null;\r\n _r1Noise(filterAmplitude, sImaginary, sSquared) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r1 = this.r1;\r\n var c1 = this.c1;\r\n var l1 = this.l1;\r\n var complexAlphaPlus = R1.computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared);\r\n var complexFF = R1.computeComplexFF();\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _opAmpNegCurrent(filterAmplitude, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = OpAmpNegCurrent.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(complexRParallel, r3, r4);\r\n var value = this.opAmp.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _opAmpPosCurrent(filterAmplitude, sImaginary, sSquared) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var l1 = this.l1;\r\n var complexAlphaPlus = OpAmpPosCurrent.computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared);\r\n var complexFF = OpAmpPosCurrent.computeComplexFF();\r\n var value = this.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _opAmpVoltage(filterAmplitude) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var complexAlphaPlus = OpAmpVoltage.computeComplexAlphaPlus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = this.vNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n totalNoise(filterAmplitude, complexRParallel, sImaginary, sSquared) {\r\n var r1Noise = this._r1Noise(filterAmplitude, sImaginary, sSquared);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(filterAmplitude, complexRParallel);\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude, sImaginary, sSquared);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude);\r\n var noiseArray = [r1Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\nimport * as CommonUtils from '../../../../../utils/common';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex(-1 * CommonUtils.parallel(r3, r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var result = complexR3.mult(complexRParallel.divide(Complex.createComplex(r3 + r4, 0)));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared) {\r\n var result = Complex.createComplex(r1, l1 * sImaginary).divide(\r\n Complex.createComplex(l1 * c1 * sSquared + 1, r1 * c1 * sImaginary),\r\n );\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus() {\r\n var result = Complex.createComplex(1, 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(c1, r1, l1, sImaginary, sSquared) {\r\n var result = Complex.createComplex(1, 0).divide(Complex.createComplex(l1 * c1 * sSquared + 1, r1 * c1 * sImaginary));\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n var result = Complex.createComplex(0, 0);\r\n return result;\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport function computeFromComponentValues(c1, r1, r3, r4, l1) {\r\n var gain = 1 + r4 / r3;\r\n var wp = Math.sqrt(1 / (c1 * l1));\r\n var fp = wp / (Math.PI * 2);\r\n var q = (1 / r1) * Math.sqrt(l1 / c1);\r\n\r\n var result = EmberObject.create({ stageQ: q, stageFp: fp, gain: gain });\r\n return result;\r\n}\r\n\r\nexport function execute(circuit) {\r\n var r1 = circuit.r1.value;\r\n var r3 = circuit.r3 ? circuit.r3.value : null;\r\n var r4 = circuit.r4 ? circuit.r4.value : null;\r\n var c1 = circuit.c1.value;\r\n var l1 = circuit.l1.value;\r\n var result = this.computeFromComponentValues(c1, r1, r3, r4, l1);\r\n return result;\r\n}\r\n","import { computed } from '@ember/object';\r\nimport BaseActualFilterAmplitude from '../../implementation-common/base-actual-filter-amplitude';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default BaseActualFilterAmplitude.extend({\r\n c1: null,\r\n c2: null,\r\n c5: null,\r\n r1: null,\r\n r2: null,\r\n opAmp: null,\r\n complexAlphaPlus: Complex.createComplex(0, 0),\r\n complexBetaPlus: Complex.createComplex(0, 0),\r\n complexDenominator: computed('c1', 'c2', 'c5', 'r1', 'r2', 'sImaginary', 'sSquared', function () {\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n\r\n var denominatorRealTerm = sSquared * (c1 * c2 * r1 * r2 + c2 * c5 * r1 * r2) + 1;\r\n var denominatorImaginaryTerm = sImaginary * (c1 * r1 + c2 * r1 + c2 * r2 + c5 * r1);\r\n var result = Complex.createComplex(denominatorRealTerm, denominatorImaginaryTerm);\r\n return result;\r\n }),\r\n complexZlookbackDenominator: computed('c1', 'c2', 'c5', 'r1', 'r2', 'sImaginary', 'sSquared', function () {\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n\r\n var ZlookbackDenomnatorRealTerm = sSquared * (c1 * c2 * r1 + c1 * c5 * r1 + c2 * c5 * r2);\r\n var ZlookbackDenomnatorImaginaryTerm = sImaginary * (c2 + c5 + sSquared * r1 * r2 * c1 * c2 * c5);\r\n var result = Complex.createComplex(ZlookbackDenomnatorRealTerm, ZlookbackDenomnatorImaginaryTerm);\r\n return result;\r\n }),\r\n complexFFDenominator: computed('complexROut', 'complexZlookbackDenominator', 'complexDenominator', function () {\r\n var complexROut = this.complexROut;\r\n var complexZlookbackDenominator = this.complexZlookbackDenominator;\r\n var complexDenominator = this.complexDenominator;\r\n\r\n var result = complexROut.mult(complexZlookbackDenominator).plus(complexDenominator);\r\n return result;\r\n }),\r\n complexRParallel: computed('complexROut', 'complexFFDenominator', 'complexDenominator', function () {\r\n var complexROut = this.complexROut;\r\n var complexFFDenominator = this.complexFFDenominator;\r\n var complexDenominator = this.complexDenominator;\r\n\r\n var rParallelNumerator = complexDenominator.mult(complexROut);\r\n var rParallelDenominator = complexFFDenominator;\r\n var result = rParallelNumerator.divide(rParallelDenominator);\r\n return result;\r\n }),\r\n complexFF: computed(\r\n 'c1',\r\n 'c2',\r\n 'c5',\r\n 'r1',\r\n 'r2',\r\n 'opAmp',\r\n 'complexFFDenominator',\r\n 'sImaginary',\r\n 'sSquared',\r\n function () {\r\n var complexFFDenominator = this.complexFFDenominator;\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n var rOut = this.opAmp.rOut;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n\r\n var FFnumerator = Complex.createComplex(\r\n sSquared * rOut * r1 * c1 * (c2 + c5),\r\n sSquared * sImaginary * rOut * r1 * r2 * c1 * c2 * c5,\r\n );\r\n var result = FFnumerator.divide(complexFFDenominator);\r\n return result;\r\n },\r\n ),\r\n complexAlphaMinus: computed('r1', 'r2', 'c1', 'c2', 'complexDenominator', 'sSquared', function () {\r\n var sSquared = this.sSquared;\r\n var complexDenominator = this.complexDenominator;\r\n\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n\r\n var result = Complex.createComplex(sSquared * r1 * r2 * c1 * c2, 0).divide(complexDenominator);\r\n return result;\r\n }),\r\n complexBetaMinus: computed('c1', 'c2', 'c5', 'r1', 'r2', 'sImaginary', 'complexDenominator', 'sSquared', function () {\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n var complexDenominator = this.complexDenominator;\r\n\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n\r\n var complexBetaminusNumerator = Complex.createComplex(\r\n 1 + sSquared * c2 * c5 * r1 * r2,\r\n sImaginary * (c1 * r1 + c2 * r1 + c5 * r1),\r\n );\r\n var result = complexBetaminusNumerator.divide(complexDenominator);\r\n return result;\r\n }),\r\n inputImpedance: computed('c1', 'c2', 'c5', 'r1', 'r2', 'sImaginary', 'complexAmplitude', function () {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n var sImaginary = this.sImaginary;\r\n var complexAmplitude = this.complexAmplitude;\r\n\r\n var complexOne = Complex.createComplex(1, 0);\r\n var complexNegOne = Complex.createComplex(-1, 0);\r\n var complexC1s = Complex.createComplex(0, 0);\r\n complexC1s.imaginary = c1 * sImaginary;\r\n\r\n var y1 = Complex.createComplex(r2, -1 / (c2 * sImaginary));\r\n y1 = complexOne.divide(y1);\r\n y1.real = y1.imaginary + c5 * sImaginary;\r\n var y1r1 = y1;\r\n y1r1.real *= r1;\r\n y1r1.imaginary *= r1;\r\n\r\n var top = Complex.createComplex(1, c1 * r1 * sImaginary);\r\n top = y1r1.plus(top);\r\n\r\n var bottom = Complex.createComplex(r1, 0);\r\n bottom = complexAmplitude.mult(bottom);\r\n bottom = bottom.plus(complexNegOne.subs(y1r1));\r\n bottom = complexC1s.mult(bottom);\r\n\r\n var result = top.divide(bottom);\r\n return result;\r\n }),\r\n computeMagnitude(complexAlphaMinus, complexFF) {\r\n let complexAlphaPlus = this.complexAlphaPlus;\r\n let complexA = this.complexA;\r\n let amplitudeDenominator = this.amplitudeDenominator;\r\n let amplitudeNumerator = this._computeAmplitudeNumerator(complexAlphaPlus, complexAlphaMinus, complexA, complexFF);\r\n let complexAmplitude = this._computeComplexAmplitude(amplitudeNumerator, amplitudeDenominator);\r\n return complexAmplitude.magnitude();\r\n },\r\n});\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport * as ReverseImplementation from './reverse-implementation';\r\nimport BigHugeCircuit from './big-huge-circuit';\r\nimport BaseBigHugeCircuitGroup from '../../implementation-common/base-big-huge-circuit-group';\r\n\r\nexport default class MultipleFeedbackBigHugeCircuitGroup extends BaseBigHugeCircuitGroup {\r\n circuit;\r\n toleranceInput;\r\n reverseImplementation = ReverseImplementation;\r\n\r\n @computed('circuit', 'nominalValues', 'reverseImplementation') get circuits() {\r\n var circuit = this.circuit;\r\n var nominalGbw = circuit.opAmp.gbw;\r\n var nominalValues = this.nominalValues;\r\n var reverseImplementation = this.reverseImplementation;\r\n var c1ToleranceArray = circuit.c1.toleranceArray;\r\n var c2ToleranceArray = circuit.c2.toleranceArray;\r\n var r1ToleranceArray = circuit.r1.toleranceArray;\r\n var r2ToleranceArray = circuit.r2.toleranceArray;\r\n var c5ToleranceArray = circuit.c5.toleranceArray;\r\n\r\n var gbwArray = this.gbwArray;\r\n var bigHugeCircuitArray = [];\r\n gbwArray.forEach((gbwValue) => {\r\n r1ToleranceArray.forEach((r1Value) => {\r\n r2ToleranceArray.forEach((r2Value) => {\r\n c5ToleranceArray.forEach((c5Value) => {\r\n c1ToleranceArray.forEach((c1Value) => {\r\n c2ToleranceArray.forEach((c2Value) => {\r\n let item = BigHugeCircuit.create({\r\n c1: c1Value,\r\n c2: c2Value,\r\n c5: c5Value,\r\n r1: r1Value,\r\n r2: r2Value,\r\n opAmpGbw: gbwValue,\r\n nominalValues: nominalValues,\r\n nominalGbw: nominalGbw,\r\n reverseImplementation: reverseImplementation,\r\n });\r\n bigHugeCircuitArray.push(item);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n var result = this.setNormalizers(bigHugeCircuitArray);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseBigHugeCircuit from '../../implementation-common/big-huge-circuit';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class MultipleFeedbackBigHugeCircuit extends BaseBigHugeCircuit {\r\n @computed('c1', 'c2', 'c5', 'r1', 'r2') get circuitStageValues() {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var result = ReverseImplementation.computeFromComponentValues(c1, c2, c5, r1, r2);\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport function computeCapacitorLimitMultipliers(c1IdealValue, c2IdealValue, c5IdealValue, r1IdealValue, r2IdealValue) {\r\n let maxMultiplier = computeCapacitorMaximumLimitMultiplier(\r\n c1IdealValue,\r\n c2IdealValue,\r\n c5IdealValue,\r\n r1IdealValue,\r\n r2IdealValue,\r\n );\r\n let minMultiplier = computeCapacitorMinimumLimitMultiplier(\r\n c1IdealValue,\r\n c2IdealValue,\r\n c5IdealValue,\r\n r1IdealValue,\r\n r2IdealValue,\r\n );\r\n return {\r\n capacitorMinimumLimitMultiplier: minMultiplier,\r\n capacitorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nfunction computeCapacitorMaximumLimitMultiplier(c1IdealValue, c2IdealValue, c5IdealValue, r1IdealValue, r2IdealValue) {\r\n var cmax = Math.max(c1IdealValue, c2IdealValue, c5IdealValue);\r\n var result = FilterConstants.Limits.CBIG_COMP_LIMIT / cmax;\r\n var r1Tiny = r1IdealValue / result;\r\n var r2Tiny = r2IdealValue / result;\r\n\r\n if (CommonUtils.parallel(r1Tiny, r2Tiny) < FilterConstants.Limits.RSMALL_LOAD_LIMIT) {\r\n result = (result * CommonUtils.parallel(r1Tiny, r2Tiny)) / FilterConstants.Limits.RSMALL_LOAD_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMinimumLimitMultiplier(c1IdealValue, c2IdealValue, c5IdealValue, r1IdealValue, r2IdealValue) {\r\n var cmin = Math.min(c1IdealValue, c2IdealValue, c5IdealValue);\r\n var result = FilterConstants.Limits.CSMALL_COMP_LIMIT / cmin;\r\n var r1Big = r1IdealValue / result;\r\n var r2Big = r2IdealValue / result;\r\n\r\n var biggestR = Math.max(r1Big, r2Big);\r\n if (biggestR > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n result = (result * biggestR) / FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport NoiseGroup from './noise-group';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport HighPassMultipleFeedbackCircuit from './circuit';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nimport * as MultipleFeedbackHighPassCircuitLimitsUtils from './circuit-limits-utils';\r\nimport * as ComponentFactory from '../../../components/components-factory';\r\nimport { getImplementation } from '../../../gestures/optimization';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nimport { calculateFilterComponents } from '@ebiz/aditools-filter';\r\n\r\n// Encapsulates the component creation of multiplefeedback highpass\r\n// A circuit is created from the stage properties stageFp, stageQ, and gain, and the optimization;\r\nexport default class MultipleFeedbackHighPassCircuit extends EmberObject {\r\n // Inputs\r\n stageFp;\r\n stageQ;\r\n gain;\r\n optimization;\r\n algorithm;\r\n\r\n // Process output - something used internally but on other classes\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths;\r\n componentLimits;\r\n frequency;\r\n sizing;\r\n\r\n // Figures output - used internally and also as output in the figures\r\n needReferenceStage = true;\r\n c1;\r\n c2;\r\n c5;\r\n r1;\r\n r2;\r\n masterCapacitor;\r\n allowGainChange;\r\n opAmp;\r\n\r\n // For cGov params of calculateFilterComponents - aditools-filter\r\n c1IdealValue;\r\n\r\n init() {\r\n super.init();\r\n if (\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'stageFp, stageQ, gain, optimization, and algorithm should not be null';\r\n }\r\n\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = HighPassMultipleFeedbackCircuit;\r\n this.supportedComponents = ['r1', 'r2', 'c1', 'c2', 'c5'];\r\n this.idealOpAmpValuePaths = ['r2', 'c1', 'c5'];\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.initialCapacitorValue)) {\r\n this.c1IdealValue = this._computeC1IdealValue(this.initialCapacitorValue);\r\n } else {\r\n this.c1IdealValue = this._computeC1IdealValue();\r\n }\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = MultipleFeedbackHighPassCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.c5IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits);\r\n }\r\n\r\n _computeIdealValues() {\r\n const implementation = getImplementation(FilterConstants.implementationType.multipleFeedback);\r\n const c1IdealValue = this.c1IdealValue;\r\n const params = {\r\n type: this.algorithm,\r\n implementation: implementation,\r\n fp: this.stageFp,\r\n gain: this.gain,\r\n q: this.stageQ,\r\n cGov: c1IdealValue,\r\n };\r\n const filterComponents = calculateFilterComponents(\r\n params.type,\r\n params.implementation,\r\n params.fp,\r\n params.gain,\r\n params.q,\r\n params.cGov,\r\n params.rGainOrCCross,\r\n );\r\n\r\n return {\r\n c1IdealValue: filterComponents.c1,\r\n c2IdealValue: filterComponents.c2,\r\n c5IdealValue: this._computeC5IdealValue(filterComponents.c1),\r\n r1IdealValue: filterComponents.r1,\r\n r2IdealValue: filterComponents.r2,\r\n };\r\n }\r\n\r\n _computeC1IdealValue(value) {\r\n return value ? value : CircuitUtils.computeMasterCapacitorValue(this.optimization, this.stageFp);\r\n }\r\n\r\n _computeC5IdealValue(value) {\r\n return value / this.gain;\r\n }\r\n\r\n _computeComponents(idealValues, capacitorLimits) {\r\n this.sizing = this._getSizing(idealValues, capacitorLimits);\r\n this.c1 = ComponentFactory.createC1(\r\n idealValues.c1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n this.rcRatio,\r\n );\r\n this.masterCapacitor = this.c1;\r\n let rcRatioInverse = CircuitUtils.getInverseOfMasterCapacitorRatio(this.c1);\r\n this.r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r2 = ComponentFactory.createR2(\r\n idealValues.r2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.c2 = ComponentFactory.createC2(\r\n idealValues.c2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.c5 = ComponentFactory.createC5(\r\n idealValues.c5IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.frequency = 1 / (2 * Math.PI * Math.sqrt(this.r1.value * this.r2.value * this.c2.value * this.c5.value));\r\n }\r\n\r\n _getSizing(idealValues, capacitorLimits) {\r\n let r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n );\r\n return CircuitUtils.getResistorSize(r1);\r\n }\r\n\r\n // Intentionally empty since this is part of the interface.\r\n // Multiple feedback doesn't support gain resistors\r\n changeGainValues() {}\r\n\r\n updateR4() {\r\n throw 'r4 is not supported in this circuit';\r\n }\r\n\r\n changeInitialCapacitor(value) {\r\n this.c1IdealValue = this._computeC1IdealValue(value);\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = MultipleFeedbackHighPassCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.c5IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits);\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class MultipleFeedbackHighPassIdealOpAmp extends EmberObject {\r\n // Inputs\r\n r2 = null;\r\n c1 = null;\r\n c5 = null;\r\n optimization = null;\r\n stageFp = null;\r\n gain = null;\r\n stageQ = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n specialGain = null;\r\n name = 'ideal';\r\n slewRate = 0;\r\n rOutOverGBW = FilterConstants.Limits.INFINITY;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r2) ||\r\n CommonUtils.isNullOrUndefined(this.c1) ||\r\n CommonUtils.isNullOrUndefined(this.c5) ||\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r2, c1, c5, stageFp, stageQ, gain, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.gbw = this.computeGbw();\r\n this.rOut = this.computeROut(this.gbw);\r\n this.specialGain = this.computeSpecialGain();\r\n }\r\n\r\n computeSpecialGain() {\r\n return 1 + this.c1 / this.c5;\r\n }\r\n\r\n computeGbw() {\r\n var fMultiplier = this.optimization.opAmpRequirementSpecValues.fMultiplier;\r\n var result = fMultiplier * this.stageFp * this.gain * Math.max(this.stageQ, 1);\r\n return result;\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = this.r2;\r\n return dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n }\r\n\r\n computeROut(gbw) {\r\n return this.rOutOverGBW * gbw;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport * as RollOffStepResponse from '../../../step-response/roll-off';\r\nimport Circuit from './circuit';\r\nimport BigHugeCircuitGroup from './big-huge-circuit-group';\r\nimport BaseMain from '../../implementation-common/base-main';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class MultipleFeedbackHighPassMain extends BaseMain {\r\n bigHugeCircuitGroupModel;\r\n reverseImplementation;\r\n algorithm;\r\n\r\n init() {\r\n this.bigHugeCircuitGroupModel = BigHugeCircuitGroup;\r\n this.reverseImplementation = ReverseImplementation;\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = circuit.c1.value / circuit.c5.value;\r\n var result = RollOffStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n\r\n // invert step response for Multiple Feedback HPF, b/c it's an inverting configuration\r\n result = result.map((item) => {\r\n return item * -1;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class MultipleFeedbackHighPassNoiseGroup extends BaseNoiseGroup {\r\n r1 = null;\r\n r2 = null;\r\n c5 = null;\r\n c1 = null;\r\n c2 = null;\r\n opAmp = null;\r\n frequencyArray = null;\r\n @computed('r1', 'r2', 'c1', 'c2', 'c5', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexDenominatorArray = filterAmplitude.map((item) => {\r\n return item.complexDenominator;\r\n });\r\n var complexFFDenominatorArray = filterAmplitude.map((item) => {\r\n return item.complexFFDenominator;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var sSquaredArray = filterAmplitude.map((item) => {\r\n return item.sSquared;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var rOut = opAmp.rOut;\r\n var noiseSource = NoiseSource.create({\r\n r1: r1,\r\n r2: r2,\r\n c1: c1,\r\n c2: c2,\r\n c5: c5,\r\n rOut: rOut,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var complexDenominator = complexDenominatorArray[index];\r\n var complexFFDenominator = complexFFDenominatorArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n var sSquared = sSquaredArray[index];\r\n return noiseSource.totalNoise(item, complexDenominator, complexFFDenominator, sImaginary, sSquared);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport * as R2 from './noise-sources/r2';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class MultipleFeedbackHighpassNoiseSource extends EmberObject {\r\n c1 = null;\r\n c2 = null;\r\n c5 = null;\r\n r1 = null;\r\n r2 = null;\r\n opAmp = null;\r\n frequency = null;\r\n _r1Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var rOut = this.rOut;\r\n var complexAlphaMinus = R1.computeComplexAlphaMinus(complexDenominator, c2, r2, sImaginary);\r\n var complexFF = R1.computeComplexFF(complexFFDenominator, c2, c5, r2, rOut, sImaginary, sSquared);\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _r2Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared) {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var rOut = this.rOut;\r\n var complexAlphaMinus = R2.computeComplexAlphaMinus(complexDenominator, c1, c2, c5, r1, sImaginary);\r\n var complexFF = R2.computeComplexFF(complexFFDenominator, c1, c2, r1, rOut, sImaginary, sSquared);\r\n var value = Math.sqrt(r2 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _opAmpNegCurrent(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared) {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var c5 = this.c5;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var rOut = this.rOut;\r\n var complexAlphaMinus = OpAmpNegCurrent.computeComplexAlphaMinus(\r\n complexDenominator,\r\n c1,\r\n c2,\r\n c5,\r\n r1,\r\n r2,\r\n sImaginary,\r\n );\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(\r\n complexFFDenominator,\r\n c1,\r\n c2,\r\n c5,\r\n r1,\r\n r2,\r\n rOut,\r\n sImaginary,\r\n sSquared,\r\n );\r\n var value = this.iNoise;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _opAmpPosCurrent(filterAmplitude) {\r\n var complexAlphaMinus = OpAmpPosCurrent.computeComplexAlphaMinus();\r\n var complexFF = OpAmpPosCurrent.computeComplexFF();\r\n var value = +this.iNoise;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _opAmpVoltage(filterAmplitude) {\r\n var complexAlphaMinus = OpAmpVoltage.computeComplexAlphaMinus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = +this.vNoise;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n totalNoise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared) {\r\n var r1Noise = this._r1Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared);\r\n var r2Noise = this._r2Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(\r\n filterAmplitude,\r\n complexDenominator,\r\n complexFFDenominator,\r\n sImaginary,\r\n sSquared,\r\n );\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude);\r\n var noiseArray = [r1Noise, r2Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, c1, c2, c5, r1, r2, sImaginary) {\r\n var result = Complex.createComplex(r2, sImaginary * r2 * (c1 * r1 + c2 * r1 + c5 * r1)).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexFFDenominator, c1, c2, c5, r1, r2, rOut, sImaginary, sSquared) {\r\n var complexFFNumerator = Complex.createComplex(\r\n rOut * (sSquared * c2 * c5 * r1 * r2 + 1),\r\n sImaginary * rOut * (c1 * r1 + c2 * r1 + c5 * r1),\r\n );\r\n var result = complexFFNumerator.divide(complexFFDenominator);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus() {\r\n var result = Complex.createComplex(0, 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n var result = Complex.createComplex(0, 0);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus() {\r\n var result = Complex.createComplex(1, 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n var result = Complex.createComplex(0, 0);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, c2, r2, sImaginary) {\r\n var result = Complex.createComplex(0, sImaginary * c2 * r2).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexFFDenominator, c2, c5, r2, rOut, sImaginary, sSquared) {\r\n var complexFFNumerator = Complex.createComplex(sSquared * rOut * c2 * c5 * r2, sImaginary * rOut * (c2 + c5));\r\n var result = complexFFNumerator.divide(complexFFDenominator);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, c1, c2, c5, r1, sImaginary) {\r\n var result = Complex.createComplex(1, sImaginary * (c1 * r1 + c2 * r1 + c5 * r1)).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexFFDenominator, c1, c2, r1, rOut, sImaginary, sSquared) {\r\n var complexFFNumerator = Complex.createComplex(sSquared * rOut * c1 * c2 * r1, sImaginary * rOut * c2);\r\n var result = complexFFNumerator.divide(complexFFDenominator);\r\n return result;\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport function computeFromComponentValues(c1, c2, c5, r1, r2) {\r\n var gain = c1 / c5;\r\n var sqrtTerm = Math.sqrt(r1 * r2 * c2 * c5);\r\n var fpPrime = 1 / (2 * Math.PI * sqrtTerm);\r\n var woPrime = 1 / sqrtTerm;\r\n\r\n var q = 1 / ((c1 + c2 + c5) / (c2 * c5 * r2 * woPrime));\r\n var fp = fpPrime;\r\n\r\n var result = EmberObject.create({ stageQ: q, stageFp: fp, gain: gain });\r\n return result;\r\n}\r\n\r\nexport function execute(circuit) {\r\n var r1 = circuit.r1.value;\r\n var r2 = circuit.r2.value;\r\n var c1 = circuit.c1.value;\r\n var c2 = circuit.c2.value;\r\n var c5 = circuit.c5.value;\r\n return computeFromComponentValues(c1, c2, c5, r1, r2);\r\n}\r\n","import { computed } from '@ember/object';\r\nimport BaseActualFilterAmplitude from '../../implementation-common/base-actual-filter-amplitude';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default BaseActualFilterAmplitude.extend({\r\n r1: null,\r\n r2: null,\r\n r5: null,\r\n c1: null,\r\n c2: null,\r\n opAmp: null,\r\n complexAlphaPlus: Complex.createComplex(0, 0),\r\n complexBetaPlus: Complex.createComplex(0, 0),\r\n complexDenominator: computed('r1', 'r2', 'r5', 'c1', 'c2', 'sImaginary', 'sSquared', function () {\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n\r\n var denominatorRealTerm = sSquared * c1 * c2 * r1 * r2 * r5 + r1 + r5;\r\n var denominatorImaginaryTerm = sImaginary * (c2 * r1 * r2 + c2 * r1 * r5 + c2 * r2 * r5 + c1 * r1 * r5);\r\n var result = Complex.createComplex(denominatorRealTerm, denominatorImaginaryTerm);\r\n return result;\r\n }),\r\n complexZlookbackDenominator: computed('r1', 'r2', 'r5', 'c1', 'c2', 'sImaginary', 'sSquared', function () {\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n\r\n var ZlookbackDenomnatorRealTerm = sSquared * (c1 * c2 * r1 * r2 + c1 * c2 * r1 * r5) + 1;\r\n var ZlookbackDenomnatorImaginaryTerm = sImaginary * (c1 * r1 + c2 * r2 + c2 * r5);\r\n var result = Complex.createComplex(ZlookbackDenomnatorRealTerm, ZlookbackDenomnatorImaginaryTerm);\r\n return result;\r\n }),\r\n complexFFDenominator: computed('complexROut', 'complexZlookbackDenominator', 'complexDenominator', function () {\r\n var complexROut = this.complexROut;\r\n var complexZlookbackDenominator = this.complexZlookbackDenominator;\r\n var complexDenominator = this.complexDenominator;\r\n\r\n var result = complexROut.mult(complexZlookbackDenominator).plus(complexDenominator);\r\n return result;\r\n }),\r\n complexRParallel: computed('complexROut', 'complexFFDenominator', 'complexDenominator', function () {\r\n var complexROut = this.complexROut;\r\n var complexFFDenominator = this.complexFFDenominator;\r\n var complexDenominator = this.complexDenominator;\r\n\r\n var rParallelNumerator = complexDenominator.mult(complexROut);\r\n var rParallelDenominator = complexFFDenominator;\r\n var result = rParallelNumerator.divide(rParallelDenominator);\r\n return result;\r\n }),\r\n complexFF: computed('c2', 'r2', 'r5', 'opAmp', 'complexFFDenominator', 'sImaginary', function () {\r\n var complexFFDenominator = this.complexFFDenominator;\r\n var sImaginary = this.sImaginary;\r\n\r\n var rOut = this.opAmp.rOut;\r\n var c2 = this.c2;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n\r\n var FFnumerator = Complex.createComplex(rOut, sImaginary * (c2 * r2 * rOut + c2 * r5 * rOut));\r\n var result = FFnumerator.divide(complexFFDenominator);\r\n return result;\r\n }),\r\n complexAlphaMinus: computed('r5', 'complexDenominator', function () {\r\n var complexDenominator = this.complexDenominator;\r\n var r5 = this.r5;\r\n\r\n var result = Complex.createComplex(r5, 0).divide(complexDenominator);\r\n return result;\r\n }),\r\n complexBetaMinus: computed('r1', 'r5', 'c1', 'sImaginary', 'complexDenominator', function () {\r\n var sImaginary = this.sImaginary;\r\n var complexDenominator = this.complexDenominator;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var r5 = this.r5;\r\n\r\n var complexBetaminusNumerator = Complex.createComplex(-1 * r5, -1 * c1 * r1 * r5 * sImaginary).plus(\r\n complexDenominator,\r\n );\r\n var result = complexBetaminusNumerator.divide(complexDenominator);\r\n return result;\r\n }),\r\n inputImpedance: computed(\r\n 'r1',\r\n 'r2',\r\n 'r5',\r\n 'c1',\r\n 'c2',\r\n 'sImaginary',\r\n 'complexDenominator',\r\n 'complexAmplitude',\r\n function () {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n\r\n var sImaginary = this.sImaginary;\r\n var complexOne = Complex.createComplex(1, 0);\r\n var complexAmplitude = this.complexAmplitude;\r\n\r\n var y1 = Complex.createComplex(r2, -1 / (c2 * sImaginary));\r\n y1 = complexOne.divide(y1);\r\n y1.real = y1.real + 1 / r5;\r\n\r\n var bottom = y1.mult(complexAmplitude);\r\n bottom = y1.subs(bottom);\r\n bottom.imaginary += c1 * sImaginary;\r\n\r\n var top = Complex.createComplex(1, c1 * r1 * sImaginary);\r\n var y1r1 = y1;\r\n y1r1.real *= r1;\r\n y1r1.imaginary *= r1;\r\n top = top.plus(y1r1);\r\n\r\n var result = top.divide(bottom);\r\n return result;\r\n },\r\n ),\r\n computeMagnitude(complexAlphaMinus, complexFF) {\r\n let complexAlphaPlus = this.complexAlphaPlus;\r\n let complexA = this.complexA;\r\n let amplitudeDenominator = this.amplitudeDenominator;\r\n let amplitudeNumerator = this._computeAmplitudeNumerator(complexAlphaPlus, complexAlphaMinus, complexA, complexFF);\r\n let complexAmplitude = this._computeComplexAmplitude(amplitudeNumerator, amplitudeDenominator);\r\n return complexAmplitude.magnitude();\r\n },\r\n});\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport * as ReverseImplementation from './reverse-implementation';\r\nimport BigHugeCircuit from './big-huge-circuit';\r\nimport BaseBigHugeCircuitGroup from '../../implementation-common/base-big-huge-circuit-group';\r\n\r\nexport default class MultipleFeedbackLowPassBigHugeCircuitGroup extends BaseBigHugeCircuitGroup {\r\n circuit;\r\n reverseImplementation = ReverseImplementation;\r\n @computed('circuit', 'nominalValues', 'reverseImplementation') get circuits() {\r\n let bugSimulationEnabled = false;\r\n var circuit = this.circuit;\r\n var nominalGbw = circuit.opAmp.gbw;\r\n var nominalValues = this.nominalValues;\r\n var reverseImplementation = this.reverseImplementation;\r\n var c1ToleranceArray = circuit.c1.toleranceArray;\r\n var c2ToleranceArray = circuit.c2.toleranceArray;\r\n var r1ToleranceArray = circuit.r1.toleranceArray;\r\n var r2ToleranceArray = circuit.r2.toleranceArray;\r\n var r5ToleranceArray = circuit.r5.toleranceArray;\r\n\r\n var gbwArray = this.gbwArray;\r\n var bigHugeCircuitArray = [];\r\n gbwArray.forEach((gbwValue) => {\r\n r1ToleranceArray.forEach((r1Value) => {\r\n r2ToleranceArray.forEach((r2Value, index) => {\r\n r5ToleranceArray.forEach((r5Value) => {\r\n let bugSimulationR5Value = r5ToleranceArray[index];\r\n c1ToleranceArray.forEach((c1Value) => {\r\n c2ToleranceArray.forEach((c2Value) => {\r\n let item = BigHugeCircuit.create({\r\n c1: c1Value,\r\n c2: c2Value,\r\n r1: r1Value,\r\n r2: r2Value,\r\n r5: bugSimulationEnabled ? bugSimulationR5Value : r5Value,\r\n opAmpGbw: gbwValue,\r\n nominalValues: nominalValues,\r\n nominalGbw: nominalGbw,\r\n reverseImplementation: reverseImplementation,\r\n });\r\n bigHugeCircuitArray.push(item);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n var result = this.setNormalizers(bigHugeCircuitArray);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseBigHugeCircuit from '../../implementation-common/big-huge-circuit';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class MultipleFeedbackLowPassBigHugeCircuit extends BaseBigHugeCircuit {\r\n @computed('c1', 'c2', 'r1', 'r2', 'r5', 'opAmpGbw') get circuitStageValues() {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n var gbw = this.opAmpGbw;\r\n var result = ReverseImplementation.computeFromComponentValues(c1, c2, r1, r2, r5, gbw);\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport function computeCapacitorLimitMultipliers(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue, r5IdealValue) {\r\n let maxMultiplier = computeCapacitorMaximumLimitMultiplier(\r\n c1IdealValue,\r\n c2IdealValue,\r\n r1IdealValue,\r\n r2IdealValue,\r\n r5IdealValue,\r\n );\r\n let minMultiplier = computeCapacitorMinimumLimitMultiplier(\r\n c1IdealValue,\r\n c2IdealValue,\r\n r1IdealValue,\r\n r2IdealValue,\r\n r5IdealValue,\r\n );\r\n return {\r\n capacitorMinimumLimitMultiplier: minMultiplier,\r\n capacitorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nfunction computeCapacitorMaximumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue, r5IdealValue) {\r\n var cmax = Math.max(c1IdealValue, c2IdealValue);\r\n var result = FilterConstants.Limits.CBIG_COMP_LIMIT / cmax;\r\n var r1Tiny = r1IdealValue / result;\r\n var r2Tiny = r2IdealValue / result;\r\n var r5Tiny = r5IdealValue / result;\r\n\r\n if (\r\n CommonUtils.parallel(r2Tiny, r5Tiny) < FilterConstants.Limits.RSMALL_LOAD_LIMIT ||\r\n r1Tiny < FilterConstants.Limits.RSMALL_LOAD_LIMIT\r\n ) {\r\n const r1LoadRatio = r1Tiny / FilterConstants.Limits.RSMALL_LOAD_LIMIT;\r\n const r2ParallelR5LoadRatio = CommonUtils.parallel(r2Tiny, r5Tiny) / FilterConstants.Limits.RSMALL_LOAD_LIMIT;\r\n const resLoadModifier = Math.min(r1LoadRatio, r2ParallelR5LoadRatio, 1);\r\n result = result * resLoadModifier;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMinimumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue, r5IdealValue) {\r\n var cmin = Math.min(c1IdealValue, c2IdealValue);\r\n var result = FilterConstants.Limits.CSMALL_COMP_LIMIT / cmin;\r\n var r1Big = r1IdealValue / result;\r\n var r2Big = r2IdealValue / result;\r\n var r5Big = r5IdealValue / result;\r\n\r\n var biggestR = Math.max(r1Big, r2Big, r5Big);\r\n if (biggestR > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n result = (result * biggestR) / FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport NoiseGroup from './noise-group';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport LowPassMultipleFeedbackCircuit from './circuit';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\nimport * as MultipleFeedbackLowPassCircuitLimitsUtils from './circuit-limits-utils';\r\nimport * as ComponentFactory from '../../../components/components-factory';\r\nimport { getImplementation } from '../../../gestures/optimization';\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport ToleranceInput from '../../../inputs/tolerance';\r\nimport { computeNominalValue } from 'filter-wizard/models/tolerances/tolerance-utils';\r\n\r\nimport { calculateFilterComponents } from '@ebiz/aditools-filter';\r\n\r\n// Encapsulates the component creation of multiplefeedback lowpass\r\n// A circuit is created from the stage properties stageFp, stageQ, and gain, and the optimization;\r\nexport default class MultipleFeedbackLowPassCircuit extends EmberObject {\r\n // Inputs\r\n stageFp;\r\n stageQ;\r\n gain;\r\n optimization;\r\n algorithm;\r\n\r\n // Process output - something used internally but on other classes\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths;\r\n componentLimits;\r\n frequency;\r\n sizing;\r\n\r\n // Figures output - used internally and also as output in the figures\r\n needReferenceStage = true;\r\n c1;\r\n c2;\r\n r1;\r\n r2;\r\n r5;\r\n masterCapacitor;\r\n allowGainChange;\r\n opAmp;\r\n\r\n // For cGov params of calculateFilterComponents - aditools-filter\r\n c2IdealValue;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'stageFp, stageQ, gain, optimization, and algorithm should not be null';\r\n }\r\n\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = LowPassMultipleFeedbackCircuit;\r\n this.supportedComponents = ['r1', 'r2', 'r5', 'c1', 'c2'];\r\n this.idealOpAmpValuePaths = ['r1', 'r2', 'r5', 'c1', 'c2'];\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.initialCapacitorValue)) {\r\n this.c2IdealValue = this._computeC2IdealValue(this.initialCapacitorValue);\r\n } else {\r\n this.c2IdealValue = this._computeC2IdealValue();\r\n }\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = MultipleFeedbackLowPassCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n idealValues.r5IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits);\r\n }\r\n\r\n _computeIdealValues() {\r\n const implementation = getImplementation(FilterConstants.implementationType.multipleFeedback);\r\n const c2IdealValue = this.c2IdealValue;\r\n const params = {\r\n type: this.algorithm,\r\n implementation: implementation,\r\n fp: this.stageFp,\r\n gain: this.gain,\r\n q: this.stageQ,\r\n cGov: c2IdealValue,\r\n };\r\n const filterComponents = calculateFilterComponents(\r\n params.type,\r\n params.implementation,\r\n params.fp,\r\n params.gain,\r\n params.q,\r\n params.cGov,\r\n params.rGainOrCCross,\r\n );\r\n\r\n return {\r\n c1IdealValue: filterComponents.c1,\r\n c2IdealValue: filterComponents.c2,\r\n r1IdealValue: filterComponents.r1,\r\n r2IdealValue: filterComponents.r2,\r\n r5IdealValue: filterComponents.r5,\r\n };\r\n }\r\n\r\n _computeC1IdealValue(initialCapacitorValue, alpha, gain) {\r\n const c1Value = (4 / (alpha * alpha)) * (gain + 1) * initialCapacitorValue;\r\n return c1Value;\r\n }\r\n\r\n _computeC2IdealValue(value) {\r\n const initialC2Value = value ? value : this._computeInitialCapacitorValue();\r\n\r\n const alpha = 1 / this.stageQ;\r\n const c1IdealValue = this._computeC1IdealValue(initialC2Value, alpha, this.gain);\r\n const c1NominalValue = this._computeC1NominalValue(c1IdealValue);\r\n const c1NominalToIdealRatio = c1IdealValue / c1NominalValue;\r\n const c2IdealValue = initialC2Value / c1NominalToIdealRatio;\r\n\r\n return c2IdealValue;\r\n }\r\n\r\n _computeInitialCapacitorValue() {\r\n const initialCapacitorValue = this.optimization.determineCapacitorValue(this.stageFp);\r\n const toleranceInput = new ToleranceInput({\r\n capacitorTolerance: FilterConstants.capacitorTolerance.ideal,\r\n capacitorPreferredSeries: 'E24',\r\n });\r\n const nominalValue = computeNominalValue(initialCapacitorValue, toleranceInput.capacitorPreferredSeries, 'closest');\r\n return nominalValue;\r\n }\r\n\r\n _computeC1NominalValue(c1IdealValue) {\r\n const toleranceInput = new ToleranceInput({\r\n capacitorTolerance: FilterConstants.capacitorTolerance.ideal,\r\n capacitorPreferredSeries: 'E24',\r\n });\r\n const nominalValue = computeNominalValue(c1IdealValue, toleranceInput.capacitorPreferredSeries, 'closest');\r\n return nominalValue;\r\n }\r\n\r\n _computeComponents(idealValues, capacitorLimits) {\r\n this.sizing = this._getSizing(idealValues, capacitorLimits);\r\n this.c1 = ComponentFactory.createC1(\r\n idealValues.c1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n this.rcRatio,\r\n );\r\n this.rcRatioInverse = CircuitUtils.getInverseOfMasterCapacitorRatio(this.c1);\r\n this.r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n this.rcRatioInverse,\r\n );\r\n this.r2 = ComponentFactory.createR2(\r\n idealValues.r2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n this.rcRatioInverse,\r\n );\r\n this.c2 = ComponentFactory.createC2(\r\n idealValues.c2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n this.rcRatioInverse,\r\n );\r\n this.r5 = ComponentFactory.createR2(\r\n idealValues.r5IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n this.rcRatioInverse,\r\n );\r\n this.frequency = 1 / (2 * Math.PI * Math.sqrt(this.r2.value * this.r5.value * this.c1.value * this.c2.value));\r\n this.masterCapacitor = this.c2;\r\n }\r\n\r\n _getSizing(idealValues, capacitorLimits) {\r\n let r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n );\r\n return CircuitUtils.getResistorSize(r1);\r\n }\r\n\r\n // Multiple feedback circuits doesn't have gain resistors.\r\n // This is left empty intentionally.\r\n changeGainValues() {}\r\n\r\n updateR4() {\r\n throw 'r4 is not supported in this circuit';\r\n }\r\n\r\n changeInitialCapacitor(value) {\r\n this.c2IdealValue = this._computeC2IdealValue(value);\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = MultipleFeedbackLowPassCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n idealValues.r5IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits);\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class MultipleFeedbackLowPassIdealOpAmp extends EmberObject {\r\n // Inputs\r\n r1 = null;\r\n r2 = null;\r\n r5 = null;\r\n c1 = null;\r\n c2 = null;\r\n optimization = null;\r\n stageFp = null;\r\n gain = null;\r\n stageQ = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n specialGain = 1;\r\n name = 'ideal';\r\n slewRate = 0;\r\n rOutOverGBW = FilterConstants.Limits.INFINITY;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r1) ||\r\n CommonUtils.isNullOrUndefined(this.r2) ||\r\n CommonUtils.isNullOrUndefined(this.r5) ||\r\n CommonUtils.isNullOrUndefined(this.c1) ||\r\n CommonUtils.isNullOrUndefined(this.c2) ||\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r1, r2, r5, c1, c2, stageFp, stageQ, gain, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.gbw = this.computeGbw();\r\n this.rOut = this.computeROut(this.gbw);\r\n }\r\n\r\n computeGbw() {\r\n var allowedError = this.optimization.opAmpRequirementSpecValues.allowedError;\r\n var numerator =\r\n this.stageFp * (-2 * this.stageQ * this.gain + Math.sqrt((this.c1 * this.r5) / (this.c2 * this.r2)));\r\n var denominator = 2 * allowedError;\r\n var result = (numerator * this.gain) / denominator;\r\n return result;\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = this.r2 + CommonUtils.parallel(this.r1, this.r5);\r\n return dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n }\r\n\r\n computeROut(gbw) {\r\n return this.rOutOverGBW * gbw;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport * as FeedForwardStepResponse from '../../../step-response/feed-forward';\r\nimport Circuit from './circuit';\r\nimport BigHugeCircuitGroup from './big-huge-circuit-group';\r\nimport BaseMain from '../../implementation-common/base-main';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class MultipleFeedbackLowPassMain extends BaseMain {\r\n bigHugeCircuitGroupModel;\r\n reverseImplementation;\r\n algorithm;\r\n\r\n init() {\r\n this.bigHugeCircuitGroupModel = BigHugeCircuitGroup;\r\n this.reverseImplementation = ReverseImplementation;\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = circuit.r5.value / circuit.r1.value;\r\n var result = FeedForwardStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n result = result.map((item) => {\r\n return item * -1;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class MultipleFeedbackNoiseGroup extends BaseNoiseGroup {\r\n frequencyArray = null;\r\n r1 = null;\r\n r2 = null;\r\n r5 = null;\r\n c1 = null;\r\n c2 = null;\r\n opAmp = null;\r\n\r\n @computed('r1', 'r2', 'r5', 'c1', 'c2', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexDenominatorArray = filterAmplitude.map((item) => {\r\n return item.complexDenominator;\r\n });\r\n var complexFFDenominatorArray = filterAmplitude.map((item) => {\r\n return item.complexFFDenominator;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var sSquaredArray = filterAmplitude.map((item) => {\r\n return item.sSquared;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var rOut = opAmp.rOut;\r\n var noiseSource = NoiseSource.create({\r\n r1: r1,\r\n r2: r2,\r\n r5: r5,\r\n c1: c1,\r\n c2: c2,\r\n rOut: rOut,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var complexDenominator = complexDenominatorArray[index];\r\n var complexFFDenominator = complexFFDenominatorArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n var sSquared = sSquaredArray[index];\r\n return noiseSource.totalNoise(item, complexDenominator, complexFFDenominator, sImaginary, sSquared);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport * as R2 from './noise-sources/r2';\r\nimport * as R5 from './noise-sources/r5';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class MultipleFeedbackLowPassNoiseSource extends EmberObject {\r\n r1 = null;\r\n r2 = null;\r\n r5 = null;\r\n c1 = null;\r\n c2 = null;\r\n rOut = null;\r\n frequency = null;\r\n _r1Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r5 = this.r5;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var rOut = this.rOut;\r\n var complexAlphaMinus = R1.computeComplexAlphaMinus(complexDenominator, r5);\r\n var complexFF = R1.computeComplexFF(complexFFDenominator, c2, r2, r5, rOut, sImaginary);\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _r2Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary) {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n var rOut = this.rOut;\r\n var complexAlphaMinus = R2.computeComplexAlphaMinus(complexDenominator, c1, r1, r5, sImaginary);\r\n var complexFF = R2.computeComplexFF(complexFFDenominator, c1, c2, r1, r5, rOut, sImaginary);\r\n var value = Math.sqrt(r2 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _r5Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared) {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n var rOut = this.rOut;\r\n var complexAlphaMinus = R5.computeComplexAlphaMinus(complexDenominator, r1);\r\n var complexFF = R5.computeComplexFF(complexFFDenominator, c1, c2, r1, r2, rOut, sImaginary, sSquared);\r\n var value = Math.sqrt(r5 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _opAmpNegCurrent(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared) {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r5 = this.r5;\r\n var rOut = this.rOut;\r\n var complexAlphaMinus = OpAmpNegCurrent.computeComplexAlphaMinus(complexDenominator, c1, r1, r2, r5, sImaginary);\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(\r\n complexFFDenominator,\r\n c1,\r\n c2,\r\n r1,\r\n r2,\r\n r5,\r\n rOut,\r\n sImaginary,\r\n sSquared,\r\n );\r\n var value = this.iNoise;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _opAmpPosCurrent(filterAmplitude) {\r\n var complexAlphaMinus = OpAmpPosCurrent.computeComplexAlphaMinus();\r\n var complexFF = OpAmpPosCurrent.computeComplexFF();\r\n var value = +this.iNoise;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n _opAmpVoltage(filterAmplitude) {\r\n var complexAlphaMinus = OpAmpVoltage.computeComplexAlphaMinus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = +this.vNoise;\r\n var magnitude = filterAmplitude.computeMagnitude(complexAlphaMinus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n totalNoise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared) {\r\n var r1Noise = this._r1Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary);\r\n var r2Noise = this._r2Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary);\r\n var r5Noise = this._r5Noise(filterAmplitude, complexDenominator, complexFFDenominator, sImaginary, sSquared);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(\r\n filterAmplitude,\r\n complexDenominator,\r\n complexFFDenominator,\r\n sImaginary,\r\n sSquared,\r\n );\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude);\r\n var noiseArray = [r1Noise, r2Noise, r5Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, c1, r1, r2, r5, sImaginary) {\r\n var result = Complex.createComplex(r1 * r2 + r1 * r5 + r2 * r5, c1 * r1 * r2 * r5 * sImaginary).divide(\r\n complexDenominator,\r\n );\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexFFDenominator, c1, c2, r1, r2, r5, rOut, sImaginary, sSquared) {\r\n var complexFFNumerator = Complex.createComplex(\r\n rOut * r1 + sSquared * rOut * c1 * c2 * r1 * r2 * r5,\r\n sImaginary * rOut * (c2 * r1 * r2 + c2 * r1 * r5 + c2 * r2 * r5),\r\n );\r\n var result = complexFFNumerator.divide(complexFFDenominator);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus() {\r\n return Complex.createComplex(1, 0);\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, r5) {\r\n var result = Complex.createComplex(r5, 0).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexFFDenominator, c2, r2, r5, rOut, sImaginary) {\r\n var complexFFNumerator = Complex.createComplex(rOut, sImaginary * c2 * rOut * (r2 + r5));\r\n var result = complexFFNumerator.divide(complexFFDenominator);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, c1, r1, r5, sImaginary) {\r\n var result = Complex.createComplex(r1 + r5, c1 * r1 * r5 * sImaginary).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexFFDenominator, c1, c2, r1, r5, rOut, sImaginary) {\r\n var complexFFNumerator = Complex.createComplex(1, sImaginary * r1 * c1).mult(\r\n Complex.createComplex(0, sImaginary * rOut * r5 * c2),\r\n );\r\n var result = complexFFNumerator.divide(complexFFDenominator);\r\n return result;\r\n}\r\n","export function computeComplexAlphaMinus() {\r\n throw 'not supported in multiple-feedback';\r\n}\r\n\r\nexport function computeComplexFF() {\r\n throw 'not supported in multiple-feedback';\r\n}\r\n","export function computeComplexAlphaMinus() {\r\n throw 'not supported in multiple-feedback';\r\n}\r\n\r\nexport function computeComplexFF() {\r\n throw 'not supported in multiple-feedback';\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaMinus(complexDenominator, r1) {\r\n var result = Complex.createComplex(r1, 0).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexFFDenominator, c1, c2, r1, r2, rOut, sImaginary, sSquared) {\r\n var complexFFNumerator = Complex.createComplex(\r\n +rOut + sSquared * rOut * c1 * c2 * r1 * r2,\r\n sImaginary * rOut * (c1 * r1 + c2 * r2),\r\n );\r\n var result = complexFFNumerator.divide(complexFFDenominator);\r\n return result;\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport function computeFromComponentValues(c1, c2, r1, r2, r5, gbw) {\r\n var gain = r5 / r1;\r\n var sqrtTerm = Math.sqrt(r2 * r5 * c1 * c2);\r\n var fpPrime = 1 / (2 * Math.PI * sqrtTerm);\r\n var woPrime = 1 / sqrtTerm;\r\n\r\n var qPrime = 1 / (((1 / c1) * (1 / r1 + 1 / r2 + 1 / r5)) / woPrime);\r\n var gbwMod = Math.sqrt(1 + (gain * gain) / (2 * Math.PI * r2 * c2 * gbw));\r\n\r\n var q = qPrime * gbwMod;\r\n var fp = fpPrime / gbwMod;\r\n\r\n var result = EmberObject.create({ stageQ: q, stageFp: fp, gain: gain });\r\n return result;\r\n}\r\n\r\nexport function execute(circuit) {\r\n var r1 = circuit.r1.value;\r\n var r2 = circuit.r2.value;\r\n var r5 = circuit.r5.value;\r\n var c1 = circuit.c1.value;\r\n var c2 = circuit.c2.value;\r\n var gbw = circuit.opAmp.gbw;\r\n return this.computeFromComponentValues(c1, c2, r1, r2, r5, gbw);\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport FilterConstants from '../../../filter-constants';\r\nimport MultipleFeedbackLowPass from './low-pass/main';\r\nimport MultipleFeedbackHighPass from './high-pass/main';\r\nimport BaseImplementation from '../base-implementation';\r\nimport * as CommonUtils from '../../../utils/common';\r\n\r\nexport default class MultipleFeedback extends BaseImplementation {\r\n filter;\r\n preferredAlgorithm;\r\n name = FilterConstants.implementationType.multipleFeedback;\r\n\r\n @computed('filter') get instance() {\r\n var filter = this.filter;\r\n var result = null;\r\n var algorithm = this.algorithm;\r\n\r\n if (filter.name === FilterConstants.filterType.lowPass) {\r\n result = MultipleFeedbackLowPass.create({ algorithm: algorithm });\r\n } else if (filter.name === FilterConstants.filterType.highPass) {\r\n result = MultipleFeedbackHighPass.create({ algorithm: algorithm });\r\n } else {\r\n throw 'Filter type not supported';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('name', 'preferredAlgorithm') get algorithm() {\r\n var filter = this.filter;\r\n var name = this.name;\r\n var preferredAlgorithm = this.preferredAlgorithm;\r\n\r\n if (!CommonUtils.isNullOrUndefined(preferredAlgorithm)) {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n const algorithm = preferredAlgorithm[`${name}|${filter.name}`];\r\n return algorithm;\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n } else {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n return FilterConstants.model.inputs.components.defaultAlgorithm['sallenKey|lowPass'];\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n }\r\n }\r\n\r\n @computed('instance') get circuit() {\r\n var result = this.instance.circuit;\r\n return result;\r\n }\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n return this.instance.getStepValues(idealStep, circuit, timeAxis);\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n return this.instance.createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue);\r\n }\r\n\r\n createBigHugeCircuitGroup(circuit, toleranceInput) {\r\n return this.instance.createBigHugeCircuitGroup(circuit, toleranceInput);\r\n }\r\n\r\n getInterestingCircuits(commercialCircuit, toleranceInput) {\r\n return this.instance.getInterestingCircuits(commercialCircuit, toleranceInput);\r\n }\r\n}\r\n","import { computed } from '@ember/object';\r\nimport BaseActualFilterAmplitude from '../../implementation-common/base-actual-filter-amplitude';\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default BaseActualFilterAmplitude.extend({\r\n r1: null,\r\n r2: null,\r\n r3: null,\r\n r4: null,\r\n c1: null,\r\n c2: null,\r\n opAmp: null,\r\n complexS: computed('sImaginary', function () {\r\n var sImaginary = this.sImaginary;\r\n var result = Complex.createComplex(0, sImaginary);\r\n return result;\r\n }),\r\n complexDenominator: computed('r1', 'r2', 'c1', 'c2', 'sImaginary', 'sSquared', function () {\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n\r\n var denominatorRealTerm = sSquared * r1 * c1 * c2 * r2 + 1;\r\n var denominatorImaginaryTerm = (r1 * c1 + r1 * c2 + r2 * c2) * sImaginary;\r\n var result = Complex.createComplex(denominatorRealTerm, denominatorImaginaryTerm);\r\n return result;\r\n }),\r\n complexAlphaPlus: computed('r1', 'r2', 'c1', 'c2', 'complexDenominator', 'sSquared', function () {\r\n var complexDenominator = this.complexDenominator;\r\n var sSquared = this.sSquared;\r\n\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n\r\n var result = Complex.createComplex(sSquared * r1 * c1 * c2 * r2, 0).divide(complexDenominator);\r\n return result;\r\n }),\r\n complexBetaPlus: computed('r2', 'c2', 'complexS', 'complexDenominator', function () {\r\n var complexS = this.complexS;\r\n var complexDenominator = this.complexDenominator;\r\n\r\n var r2 = this.r2;\r\n var c2 = this.c2;\r\n\r\n var complexR2 = Complex.createComplex(r2, 0);\r\n var complexC2 = Complex.createComplex(c2, 0);\r\n\r\n var result = complexR2.mult(complexC2.mult(complexS)).divide(complexDenominator);\r\n return result;\r\n }),\r\n complexRParallel: computed(\r\n 'r1',\r\n 'r2',\r\n 'r3',\r\n 'r4',\r\n 'c1',\r\n 'c2',\r\n 'opAmp',\r\n 'sSquared',\r\n 'sImaginary',\r\n 'complexDenominator',\r\n 'complexS',\r\n function () {\r\n var complexS = this.complexS;\r\n var complexOne = Complex.createComplex(1, 0);\r\n var rOut = this.opAmp.rOut;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n\r\n var complexC2 = Complex.createComplex(c2, 0);\r\n var complexC1 = Complex.createComplex(c1, 0);\r\n var complexR1 = Complex.createComplex(r1, 0);\r\n var complexR2 = Complex.createComplex(r2, 0);\r\n\r\n var oneByC2S = complexOne.divide(complexC2.mult(complexS));\r\n var zlookbackpart1 = complexOne.divide(oneByC2S.plus(complexR2)).plus(complexS.mult(complexC1));\r\n var zlookbackpart1pow = complexOne.divide(zlookbackpart1);\r\n var complexZlookback = zlookbackpart1pow.plus(complexR1);\r\n\r\n var rParallelReal = 1 / CommonUtils.parallel(rOut, r3 + r4);\r\n var result = complexOne.divide(Complex.createComplex(rParallelReal, 0).plus(complexOne.divide(complexZlookback))); //complexZlookback overwritten\r\n return result;\r\n },\r\n ),\r\n complexFF: computed('r1', 'complexRParallel', function () {\r\n var complexRParallel = this.complexRParallel;\r\n var r1 = this.r1;\r\n var complexR1 = Complex.createComplex(r1, 0);\r\n var result = complexRParallel.divide(complexR1);\r\n return result;\r\n }),\r\n complexAlphaMinus: Complex.createComplex(0, 0),\r\n complexBetaMinus: computed('r3', 'r4', 'sImaginary', function () {\r\n var sImaginary = this.sImaginary;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var complexBetaDenom = Complex.createComplex(\r\n r3 + r4,\r\n r4 * r3 * FilterConstants.Limits.PARASITIC_INPUT_CAP * sImaginary,\r\n );\r\n var result = complexR3.divide(complexBetaDenom);\r\n return result;\r\n }),\r\n inputImpedance: computed('r1', 'r2', 'c1', 'c2', 'sImaginary', 'complexDenominator', 'complexAmplitude', function () {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var sImaginary = this.sImaginary;\r\n var complexDenominator = this.complexDenominator;\r\n var complexAmplitude = this.complexAmplitude;\r\n\r\n var complexC1s = Complex.createComplex(0, 0);\r\n complexC1s.imaginary = c1 * sImaginary;\r\n\r\n var term1 = Complex.createComplex(1, r2 * c2 * sImaginary + r1 * c2 * sImaginary);\r\n var term2 = Complex.createComplex(-1, -1 * r2 * c2 * sImaginary);\r\n term2 = complexAmplitude.mult(term2);\r\n var bottom = complexC1s.mult(term1.plus(term2));\r\n var result = complexDenominator.divide(bottom);\r\n return result;\r\n }),\r\n});\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport * as ReverseImplementation from './reverse-implementation';\r\nimport BigHugeCircuit from './big-huge-circuit';\r\nimport BaseBigHugeCircuitGroup from '../../implementation-common/base-big-huge-circuit-group';\r\n\r\nexport default class SallenKeyHighPassBigHugeCircuitGroup extends BaseBigHugeCircuitGroup {\r\n circuit;\r\n toleranceInput;\r\n reverseImplementation = ReverseImplementation;\r\n\r\n @computed('circuit', 'nominalValues', 'gbwArray') get circuits() {\r\n var circuit = this.circuit;\r\n var nominalGbw = circuit.opAmp.gbw;\r\n var nominalValues = this.nominalValues;\r\n var reverseImplementation = this.reverseImplementation;\r\n var c1ToleranceArray = circuit.c1.toleranceArray;\r\n var c2ToleranceArray = circuit.c2.toleranceArray;\r\n var r1ToleranceArray = circuit.r1.toleranceArray;\r\n var r2ToleranceArray = circuit.r2.toleranceArray;\r\n var r3ToleranceArray = circuit.r3.toleranceArray;\r\n var r4ToleranceArray = circuit.r4.toleranceArray;\r\n var inverseArray = circuit.r3.value ? r3ToleranceArray : r4ToleranceArray;\r\n\r\n var r4Start = r3ToleranceArray.length - 1;\r\n var gbwArray = this.gbwArray;\r\n var bigHugeCircuitArray = [];\r\n gbwArray.forEach((gbwValue) => {\r\n r1ToleranceArray.forEach((r1Value) => {\r\n r2ToleranceArray.forEach((r2Value) => {\r\n inverseArray.forEach((inverseValue, index) => {\r\n var r3Value = r3ToleranceArray[index];\r\n var r4Value = r4ToleranceArray[r4Start - index];\r\n c1ToleranceArray.forEach((c1Value) => {\r\n c2ToleranceArray.forEach((c2Value) => {\r\n let item = BigHugeCircuit.create({\r\n c1: c1Value,\r\n c2: c2Value,\r\n r1: r1Value,\r\n r2: r2Value,\r\n r3: r3Value,\r\n r4: r4Value,\r\n opAmpGbw: gbwValue,\r\n nominalValues: nominalValues,\r\n nominalGbw: nominalGbw,\r\n reverseImplementation: reverseImplementation,\r\n });\r\n bigHugeCircuitArray.push(item);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n var result = this.setNormalizers(bigHugeCircuitArray);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseBigHugeCircuit from '../../implementation-common/big-huge-circuit';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class SallenKeyHighPassBigHugeCircuit extends BaseBigHugeCircuit {\r\n @computed('c1', 'c2', 'r1', 'r2', 'r3', 'r4', 'reverseImplementation') get circuitStageValues() {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var result = ReverseImplementation.computeFromComponentValues(c1, c2, r1, r2, r3, r4);\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\n\r\nexport function computeCapacitorLimitMultipliers(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue) {\r\n let maxMultiplier = computeCapacitorMaximumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue);\r\n let minMultiplier = computeCapacitorMinimumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue);\r\n return {\r\n capacitorMinimumLimitMultiplier: minMultiplier,\r\n capacitorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nexport function computeGainResistorLimitMultipliers(r3IdealValue, r4IdealValue) {\r\n let minMultiplier = CircuitUtils.getResistorMinimumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n let maxMultiplier = CircuitUtils.getResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n return {\r\n resistorMinimumLimitMultiplier: minMultiplier,\r\n resistorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nfunction computeCapacitorMaximumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue) {\r\n var cmax = Math.max(c1IdealValue, c2IdealValue);\r\n var result = FilterConstants.Limits.CBIG_COMP_LIMIT / cmax;\r\n var r1Tiny = r1IdealValue / result;\r\n var r2Tiny = r2IdealValue / result;\r\n\r\n if (CommonUtils.parallel(r1Tiny, r2Tiny) < FilterConstants.Limits.RSMALL_LOAD_LIMIT) {\r\n result = (result * CommonUtils.parallel(r1Tiny, r2Tiny)) / FilterConstants.Limits.RSMALL_LOAD_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMinimumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue) {\r\n var cmin = Math.min(c1IdealValue, c2IdealValue);\r\n var result = FilterConstants.Limits.CSMALL_COMP_LIMIT / cmin;\r\n var r1Big = r1IdealValue / result;\r\n var r2Big = r2IdealValue / result;\r\n\r\n var biggestR = Math.max(r1Big, r2Big);\r\n if (biggestR > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n result = (result * biggestR) / FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport NoiseGroup from './noise-group';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport HighPassSallenKeyCircuit from './circuit';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\nimport * as SallenKeyHighPassCircuitLimitsUtils from './circuit-limits-utils';\r\nimport * as ComponentFactory from '../../../components/components-factory';\r\n\r\nimport { calculateFilterComponents } from '@ebiz/aditools-filter';\r\n\r\n// Encapsulates the component creation of sallen key highpass\r\n// A circuit is created from the stage properties stageFp, stageQ, and gain, and the optimization;\r\nexport default class SallenKeyHighPassCircuit extends EmberObject {\r\n // Inputs\r\n stageFp;\r\n stageQ;\r\n gain;\r\n optimization;\r\n algorithm;\r\n\r\n // Process output - something used internally but on other classes\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths;\r\n componentLimits;\r\n frequency;\r\n sizing;\r\n\r\n // Figures output - used internally and also as output in the figures\r\n needReferenceStage = true;\r\n c1;\r\n c2;\r\n r1;\r\n r2;\r\n r3;\r\n r4;\r\n masterCapacitor;\r\n allowGainChange;\r\n opAmp;\r\n\r\n // For cGov params of calculateFilterComponents - aditools-filter\r\n c1IdealValue;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'stageFp, stageQ, gain, optimization, and algorithm should not be null';\r\n }\r\n\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = HighPassSallenKeyCircuit;\r\n this.supportedComponents = ['r1', 'r2', 'r3', 'r4', 'c1', 'c2'];\r\n this.idealOpAmpValuePaths = ['r1', 'r2', 'r3', 'r4', 'c1', 'c2'];\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.initialCapacitorValue)) {\r\n this.c1IdealValue = this._computeC1IdealValue(this.initialCapacitorValue);\r\n } else {\r\n this.c1IdealValue = this._computeC1IdealValue();\r\n }\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = SallenKeyHighPassCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n );\r\n const gainResistorLimits = SallenKeyHighPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits, gainResistorLimits);\r\n }\r\n\r\n _computeIdealValues() {\r\n const rGain = this._computeR3AndR4().r3 + this._computeR3AndR4().r4;\r\n const c1IdealValue = this.c1IdealValue;\r\n const params = {\r\n type: this.algorithm,\r\n implementation: FilterConstants.implementationType.sallenKey,\r\n fp: this.stageFp,\r\n gain: this.gain,\r\n q: this.stageQ,\r\n cGov: c1IdealValue,\r\n rGainOrCCross: rGain,\r\n };\r\n const filterComponents = calculateFilterComponents(\r\n params.type,\r\n params.implementation,\r\n params.fp,\r\n params.gain,\r\n params.q,\r\n params.cGov,\r\n params.rGainOrCCross,\r\n );\r\n\r\n return {\r\n c1IdealValue: filterComponents.c1,\r\n c2IdealValue: filterComponents.c2,\r\n r1IdealValue: filterComponents.r1,\r\n r2IdealValue: filterComponents.r2,\r\n r3IdealValue: filterComponents.r3,\r\n r4IdealValue: filterComponents.r4,\r\n };\r\n }\r\n\r\n _computeR3AndR4() {\r\n const r3PlusR4 = this.optimization.determineStartingR3R4Value(this.stageFp);\r\n return CircuitUtils.computeR3AndR4(r3PlusR4, this.gain);\r\n }\r\n\r\n _computeC1IdealValue(value) {\r\n return value ? value : CircuitUtils.computeMasterCapacitorValue(this.optimization, this.stageFp);\r\n }\r\n\r\n _computeComponents(idealValues, capacitorLimits, gainResistorLimits) {\r\n let r3NominalValue = ComponentFactory.createR3(idealValues.r3IdealValue, null, null).toCommercialComponent().value;\r\n this.allowGainChange = CircuitUtils.getGainChangeSupportStatus(idealValues.r3IdealValue, idealValues.r4IdealValue);\r\n this.sizing = this._getSizing(idealValues, capacitorLimits);\r\n this.c1 = ComponentFactory.createC1(\r\n idealValues.c1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n this.rcRatio,\r\n );\r\n this.masterCapacitor = this.c1;\r\n let rcRatioInverse = CircuitUtils.getInverseOfMasterCapacitorRatio(this.c1);\r\n this.r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r2 = ComponentFactory.createR2(\r\n idealValues.r2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.c2 = ComponentFactory.createC2(\r\n idealValues.c2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r3 = ComponentFactory.createR3(\r\n r3NominalValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n this.r4 = this._getR4(idealValues, gainResistorLimits);\r\n this.frequency = 1 / (2 * Math.PI * Math.sqrt(this.r1.value * this.r2.value * this.c1.value * this.c2.value));\r\n\r\n this.idealValues = idealValues;\r\n this.capacitorLimits = capacitorLimits;\r\n this.gainResistorLimits = gainResistorLimits;\r\n }\r\n\r\n _getSizing(idealValues, capacitorLimits) {\r\n let r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n );\r\n return CircuitUtils.getResistorSize(r1);\r\n }\r\n\r\n // R4 may have an ideal value but it is recomputed here based on gain and R3\r\n // since it should adjust depending on the current value of R3.\r\n // (If r3 is not present or idealValue is 0 or INFINITY, we use the idealValue)\r\n // R3 may change due to the user changing the slider position or r3 adjusting to its nominal value.\r\n // R3 may also change when changing the e-series in the tolerance tab.\r\n _getR4(idealValues, gainResistorLimits) {\r\n let result = null;\r\n if (idealValues.r3IdealValue !== 0 && idealValues.r3IdealValue !== FilterConstants.Limits.INFINITY)\r\n result = ComponentFactory.createR4FromR3AndGain(\r\n this.r3.value,\r\n this.gain,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n else\r\n result = ComponentFactory.createR4(\r\n idealValues.r4IdealValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n\r\n return result;\r\n }\r\n\r\n changeGainValues(newR3Value) {\r\n if (this.allowGainChange) {\r\n this.r3 = this.r3.setValue(newR3Value);\r\n this.updateR4();\r\n }\r\n }\r\n\r\n updateR4() {\r\n this.r4 = this._getR4(this.idealValues, this.gainResistorLimits);\r\n }\r\n\r\n changeInitialCapacitor(value) {\r\n this.c1IdealValue = this._computeC1IdealValue(value);\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = SallenKeyHighPassCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n );\r\n const gainResistorLimits = SallenKeyHighPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits, gainResistorLimits);\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class SallenKeyHighPassIdealOpAmp extends EmberObject {\r\n // Inputs\r\n r2 = null;\r\n r3 = null;\r\n r4 = null;\r\n optimization = null;\r\n stageFp = null;\r\n gain = null;\r\n stageQ = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n specialGain = 1;\r\n name = 'ideal';\r\n slewRate = 0;\r\n rOutOverGBW = FilterConstants.Limits.INFINITY;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r2) ||\r\n CommonUtils.isNullOrUndefined(this.r3) ||\r\n CommonUtils.isNullOrUndefined(this.r4) ||\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r2, r3, r4 stageFp, stageQ, gain, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.gbw = this.computeGbw();\r\n this.rOut = this.computeROut(this.gbw);\r\n this.specialGain = this.computeSpecialGain();\r\n }\r\n\r\n computeSpecialGain() {\r\n return 1 + this.r4 / this.r3;\r\n }\r\n\r\n computeGbw() {\r\n var fMultiplier = this.optimization.opAmpRequirementSpecValues.fMultiplier;\r\n var result = 2 * fMultiplier * this.stageFp * this.gain * Math.max(this.stageQ, 1);\r\n return result;\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = this.r2;\r\n return dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n }\r\n\r\n computeROut(gbw) {\r\n return this.rOutOverGBW * gbw;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport * as RollOffStepResponse from '../../../step-response/roll-off';\r\nimport Circuit from './circuit';\r\nimport BigHugeCircuitGroup from './big-huge-circuit-group';\r\nimport BaseMain from '../../implementation-common/base-main';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class SallenKeyHighPassMain extends BaseMain {\r\n bigHugeCircuitGroupModel;\r\n reverseImplementation = ReverseImplementation;\r\n algorithm;\r\n\r\n init() {\r\n this.bigHugeCircuitGroupModel = BigHugeCircuitGroup;\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = (circuit.r3.value + circuit.r4.value) / circuit.r3.value;\r\n var result = RollOffStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n\r\n getStageValuesFromCircuit(circuit) {\r\n return ReverseImplementation.execute(circuit);\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class SallenkeyHighPassNoiseGroup extends BaseNoiseGroup {\r\n r1 = null;\r\n r2 = null;\r\n r3 = null;\r\n r4 = null;\r\n c1 = null;\r\n c2 = null;\r\n opAmp = null;\r\n frequencyArray = null;\r\n @computed('r1', 'r2', 'r3', 'r4', 'c1', 'c2', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexDenominatorArray = filterAmplitude.map((item) => {\r\n return item.complexDenominator;\r\n });\r\n var complexRParallelArray = filterAmplitude.map((item) => {\r\n return item.complexRParallel;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var noiseSource = NoiseSource.create({\r\n r1: r1,\r\n r2: r2,\r\n r3: r3,\r\n r4: r4,\r\n c1: c1,\r\n c2: c2,\r\n opAmp: opAmp,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var complexDenominator = complexDenominatorArray[index];\r\n var complexRParallel = complexRParallelArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n return noiseSource.totalNoise(item, complexDenominator, complexRParallel, sImaginary);\r\n });\r\n\r\n return result;\r\n }\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport * as R2 from './noise-sources/r2';\r\nimport * as R3 from './noise-sources/r3';\r\nimport * as R4 from './noise-sources/r4';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class SallenKeyHighPassNoiseSource extends EmberObject {\r\n r1 = null;\r\n r2 = null;\r\n r3 = null;\r\n r4 = null;\r\n c1 = null;\r\n c2 = null;\r\n opAmp = null;\r\n frequency = null;\r\n _r1Noise(filterAmplitude, complexDenominator, complexRParallel, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c2 = this.c2;\r\n let r2 = this.r2;\r\n let r1 = this.r1;\r\n var complexAlphaPlus = R1.computeComplexAlphaPlus(complexDenominator, c2, r2, sImaginary);\r\n var complexFF = R1.computeComplexFF(complexRParallel, r1);\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r2Noise(filterAmplitude, complexDenominator, complexRParallel, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var complexAlphaPlus = R2.computeComplexAlphaPlus(complexDenominator, c1, c2, r1, sImaginary);\r\n var complexFF = R2.computeComplexFF();\r\n var value = Math.sqrt(r2 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r3Noise(filterAmplitude, complexDenominator, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = R3.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = R3.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r3 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r4Noise(filterAmplitude, complexDenominator, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = R4.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = R4.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r4 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpNegCurrent(filterAmplitude, complexDenominator, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = OpAmpNegCurrent.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(complexRParallel, r3, r4);\r\n var value = this.opAmp.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpPosCurrent(filterAmplitude, complexDenominator, complexRParallel, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var complexAlphaPlus = OpAmpPosCurrent.computeComplexAlphaPlus(complexDenominator, c1, c2, r1, r2, sImaginary);\r\n var complexFF = OpAmpPosCurrent.computeComplexFF();\r\n var value = this.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpVoltage(filterAmplitude /*, complexDenominator, complexRParallel*/) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var complexAlphaPlus = OpAmpVoltage.computeComplexAlphaPlus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = this.vNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n totalNoise(filterAmplitude, complexDenominator, complexRParallel, sImaginary) {\r\n var r1Noise = this._r1Noise(filterAmplitude, complexDenominator, complexRParallel, sImaginary);\r\n var r2Noise = this._r2Noise(filterAmplitude, complexDenominator, complexRParallel, sImaginary);\r\n var r3Noise = this._r3Noise(filterAmplitude, complexDenominator, complexRParallel);\r\n var r4Noise = this._r4Noise(filterAmplitude, complexDenominator, complexRParallel);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(filterAmplitude, complexDenominator, complexRParallel);\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude, complexDenominator, complexRParallel, sImaginary);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude, complexDenominator, complexRParallel);\r\n var noiseArray = [r1Noise, r2Noise, r3Noise, r4Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\nimport * as CommonUtils from '../../../../../utils/common';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex(-1 * CommonUtils.parallel(r3, r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var result = complexR3.mult(complexRParallel.divide(Complex.createComplex(r3 + r4, 0)));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(complexDenominator, c1, c2, r1, r2, sImaginary) {\r\n var result = Complex.createComplex(r2, r2 * r1 * sImaginary * (c1 + c2)).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus() {\r\n return Complex.createComplex(1, 0);\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(complexDenominator, c2, r2, sImaginary) {\r\n var result = Complex.createComplex(0, sImaginary * c2 * r2).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r1) {\r\n var result = complexRParallel.divide(Complex.createComplex(r1, 0));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(complexDenominator, c1, c2, r1, sImaginary) {\r\n var result = Complex.createComplex(1, sImaginary * r1 * (c1 + c2)).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n var result = Complex.createComplex(0, 0);\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r4) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var result = complexRParallel.divide(Complex.createComplex(r3 + r4, 0));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r4) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var result = complexRParallel.divide(Complex.createComplex(r3 + r4, 0));\r\n return result;\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport function computeFromComponentValues(c1, c2, r1, r2, r3, r4) {\r\n var gain = 1 + r4 / r3;\r\n var sqrtTerm = Math.sqrt(r1 * r2 * c1 * c2);\r\n var fpPrime = 1 / (2 * Math.PI * sqrtTerm);\r\n var d1 = r1 * c2;\r\n var d2 = r2 * c2;\r\n var d3 = r1 * c1;\r\n var q = sqrtTerm / (d1 + d3 + d2 * (1 - gain));\r\n var fp = fpPrime;\r\n\r\n var result = EmberObject.create({ stageQ: q, stageFp: fp, gain: gain });\r\n return result;\r\n}\r\n\r\nexport function execute(circuit) {\r\n var r1 = circuit.r1.value;\r\n var r2 = circuit.r2.value;\r\n var r3 = circuit.r3.value;\r\n var r4 = circuit.r4.value;\r\n var c1 = circuit.c1.value;\r\n var c2 = circuit.c2.value;\r\n return this.computeFromComponentValues(c1, c2, r1, r2, r3, r4);\r\n}\r\n","import { computed } from '@ember/object';\r\nimport BaseActualFilterAmplitude from '../../implementation-common/base-actual-filter-amplitude';\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as Complex from '../../../process-data/complex';\r\n\r\nexport default BaseActualFilterAmplitude.extend({\r\n c1: null,\r\n c2: null,\r\n r1: null,\r\n r2: null,\r\n r3: null,\r\n r4: null,\r\n whoAmI: 'app/models/implementation/sallen-key/low-pass/actual-filter-amplitude.js',\r\n complexAlphaPlus: computed('complexDenominator', function () {\r\n var complexDenominator = this.complexDenominator;\r\n var complexOne = Complex.createComplex(1, 0);\r\n var result = complexOne.divide(complexDenominator);\r\n return result;\r\n }),\r\n complexBetaPlus: computed('c1', 'r1', 'complexDenominator', 'sImaginary', function () {\r\n var complexDenominator = this.complexDenominator;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var sImaginary = this.sImaginary;\r\n var result = Complex.createComplex(0, r1 * c1 * sImaginary).divide(complexDenominator);\r\n return result;\r\n }),\r\n complexDenominator: computed('r1', 'r2', 'c1', 'c2', 'sImaginary', 'sSquared', function () {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n var denominatorRealTerm = sSquared * r1 * c1 * c2 * r2 + 1;\r\n var denominatorImaginaryTerm = (r1 * c1 + r1 * c2 + r2 * c2) * sImaginary;\r\n var result = Complex.createComplex(denominatorRealTerm, denominatorImaginaryTerm);\r\n return result;\r\n }),\r\n complexRParallel: computed(\r\n 'r1',\r\n 'r2',\r\n 'r3',\r\n 'r4',\r\n 'c1',\r\n 'c2',\r\n 'opAmp',\r\n 'sSquared',\r\n 'sImaginary',\r\n 'complexDenominator',\r\n function () {\r\n // compute zlookback this way to avoid so many complex operations\r\n var complexOne = Complex.createComplex(1, 0);\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n var complexDenominator = this.complexDenominator;\r\n\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n\r\n var complexZdenom = Complex.createComplex(sSquared * (c1 * c2 * r1 + c1 * c2 * r2), c1 * sImaginary);\r\n var complexZlookback = complexDenominator.divide(complexZdenom); //complexZdenom variable overwritten\r\n\r\n var rParallelReal = 1 / CommonUtils.parallel(this.opAmp.rOut, r3 + r4);\r\n var result = complexOne.divide(Complex.createComplex(rParallelReal, 0).plus(complexOne.divide(complexZlookback))); //complexZlookback overwritten\r\n return result;\r\n },\r\n ),\r\n complexFF: computed('r1', 'complexRParallel', function () {\r\n var complexRParallel = this.complexRParallel;\r\n var r1 = this.r1;\r\n var complexR1 = Complex.createComplex(r1, 0);\r\n var result = complexRParallel.divide(complexR1);\r\n return result;\r\n }),\r\n complexAlphaMinus: Complex.createComplex(0, 0),\r\n complexBetaMinus: computed('r3', 'r4', 'sImaginary', function () {\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n\r\n var sImaginary = this.sImaginary;\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var complexBetaDenom = Complex.createComplex(\r\n r3 + r4,\r\n r4 * r3 * FilterConstants.Limits.PARASITIC_INPUT_CAP * sImaginary,\r\n );\r\n var result = complexR3.divide(complexBetaDenom);\r\n return result;\r\n }),\r\n inputImpedance: computed(\r\n 'r1',\r\n 'r2',\r\n 'c1',\r\n 'c2',\r\n 'sImaginary',\r\n 'sSquared',\r\n 'complexDenominator',\r\n 'complexAmplitude',\r\n function () {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var sImaginary = this.sImaginary;\r\n var sSquared = this.sSquared;\r\n var denomTerm1 = sSquared * r1 * c1 * c2 * r2;\r\n var denomTerm2 = sImaginary * (r1 * c1 + r1 * c2 + r2 * c2);\r\n var denomTerm3 = 1;\r\n var denominator = Complex.createComplex(denomTerm1 + denomTerm3, denomTerm2);\r\n var complexAmplitude = this.complexAmplitude;\r\n\r\n var complexOne = Complex.createComplex(1, 0);\r\n var complexR1 = Complex.createComplex(r1, 0);\r\n\r\n var term1 = Complex.createComplex(0, r1 * c1 * sImaginary);\r\n var term2 = Complex.createComplex(1, r2 * c2 * sImaginary);\r\n term1 = complexOne.plus(complexAmplitude.mult(term1));\r\n var bottom = denominator.subs(term1.mult(term2));\r\n var top = complexR1.mult(denominator);\r\n var result = top.divide(bottom);\r\n\r\n return result;\r\n },\r\n ),\r\n});\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport * as ReverseImplementation from './reverse-implementation';\r\nimport BigHugeCircuit from './big-huge-circuit';\r\nimport BaseBigHugeCircuitGroup from '../../implementation-common/base-big-huge-circuit-group';\r\nimport { isNearInfinity } from '../../../../utils/common';\r\n\r\nexport default class SallenKeyBigHugeCircuitGroup extends BaseBigHugeCircuitGroup {\r\n circuit;\r\n toleranceInput;\r\n reverseImplementation = ReverseImplementation;\r\n @computed('circuit', 'nominalValues', 'gbwArray') get circuits() {\r\n var circuit = this.circuit;\r\n var nominalGbw = circuit.opAmp.gbw;\r\n var nominalValues = this.nominalValues;\r\n var reverseImplementation = this.reverseImplementation;\r\n var c1ToleranceArray = circuit.c1.toleranceArray;\r\n var c2ToleranceArray = circuit.c2.toleranceArray;\r\n var r1ToleranceArray = circuit.r1.toleranceArray;\r\n var r2ToleranceArray = circuit.r2.toleranceArray;\r\n var r3ToleranceArray = circuit.r3.toleranceArray;\r\n var r4ToleranceArray = circuit.r4.toleranceArray;\r\n var r3Value = circuit.r3.value;\r\n var inverseArray = r3ToleranceArray;\r\n if (r3Value === 0 || isNearInfinity(r3Value)) {\r\n inverseArray = r4ToleranceArray;\r\n }\r\n //console.time('sklp-bighuge'); //eslint-disable-line no-console\r\n var r4Start = r3ToleranceArray.length - 1;\r\n var gbwArray = this.gbwArray;\r\n var bigHugeCircuitArray = [];\r\n gbwArray.forEach((gbwValue) => {\r\n r1ToleranceArray.forEach((r1Value) => {\r\n r2ToleranceArray.forEach((r2Value) => {\r\n inverseArray.forEach((inverseValue, index) => {\r\n var r3Value = r3ToleranceArray[index];\r\n var r4Value = r4ToleranceArray[r4Start - index];\r\n c1ToleranceArray.forEach((c1Value) => {\r\n c2ToleranceArray.forEach((c2Value) => {\r\n let item = BigHugeCircuit.create({\r\n c1: c1Value,\r\n c2: c2Value,\r\n r1: r1Value,\r\n r2: r2Value,\r\n r3: r3Value,\r\n r4: r4Value,\r\n opAmpGbw: gbwValue,\r\n nominalValues: nominalValues,\r\n nominalGbw: nominalGbw,\r\n reverseImplementation: reverseImplementation,\r\n });\r\n bigHugeCircuitArray.push(item);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n });\r\n //console.timeEnd('sklp-bighuge'); //eslint-disable-line no-console\r\n\r\n var result = this.setNormalizers(bigHugeCircuitArray);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseBigHugeCircuit from '../../implementation-common/big-huge-circuit';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class SallenKeyLowPassBigHugeCircuit extends BaseBigHugeCircuit {\r\n @computed('c1', 'c2', 'r1', 'r2', 'r3', 'r4', 'opAmpGbw', 'reverseImplementation') get circuitStageValues() {\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var opAmpGbw = this.opAmpGbw;\r\n var result = ReverseImplementation.computeFromComponentValues(c1, c2, r1, r2, r3, r4, opAmpGbw);\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\n\r\nexport function computeCapacitorLimitMultipliers(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue) {\r\n let maxMultiplier = computeCapacitorMaximumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue);\r\n let minMultiplier = computeCapacitorMinimumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue);\r\n return {\r\n capacitorMinimumLimitMultiplier: minMultiplier,\r\n capacitorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nexport function computeGainResistorLimitMultipliers(r3IdealValue, r4IdealValue) {\r\n let minMultiplier = CircuitUtils.getResistorMinimumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n let maxMultiplier = CircuitUtils.getResistorMaximumLimitMultiplier(r3IdealValue, r4IdealValue);\r\n return {\r\n resistorMinimumLimitMultiplier: minMultiplier,\r\n resistorMaximumLimitMultiplier: maxMultiplier,\r\n };\r\n}\r\n\r\nfunction computeCapacitorMaximumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue) {\r\n var cmax = Math.max(c1IdealValue, c2IdealValue);\r\n var result = FilterConstants.Limits.CBIG_COMP_LIMIT / cmax;\r\n var r1Tiny = r1IdealValue / result;\r\n var r2Tiny = r2IdealValue / result;\r\n\r\n if (CommonUtils.parallel(r1Tiny, r2Tiny) < FilterConstants.Limits.RSMALL_LOAD_LIMIT) {\r\n result = (result * CommonUtils.parallel(r1Tiny, r2Tiny)) / FilterConstants.Limits.RSMALL_LOAD_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction computeCapacitorMinimumLimitMultiplier(c1IdealValue, c2IdealValue, r1IdealValue, r2IdealValue) {\r\n var cmin = Math.min(c1IdealValue, c2IdealValue);\r\n var result = FilterConstants.Limits.CSMALL_COMP_LIMIT / cmin;\r\n var r1Big = r1IdealValue / result;\r\n var r2Big = r2IdealValue / result;\r\n\r\n var biggestR = Math.max(r1Big, r2Big);\r\n if (biggestR > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n result = (result * biggestR) / FilterConstants.Limits.RBIG_COMP_LIMIT;\r\n }\r\n\r\n return result;\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\n\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport IdealOpAmp from './ideal-op-amp';\r\nimport ActualFilterAmplitude from './actual-filter-amplitude';\r\nimport * as CommonUtils from '../../../../utils/common';\r\nimport NoiseGroup from './noise-group';\r\nimport LowPassSallenKeyCircuit from './circuit';\r\nimport * as CircuitUtils from '../../../utils/circuit';\r\nimport * as SallenKeyLowPassCircuitLimitsUtils from './circuit-limits-utils';\r\nimport * as ComponentFactory from '../../../components/components-factory';\r\n\r\nimport { calculateFilterComponents } from '@ebiz/aditools-filter';\r\n\r\n// Encapsulates the component creation of sallen key lowpass\r\n// A circuit is created from the stage properties stageFp, stageQ, and gain, and the optimization;\r\nexport default class SallenKeyLowPassCircuit extends EmberObject {\r\n // Inputs\r\n stageFp;\r\n stageQ;\r\n gain;\r\n optimization;\r\n algorithm;\r\n\r\n // Process output - something used internally but on other classes\r\n supportedComponents;\r\n actualFilterAmplitudeModel;\r\n noiseGroupModel;\r\n idealOpAmpModel;\r\n circuitModel;\r\n idealOpAmpValuePaths;\r\n componentLimits;\r\n frequency;\r\n sizing;\r\n\r\n // Figures output - used internally and also as output in the figures\r\n needReferenceStage = true;\r\n c1;\r\n c2;\r\n r1;\r\n r2;\r\n r3;\r\n r4;\r\n masterCapacitor;\r\n allowGainChange;\r\n opAmp;\r\n\r\n // For cGov params of calculateFilterComponents - aditools-filter\r\n c1IdealValue;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'stageFp, stageQ, gain, optimization, and algorithm should not be null';\r\n }\r\n\r\n this.actualFilterAmplitudeModel = ActualFilterAmplitude;\r\n this.noiseGroupModel = NoiseGroup;\r\n this.idealOpAmpModel = IdealOpAmp;\r\n this.circuitModel = LowPassSallenKeyCircuit;\r\n this.supportedComponents = ['r1', 'r2', 'r3', 'r4', 'c1', 'c2'];\r\n this.idealOpAmpValuePaths = ['r1', 'r2', 'r3', 'r4', 'c1', 'c2'];\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.initialCapacitorValue)) {\r\n this.c1IdealValue = this._computeC1IdealValue(this.initialCapacitorValue);\r\n } else {\r\n this.c1IdealValue = this._computeC1IdealValue();\r\n }\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = SallenKeyLowPassCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n );\r\n const gainResistorLimits = SallenKeyLowPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits, gainResistorLimits);\r\n }\r\n\r\n _computeIdealValues() {\r\n const rGain = this._computeR3AndR4().r3 + this._computeR3AndR4().r4;\r\n const c1IdealValue = this.c1IdealValue;\r\n const params = {\r\n type: this.algorithm,\r\n implementation: FilterConstants.implementationType.sallenKey,\r\n fp: this.stageFp,\r\n gain: this.gain,\r\n q: this.stageQ,\r\n cGov: c1IdealValue,\r\n rGainOrCCross: rGain,\r\n };\r\n const filterComponents = calculateFilterComponents(\r\n params.type,\r\n params.implementation,\r\n params.fp,\r\n params.gain,\r\n params.q,\r\n params.cGov,\r\n params.rGainOrCCross,\r\n );\r\n\r\n return {\r\n c1IdealValue: filterComponents.c1,\r\n c2IdealValue: filterComponents.c2,\r\n r1IdealValue: filterComponents.r1,\r\n r2IdealValue: filterComponents.r2,\r\n r3IdealValue: filterComponents.r3,\r\n r4IdealValue: filterComponents.r4,\r\n };\r\n }\r\n\r\n _computeR3AndR4() {\r\n const r3PlusR4 = this.optimization.determineStartingR3R4Value(this.stageFp);\r\n return CircuitUtils.computeR3AndR4(r3PlusR4, this.gain);\r\n }\r\n\r\n _computeC1IdealValue(value) {\r\n return value ? value : CircuitUtils.computeMasterCapacitorValue(this.optimization, this.stageFp);\r\n }\r\n\r\n _computeComponents(idealValues, capacitorLimits, gainResistorLimits) {\r\n this.allowGainChange = CircuitUtils.getGainChangeSupportStatus(idealValues.r3IdealValue, idealValues.r4IdealValue);\r\n let r3NominalValue = ComponentFactory.createR3(idealValues.r3IdealValue, null, null).toCommercialComponent().value;\r\n this.sizing = this._getSizing(idealValues, capacitorLimits);\r\n this.c1 = ComponentFactory.createC1(\r\n idealValues.c1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n this.rcRatio,\r\n );\r\n this.masterCapacitor = this.c1;\r\n let rcRatioInverse = CircuitUtils.getInverseOfMasterCapacitorRatio(this.c1);\r\n this.r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r2 = ComponentFactory.createR2(\r\n idealValues.r2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.c2 = ComponentFactory.createC2(\r\n idealValues.c2IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n this.sizing,\r\n rcRatioInverse,\r\n );\r\n this.r3 = ComponentFactory.createR3(\r\n r3NominalValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n this.r4 = this._getR4(idealValues, gainResistorLimits);\r\n this.frequency = 1 / (2 * Math.PI * Math.sqrt(this.r1.value * this.r2.value * this.c1.value * this.c2.value));\r\n this.needReferenceStage = !CommonUtils.isNearInfinity(idealValues.r3IdealValue);\r\n\r\n this.idealValues = idealValues;\r\n this.capacitorLimits = capacitorLimits;\r\n this.gainResistorLimits = gainResistorLimits;\r\n }\r\n\r\n _getSizing(idealValues, capacitorLimits) {\r\n let r1 = ComponentFactory.createR1(\r\n idealValues.r1IdealValue,\r\n capacitorLimits.capacitorMinimumLimitMultiplier,\r\n capacitorLimits.capacitorMaximumLimitMultiplier,\r\n );\r\n return CircuitUtils.getResistorSize(r1);\r\n }\r\n\r\n // R4 may have an ideal value but it is recomputed here based on gain and R3\r\n // since it should adjust depending on the current value of R3.\r\n // (If r3 is not present or idealValue is 0 or INFINITY, we use the idealValue)\r\n // R3 may change due to the user changing the slider position or r3 adjusting to its nominal value.\r\n // R3 may also change when changing the e-series in the tolerance tab.\r\n _getR4(idealValues, gainResistorLimits) {\r\n let result = null;\r\n if (idealValues.r3IdealValue !== 0 && idealValues.r3IdealValue !== FilterConstants.Limits.INFINITY)\r\n result = ComponentFactory.createR4FromR3AndGain(\r\n this.r3.value,\r\n this.gain,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n else\r\n result = ComponentFactory.createR4(\r\n idealValues.r4IdealValue,\r\n gainResistorLimits.resistorMinimumLimitMultiplier,\r\n gainResistorLimits.resistorMaximumLimitMultiplier,\r\n );\r\n\r\n return result;\r\n }\r\n\r\n changeGainValues(newR3Value) {\r\n if (this.allowGainChange) {\r\n this.r3 = this.r3.setValue(newR3Value);\r\n this.updateR4();\r\n }\r\n }\r\n\r\n updateR4() {\r\n this.r4 = this._getR4(this.idealValues, this.gainResistorLimits);\r\n }\r\n\r\n changeInitialCapacitor(value) {\r\n this.c1IdealValue = this._computeC1IdealValue(value);\r\n const idealValues = this._computeIdealValues();\r\n const capacitorLimits = SallenKeyLowPassCircuitLimitsUtils.computeCapacitorLimitMultipliers(\r\n idealValues.c1IdealValue,\r\n idealValues.c2IdealValue,\r\n idealValues.r1IdealValue,\r\n idealValues.r2IdealValue,\r\n );\r\n const gainResistorLimits = SallenKeyLowPassCircuitLimitsUtils.computeGainResistorLimitMultipliers(\r\n idealValues.r3IdealValue,\r\n idealValues.r4IdealValue,\r\n );\r\n this._computeComponents(idealValues, capacitorLimits, gainResistorLimits);\r\n }\r\n}\r\n","export function getComponentValues(c1IdealValue, stageFp, stageQ, gain) {\r\n let c2IdealValue = c1IdealValue / 10;\r\n let resistorRatio = computeResistorRatio(stageQ, gain);\r\n let rMultAvg = computeResistorMultiplierAverage(c1IdealValue, c2IdealValue, stageFp);\r\n let r1IdealValue = rMultAvg / Math.sqrt(resistorRatio);\r\n let r2IdealValue = rMultAvg * Math.sqrt(resistorRatio);\r\n\r\n return {\r\n c1IdealValue: c1IdealValue,\r\n c2IdealValue: c2IdealValue,\r\n r1IdealValue: r1IdealValue,\r\n r2IdealValue: r2IdealValue,\r\n };\r\n}\r\n\r\nfunction computeResistorRatio(stageQ, gain) {\r\n var a = 1;\r\n var b = 2 * (11 - 10 * gain) - 10 / (stageQ * stageQ);\r\n var d = (11 - 10 * gain) * (11 - 10 * gain);\r\n var result = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\r\n return result;\r\n}\r\n\r\nfunction computeResistorMultiplierAverage(c1IdealValue, c2IdealValue, stageFp) {\r\n return 1 / (2 * Math.PI * stageFp * Math.sqrt(c1IdealValue * c2IdealValue));\r\n}\r\n","export function getComponentValues(c1IdealValue, stageFp, stageQ, gain) {\r\n let c2IdealValue = c1IdealValue;\r\n let resistorRatio = computeResistorRatio(stageQ, gain);\r\n let rMultAvg = computeResistorMultiplierAverage(c1IdealValue, c2IdealValue, stageFp);\r\n let r1IdealValue = rMultAvg / Math.sqrt(resistorRatio);\r\n let r2IdealValue = rMultAvg * Math.sqrt(resistorRatio);\r\n\r\n return {\r\n c1IdealValue: c1IdealValue,\r\n c2IdealValue: c2IdealValue,\r\n r1IdealValue: r1IdealValue,\r\n r2IdealValue: r2IdealValue,\r\n };\r\n}\r\n\r\nfunction computeResistorRatio(stageQ, gain) {\r\n var a = 1;\r\n var b = 2 * (2 - gain) - 1 / (stageQ * stageQ);\r\n var d = (2 - gain) * (2 - gain);\r\n var result = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\r\n return result;\r\n}\r\n\r\nfunction computeResistorMultiplierAverage(c1IdealValue, c2IdealValue, stageFp) {\r\n return 1 / (2 * Math.PI * stageFp * Math.sqrt(c1IdealValue * c2IdealValue));\r\n}\r\n","export function getComponentValues(c1IdealValue, stageFp, stageQ, gain) {\r\n let capacitorRatio = computeCapacitorRatio(stageQ, gain);\r\n let c2IdealValue = c1IdealValue * capacitorRatio;\r\n let r2IdealValue = computeR2IdealValue(c1IdealValue, c2IdealValue, stageFp);\r\n let r1IdealValue = r2IdealValue;\r\n\r\n return {\r\n c1IdealValue: c1IdealValue,\r\n c2IdealValue: c2IdealValue,\r\n r1IdealValue: r1IdealValue,\r\n r2IdealValue: r2IdealValue,\r\n };\r\n}\r\n\r\nfunction computeCapacitorRatio(stageQ, gain) {\r\n var a = 4;\r\n var b = 4 * (1 - gain) - 1 / (stageQ * stageQ);\r\n var d = (1 - gain) * (1 - gain);\r\n var result = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\r\n return result;\r\n}\r\n\r\nfunction computeR2IdealValue(c1IdealValue, c2IdealValue, stageFp) {\r\n return 1 / (2 * Math.PI * stageFp * Math.sqrt(c1IdealValue * c2IdealValue));\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport EmberObject from '@ember/object';\r\nimport FilterConstants from '../../../../filter-constants';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class SallenKeyLowPassIdealOpAmp extends EmberObject {\r\n // Inputs\r\n r1 = null;\r\n r3 = null;\r\n r4 = null;\r\n c2 = null;\r\n optimization = null;\r\n stageFp = null;\r\n gain = null;\r\n stageQ = null;\r\n algorithm = null;\r\n\r\n // Outputs\r\n iBias = null;\r\n gbw = null;\r\n rOut = null;\r\n rOutOverGBW = null;\r\n specialGain = null;\r\n name = 'ideal';\r\n slewRate = 0;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (\r\n CommonUtils.isNullOrUndefined(this.r1) ||\r\n CommonUtils.isNullOrUndefined(this.r3) ||\r\n CommonUtils.isNullOrUndefined(this.r4) ||\r\n CommonUtils.isNullOrUndefined(this.c2) ||\r\n CommonUtils.isNullOrUndefined(this.stageFp) ||\r\n CommonUtils.isNullOrUndefined(this.stageQ) ||\r\n CommonUtils.isNullOrUndefined(this.gain) ||\r\n CommonUtils.isNullOrUndefined(this.optimization) ||\r\n CommonUtils.isNullOrUndefined(this.algorithm)\r\n ) {\r\n throw 'Required values are incomplete. Please provide r1, r3, r4, c2, stageQ, stageFp, gain, optimization, and algorithm';\r\n }\r\n\r\n this.iBias = this.computeIBias();\r\n this.specialGain = this.computeSpecialGain();\r\n this.gbw = this.computeGbw();\r\n this.rOutOverGBW = this.computeROutOverGBW();\r\n this.rOut = this.computeROut(this.gbw, this.rOutOverGBW);\r\n }\r\n\r\n computeSpecialGain() {\r\n var result = 1 + this.r4 / this.r3;\r\n return result;\r\n }\r\n\r\n computeIBias() {\r\n var dcOutputVoltageFromIBias = this.optimization.opAmpRequirementSpecValues.dcOutputVoltageFromIBias;\r\n var iBiasResistance = this.r1 + this.r2;\r\n var result = dcOutputVoltageFromIBias / iBiasResistance / this.gain;\r\n return result;\r\n }\r\n\r\n computeGbw() {\r\n var allowedError = this.optimization.opAmpRequirementSpecValues.allowedError;\r\n var gain = this.gain;\r\n var epsilon = (allowedError + 1) * (allowedError + 1) - 1;\r\n var numerator = gain * gain;\r\n var denominator = this.c2 * this.r2 * 2 * Math.PI * epsilon;\r\n var result = numerator / denominator;\r\n return result;\r\n }\r\n\r\n computeROutOverGBW() {\r\n var stopbandFrequency = this.optimization.opAmpRequirementSpecValues.stopbandFrequency;\r\n var rOutFreqMultiplier = this.optimization.opAmpRequirementSpecValues.rOutFreqMultiplier;\r\n var attenuation = (stopbandFrequency / this.stageFp) * (stopbandFrequency / this.stageFp);\r\n var f = stopbandFrequency * rOutFreqMultiplier;\r\n var result = ((1 / f) * this.r1) / (attenuation - this.r1 / this.r2 - 1);\r\n\r\n if (result < 0) {\r\n result = FilterConstants.Limits.INFINITY;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n computeROut(gbw, rOutOverGbw) {\r\n var result = rOutOverGbw * gbw;\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks */\r\nimport * as FeedForwardStepResponse from '../../../step-response/feed-forward';\r\nimport Circuit from './circuit';\r\nimport BigHugeCircuitGroup from './big-huge-circuit-group';\r\nimport BaseMain from '../../implementation-common/base-main';\r\nimport * as ReverseImplementation from './reverse-implementation';\r\n\r\nexport default class SallenKeyLowPassMain extends BaseMain {\r\n bigHugeCircuitGroupModel;\r\n reverseImplementation = ReverseImplementation;\r\n algorithm;\r\n\r\n init() {\r\n this.bigHugeCircuitGroupModel = BigHugeCircuitGroup;\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n var k = (circuit.r3.value + circuit.r4.value) / circuit.r3.value;\r\n var result = FeedForwardStepResponse.getActualStepResponse(idealStep, circuit, timeAxis, k);\r\n return result;\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n var result = Circuit.create({\r\n algorithm: this.algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n initialCapacitorValue: initialCapacitorValue,\r\n });\r\n return result;\r\n }\r\n\r\n getStageValuesFromCircuit(circuit) {\r\n return ReverseImplementation.execute(circuit);\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport NoiseSource from './noise-source';\r\nimport BaseNoiseGroup from '../../implementation-common/base-noise-group';\r\n\r\nexport default class SallenKeyLowPassNoiseGroup extends BaseNoiseGroup {\r\n frequencyArray = null;\r\n r1 = null;\r\n r2 = null;\r\n r3 = null;\r\n r4 = null;\r\n c1 = null;\r\n c2 = null;\r\n opAmp = null;\r\n filterAmplitude = null;\r\n @computed('r1', 'r2', 'r3', 'r4', 'c1', 'c2', 'opAmp', 'filterAmplitude') get noiseReferredToOutputArray() {\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var c1 = this.c1;\r\n var c2 = this.c2;\r\n var opAmp = this.opAmp;\r\n var filterAmplitude = this.filterAmplitude;\r\n var complexDenominatorArray = filterAmplitude.map((item) => {\r\n return item.complexDenominator;\r\n });\r\n var complexRParallelArray = filterAmplitude.map((item) => {\r\n return item.complexRParallel;\r\n });\r\n var sImaginaryArray = filterAmplitude.map((item) => {\r\n return item.sImaginary;\r\n });\r\n var iNoise = opAmp.iNoise;\r\n var vNoise = opAmp.vNoise;\r\n var noiseSource = NoiseSource.create({\r\n r1: r1,\r\n r2: r2,\r\n r3: r3,\r\n r4: r4,\r\n c1: c1,\r\n c2: c2,\r\n opAmp: opAmp,\r\n iNoise: iNoise,\r\n vNoise: vNoise,\r\n });\r\n var result = filterAmplitude.map((item, index) => {\r\n var complexDenominator = complexDenominatorArray[index];\r\n var complexRParallel = complexRParallelArray[index];\r\n var sImaginary = sImaginaryArray[index];\r\n return noiseSource.totalNoise(item, complexDenominator, complexRParallel, sImaginary);\r\n });\r\n\r\n return result;\r\n }\r\n @computed('noiseReferredToOutputArray', 'magnitude', 'frequencyArray') get noiseReferredToInputArray() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseReferredToOutputArray = this.noiseReferredToOutputArray;\r\n var magnitude = this.magnitude;\r\n var result = frequencyArray.map((item, index) => {\r\n var res = noiseReferredToOutputArray[index] / magnitude[index];\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nimport * as OpAmpNegCurrent from './noise-sources/op-amp-neg-current';\r\nimport * as OpAmpPosCurrent from './noise-sources/op-amp-pos-current';\r\nimport * as OpAmpVoltage from './noise-sources/op-amp-voltage';\r\nimport * as R1 from './noise-sources/r1';\r\nimport * as R2 from './noise-sources/r2';\r\nimport * as R3 from './noise-sources/r3';\r\nimport * as R4 from './noise-sources/r4';\r\nimport FilterConstants from '../../../../filter-constants';\r\n\r\nexport default class SallenKeyLowPassNoiseSource extends EmberObject {\r\n r1 = null;\r\n r2 = null;\r\n r3 = null;\r\n r4 = null;\r\n c1 = null;\r\n c2 = null;\r\n opAmp = null;\r\n iNoise = null;\r\n vNoise = null;\r\n whoAmI = 'app/models/implementation/sallen-key/low-pass/noise-source.js';\r\n _r1Noise(filterAmplitude, complexDenominator, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r1 = this.r1;\r\n var complexAlphaPlus = R1.computeComplexAlphaPlus(complexDenominator);\r\n var complexFF = R1.computeComplexFF(complexRParallel, r1);\r\n var value = Math.sqrt(r1 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r2Noise(filterAmplitude, complexDenominator, complexRParallel, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var complexAlphaPlus = R2.computeComplexAlphaPlus(complexDenominator, c1, r1, sImaginary);\r\n var complexFF = R2.computeComplexFF(complexRParallel, r2);\r\n var value = Math.sqrt(r2 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r3Noise(filterAmplitude, complexDenominator, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = R3.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = R3.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r3 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _r4Noise(filterAmplitude, complexDenominator, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = R4.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = R4.computeComplexFF(complexRParallel, r3, r4);\r\n var value = Math.sqrt(r4 / 1000) * FilterConstants.resistorNoiseBase;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpNegCurrent(filterAmplitude, complexDenominator, complexRParallel) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var r3 = this.r3;\r\n var r4 = this.r4;\r\n var complexAlphaPlus = OpAmpNegCurrent.computeComplexAlphaPlus(r3, r4);\r\n var complexFF = OpAmpNegCurrent.computeComplexFF(complexRParallel, r3, r4);\r\n var value = this.opAmp.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpPosCurrent(filterAmplitude, complexDenominator, complexRParallel, sImaginary) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var c1 = this.c1;\r\n var r1 = this.r1;\r\n var r2 = this.r2;\r\n var complexAlphaPlus = OpAmpPosCurrent.computeComplexAlphaPlus(complexDenominator, c1, r1, r2, sImaginary);\r\n var complexFF = OpAmpPosCurrent.computeComplexFF();\r\n var value = this.iNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n _opAmpVoltage(filterAmplitude /*, complexDenominator, complexRParallel*/) {\r\n var baseAmplitudeCopy = filterAmplitude;\r\n var complexAlphaPlus = OpAmpVoltage.computeComplexAlphaPlus();\r\n var complexFF = OpAmpVoltage.computeComplexFF();\r\n var value = this.vNoise;\r\n var magnitude = baseAmplitudeCopy.computeMagnitude(complexAlphaPlus, complexFF);\r\n var result = value * magnitude;\r\n return result;\r\n }\r\n\r\n totalNoise(filterAmplitude, complexDenominator, complexRParallel, sImaginary) {\r\n var r1Noise = this._r1Noise(filterAmplitude, complexDenominator, complexRParallel);\r\n var r2Noise = this._r2Noise(filterAmplitude, complexDenominator, complexRParallel, sImaginary);\r\n var r3Noise = this._r3Noise(filterAmplitude, complexDenominator, complexRParallel);\r\n var r4Noise = this._r4Noise(filterAmplitude, complexDenominator, complexRParallel);\r\n var opAmpNegCurrent = this._opAmpNegCurrent(filterAmplitude, complexDenominator, complexRParallel);\r\n var opAmpPosCurrent = this._opAmpPosCurrent(filterAmplitude, complexDenominator, complexRParallel, sImaginary);\r\n var opAmpVoltage = this._opAmpVoltage(filterAmplitude, complexDenominator, complexRParallel);\r\n var noiseArray = [r1Noise, r2Noise, r3Noise, r4Noise, opAmpNegCurrent, opAmpPosCurrent, opAmpVoltage];\r\n var sumOfSquares = 0;\r\n\r\n noiseArray.forEach((item) => {\r\n sumOfSquares += item * item;\r\n });\r\n\r\n var result = Math.sqrt(sumOfSquares);\r\n return result;\r\n }\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\nimport * as CommonUtils from '../../../../../utils/common';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex(-1 * CommonUtils.parallel(r3, r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var complexR3 = Complex.createComplex(r3, 0);\r\n var result = complexR3.mult(complexRParallel.divide(Complex.createComplex(r3 + r4, 0)));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(complexDenominator, c1, r1, r2, sImaginary) {\r\n var result = Complex.createComplex(r1 + r2, r1 * r2 * c1 * sImaginary).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus() {\r\n return Complex.createComplex(1, 0);\r\n}\r\n\r\nexport function computeComplexFF() {\r\n return Complex.createComplex(0, 0);\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(complexDenominator) {\r\n var result = Complex.createComplex(1, 0).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r1) {\r\n var result = complexRParallel.divide(Complex.createComplex(r1, 0));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(complexDenominator, c1, r1, sImaginary) {\r\n var result = Complex.createComplex(1, c1 * r1 * sImaginary).divide(complexDenominator);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r2) {\r\n var result = complexRParallel.divide(Complex.createComplex(r2, 0));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r4) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var result = complexRParallel.divide(Complex.createComplex(r3 + r4, 0));\r\n return result;\r\n}\r\n","import * as Complex from '../../../../process-data/complex';\r\n\r\nexport function computeComplexAlphaPlus(r3, r4) {\r\n var result = Complex.createComplex((-1 * r3) / (r3 + r4), 0);\r\n return result;\r\n}\r\n\r\nexport function computeComplexFF(complexRParallel, r3, r4) {\r\n var result = complexRParallel.divide(Complex.createComplex(r3 + r4, 0));\r\n return result;\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport function computeFromComponentValues(c1, c2, r1, r2, r3, r4, gbw) {\r\n var gain = 1 + r4 / r3;\r\n var sqrtTerm = Math.sqrt(r1 * r2 * c1 * c2);\r\n var fpPrime = 1 / (2 * Math.PI * sqrtTerm);\r\n var d1 = r1 * c2;\r\n var d2 = r2 * c2;\r\n var d3 = r1 * c1;\r\n var qPrime = sqrtTerm / (d1 + d2 + d3 * (1 - gain));\r\n var gbwMod = Math.sqrt(1 + (gain * gain) / (2 * Math.PI * r2 * c2 * gbw));\r\n\r\n var q = qPrime * gbwMod;\r\n var fp = fpPrime / gbwMod;\r\n\r\n var result = EmberObject.create({ stageQ: q, stageFp: fp, gain: gain });\r\n return result;\r\n}\r\n\r\nexport function execute(circuit) {\r\n var r1 = circuit.r1.value;\r\n var r2 = circuit.r2.value;\r\n var r3 = circuit.r3.value;\r\n var r4 = circuit.r4.value;\r\n var c1 = circuit.c1.value;\r\n var c2 = circuit.c2.value;\r\n var gbw = circuit.opAmp.gbw;\r\n return this.computeFromComponentValues(c1, c2, r1, r2, r3, r4, gbw);\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport FilterConstants from '../../../filter-constants';\r\nimport SallenKeyLowPass from './low-pass/main';\r\nimport SallenKeyHighPass from './high-pass/main';\r\nimport BaseImplementation from '../base-implementation';\r\nimport * as CommonUtils from '../../../utils/common';\r\n\r\nexport default class SallenKey extends BaseImplementation {\r\n filter;\r\n preferredAlgorithm;\r\n name = FilterConstants.implementationType.sallenKey;\r\n\r\n @computed('filter') get instance() {\r\n var filter = this.filter;\r\n var algorithm = this.algorithm;\r\n\r\n var result = null;\r\n if (filter.name === FilterConstants.filterType.lowPass) {\r\n result = SallenKeyLowPass.create({ algorithm: algorithm });\r\n } else if (filter.name === FilterConstants.filterType.highPass) {\r\n result = SallenKeyHighPass.create({ algorithm: algorithm });\r\n } else {\r\n throw 'Filter type not supported';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('name', 'preferredAlgorithm') get algorithm() {\r\n var filter = this.filter;\r\n var name = this.name;\r\n var preferredAlgorithm = this.preferredAlgorithm;\r\n\r\n if (!CommonUtils.isNullOrUndefined(preferredAlgorithm)) {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n const algorithm = preferredAlgorithm[`${name}|${filter.name}`];\r\n return algorithm;\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n } else {\r\n if (name === FilterConstants.implementationType.sallenKey && filter.name === FilterConstants.filterType.lowPass) {\r\n return FilterConstants.model.inputs.components.defaultAlgorithm['sallenKey|lowPass'];\r\n } else {\r\n return filter.name.toLowerCase();\r\n }\r\n }\r\n }\r\n\r\n getStepValues(idealStep, circuit, timeAxis) {\r\n return this.instance.getStepValues(idealStep, circuit, timeAxis);\r\n }\r\n\r\n createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue) {\r\n return this.instance.createCircuit(stageFp, gain, stageQ, optimization, initialCapacitorValue);\r\n }\r\n\r\n createBigHugeCircuitGroup(circuit, toleranceInput) {\r\n return this.instance.createBigHugeCircuitGroup(circuit, toleranceInput);\r\n }\r\n\r\n getInterestingCircuits(commercialCircuit, toleranceInput) {\r\n return this.instance.getInterestingCircuits(commercialCircuit, toleranceInput);\r\n }\r\n}\r\n","import Inputs from './inputs/inputs';\r\nimport Results from './results/results';\r\n\r\nexport default class IndexModel {\r\n inputs;\r\n opAmpSource;\r\n\r\n constructor(opampService) {\r\n this.opAmpSource = opampService;\r\n this.inputs = new Inputs();\r\n }\r\n get results() {\r\n return Results.create({ inputs: this.inputs, opAmpSource: this.opAmpSource });\r\n }\r\n}\r\n","import FilterConstants from '../../filter-constants';\r\n\r\nconst _optimizationsList = [\r\n FilterConstants.optimizationType.voltageRange,\r\n FilterConstants.optimizationType.noise,\r\n FilterConstants.optimizationType.power,\r\n];\r\nconst _choiceOptions = [\r\n FilterConstants.optimizationPreferenceOptions.nonSpecific,\r\n FilterConstants.optimizationPreferenceOptions.specific,\r\n];\r\n\r\nexport default class ComponentSelectionInput {\r\n optimizationPreferenceOptions;\r\n optimizationsList;\r\n\r\n choiceOptions;\r\n vsMinus; // double\r\n vsPlus; // double\r\n compensateForGbw = false;\r\n optimization; // e.g FilterConstants.optimizationType.power\r\n optimizationPreference; // e.g: specific or FilterConstants.optimizationPreferenceOptions.recommendedSpecific\r\n individualStageInputs; // inputs/component-selection/individual-stage [1..6]\r\n sortOrder;\r\n preferredAlgorithms;\r\n\r\n constructor(args) {\r\n this.optimizationList = _optimizationsList;\r\n this.choiceOptions = _choiceOptions;\r\n\r\n if (args) {\r\n this.choiceOptions = args.choiceOptions ?? null;\r\n this.vsMinus = args.vsMinus ?? null;\r\n this.vsPlus = args.vsPlus ?? null;\r\n this.compensateForGbw = args.compensateForGbw ?? null;\r\n this.optimization = args.optimization ?? null;\r\n this.optimizationPreference = args.optimizationPreference ?? null;\r\n this.individualStageInputs = args.individualStageInputs ?? [];\r\n this.sortOrder = args.sortOrder ?? [];\r\n this.preferredAlgorithms = args.preferredAlgorithms ?? null;\r\n }\r\n }\r\n}\r\n","import { tracked } from '@glimmer/tracking';\r\n\r\nexport default class IndividualStageInput {\r\n stageLetter;\r\n @tracked implementation; // string (e.g: sallenKey or FilterConstants.implementationTypes.sallenKey)\r\n @tracked componentSizing; // ./slider\r\n @tracked gainRatio; // .slider\r\n @tracked opAmp; // string (e.g AD9914 or FilterConstants.idealOpAmp when using the ideal one),\r\n implementationSelection;\r\n\r\n constructor(args) {\r\n if (args) {\r\n this.stageLetter = args.stageLetter ?? null;\r\n this.implementation = args.implementation ?? null;\r\n this.componentSizing = args.componentSizing ?? null;\r\n this.gainRatio = args.gainRatio ?? null;\r\n this.opAmp = args.opAmp ?? null;\r\n this.implementationSelection = args.implementationSelection ?? null;\r\n }\r\n }\r\n}\r\n","// Model for the slider for component sizing and gain ratio\r\n// Component sizing range of values is from 1pf to 910uF\r\n// Gain ratio range of values is from 10ohms to 10MOhms\r\nexport default class SliderInput {\r\n enabled;\r\n minimum;\r\n maximum;\r\n value;\r\n\r\n constructor(args) {\r\n if (args) {\r\n this.enabled = args.enabled ?? null;\r\n this.minimum = args.minimum ?? null;\r\n this.maximum = args.maximum ?? null;\r\n this.value = args.value ?? null;\r\n }\r\n }\r\n}\r\n","import { tracked } from '@glimmer/tracking';\r\n\r\nexport default class Inputs {\r\n @tracked filterType;\r\n @tracked specifications;\r\n @tracked components;\r\n @tracked tolerances;\r\n //nextSteps;\r\n @tracked noise;\r\n}\r\n","export default class NoiseInput {\r\n adcBandwidth;\r\n\r\n constructor(args) {\r\n if (args) {\r\n this.adcBandwidth = args.adcBandwidth ?? null;\r\n }\r\n }\r\n}\r\n","export default class SpecificationInput {\r\n gain;\r\n gainUnit;\r\n passbandAttenuation;\r\n stopbandAttenuation;\r\n filterResponseValue;\r\n selectedResponseType;\r\n passbandFrequency;\r\n stopbandFrequency;\r\n centerFrequency;\r\n filterResponseSlider;\r\n\r\n constructor(args) {\r\n if (args) {\r\n this.gain = args.gain ?? null;\r\n this.gainUnit = args.gainUnit ?? null;\r\n this.passbandAttenuation = args.passbandAttenuation ?? null;\r\n this.stopbandAttenuation = args.stopbandAttenuation ?? null;\r\n this.filterResponseValue = args.filterResponseValue ?? null;\r\n this.selectedResponseType = args.selectedResponseType ?? null;\r\n this.passbandFrequency = args.passbandFrequency ?? null;\r\n this.stopbandFrequency = args.stopbandFrequency ?? null;\r\n this.centerFrequency = args.centerFrequency;\r\n this.filterResponseSlider = args.filterResponseSlider ?? null;\r\n }\r\n }\r\n}\r\n","import FilterConstants from '../../filter-constants';\r\n\r\nconst _capacitorToleranceList = [\r\n { text: 'settings.tolerances.one', value: FilterConstants.capacitorTolerance.one },\r\n { text: 'settings.tolerances.five', value: FilterConstants.capacitorTolerance.five },\r\n { text: 'settings.tolerances.ten', value: FilterConstants.capacitorTolerance.ten },\r\n { text: 'settings.tolerances.twenty', value: FilterConstants.capacitorTolerance.twenty },\r\n { text: 'settings.tolerances.ideal', value: FilterConstants.capacitorTolerance.ideal },\r\n];\r\nconst _resistorToleranceList = [\r\n { text: 'settings.tolerances.oneTenth', value: FilterConstants.resistorTolerance.oneTenth },\r\n { text: 'settings.tolerances.fiveTenths', value: FilterConstants.resistorTolerance.fiveTenths },\r\n { text: 'settings.tolerances.one', value: FilterConstants.resistorTolerance.one },\r\n { text: 'settings.tolerances.five', value: FilterConstants.resistorTolerance.five },\r\n { text: 'settings.tolerances.ideal', value: FilterConstants.resistorTolerance.ideal },\r\n];\r\nconst _inductorToleranceList = [\r\n { text: 'settings.tolerances.five', value: FilterConstants.inductorTolerance.five },\r\n { text: 'settings.tolerances.ten', value: FilterConstants.inductorTolerance.ten },\r\n { text: 'settings.tolerances.twenty', value: FilterConstants.inductorTolerance.twenty },\r\n { text: 'settings.tolerances.ideal', value: FilterConstants.inductorTolerance.ideal },\r\n];\r\nconst _opAmpGbwToleranceList = [\r\n { text: 'settings.tolerances.twenty', value: FilterConstants.gbwTolerance.twenty },\r\n { text: 'settings.tolerances.ideal', value: FilterConstants.gbwTolerance.ideal },\r\n];\r\nconst _capacitorPreferredSeriesList = [\r\n { text: 'settings.tolerances.E6', value: FilterConstants.eSeries.E6 },\r\n { text: 'settings.tolerances.E12', value: FilterConstants.eSeries.E12 },\r\n { text: 'settings.tolerances.E24', value: FilterConstants.eSeries.E24 },\r\n { text: 'settings.tolerances.ideal', value: FilterConstants.eSeries.ideal },\r\n];\r\nconst _resistorPreferredSeriesList = [\r\n { text: 'settings.tolerances.E6', value: FilterConstants.eSeries.E6 },\r\n { text: 'settings.tolerances.E12', value: FilterConstants.eSeries.E12 },\r\n { text: 'settings.tolerances.E24', value: FilterConstants.eSeries.E24 },\r\n { text: 'settings.tolerances.E48', value: FilterConstants.eSeries.E48 },\r\n { text: 'settings.tolerances.E96', value: FilterConstants.eSeries.E96 },\r\n { text: 'settings.tolerances.ideal', value: FilterConstants.eSeries.ideal },\r\n];\r\nconst _inductorPreferredSeriesList = [\r\n { text: 'settings.tolerances.E6', value: FilterConstants.eSeries.E6 },\r\n { text: 'settings.tolerances.E12', value: FilterConstants.eSeries.E12 },\r\n { text: 'settings.tolerances.E24', value: FilterConstants.eSeries.E24 },\r\n { text: 'settings.tolerances.ideal', value: FilterConstants.eSeries.ideal },\r\n];\r\n\r\nexport default class ToleranceInput {\r\n capacitorToleranceList;\r\n resistorToleranceList;\r\n inductorToleranceList;\r\n opAmpGbwToleranceList;\r\n capacitorPreferredSeriesList;\r\n resistorPreferredSeriesList;\r\n inductorPreferredSeriesList;\r\n\r\n capacitorTolerance;\r\n resistorTolerance;\r\n inductorTolerance;\r\n opAmpGbwTolerance;\r\n capacitorPreferredSeries;\r\n resistorPreferredSeries;\r\n inductorPreferredSeries;\r\n\r\n constructor(args) {\r\n this.capacitorToleranceList = _capacitorToleranceList;\r\n this.resistorToleranceList = _resistorToleranceList;\r\n this.inductorToleranceList = _inductorToleranceList;\r\n this.opAmpGbwToleranceList = _opAmpGbwToleranceList;\r\n this.capacitorPreferredSeriesList = _capacitorPreferredSeriesList;\r\n this.resistorPreferredSeriesList = _resistorPreferredSeriesList;\r\n this.inductorPreferredSeriesList = _inductorPreferredSeriesList;\r\n\r\n if (args) {\r\n this.capacitorTolerance = args.capacitorTolerance ?? null;\r\n this.resistorTolerance = args.resistorTolerance ?? null;\r\n this.inductorTolerance = args.inductorTolerance ?? null;\r\n this.opAmpGbwTolerance = args.opAmpGbwTolerance ?? null;\r\n this.capacitorPreferredSeries = args.capacitorPreferredSeries ?? null;\r\n this.resistorPreferredSeries = args.resistorPreferredSeries ?? null;\r\n this.inductorPreferredSeries = args.inductorPreferredSeries ?? null;\r\n }\r\n }\r\n}\r\n","import FilterConstants from '../../filter-constants';\r\nimport RecommendedSpecific from './recommended-specific';\r\n\r\nexport default class AllowedSpecific extends RecommendedSpecific {\r\n name = FilterConstants.optimizationType.allowedSpecific;\r\n\r\n getOpAmpRequirementSpecValues(stopbandFrequency) {\r\n var base = this; // to specify which one comes from the base class;\r\n var specs = {\r\n fMultiplier: 5, //bigger is more strict: used for highpass\r\n allowedError: 0.2, //Don't make this 0.5 or larger. In high speed cases, gets multiplied by 2, then low pass first order chokes when 1 or higher.\r\n rOutFreqMultiplier: 1, //rout shouldn't come into play until 5x stopband\r\n inductorMultiplier: 3,\r\n dcOutputVoltageFromIBias: 5,\r\n stopbandFrequency: stopbandFrequency,\r\n };\r\n\r\n specs.f = stopbandFrequency * specs.rOutFreqMultiplier;\r\n\r\n var result = base.adjustOpAmpRequirementSpecs(specs, stopbandFrequency);\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport FrequencyRange from '../process-data/frequency';\r\nimport AdiMath from '../utils/math';\r\n\r\nexport default class BaseOptimization extends EmberObject {\r\n stopbandFrequency;\r\n\r\n @computed('stopbandFrequency') get opAmpRequirementSpecValues() {\r\n var stopbandFrequency = this.stopbandFrequency;\r\n var result = this.getOpAmpRequirementSpecValues(stopbandFrequency);\r\n return result;\r\n }\r\n\r\n processR3R4Value(stageFp, rMin, rMax) {\r\n var F_MAX = 10000000;\r\n var rFreq = Math.sqrt(F_MAX / stageFp) * rMin;\r\n var result = Math.min(rFreq, rMax);\r\n\r\n return result;\r\n }\r\n\r\n adjustOpAmpRequirementSpecs(specs, stopbandFrequency) {\r\n /*If getting to top end of tool, allow more leeway*/\r\n if (stopbandFrequency > 1e6 && stopbandFrequency < 10e6) {\r\n specs.fMultiplier = specs.fMultiplier / 1.5;\r\n specs.allowedError = specs.allowedError * 1.5;\r\n specs.rOutFreqMultiplier = specs.rOutFreqMultiplier / 2;\r\n }\r\n if (stopbandFrequency >= 10e6) {\r\n specs.fMultiplier = specs.fMultiplier / 5;\r\n specs.allowedError = specs.allowedError * 2; //Be careful making this higher than 2. If allowedError * this number >= 1, then low pass first order chokes.\r\n specs.rOutFreqMultiplier = specs.rOutFreqMultiplier / 10;\r\n }\r\n\r\n return specs;\r\n }\r\n\r\n computeOptimizationFrequencyArray(filterFrequencyRange) {\r\n const NUM_FREQ_POINTS = 50;\r\n const stopFrequency = filterFrequencyRange.stopFrequency;\r\n const startFrequency = filterFrequencyRange.startFrequency;\r\n const pointsPerDecade = NUM_FREQ_POINTS / AdiMath.logBaseTen(stopFrequency / startFrequency);\r\n\r\n var newFrequencyArrayObject = FrequencyRange.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: stopFrequency,\r\n pointsPerDecade: pointsPerDecade,\r\n });\r\n var result = newFrequencyArrayObject.narrowFrequencyArray;\r\n return result;\r\n }\r\n\r\n optimizeStageOrder(stages) {\r\n return stages;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed, set } from '@ember/object';\r\n\r\nimport BaseOptimization from './base-optimization';\r\nimport NoiseFormula from '../formulas/noise';\r\nimport FilterConstants from '../../filter-constants';\r\nimport * as NoiseUtils from '../utils/noise';\r\nimport * as PermutationUtils from '../utils/permutation';\r\nimport CircuitGroupResults from '../results/circuit-group-results';\r\n\r\nexport default class NoiseOptimization extends BaseOptimization {\r\n name = FilterConstants.optimizationType.noise;\r\n noise = new NoiseFormula();\r\n @computed('stopbandFrequency') get opAmpRequirementSpecValues() {\r\n var base = this;\r\n var stopbandFrequency = base.stopbandFrequency;\r\n var result = this.getOpAmpRequirementSpecValues(stopbandFrequency);\r\n return result;\r\n }\r\n\r\n determineCapacitorValue(stageFp) {\r\n var startingCapacitor = null;\r\n switch (true) {\r\n //fp is below 159 Hz\r\n case stageFp < 159:\r\n //1/(2*pi*fp*10kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 10000);\r\n break;\r\n\r\n //fp is 159 Hz to 1.59 kHz\r\n case stageFp >= 159 && stageFp <= 1590:\r\n //100 nF\r\n startingCapacitor = 100 * 1e-9;\r\n break;\r\n\r\n //fp is 1.59 kHz to 159kHz\r\n case stageFp >= 1590 && stageFp <= 159000:\r\n //1/(2*PI*fp*1kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 1000);\r\n break;\r\n\r\n //fp is 159 kHz to 1.59MHz\r\n case stageFp >= 159000 && stageFp <= 1590000:\r\n //1 nF\r\n startingCapacitor = 1 * 1e-9;\r\n break;\r\n\r\n //fp is above 1.59MHz\r\n case stageFp > 1590000:\r\n //1/(2*PI*fp*100ohms) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 100);\r\n break;\r\n }\r\n\r\n return startingCapacitor;\r\n }\r\n\r\n determineStartingR3R4Value(stageFp) {\r\n var base = this; // to specify which one comes from the base class;\r\n var rMin = 100;\r\n var rMax = 10000;\r\n var result = base.processR3R4Value(stageFp, rMin, rMax);\r\n return result;\r\n }\r\n\r\n getOpAmpRequirementSpecValues(stopbandFrequency) {\r\n var base = this; // to specify which one comes from the base class;\r\n var specs = {\r\n fMultiplier: 200, //bigger is more strict: used for highpass\r\n allowedError: 0.02, //smaller is more strict: used lowpass and bandpass\r\n rOutFreqMultiplier: 5, //rout shouldn't come into play until 5x stopband\r\n dcOutputVoltageFromIBias: 0.2,\r\n stopbandFrequency: stopbandFrequency,\r\n inductorMultiplier: 4,\r\n };\r\n\r\n specs.f = stopbandFrequency * specs.rOutFreqMultiplier;\r\n\r\n var result = base.adjustOpAmpRequirementSpecs(specs, stopbandFrequency);\r\n\r\n return result;\r\n }\r\n\r\n optimizeStageOrder(stages, filterFrequencyRange) {\r\n var newFrequencyArray = this.computeOptimizationFrequencyArray(filterFrequencyRange);\r\n var stageLength = stages.length;\r\n var permutations = PermutationUtils.permutation(stageLength, stageLength);\r\n var adcBandwidth = Math.max.apply(Math, newFrequencyArray);\r\n\r\n let circuitGroupResults = CircuitGroupResults.create({\r\n actualStages: stages,\r\n adcBandwidth: adcBandwidth,\r\n frequencyArray: newFrequencyArray,\r\n });\r\n let lowestNoise = null;\r\n let lowestNoiseSortOrder = null;\r\n let rmsNoiseArray = [];\r\n permutations.forEach((permutation, index) => {\r\n set(circuitGroupResults, 'sortOrder', permutation);\r\n let lastCircuit = circuitGroupResults.lastCircuitNoiseGroup;\r\n let noiseArray = lastCircuit.totalSpectralNoiseReferredToOutputArray;\r\n let rmsNoise = NoiseUtils.getRmsNoise(noiseArray, adcBandwidth, newFrequencyArray);\r\n rmsNoiseArray.push(rmsNoise);\r\n if (index === 0) {\r\n lowestNoise = rmsNoise;\r\n lowestNoiseSortOrder = permutation;\r\n } else {\r\n if (rmsNoise < lowestNoise) {\r\n lowestNoiseSortOrder = permutation;\r\n lowestNoise = rmsNoise;\r\n }\r\n }\r\n });\r\n\r\n var result = lowestNoiseSortOrder.map((item) => {\r\n return stages[item - 1];\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport Noise from './noise';\r\nimport Power from './power';\r\nimport VoltageRange from './voltage-range';\r\nimport AllowedSpecific from './allowed-specific';\r\nimport RecommendedSpecific from './recommended-specific';\r\n\r\nexport default class Optimization extends EmberObject {\r\n optimization;\r\n stopbandFrequency;\r\n @computed('optimization', 'stopbandFrequency') get instance() {\r\n var optimization = this.optimization;\r\n var stopbandFrequency = this.stopbandFrequency;\r\n var result = null;\r\n if (optimization === FilterConstants.optimizationType.noise) {\r\n result = Noise.create({ stopbandFrequency: stopbandFrequency });\r\n } else if (optimization === FilterConstants.optimizationType.power) {\r\n result = Power.create({ stopbandFrequency: stopbandFrequency });\r\n } else if (optimization === FilterConstants.optimizationType.allowedSpecific) {\r\n result = AllowedSpecific.create({ stopbandFrequency: stopbandFrequency });\r\n } else if (optimization === FilterConstants.optimizationType.recommendedSpecific) {\r\n result = RecommendedSpecific.create({ stopbandFrequency: stopbandFrequency });\r\n } else {\r\n result = VoltageRange.create({ stopbandFrequency: stopbandFrequency });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('instance') get name() {\r\n return this.instance.name;\r\n }\r\n\r\n @computed('instance') get opAmpRequirementSpecValues() {\r\n return this.instance.opAmpRequirementSpecValues;\r\n }\r\n\r\n // determines initial capacitor value.\r\n determineCapacitorValue(stageFp) {\r\n var instance = this.instance;\r\n var result = instance.determineCapacitorValue(stageFp);\r\n\r\n if (result < FilterConstants.Limits.CSMALL_COMP_LIMIT) {\r\n result = FilterConstants.Limits.CSMALL_COMP_LIMIT;\r\n } else if (result > FilterConstants.Limits.CBIG_COMP_LIMIT) {\r\n result = FilterConstants.Limits.CBIG_COMP_LIMIT;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n determineStartingR3R4Value(stageFp) {\r\n var instance = this.instance;\r\n return instance.determineStartingR3R4Value(stageFp);\r\n }\r\n\r\n getOpAmpRequirementSpecValues(stopbandFrequency) {\r\n var instance = this.instance;\r\n return instance.getOpAmpRequirementSpecValues(stopbandFrequency);\r\n }\r\n\r\n optimizeStageOrder(stagesWithActualComponents, frequencyArray) {\r\n var instance = this.instance;\r\n return instance.optimizeStageOrder(stagesWithActualComponents, frequencyArray);\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport BaseOptimization from './base-optimization';\r\nimport FilterConstants from '../../filter-constants';\r\n\r\nexport default class PowerOptimization extends BaseOptimization {\r\n name = FilterConstants.optimizationType.power;\r\n @computed('stopbandFrequency') get opAmpRequirementSpecValues() {\r\n var base = this;\r\n var stopbandFrequency = base.stopbandFrequency;\r\n var result = this.getOpAmpRequirementSpecValues(stopbandFrequency);\r\n return result;\r\n }\r\n\r\n //MD says: Does not appear to be used, so commenting out.\r\n /* recreateStagesWithOptimization(stages){\r\n return stages;\r\n }, */\r\n determineCapacitorValue(stageFp) {\r\n var startingCapacitor = null;\r\n switch (true) {\r\n //fp is below 1.59Hz\r\n case stageFp < 1.59:\r\n //1/(2*PI*fp* 1 Mohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 1000000);\r\n break;\r\n\r\n //fp is 1.59Hz to 15.9 Hz\r\n case stageFp >= 1.59 && stageFp <= 15.9:\r\n //100 nF\r\n startingCapacitor = 100 * 1e-9;\r\n break;\r\n\r\n //fp is 15.9Hz to 1.59kHz\r\n case stageFp >= 15.9 && stageFp <= 1590:\r\n //1/(2*PI*fp* 100kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 100000);\r\n break;\r\n\r\n //fp is 1.59kHz to 15.9 kHz\r\n case stageFp >= 1590 && stageFp <= 15900:\r\n //\t1 nF\r\n startingCapacitor = 1 * 1e-9;\r\n break;\r\n\r\n //fp is above 15.9 kHz\r\n case stageFp > 15900:\r\n //1/(2*PI*fp*10 kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 10000);\r\n break;\r\n }\r\n\r\n return startingCapacitor;\r\n }\r\n\r\n determineStartingR3R4Value(stageFp) {\r\n var base = this; // to specify which one comes from the base class;\r\n var rMin = 1000;\r\n var rMax = 1000000;\r\n var result = base.processR3R4Value(stageFp, rMin, rMax);\r\n return result;\r\n }\r\n\r\n getOpAmpRequirementSpecValues(stopbandFrequency) {\r\n var base = this; // to specify which one comes from the base class;\r\n var specs = {\r\n fMultiplier: 50, //bigger is more strict: used for highpass\r\n allowedError: 0.05, //smaller is more strict: used lowpass and bandpass\r\n rOutFreqMultiplier: 3, //rout shouldn't come into play until 5x stopband\r\n inductorMultiplier: 5,\r\n dcOutputVoltageFromIBias: 0.2,\r\n stopbandFrequency: stopbandFrequency,\r\n };\r\n\r\n specs.f = stopbandFrequency * specs.rOutFreqMultiplier;\r\n\r\n var result = base.adjustOpAmpRequirementSpecs(specs, stopbandFrequency);\r\n\r\n return result;\r\n }\r\n}\r\n","import FilterConstants from '../../filter-constants';\r\nimport BaseOptimization from './base-optimization';\r\n\r\nexport default class RecommendedSpecificOptimization extends BaseOptimization {\r\n name = FilterConstants.optimizationType.recommendedSpecific;\r\n\r\n getOpAmpRequirementSpecValues(stopbandFrequency) {\r\n var base = this; // to specify which one comes from the base class;\r\n var specs = {\r\n fMultiplier: 50, //bigger is more strict: used for highpass\r\n allowedError: 0.05, //smaller is more strict: used lowpass and bandpass\r\n rOutFreqMultiplier: 3, //rout shouldn't come into play until 5x stopband\r\n inductorMultiplier: 5,\r\n dcOutputVoltageFromIBias: 0.2,\r\n stopbandFrequency: stopbandFrequency,\r\n };\r\n\r\n specs.f = stopbandFrequency * specs.rOutFreqMultiplier;\r\n\r\n var result = base.adjustOpAmpRequirementSpecs(specs, stopbandFrequency);\r\n\r\n return result;\r\n }\r\n\r\n determineCapacitorValue(stageFp) {\r\n var startingCapacitor = null;\r\n switch (true) {\r\n //fp is below 15.9Hz\r\n case stageFp < 15.9:\r\n // 1/(2*PI*fp* 100kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 100000);\r\n break;\r\n\r\n //fp is 15.9 Hz to 159Hz\r\n case stageFp >= 15.9 && stageFp <= 159:\r\n //100 nF\r\n startingCapacitor = 100 * 1e-9;\r\n break;\r\n\r\n //fp is 159Hz to 15.9kHz\r\n case stageFp >= 159 && stageFp <= 15900:\r\n //1/(2*PI*fp* 10kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 10000);\r\n break;\r\n\r\n //fp is 15.9kHz to 159 kHz\r\n case stageFp >= 15900 && stageFp <= 159000:\r\n //1 nF\r\n startingCapacitor = 1 * 1e-9;\r\n break;\r\n\r\n //fp is above 159kHz\r\n case stageFp > 159000:\r\n //1/(2*PI*fp*1 kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 1000);\r\n break;\r\n }\r\n\r\n return startingCapacitor;\r\n }\r\n\r\n determineStartingR3R4Value(stageFp) {\r\n var base = this; // to specify which one comes from the base class;\r\n var rMin = Math.sqrt(100000);\r\n var rMax = 1000000;\r\n var result = base.processR3R4Value(stageFp, rMin, rMax);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed, set } from '@ember/object';\r\n\r\nimport BaseOptimization from './base-optimization';\r\nimport FilterConstants from '../../filter-constants';\r\nimport * as PermutationUtils from '../utils/permutation';\r\nimport CircuitGroupResults from '../results/circuit-group-results';\r\n\r\nexport default class VoltageRangeOptimization extends BaseOptimization {\r\n stopbandFrequency;\r\n name = FilterConstants.optimizationType.voltageRange;\r\n @computed('stopbandFrequency') get opAmpRequirementSpecValues() {\r\n var base = this;\r\n var stopbandFrequency = base.stopbandFrequency;\r\n var result = this.getOpAmpRequirementSpecValues(stopbandFrequency);\r\n return result;\r\n }\r\n\r\n determineCapacitorValue(stageFp) {\r\n var startingCapacitor = null;\r\n if (stageFp < 15.9) {\r\n // 1/(2*PI*fp* 100kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 100000);\r\n } else if (stageFp >= 15.9 && stageFp <= 159) {\r\n //100 nF\r\n startingCapacitor = 100 * 1e-9;\r\n } else if (stageFp >= 159 && stageFp <= 15900) {\r\n //1/(2*PI*fp* 10kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 10000);\r\n } else if (stageFp >= 15900 && stageFp <= 159000) {\r\n //1 nF\r\n startingCapacitor = 1 * 1e-9;\r\n } else {\r\n //1/(2*PI*fp*1 kohm) in nF\r\n startingCapacitor = 1 / (2 * Math.PI * stageFp * 1000);\r\n }\r\n\r\n return startingCapacitor;\r\n }\r\n\r\n determineStartingR3R4Value(stageFp) {\r\n var base = this; // to specify which one comes from the base class;\r\n var rMin = Math.sqrt(100000);\r\n var rMax = 100000;\r\n var result = base.processR3R4Value(stageFp, rMin, rMax);\r\n return result;\r\n }\r\n\r\n getOpAmpRequirementSpecValues(stopbandFrequency) {\r\n var base = this; // to specify which one comes from the base class;\r\n var specs = {\r\n fMultiplier: 200, //bigger is more strict: used for highpass\r\n allowedError: 0.02, //smaller is more strict: used lowpass and bandpass\r\n rOutFreqMultiplier: 5, //rout shouldn't come into play until 5x stopband\r\n dcOutputVoltageFromIBias: 0.2,\r\n stopbandFrequency: stopbandFrequency,\r\n inductorMultiplier: 4,\r\n };\r\n\r\n specs.f = stopbandFrequency * specs.rOutFreqMultiplier;\r\n\r\n var result = base.adjustOpAmpRequirementSpecs(specs, stopbandFrequency);\r\n\r\n return result;\r\n }\r\n\r\n optimizeStageOrder(stages, filterFrequencyRange) {\r\n //return stages;\r\n let stageLength = stages.length;\r\n let permutations = PermutationUtils.permutation(stageLength, stageLength);\r\n let newFrequencyArray = this.computeOptimizationFrequencyArray(filterFrequencyRange);\r\n let circuitGroupResults = CircuitGroupResults.create({ actualStages: stages, frequencyArray: newFrequencyArray });\r\n let optimumPermutation = [];\r\n let overallMaxSignalInput = 0;\r\n permutations.forEach((permutation) => {\r\n set(circuitGroupResults, 'sortOrder', permutation);\r\n let currentMaxInputSignalPossible = circuitGroupResults.maxInputSignalPossible;\r\n\r\n if (currentMaxInputSignalPossible > overallMaxSignalInput) {\r\n overallMaxSignalInput = currentMaxInputSignalPossible;\r\n optimumPermutation = permutation;\r\n }\r\n });\r\n\r\n var result = [];\r\n for (let i = 0; i < optimumPermutation.length; i++) {\r\n let stage = stages[optimumPermutation[i] - 1];\r\n set(stage, 'previousStage', null);\r\n result.push(stage);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/**\r\nComplex math library. Created by Collaborative Consulting and ADI in 2012.\r\nFunctions in this library are often used at the lowest level of our simulations, and are run thousands of times. \r\nIt is critical that these functions run quickly. \r\nIn 2019, we compared this library to the open source complex library, Complex.js. This library came out after\r\nwe had created this homemade one. Performance of this homemade library compared favorably to that library. See ARNA-3487 for more details.\r\n\r\nOne drawback of this library is that most of the library is embedded each time a new complex number is \r\ncreated. This has two ramifications:\r\n1) Avoid putting more in the prototype than absolutely necessary (as it will increase the memory footprint)\r\n2) We have created several \"destroy\" functions in this library. These functions reuse the input variable to\r\n avoid creating a new object and are considerably faster. However they destroy the input variable, so have\r\n to be used quite carefully.\r\n*/\r\n\r\n/**\r\n@author Created by : Archita Ghosh on behalf of Collaborative Consulting and ADI.\r\n@function Complex \r\n@param {int} real part of the complex number which is in the form of a+ib.\r\n@param {int} imaginary part of the complex number.\r\n@returns A complex number in the form of a+ib.\r\n@description This function creates a complex number.\r\nThe parameters to this function are real part and the imaginary part.\r\n*/\r\nexport function Complex(real, imaginary) {\r\n this.real = real;\r\n this.imaginary = imaginary;\r\n}\r\n\r\nComplex.prototype.toString = function () {\r\n return this.real + ' + ' + this.imaginary + 'i';\r\n};\r\n\r\n/**\r\n@description The constants converted into complex numbers which are used in the algorithm\r\n*/\r\nComplex['0'] = new Complex(0, 0);\r\nComplex['1'] = new Complex(1, 0);\r\nComplex['I'] = new Complex(0, 1, 1, Math.PI / 2);\r\nComplex['PI'] = new Complex(Math.PI, 0, Math.PI, 0);\r\nComplex['E'] = new Complex(Math.E, 0, Math.E, 0);\r\n\r\n/**\r\n@function plus\r\n@param a complex number.\r\n@returns summation of two complex numbers.\r\n@description This function takes as a parameter another complex number and returns a sum of two complex number\r\n@example Let the first complex number be x+iy and second complex number be a+ib.\r\nThe result of (x+iy).plus(a+ib) = (x+a) +i(y+b)\r\n*/\r\n\r\nComplex.prototype.plus = function (c) {\r\n return new Complex(this.real + c.real, this.imaginary + c.imaginary);\r\n};\r\n\r\n/*This addition function is much faster than the regular plus function, because it reuses the incoming variable instead of creating a new return variable.\r\nHowever it destroys the original value in the variable in the process, so this function should be used with care.*/\r\nComplex.prototype.plusDestroy = function (c) {\r\n var realPart = c.real;\r\n var imagPart = c.imaginary;\r\n\r\n c.real = this.real + realPart;\r\n c.imaginary = this.imaginary + imagPart;\r\n return c;\r\n};\r\n\r\n/**\r\n@function subs\r\n@param a complex number.\r\n@returns substraction of two complex numbers.\r\n@description This function takes as a parameter another complex number and returns a substraction of two complex number\r\n@example Let the first complex number be x+iy and second complex number be a+ib.\r\nThe result of (x+iy).subs(a+ib) = (x-a) +i(y-b)\r\n*/\r\n\r\nComplex.prototype.subs = function (c) {\r\n return new Complex(this.real - c.real, this.imaginary - c.imaginary);\r\n};\r\n\r\n/*This addition function is much faster than the regular subs function, because it reuses the incoming variable instead of creating a new return variable.\r\nHowever it destroys the original value in the variable in the process, so this function should be used with care.*/\r\nComplex.prototype.subsDestroy = function (c) {\r\n var realPart = c.real;\r\n var imagPart = c.imaginary;\r\n\r\n c.real = this.real - realPart;\r\n c.imaginary = this.imaginary - imagPart;\r\n return c;\r\n};\r\n\r\n/**\r\n@function mult\r\n@param a complex number.\r\n@returns multiplication of two complex numbers.\r\n@description This function takes as a parameter another complex number and returns a multiplication of two complex number\r\n@example Let the first complex number be x+iy and second complex number be a+ib.\r\nThe result of (x+iy).mult(a+ib) = (x*a)-(y*b) + i(y*a)+(b*x)\r\n*/\r\n\r\nComplex.prototype.mult = function (c) {\r\n var realPart = c.real;\r\n var imagPart = c.imaginary;\r\n\r\n return new Complex(\r\n realPart * this.real - imagPart * this.imaginary,\r\n this.imaginary * realPart + imagPart * this.real,\r\n );\r\n};\r\n\r\n/*This multiply function is much faster than the regular mult function, because it reuses the incoming variable instead of creating a new return variable.\r\nHowever it destroys the value of the original variable in the process, so this function should be used with care.*/\r\nComplex.prototype.multDestroy = function (c) {\r\n var realPart = c.real;\r\n var imagPart = c.imaginary;\r\n\r\n c.real = realPart * this.real - imagPart * this.imaginary;\r\n c.imaginary = this.imaginary * realPart + imagPart * this.real;\r\n\r\n return c;\r\n};\r\n\r\n/**\r\n@function divide2\r\n@param a complex number.\r\n@returns division of two complex numbers.\r\n@description This function takes as a parameter another complex number and returns a division of two complex number\r\n\r\nThis is the old divide version that we used to use, but is a little slow because there are two divides. No longer use \r\nthis as of April 2019. See ARNA-3487 for details.\r\n\r\nWe should probably remove divide2 at some point, but keeping for the time being in case something goes horribly wrong.\r\n*/\r\nComplex.prototype.divide2 = function (c) {\r\n var realPart = c.real;\r\n var imagPart = c.imaginary;\r\n var divident = realPart * realPart + imagPart * imagPart;\r\n return new Complex(\r\n (this.real * realPart + this.imaginary * imagPart) / divident,\r\n (this.imaginary * realPart - this.real * imagPart) / divident,\r\n );\r\n};\r\n\r\n/** This is the new divide version that we started using in April 2019. It's faster than the old version because it\r\n * only uses one divide. See ARNA-3487 for details\r\n */\r\nComplex.prototype.divide = function (c) {\r\n //multiply top and bottom by complex conjugate\r\n var numer_real = c.real * this.real + this.imaginary * c.imaginary;\r\n var numer_imag = c.real * this.imaginary - c.imaginary * this.real;\r\n var denom_real = c.real * c.real + c.imaginary * c.imaginary;\r\n var denom_real_invert = 1 / denom_real;\r\n\r\n return new Complex(numer_real * denom_real_invert, numer_imag * denom_real_invert);\r\n};\r\n\r\n/*This divide function is much faster than the regular divide function, because it reuses the incoming variable.\r\n However it destroys the original variable in the process, so this function should be used with extreme care.*/\r\nComplex.prototype.divideDestroy = function (c) {\r\n var realPart = c.real;\r\n var imagPart = c.imaginary;\r\n var divident = realPart * realPart + imagPart * imagPart;\r\n c.real = (this.real * realPart + this.imaginary * imagPart) / divident;\r\n c.imaginary = (this.imaginary * realPart - this.real * imagPart) / divident;\r\n\r\n return c;\r\n};\r\n\r\n/**\r\n@function magnitude\r\n@returns magnitude of a complex number\r\n@description This function calculates and returns the magnitude of the complex number.\r\n@example Let the complex number be x+iy \r\nThe result of (x+iy).magnitude() = sqrt(x*x +y*y)\r\n*/\r\nComplex.prototype.magnitude = function () {\r\n return Math.sqrt(this.real * this.real + this.imaginary * this.imaginary);\r\n};\r\n\r\n/**\r\n@function arctan\r\n@param a complex number.\r\n@returns inverse tangent of a complex number\r\n@description This function takes as a parameter another complex number and returns an inverse tangent of a complex number\r\n*/\r\nComplex.prototype.arctan = function (c) {\r\n var i = Complex.I;\r\n return i.mult(Complex.log(i.plus(c).divide(i.subs(c)))).divide(new Complex(2, 0, 2, 0));\r\n};\r\n\r\n/**\r\n@function floor\r\n@param a complex number.\r\n@returns floor value of a complex number.\r\n@description This function takes as a parameter another complex number and returns a floor value of a complex number.\r\n*/\r\nComplex.prototype.floor = function (c) {\r\n return new Complex(Math.floor(c.real), Math.floor(c.imaginary));\r\n};\r\n\r\n/**\r\n@function log\r\n@param a complex number.\r\n@returns log of a complex numbers.\r\n@description This function takes as a parameter another complex number and returns a log of the complex number\r\n*/\r\nComplex.prototype.log = function (c) {\r\n return new Complex(Math.log(c.real), c.t + 2 * Math.PI * Math.floor(-c.t / (2 * Math.PI) + 1 / 2));\r\n};\r\n\r\nexport function createComplex(real, imaginary) {\r\n return new Complex(real, imaginary);\r\n}\r\n\r\n//Make scalar value complex. Handy for use with optional values, where you aren't sure if they are undefined\r\nexport function complexify(scalarValue) {\r\n if (scalarValue !== undefined) {\r\n return new Complex(scalarValue, 0);\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n@function complexfreq\r\n@param {object} fp This is the object which contains the array of frequency points\r\n@returns array of complex frequency points\r\n@description

This function takes input as the array of frequency points and returns an array of complex frequency points used in the calculation.

\r\n*

INPUT : array of frequency points obtained

\r\n*

OUTPUT : array of complex frequency points

\r\n*/\r\nexport function complexfreq(fp) {\r\n var complexfreq = new Array();\r\n for (var r = 0; r < fp.length; r++) {\r\n complexfreq[r] = new Complex(fp[r], 0);\r\n }\r\n\r\n return complexfreq;\r\n}\r\n\r\n/**\r\n@function complexNumberRaisedToPower\r\n@param complex number, integer power\r\n@returns complexNumber\r\n*/\r\nexport function complexNumberRaisedToPower(c, n) {\r\n var modC, theta, retComplex, realPart, imaginaryPart, modCpowern;\r\n\r\n // |x+iy| = Math.sqrt(x^2 + y^2) = |z|\r\n modC = Math.sqrt(c.real * c.real + c.imaginary * c.imaginary);\r\n\r\n // |x+iy|^n = |z|^n\r\n modCpowern = Math.pow(modC, n);\r\n\r\n //theta=tan^(-1)(y/x)>\r\n theta = Math.atan2(c.imaginary, c.real);\r\n\r\n //|z|^n * cos(n* theta)\r\n realPart = modCpowern * Math.cos(n * theta);\r\n\r\n //|z|^n * sin(n* theta)\r\n imaginaryPart = modCpowern * Math.sin(n * theta);\r\n\r\n //zn = rn(cos(ntheta)+i sin(ntheta))\r\n retComplex = new Complex(realPart, imaginaryPart);\r\n\r\n return retComplex;\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nexport default class Envelope extends EmberObject {\r\n nominalValuesArray;\r\n simulatedValues;\r\n @computed('nominalValuesArray', 'simulatedValues') get minimumValues() {\r\n var nominalValuesArray = this.nominalValuesArray;\r\n var simulatedValues = this.simulatedValues;\r\n simulatedValues.push(nominalValuesArray);\r\n var result = [];\r\n\r\n for (var i = 0; i < nominalValuesArray; i++) {\r\n var valuesOnTheSameIndex = [];\r\n for (var j = 0; j < simulatedValues; j++) {\r\n valuesOnTheSameIndex.push(simulatedValues[j][i]);\r\n }\r\n\r\n result[i] = Math.min(valuesOnTheSameIndex);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('nominalValuesArray') get nominalValues() {\r\n return this.nominalValuesArray;\r\n }\r\n\r\n @computed('nominalValuesArray', 'simulatedValues') get maximumValues() {\r\n var nominalValuesArray = this.nominalValuesArray;\r\n var simulatedValues = this.simulatedValues;\r\n simulatedValues.push(nominalValuesArray);\r\n var result = [];\r\n\r\n for (var i = 0; i < nominalValuesArray; i++) {\r\n var valuesOnTheSameIndex = [];\r\n for (var j = 0; j < simulatedValues; j++) {\r\n valuesOnTheSameIndex.push(simulatedValues[j][i]);\r\n }\r\n\r\n result[i] = Math.max(valuesOnTheSameIndex);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\nimport {\r\n generateModerateGranularityFreqArray,\r\n generateFineGranularityFreqArray,\r\n generateExtremelyFineGranularityFreqArray,\r\n} from '../utils/friendlyFrequencies';\r\n\r\nconst REDUCE_GRANULARITY_FOR_TEST_DATA_COLLECTION = false;\r\n\r\nexport default class Frequency extends EmberObject {\r\n startFrequency;\r\n stopFrequency;\r\n pointsPerDecade;\r\n decade;\r\n\r\n @computed('startFrequency', 'stopFrequency', 'pointsPerDecade') get narrowFrequencyArray() {\r\n var startFrequency = this.startFrequency;\r\n var stopFrequency = this.stopFrequency;\r\n var pointsPerDecade = this.pointsPerDecade;\r\n var result = this._createArray(startFrequency, stopFrequency, pointsPerDecade);\r\n if (REDUCE_GRANULARITY_FOR_TEST_DATA_COLLECTION) {\r\n result = [1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000];\r\n //result = [100000, 200000, 500000, 1000000, 2000000, 5000000, 10000000, 20000000, 50000000, 100000000];\r\n }\r\n return result;\r\n }\r\n\r\n @computed('startFrequency', 'stopFrequency') get friendlyFrequencyArray() {\r\n const start = this.startFrequency;\r\n const end = this.stopFrequency;\r\n const decade = this.decade;\r\n\r\n if (REDUCE_GRANULARITY_FOR_TEST_DATA_COLLECTION) {\r\n return [1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000];\r\n //result = [100000, 200000, 500000, 1000000, 2000000, 5000000, 10000000, 20000000, 50000000, 100000000];\r\n }\r\n\r\n if (decade <= 0.5) {\r\n return generateExtremelyFineGranularityFreqArray(start, end);\r\n } else if (decade <= 5) {\r\n return generateFineGranularityFreqArray(start, end);\r\n } else {\r\n return generateModerateGranularityFreqArray(start, end);\r\n }\r\n }\r\n\r\n _createArray(startFreq, stopFreq, pointsPerDecade) {\r\n var multiplier = Math.pow(10, 1 / pointsPerDecade);\r\n var i = 0;\r\n var result = [];\r\n result.push(startFreq);\r\n do {\r\n result[i + 1] = result[i] * multiplier;\r\n i++;\r\n } while (result[i] < stopFreq);\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nexport default class SpectralDensity extends EmberObject {\r\n frequencyArray;\r\n noiseSpecs;\r\n\r\n @computed('frequencyArray', 'noiseSpecs') get spectralDensity() {\r\n var frequencyArray = this.frequencyArray;\r\n var noiseSpecs = this.noiseSpecs;\r\n var result = this.getSpectralDensity(frequencyArray, noiseSpecs);\r\n return result;\r\n }\r\n\r\n getSpectralDensity(frequencyArray, noiseSpecs) {\r\n var magnitudeOfPreviousStage = frequencyArray.map(() => {\r\n return 1;\r\n });\r\n var totalSpectralNoiseRTI = frequencyArray.map(() => {\r\n return 0;\r\n });\r\n var spectralNoiseOfOneStageRTI = [];\r\n noiseSpecs.forEach((item) => {\r\n var tempSpectralNoiseOf1StageRTIArray = [];\r\n var spectralNoiseOfOneStage = item.noiseReferredToInputArray;\r\n frequencyArray.forEach((frequency, j) => {\r\n tempSpectralNoiseOf1StageRTIArray.push(spectralNoiseOfOneStage[j] / magnitudeOfPreviousStage[j]);\r\n totalSpectralNoiseRTI[j] = Math.sqrt(\r\n tempSpectralNoiseOf1StageRTIArray[j] * tempSpectralNoiseOf1StageRTIArray[j] +\r\n totalSpectralNoiseRTI[j] * totalSpectralNoiseRTI[j],\r\n );\r\n magnitudeOfPreviousStage[j] = magnitudeOfPreviousStage[j] * item.magnitude[j];\r\n });\r\n\r\n spectralNoiseOfOneStageRTI.push(tempSpectralNoiseOf1StageRTIArray);\r\n });\r\n\r\n var totalSpectralNoiseRTO = [];\r\n for (var i = 0; i < frequencyArray.length; i++) {\r\n var temptotalSpectralNoiseRTOValue = magnitudeOfPreviousStage[i] * totalSpectralNoiseRTI[i];\r\n totalSpectralNoiseRTO.push(temptotalSpectralNoiseRTOValue);\r\n }\r\n\r\n return { totalSpectralNoiseRTO: totalSpectralNoiseRTO, spectralNoiseOfOneStageRTI: spectralNoiseOfOneStageRTI };\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport { A } from '@ember/array';\r\nimport * as ResultsUtils from '../utils/results';\r\nimport MathUtils from '../utils/math';\r\nimport CircuitResults from './circuit-results';\r\nimport VoltageRangeResults from './sub-results/voltage-range';\r\n\r\nexport default class CircuitGroupResults extends EmberObject {\r\n actualStages = null;\r\n adcBandwidth = null;\r\n frequencyArray = null;\r\n sortOrder = null;\r\n @computed('actualStages') get vsMinus() {\r\n let actualStages = this.actualStages;\r\n let result = actualStages[0].componentsInput.vsMinus;\r\n return result;\r\n }\r\n @computed('actualStages') get vsPlus() {\r\n let actualStages = this.actualStages;\r\n let result = actualStages[0].componentsInput.vsPlus;\r\n return result;\r\n }\r\n whoAmI = 'app/models/results/circuit-group-results.js';\r\n init() {\r\n if (this.sortOrder === null) {\r\n set(this, 'sortOrder', []);\r\n }\r\n }\r\n\r\n @computed('actualStages', 'frequencyArray') get circuits() {\r\n var actualStages = this.actualStages;\r\n var frequencyArray = this.frequencyArray;\r\n var result = actualStages.map((item) => {\r\n var circuit = item.circuit;\r\n set(circuit, 'frequencyArray', frequencyArray);\r\n return circuit;\r\n });\r\n return result;\r\n }\r\n\r\n @computed('adcBandwidth', 'circuits', 'actualStages', 'frequencyArray') get circuitResults() {\r\n var adcBandwidth = this.adcBandwidth;\r\n var circuits = this.circuits;\r\n var actualStages = this.actualStages;\r\n var frequencyArray = this.frequencyArray;\r\n var result = actualStages.map((item, index) => {\r\n let circuit = circuits[index];\r\n let circuitResult = CircuitResults.create({\r\n circuit: circuit,\r\n actualStage: item,\r\n adcBandwidth: adcBandwidth,\r\n frequencyArray: frequencyArray,\r\n });\r\n return circuitResult;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuitResults', 'sortOrder') get circuitResultsSorted() {\r\n let sortOrder = this.sortOrder;\r\n let circuitResults = this.circuitResults;\r\n var result = circuitResults;\r\n if (sortOrder.length > 0) {\r\n result = sortOrder.map((stageId) => {\r\n return circuitResults.find((item) => {\r\n return item.actualStage.stageId === stageId;\r\n });\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuitResultsSorted') get overallLimits() {\r\n var circuitResults = this.circuitResultsSorted;\r\n var result = {\r\n gbw: Math.max.apply(\r\n Math,\r\n circuitResults.map((item) => {\r\n return item.idealOpAmp.gbw;\r\n }),\r\n ),\r\n iBias: Math.min.apply(\r\n Math,\r\n circuitResults.map((item) => {\r\n return item.idealOpAmp.iBias;\r\n }),\r\n ),\r\n rOutOverGBW: Math.min.apply(\r\n Math,\r\n circuitResults.map((item) => {\r\n return item.idealOpAmp.rOutOverGBW;\r\n }),\r\n ),\r\n specialGain: Math.min.apply(\r\n Math,\r\n circuitResults.map((item) => {\r\n return item.idealOpAmp.specialGain;\r\n }),\r\n ),\r\n slewRate: Math.max.apply(\r\n Math,\r\n circuitResults.map((item) => {\r\n return item.idealOpAmp.slewRate;\r\n }),\r\n ),\r\n };\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuitResultsSorted', 'adcBandwidth', 'frequencyArray') get lastCircuitNoiseGroup() {\r\n var circuitResults = this.circuitResultsSorted;\r\n var adcBandwidth = this.adcBandwidth;\r\n var previousNoiseGroup = null;\r\n let noiseGroups = [];\r\n for (let i = 0; i < circuitResults.length; i++) {\r\n let circuitResult = circuitResults[i];\r\n let circuit = circuitResult.circuit;\r\n let supportedComponents = circuit.supportedComponents;\r\n var opAmp = circuit.opAmp;\r\n var magnitude = circuitResult.magnitude;\r\n var frequencyArray = this.frequencyArray;\r\n\r\n var filterAmplitude = circuitResult.noiseFilterAmplitude;\r\n let hash = {\r\n r1: null,\r\n r2: null,\r\n r3: null,\r\n r4: null,\r\n r5: null,\r\n c1: null,\r\n c2: null,\r\n c5: null,\r\n opAmp: opAmp,\r\n magnitude: magnitude,\r\n frequencyArray: frequencyArray,\r\n adcBandwidth: adcBandwidth,\r\n filterAmplitude: filterAmplitude,\r\n };\r\n for (let j = 0; j < supportedComponents.length; j++) {\r\n let componentName = supportedComponents[j];\r\n let valuePath = componentName + '.value';\r\n let componentValue = circuit.get(valuePath);\r\n hash[componentName] = componentValue;\r\n }\r\n\r\n if (previousNoiseGroup) {\r\n hash.previousNoiseGroup = previousNoiseGroup;\r\n }\r\n\r\n let noiseGroup = circuit.noiseGroupModel.create(hash);\r\n previousNoiseGroup = noiseGroup;\r\n noiseGroups.push(noiseGroup);\r\n }\r\n\r\n return A(noiseGroups).lastObject;\r\n }\r\n\r\n @computed('circuitResults') get magnitude() {\r\n var circuitResults = this.circuitResults;\r\n var magnitudes = circuitResults.map((item) => {\r\n return item.magnitude;\r\n });\r\n var result = ResultsUtils.getMagnitudeArray(magnitudes);\r\n return result;\r\n }\r\n\r\n @computed('circuitResults') get phase() {\r\n var circuitResults = this.circuitResults;\r\n var phases = circuitResults.map((item) => {\r\n return item.phase;\r\n });\r\n var result = ResultsUtils.getPhaseArray(phases);\r\n return result;\r\n }\r\n\r\n @computed('circuitResults') get stepResponse() {\r\n var circuitResults = this.circuitResults;\r\n var stepValues = circuitResults[0].stepResponse;\r\n\r\n if (circuitResults.length > 1) {\r\n for (var i = 1; i < circuitResults.length; i++) {\r\n var impulseValues = circuitResults[i].impulseResponse;\r\n stepValues = MathUtils.convolve(stepValues, impulseValues);\r\n }\r\n }\r\n\r\n return stepValues;\r\n }\r\n\r\n @computed('circuitResultsSorted', 'vsMinus', 'vsPlus') get maxInputSignalPossible() {\r\n let circuitResultsSorted = this.circuitResultsSorted;\r\n let vsMinus = this.vsMinus;\r\n let vsPlus = this.vsPlus;\r\n var voltageRangeResults = VoltageRangeResults.create({\r\n circuitResults: circuitResultsSorted,\r\n vsMinus: vsMinus,\r\n vsPlus: vsPlus,\r\n worstCaseMagnitudes: null,\r\n toleranceInput: false,\r\n });\r\n var result = voltageRangeResults.maxInputSignalPossible;\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport { A } from '@ember/array';\r\nimport * as ConversionUtils from '../utils/conversion';\r\nimport * as ResultsUtils from '../utils/results';\r\n\r\nexport default class CircuitResults extends EmberObject {\r\n circuit = null;\r\n actualStage = null;\r\n adcBandwidth = null;\r\n frequencyArray = null;\r\n whoAmI = 'app/models/results/circuit-results.js';\r\n\r\n //TODO: Need to rename this to something more descriptive\r\n //It's really an array (by frequency) of all the calculations you can do on an implementation\r\n @computed('circuit', 'frequencyArray') get filterAmplitude() {\r\n let circuit = this.circuit;\r\n let frequencyArray = this.frequencyArray;\r\n var supportedComponents = circuit.supportedComponents;\r\n var opAmp = circuit.opAmp;\r\n var actualFilterAmplitudeModel = circuit.actualFilterAmplitudeModel;\r\n var hash = { r1: null, r2: null, r3: null, r4: null, r5: null, c1: null, c2: null, c5: null, opAmp: opAmp };\r\n\r\n for (let i = 0; i < supportedComponents.length; i++) {\r\n var componentName = supportedComponents[i];\r\n var valuePath = componentName + '.value';\r\n var componentValue = circuit.get(valuePath);\r\n hash[componentName] = componentValue;\r\n }\r\n\r\n var result = frequencyArray.map((frequency) => {\r\n hash.frequency = frequency;\r\n var res = actualFilterAmplitudeModel.create(hash);\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('filterAmplitude') get noiseFilterAmplitude() {\r\n return this.filterAmplitude;\r\n }\r\n @computed('filterAmplitude') get magnitude() {\r\n var filterAmplitude = this.filterAmplitude;\r\n var result = filterAmplitude.map((item) => {\r\n var res = item.magnitude;\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('filterAmplitude') get phase() {\r\n var filterAmplitude = this.filterAmplitude;\r\n var phase = filterAmplitude.map((item) => {\r\n return item.phase;\r\n });\r\n\r\n let result = ResultsUtils.unwrapPhase(phase);\r\n return result;\r\n }\r\n\r\n @computed('circuit', 'actualStage') get idealOpAmp() {\r\n var circuit = this.circuit;\r\n var idealOpAmpValuePaths = circuit.idealOpAmpValuePaths;\r\n var optimization = circuit.optimization;\r\n var stageFp = circuit.stageFp;\r\n var gain = circuit.gain;\r\n var stageQ = circuit.stageQ;\r\n var idealOpAmpModel = circuit.idealOpAmpModel;\r\n var algorithm = circuit.algorithm;\r\n var hash = {\r\n r1: null,\r\n r2: null,\r\n r3: null,\r\n r4: null,\r\n r5: null,\r\n c1: null,\r\n c2: null,\r\n c5: null,\r\n q0: null,\r\n k: null,\r\n optimization: optimization,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n algorithm: algorithm,\r\n };\r\n for (let i = 0; i < idealOpAmpValuePaths.length; i++) {\r\n var componentName = idealOpAmpValuePaths[i];\r\n var valuePath = componentName + '.value';\r\n var componentValue = circuit.get(valuePath);\r\n hash[componentName] = componentValue;\r\n }\r\n\r\n return idealOpAmpModel.create(hash);\r\n }\r\n\r\n @computed('circuit', 'adcBandwidth', 'filterAmplitude') get noiseGroup() {\r\n var circuit = this.circuit;\r\n let supportedComponents = circuit.supportedComponents;\r\n let opAmp = circuit.opAmp;\r\n let magnitude = this.magnitude;\r\n let frequencyArray = this.frequencyArray;\r\n let adcBandwidth = this.adcBandwidth;\r\n let filterAmplitude = this.filterAmplitude;\r\n let hash = {\r\n r1: null,\r\n r2: null,\r\n r3: null,\r\n r4: null,\r\n r5: null,\r\n c1: null,\r\n c2: null,\r\n c5: null,\r\n opAmp: opAmp,\r\n magnitude: magnitude,\r\n frequencyArray: frequencyArray,\r\n adcBandwidth: adcBandwidth,\r\n filterAmplitude: filterAmplitude,\r\n };\r\n\r\n for (let j = 0; j < supportedComponents.length; j++) {\r\n let componentName = supportedComponents[j];\r\n let valuePath = componentName + '.value';\r\n let componentValue = circuit.get(valuePath);\r\n hash[componentName] = componentValue;\r\n }\r\n\r\n let result = circuit.noiseGroupModel.create(hash);\r\n return result;\r\n }\r\n\r\n @computed('circuit', 'actualStage') get stepResponse() {\r\n var circuit = this.circuit;\r\n var actualStage = this.actualStage;\r\n var implementation = actualStage.implementation;\r\n var timeAxis = actualStage.timeAxis;\r\n var idealStep = actualStage.stepResponseIdeal;\r\n var result = implementation.getStepValues(idealStep, circuit, timeAxis);\r\n return result;\r\n }\r\n\r\n @computed('stepResponse') get impulseResponse() {\r\n var stepResponse = this.stepResponse;\r\n var impulseValues = [stepResponse[0]];\r\n for (var i = 1; i < stepResponse.length; i++) {\r\n var val = stepResponse[i] - stepResponse[i - 1];\r\n impulseValues.push(val);\r\n }\r\n\r\n return impulseValues;\r\n }\r\n\r\n @computed('filterAmplitude') get inputImpedance() {\r\n var filterAmplitude = this.filterAmplitude;\r\n var result = filterAmplitude.map((item) => {\r\n var res = item.inputImpedance;\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('inputImpedance') get inputImpedanceMagnitude() {\r\n var inputImpedance = this.inputImpedance;\r\n var result = inputImpedance.map((item) => {\r\n return item.magnitude();\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('inputImpedance') get inputImpedancePhase() {\r\n var inputImpedance = this.inputImpedance;\r\n var phaseArray = inputImpedance.map((item) => {\r\n return Math.atan2(item.imaginary, item.real);\r\n });\r\n\r\n var result = ResultsUtils.unwrapPhase(phaseArray);\r\n result = ConversionUtils.radianArrayToDegreeArray(result);\r\n return result;\r\n }\r\n\r\n @computed('actualStage', 'frequencyArray', 'circuit', 'magnitude') get stageValues() {\r\n let circuit = this.circuit;\r\n let frequencyArray = this.frequencyArray;\r\n\r\n var actualStage = this.actualStage;\r\n var loopFp = circuit.stageFp;\r\n var loopQ = circuit.stageQ;\r\n var gain = circuit.gain;\r\n var magnitude = this.magnitude;\r\n var fpArray = actualStage.getActualFpArray(loopFp);\r\n var qArray = actualStage.getActualQArray(loopQ);\r\n var gainArray = actualStage.getActualGainArray(gain);\r\n\r\n var fpQGainErrorObj = A();\r\n for (var j = 0; j < fpArray.length; j++) {\r\n fpQGainErrorObj[j] = { fp: fpArray[j], q: qArray[j], gain: gainArray[j], error: undefined };\r\n fpQGainErrorObj[j].error = this._calculatePointError(\r\n frequencyArray,\r\n { fp: fpArray[j], q: qArray[j], gain: gainArray[j] },\r\n magnitude,\r\n );\r\n }\r\n\r\n fpQGainErrorObj = fpQGainErrorObj.sortBy('error');\r\n var result = this._getActualFpAndQ(frequencyArray, fpQGainErrorObj, magnitude);\r\n return result;\r\n }\r\n\r\n _getActualFpAndQ(newFrequencyPoints, fpQGainErrorObjIn, componentMagnitudes) {\r\n var stdDev;\r\n var count = 0;\r\n var fpQGainErrorObj = fpQGainErrorObjIn;\r\n var [alpha, gamma, rho, sigma] = [1, 2, 0.5, 0.5]; // Reflection, expansion, contraction and shrink coefficients, respectively\r\n\r\n do {\r\n // Finding the average of fpArray, except for last point\r\n var centroid = this._computeAveFpGainAndQ(fpQGainErrorObj);\r\n var arrayLength = fpQGainErrorObj.length;\r\n\r\n var reflectedPt = this._actualStageSpecReflection(\r\n newFrequencyPoints,\r\n fpQGainErrorObj,\r\n componentMagnitudes,\r\n centroid,\r\n alpha,\r\n );\r\n if (reflectedPt.error < fpQGainErrorObj[0].error) {\r\n // Reflected point is best so far\r\n var expandedPt = this._actualStageSpecExpansion(\r\n newFrequencyPoints,\r\n componentMagnitudes,\r\n centroid,\r\n reflectedPt,\r\n gamma,\r\n );\r\n if (expandedPt.error < reflectedPt.error) {\r\n // Expanded point is even better\r\n this._pointCopy(expandedPt, fpQGainErrorObj[arrayLength - 1]);\r\n } else {\r\n this._pointCopy(reflectedPt, fpQGainErrorObj[arrayLength - 1]);\r\n }\r\n }\r\n // Reflected point is not better than the second worst point\r\n else if (reflectedPt.error >= fpQGainErrorObj[arrayLength - 2].error) {\r\n if (reflectedPt.error < fpQGainErrorObj[arrayLength - 1].error) {\r\n // Reflected point is better than worst point\r\n let contractedPt = this._actualStageSpecContraction(\r\n newFrequencyPoints,\r\n fpQGainErrorObj,\r\n componentMagnitudes,\r\n centroid,\r\n reflectedPt,\r\n rho,\r\n 'out',\r\n );\r\n if (contractedPt.error < reflectedPt.error) {\r\n // Contracted point is even better\r\n this._pointCopy(contractedPt, fpQGainErrorObj[arrayLength - 1]);\r\n } else {\r\n this._actualStageSpecShrink(newFrequencyPoints, fpQGainErrorObj, componentMagnitudes, sigma);\r\n }\r\n } else {\r\n // Reflected point is not better than worst point\r\n let contractedPt = this._actualStageSpecContraction(\r\n newFrequencyPoints,\r\n fpQGainErrorObj,\r\n componentMagnitudes,\r\n centroid,\r\n reflectedPt,\r\n rho,\r\n 'in',\r\n );\r\n if (contractedPt.error < fpQGainErrorObj[arrayLength - 1].error) {\r\n // Contracted point is better than worst point\r\n this._pointCopy(contractedPt, fpQGainErrorObj[arrayLength - 1]);\r\n } else {\r\n this._actualStageSpecShrink(newFrequencyPoints, fpQGainErrorObj, componentMagnitudes, sigma);\r\n }\r\n }\r\n } else {\r\n // Reflected point is not better than some of the rest but is better than second worst point\r\n this._pointCopy(reflectedPt, fpQGainErrorObj[arrayLength - 1]);\r\n }\r\n\r\n fpQGainErrorObj = A(fpQGainErrorObj).sortBy('error');\r\n stdDev = this._computeStdDev(fpQGainErrorObj);\r\n count++;\r\n } while (!(stdDev < 1e-8 || count === 1000 || fpQGainErrorObj[0].error < 1e-6)); // Algorithm usually stops after std dev threshold is met\r\n\r\n var result = { fp: undefined, q: undefined, gain: undefined };\r\n this._pointCopy(fpQGainErrorObj[0], result);\r\n\r\n return result;\r\n }\r\n\r\n _pointCopy(srcPt, destPt) {\r\n [destPt.fp, destPt.q, destPt.gain] = [srcPt.fp, srcPt.q, srcPt.gain];\r\n if (Object.hasOwn(destPt, 'error')) {\r\n destPt.error = srcPt.error;\r\n }\r\n }\r\n\r\n _computeStdDev(fpQGainErrorObj) {\r\n var [sum, sumOfSqs, arrayLength] = [0, 0, fpQGainErrorObj.length];\r\n\r\n fpQGainErrorObj.forEach((pt) => {\r\n sum += pt.error;\r\n sumOfSqs += pt.error * pt.error;\r\n });\r\n\r\n return Math.sqrt((sumOfSqs - (sum * sum) / arrayLength) / (arrayLength - 1));\r\n }\r\n\r\n _computeAveFpGainAndQ(fpQGainErrorObj) {\r\n var [sumFp, sumQ, sumGain, arrayLength] = [0, 0, 0, fpQGainErrorObj.length];\r\n\r\n for (var i = 0; i < arrayLength - 1; i++) {\r\n sumFp += fpQGainErrorObj[i].fp;\r\n sumQ += Number(fpQGainErrorObj[i].q);\r\n sumGain += fpQGainErrorObj[i].gain;\r\n }\r\n\r\n var centroid = {\r\n fp: sumFp / (arrayLength - 1),\r\n q: sumQ / (arrayLength - 1),\r\n gain: sumGain / (arrayLength - 1),\r\n };\r\n\r\n return centroid;\r\n }\r\n\r\n _actualStageSpecReflection(newFrequencyPoints, fpQGainErrorObj, componentMagnitudes, centroid, scalar) {\r\n var arrayLength = fpQGainErrorObj.length;\r\n var reflectedPt = {\r\n fp: centroid.fp + scalar * (centroid.fp - fpQGainErrorObj[arrayLength - 1].fp),\r\n q: centroid.q + scalar * (centroid.q - Number(fpQGainErrorObj[arrayLength - 1].q)),\r\n gain: centroid.gain + scalar * (centroid.gain - fpQGainErrorObj[arrayLength - 1].gain),\r\n error: undefined,\r\n };\r\n reflectedPt.error = this._calculatePointError(newFrequencyPoints, reflectedPt, componentMagnitudes);\r\n\r\n return reflectedPt;\r\n }\r\n\r\n _actualStageSpecExpansion(newFrequencyPoints, componentMagnitudes, centroid, reflectedPt, scalar) {\r\n var expandedPt = {\r\n fp: centroid.fp + scalar * (reflectedPt.fp - centroid.fp),\r\n q: centroid.q + scalar * (reflectedPt.q - centroid.q),\r\n gain: centroid.gain + scalar * (reflectedPt.gain - centroid.gain),\r\n error: undefined,\r\n };\r\n expandedPt.error = this._calculatePointError(newFrequencyPoints, expandedPt, componentMagnitudes);\r\n\r\n return expandedPt;\r\n }\r\n\r\n _actualStageSpecContraction(\r\n newFrequencyPoints,\r\n fpQGainErrorObj,\r\n componentMagnitudes,\r\n centroid,\r\n reflectedPt,\r\n scalar,\r\n inOrOut,\r\n ) {\r\n var contractedPt = {\r\n fp: centroid.fp,\r\n q: centroid.q,\r\n gain: centroid.gain,\r\n error: undefined,\r\n };\r\n\r\n if (inOrOut === 'in') {\r\n // Reflected point is not better than worst point\r\n var arrayLength = fpQGainErrorObj.length;\r\n contractedPt.fp += scalar * (fpQGainErrorObj[arrayLength - 1].fp - centroid.fp);\r\n contractedPt.q += scalar * (fpQGainErrorObj[arrayLength - 1].q - centroid.q);\r\n contractedPt.gain += scalar * (fpQGainErrorObj[arrayLength - 1].gain - centroid.gain);\r\n } else if (inOrOut === 'out') {\r\n // Reflected point is better than worst point\r\n contractedPt.fp += scalar * (reflectedPt.fp - centroid.fp);\r\n contractedPt.q += scalar * (reflectedPt.q - centroid.q);\r\n contractedPt.gain += scalar * (reflectedPt.gain - centroid.gain);\r\n }\r\n\r\n contractedPt.error = this._calculatePointError(newFrequencyPoints, contractedPt, componentMagnitudes);\r\n\r\n return contractedPt;\r\n }\r\n\r\n _actualStageSpecShrink(newFrequencyPoints, fpQGainErrorObj, componentMagnitudes, scalar) {\r\n var arrayLength = fpQGainErrorObj.length;\r\n for (var j = 1; j < arrayLength; j++) {\r\n fpQGainErrorObj[j].fp = fpQGainErrorObj[0].fp + scalar * (fpQGainErrorObj[j].fp - fpQGainErrorObj[0].fp);\r\n fpQGainErrorObj[j].q =\r\n Number(fpQGainErrorObj[0].q) + scalar * (Number(fpQGainErrorObj[j].q) - Number(fpQGainErrorObj[0].q));\r\n fpQGainErrorObj[j].gain = fpQGainErrorObj[0].gain + scalar * (fpQGainErrorObj[j].gain - fpQGainErrorObj[0].gain);\r\n fpQGainErrorObj[j].error = this._calculatePointError(\r\n newFrequencyPoints,\r\n { fp: fpQGainErrorObj[j].fp, q: fpQGainErrorObj[j].q, gain: fpQGainErrorObj[j].gain },\r\n componentMagnitudes,\r\n );\r\n }\r\n }\r\n\r\n _calculatePointError(freqArray, point, componentMagnitudes) {\r\n // var stageMagnitude = freqArray.map(item => {}\r\n // orderStage = [],\r\n // error,\r\n // idealMagnitude = [],\r\n // stage = [],\r\n // difference;\r\n var idealMagnitude = [];\r\n\r\n if (point.fp < 0 || point.q < 0 || point.gain < 0) {\r\n var stageMagnitude = freqArray.map(() => {\r\n return 0;\r\n });\r\n if (point.q < 0) {\r\n point.q = 0;\r\n }\r\n\r\n if (point.fp < 0) {\r\n point.fp = 0;\r\n }\r\n\r\n if (point.gain < 0) {\r\n point.gain = 0;\r\n }\r\n\r\n idealMagnitude = stageMagnitude;\r\n } else {\r\n idealMagnitude = this.actualStage.targetStage\r\n .createAmplitude(point.fp, point.q, point.gain, freqArray)\r\n .map((complex) => {\r\n return complex.magnitude();\r\n });\r\n }\r\n\r\n var error = 0;\r\n\r\n //for each point in ideal magnitude\r\n for (var k = 0; k < idealMagnitude.length; k++) {\r\n var difference = componentMagnitudes[k] - idealMagnitude[k];\r\n error = error + difference * difference; // changed from error[k] on lhs to error\r\n }\r\n\r\n return error;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\nimport { A } from '@ember/array';\r\n\r\nimport * as StageUtils from '../utils/stage';\r\nimport * as SliderUtils from '../utils/slider';\r\nimport { computeCompensateLoop } from '../../utils/common';\r\nimport * as ConversionUtils from '../utils/conversion';\r\nimport * as ArrayUtils from '../utils/array';\r\nimport * as CommonUtils from '../../utils/common';\r\nimport FilterConstants from '../../filter-constants';\r\nimport Noise from './sub-results/noise';\r\nimport Power from './sub-results/power';\r\nimport VoltageRange from './sub-results/voltage-range';\r\nimport FirstOrderTargetStage from '../stages/first-order';\r\nimport FirstOrderActualStage from '../stages/actual-first-order';\r\nimport SecondOrderActualStage from '../stages/actual-second-order';\r\nimport Optimization from '../optimization/optimization';\r\nimport Series from '../tolerances/series';\r\nimport StageDetails from './sub-results/stage-details';\r\nimport CircuitDetails from './sub-results/circuit-details';\r\nimport Frequency from '../process-data/frequency';\r\nimport CircuitGroupResults from './circuit-group-results';\r\nimport NoiseInput from '../inputs/noise';\r\nimport * as ResultsUtils from '../utils/results';\r\n\r\nexport default class ComponentSelectionResults extends EmberObject {\r\n filter = null;\r\n specifications = null;\r\n componentsInput = null;\r\n noiseInput = null;\r\n opAmpSource = null;\r\n stageOrder = null;\r\n specificationsInput = null;\r\n stopbandFrequency = null;\r\n frequencyArray = null;\r\n friendlyFrequencyArray = null;\r\n filterFrequencyRange = null;\r\n timeAxis = null;\r\n targetStages = null;\r\n nthOrder = null;\r\n responseType = null;\r\n filterResponseValue = null;\r\n init() {\r\n super.init();\r\n\r\n if (CommonUtils.isNullOrUndefined(this.noiseInput)) {\r\n var filter = this.filter;\r\n var filterFrequencyRange = this.specifications.filterFrequencyRange;\r\n var stopFrequency = filterFrequencyRange.stopFrequency;\r\n var adcBandwidth = filter.getAdcFrequency(stopFrequency);\r\n var noiseInput = new NoiseInput({ adcBandwidth: adcBandwidth });\r\n set(this, 'noiseInput', noiseInput);\r\n }\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.specifications)) {\r\n this.specificationsInput = this.specifications.specificationsInput;\r\n set(this, 'stopbandFrequency', this.specifications.specificationsInput.stopbandFrequency);\r\n set(this, 'frequencyArray', this.specifications.frequencyArray);\r\n set(this, 'friendlyFrequencyArray', this.specifications.friendlyFrequencyArray);\r\n set(this, 'filterFrequencyRange', this.specifications.filterFrequencyRange);\r\n set(this, 'timeAxis', this.specifications.timeAxis);\r\n set(this, 'targetStages', this.specifications.targetStagesWithDistributedGain);\r\n this.nthOrder = this.specifications.nthOrder;\r\n this.responseType = this.specificationsInput.responseType;\r\n this.filterResponseValue = this.specificationsInput.filterResponseValue;\r\n }\r\n }\r\n\r\n @computed('componentsInput', 'stopbandFrequency') get optimization() {\r\n var stopbandFrequency = this.stopbandFrequency;\r\n var result = Optimization.create({\r\n optimization: this.componentsInput.optimization,\r\n stopbandFrequency: stopbandFrequency,\r\n });\r\n return result;\r\n }\r\n\r\n @computed(\r\n 'targetStages',\r\n 'optimization',\r\n 'stopbandFrequency',\r\n 'componentsInput',\r\n 'opAmpSource',\r\n 'filterFrequencyRange',\r\n 'frequencyArray',\r\n )\r\n get actualStages() {\r\n var individualStagesInput = this.componentsInput.individualStageInputs;\r\n var stopbandFrequency = this.stopbandFrequency;\r\n var targetStages = this.targetStages;\r\n var opAmpSource = this.opAmpSource;\r\n var filterFrequencyRange = this.filterFrequencyRange;\r\n var frequencyArray = this.frequencyArray;\r\n //var stageFpArray = targetStages.map((item) => { return item.stageFp });\r\n var optimizationPreference = this.componentsInput.optimizationPreference;\r\n var componentsInput = this.componentsInput;\r\n\r\n var sortOrder = componentsInput.sortOrder;\r\n\r\n //initialize sort order if not available\r\n if (sortOrder.length === 0) {\r\n for (let i = 0; i < targetStages.length; i++) {\r\n sortOrder.push(i);\r\n }\r\n }\r\n\r\n var hasImaginaryOpAmp = false;\r\n var stageNumber = 0;\r\n var mappedStages = sortOrder.map((sortIndex) => {\r\n stageNumber = stageNumber++;\r\n var compensateLoop = computeCompensateLoop(this.componentsInput.compensateForGbw);\r\n var opAmp = individualStagesInput[sortIndex].opAmp;\r\n\r\n if (opAmp === FilterConstants.idealOpAmp) {\r\n hasImaginaryOpAmp = true;\r\n }\r\n\r\n var optimization = this.optimization;\r\n var masterCapacitorIndex = individualStagesInput[sortIndex].componentSizing.value;\r\n var r3Index = individualStagesInput[sortIndex].gainRatio.value;\r\n var implementation = individualStagesInput[sortIndex].implementation;\r\n var capacitorValues = SliderUtils.generateCapacitorRange(Series.eSeries24);\r\n var gainValues = SliderUtils.generateGainRange(Series.eSeries96);\r\n var masterCapacitorValue = capacitorValues[masterCapacitorIndex];\r\n var r3Value = gainValues[r3Index];\r\n\r\n var res = null;\r\n var actualStagesPropertiesHash = {\r\n targetStage: targetStages[sortIndex],\r\n selectedImplementation: implementation,\r\n compensateLoop: compensateLoop,\r\n opAmp: opAmp,\r\n optimization: optimization,\r\n masterCapacitorValue: masterCapacitorValue,\r\n r3Value: r3Value,\r\n stopbandFrequency: stopbandFrequency,\r\n componentsInput: componentsInput,\r\n opAmpSource: opAmpSource,\r\n };\r\n if (targetStages[sortIndex] instanceof FirstOrderTargetStage) {\r\n res = FirstOrderActualStage.create(actualStagesPropertiesHash);\r\n } else {\r\n res = SecondOrderActualStage.create(actualStagesPropertiesHash);\r\n }\r\n\r\n return res;\r\n });\r\n\r\n if (optimizationPreference === FilterConstants.optimizationPreferenceOptions.nonSpecific && !hasImaginaryOpAmp) {\r\n let optimizedStages = [];\r\n optimizedStages = this.optimization.optimizeStageOrder(mappedStages, filterFrequencyRange);\r\n if (optimizedStages.length > 0) {\r\n for (let i = 0; i < mappedStages.length; i++) {\r\n set(optimizedStages[i], 'frequencyArray', frequencyArray);\r\n set(optimizedStages[i].circuit, 'frequencyArray', frequencyArray);\r\n }\r\n mappedStages = optimizedStages;\r\n }\r\n }\r\n\r\n var result = StageUtils.setPreviousAndNextStage(mappedStages);\r\n return result;\r\n }\r\n\r\n @computed('actualStages') get circuits() {\r\n var result = this.actualStages.map((item) => {\r\n return item.circuit;\r\n });\r\n return result;\r\n }\r\n @computed('stageGroup') get filterName() {\r\n return this.stageGroup.filter.name;\r\n }\r\n\r\n @computed('actualStages', 'noiseInput', 'friendlyFrequencyArray') get circuitGroupResults() {\r\n var adcBandwidth = this.noiseInput.adcBandwidth;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var actualStages = this.actualStages;\r\n var circuitResults = CircuitGroupResults.create({\r\n actualStages: actualStages,\r\n adcBandwidth: adcBandwidth,\r\n frequencyArray: frequencyArray,\r\n });\r\n return circuitResults;\r\n }\r\n\r\n @computed('noiseInput.adcBandwidth', 'frequencyArray', 'filterFrequencyRange') get noiseFrequencyArray() {\r\n const startFrequency = this.filterFrequencyRange.startFrequency;\r\n const stopFrequency = this.filterFrequencyRange.stopFrequency;\r\n const pointsPerDecade = this.filterFrequencyRange.pointsPerDecade;\r\n const adcBandwidth = Math.max(this.noiseInput.adcBandwidth * 10, stopFrequency);\r\n const decade = Math.log10(stopFrequency) - Math.log10(startFrequency);\r\n\r\n var result = Frequency.create({\r\n startFrequency: startFrequency,\r\n stopFrequency: adcBandwidth,\r\n pointsPerDecade: pointsPerDecade,\r\n decade: decade,\r\n }).friendlyFrequencyArray;\r\n return result;\r\n }\r\n\r\n @computed('actualStages', 'noiseInput', 'noiseFrequencyArray') get noiseCircuitGroupResults() {\r\n var adcBandwidth = this.noiseInput.adcBandwidth;\r\n var frequencyArray = this.noiseFrequencyArray;\r\n var actualStages = this.actualStages;\r\n var circuitResults = CircuitGroupResults.create({\r\n actualStages: actualStages,\r\n adcBandwidth: adcBandwidth,\r\n frequencyArray: frequencyArray,\r\n });\r\n return circuitResults;\r\n }\r\n\r\n @computed('actualStages', 'componentsInput') get needReferenceStage() {\r\n var vsMinus = this.componentsInput.vsMinus;\r\n var result = false;\r\n if (vsMinus === 0) {\r\n var actualStages = A(this.actualStages);\r\n result = actualStages.any((stage) => {\r\n return stage.circuit.needReferenceStage;\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuitGroupResults', 'friendlyFrequencyArray') get magnitudeDb() {\r\n var circuitGroupResults = this.circuitGroupResults;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var magnitude = circuitGroupResults.magnitude;\r\n var dbData = ConversionUtils.VVarrtoDBarr(magnitude);\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, dbData);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n\r\n var specInputs = this.specificationsInput;\r\n var gainDB =\r\n specInputs.gainUnit === FilterConstants.gainUnits.db ? specInputs.gain : ConversionUtils.VVtoDB(specInputs.gain);\r\n limits.ymin = gainDB + (specInputs.stopbandAttenuation - 20);\r\n limits.ymax = gainDB + 10;\r\n\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitGroupResults', 'friendlyFrequencyArray') get magnitudeVV() {\r\n var circuitGroupResults = this.circuitGroupResults;\r\n var magnitude = circuitGroupResults.magnitude;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, magnitude);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n limits.ymax += 0.2; // give 0.2 V/V headroom\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitGroupResults', 'friendlyFrequencyArray') get phaseDegrees() {\r\n var circuitGroupResults = this.circuitGroupResults;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var phaseArray = circuitGroupResults.phase;\r\n var dbData = ConversionUtils.radianArrayToDegreeArray(phaseArray);\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, dbData);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var newYmax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var newYmin = limits.ymin - (limits.ymax - limits.ymin) / 10;\r\n limits.ymax = newYmax;\r\n limits.ymin = newYmin;\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitGroupResults', 'friendlyFrequencyArray') get phaseRadians() {\r\n var circuitGroupResults = this.circuitGroupResults;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var phaseArray = circuitGroupResults.phase;\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, phaseArray);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var newYmax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var newYmin = limits.ymin - (limits.ymax - limits.ymin) / 10;\r\n limits.ymax = newYmax;\r\n limits.ymin = newYmin;\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitGroupResults', 'friendlyFrequencyArray') get groupDelay() {\r\n var circuitGroupResults = this.circuitGroupResults;\r\n var phaseArray = circuitGroupResults.phase;\r\n var narrowFreqArray = this.friendlyFrequencyArray;\r\n var { groupDelayArray, newFrequencyAxis } = ConversionUtils.groupDelay(phaseArray, narrowFreqArray);\r\n var dataPoints = ArrayUtils.joinArrays(newFrequencyAxis, groupDelayArray);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n limits.ymax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitGroupResults', 'friendlyFrequencyArray') get phaseDelay() {\r\n var circuitGroupResults = this.circuitGroupResults;\r\n var phaseArray = circuitGroupResults.phase;\r\n var narrowFreqArray = this.friendlyFrequencyArray;\r\n var dbData = ConversionUtils.phaseDelay(phaseArray, narrowFreqArray);\r\n var dataPoints = ArrayUtils.joinArrays(narrowFreqArray, dbData);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n limits.ymax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitGroupResults', 'timeAxis') get stepResponse() {\r\n var circuitGroupResults = this.circuitGroupResults;\r\n var stepResponse = circuitGroupResults.stepResponse;\r\n var timeAxis = this.timeAxis;\r\n var dataPoints = ArrayUtils.joinArrays(timeAxis, stepResponse);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var overreach = (limits.ymax - limits.ymin) / 10;\r\n limits.ymax = limits.ymax + overreach;\r\n if (limits.ymin < 0) {\r\n limits.ymin = limits.ymin - overreach;\r\n }\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitGroupResults', 'friendlyFrequencyArray') get inputImpedanceMagnitude() {\r\n var firstCircuitResult = this.circuitGroupResults.circuitResultsSorted[0];\r\n var dbData = firstCircuitResult.inputImpedanceMagnitude;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, dbData);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitGroupResults', 'friendlyFrequencyArray') get inputImpedancePhase() {\r\n var firstCircuitResult = this.circuitGroupResults.circuitResultsSorted[0];\r\n var dbData = firstCircuitResult.inputImpedancePhase;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, dbData);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('noiseCircuitGroupResults', 'noiseInput', 'friendlyFrequencyArray', 'noiseFrequencyArray') get noise() {\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var noiseFrequencyArray = this.noiseFrequencyArray;\r\n var adcBandwidth = this.noiseInput.adcBandwidth;\r\n var noiseCircuitGroupResults = this.noiseCircuitGroupResults;\r\n var lastCircuitNoiseGroup = noiseCircuitGroupResults.lastCircuitNoiseGroup;\r\n var nominalNoiseArray = lastCircuitNoiseGroup.totalSpectralNoiseReferredToOutputArray;\r\n var result = Noise.create({\r\n nominalNoiseArray: nominalNoiseArray,\r\n frequencyArray: frequencyArray,\r\n noiseFrequencyArray: noiseFrequencyArray,\r\n adcBandwidth: adcBandwidth,\r\n });\r\n return result;\r\n }\r\n\r\n @computed('actualStages', 'needReferenceStage', 'componentsInput') get power() {\r\n var actualStages = this.actualStages;\r\n var componentsInput = this.componentsInput;\r\n var needReferenceStage = this.needReferenceStage;\r\n var result = Power.create({\r\n stages: actualStages,\r\n componentsInput: componentsInput,\r\n needReferenceStage: needReferenceStage,\r\n });\r\n return result;\r\n }\r\n\r\n @computed('componentsInput.{vsMinus,vsPlus}', 'frequencyArray') get voltageRange() {\r\n var vsMinus = this.componentsInput.vsMinus;\r\n var vsPlus = this.componentsInput.vsPlus;\r\n var circuitGroupResults = this.circuitGroupResults;\r\n var circuitResults = circuitGroupResults.circuitResults;\r\n var result = VoltageRange.create({\r\n circuitResults: circuitResults,\r\n vsMinus: vsMinus,\r\n vsPlus: vsPlus,\r\n toleranceInput: false,\r\n worstCaseMagnitudes: null,\r\n });\r\n return result;\r\n }\r\n\r\n @computed('actualStages', 'magnitudeDb.limits') get detailsOfStages() {\r\n var limMagnitudeDb = this.magnitudeDb.limits;\r\n var actualStages = this.actualStages;\r\n var result = actualStages.map((actualStage) => {\r\n var graphData = ResultsUtils.getGraphData(actualStage);\r\n graphData.limits = limMagnitudeDb;\r\n var targetStage = actualStage.targetStage;\r\n var res = StageDetails.create({ targetStage: targetStage, actualStage: actualStage, graphData: graphData });\r\n return res;\r\n });\r\n return result;\r\n }\r\n\r\n @computed('circuits', 'actualStages', 'componentsInput') get detailsOfCircuits() {\r\n var circuits = this.circuits;\r\n var stages = this.actualStages;\r\n var componentsInput = this.componentsInput;\r\n var result = circuits.map((circuit, index) => {\r\n var actualStage = stages[index];\r\n return CircuitDetails.create({ circuit: circuit, stage: actualStage, componentsInput: componentsInput });\r\n });\r\n return result;\r\n }\r\n\r\n @computed('componentsInput') get powerSpan() {\r\n var componentsInput = this.componentsInput;\r\n return componentsInput.vsPlus - componentsInput.vsMinus;\r\n }\r\n\r\n getStageLimits(index) {\r\n var stages = this.actualStages;\r\n var allowedLimits = stages[index].allowedLimits;\r\n var recommendedLimits = stages[index].recommendedLimits;\r\n\r\n var result = {\r\n allowedLimits: allowedLimits,\r\n recommendedLimits: recommendedLimits,\r\n powerSpan: this.powerSpan,\r\n };\r\n\r\n return result;\r\n }\r\n\r\n @computed('actualStages') get noiseResistance() {\r\n var actualStages = this.actualStages;\r\n var lastStage = A(actualStages).lastObject;\r\n var highVNoiseCircuit = lastStage.highVNoiseCircuit;\r\n var highINoiseCircuit = lastStage.highINoiseCircuit;\r\n var spectralDensityHighVNoise = highVNoiseCircuit.noiseGroup.totalSpectralNoiseReferredToOutputArray;\r\n var spectralDensityHighINoise = highINoiseCircuit.noiseGroup.totalSpectralNoiseReferredToOutputArray;\r\n var length = spectralDensityHighVNoise.length;\r\n var averageResistance = null;\r\n for (var i = 0; i < length; i++) {\r\n var noiseResistance = spectralDensityHighINoise[i] / spectralDensityHighVNoise[i];\r\n averageResistance += noiseResistance / length;\r\n }\r\n\r\n return averageResistance;\r\n }\r\n\r\n @computed('circuitGroupResults') get overallLimits() {\r\n return this.circuitGroupResults.overallLimits;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\nimport * as Materials from '../../utils/materials';\r\n\r\n/**\r\n * Should contain data that will be used for output or computing data for the next step in the wizard.\r\n */\r\nexport default class NextStepsResults extends EmberObject {\r\n filter = null;\r\n tolerances = null;\r\n specificationsInput = null;\r\n componentsInput = null;\r\n toleranceInput = null;\r\n opAmpSource = null;\r\n @computed('tolerances') get magnitudeDb() {\r\n return this.tolerances.magnitudeDb;\r\n }\r\n\r\n @computed('tolerances') get magnitudeVV() {\r\n return this.tolerances.magnitudeVV;\r\n }\r\n\r\n @computed('tolerances') get phaseDegrees() {\r\n return this.tolerances.phaseDegrees;\r\n }\r\n\r\n @computed('tolerances') get phaseRadians() {\r\n return this.tolerances.phaseRadians;\r\n }\r\n\r\n @computed('tolerances') get groupDelay() {\r\n return this.tolerances.groupDelay;\r\n }\r\n\r\n @computed('tolerances') get phaseDelay() {\r\n return this.tolerances.phaseDelay;\r\n }\r\n\r\n @computed('tolerances') get stepResponse() {\r\n return this.tolerances.stepResponse;\r\n }\r\n\r\n @computed('tolerances') get inputImpedanceMagnitude() {\r\n return this.tolerances.inputImpedanceMagnitude;\r\n }\r\n\r\n @computed('tolerances') get inputImpedancePhase() {\r\n return this.tolerances.inputImpedancePhase;\r\n }\r\n\r\n @computed('tolerances') get detailsOfCircuits() {\r\n return this.tolerances.detailsOfCircuits;\r\n }\r\n\r\n @computed('tolerances') get detailsOfStages() {\r\n console.time('detailsOfStages');\r\n var result = this.tolerances.detailsOfStages;\r\n console.timeEnd('detailsOfStages');\r\n return result;\r\n }\r\n\r\n @computed('tolerances') get needReferenceStage() {\r\n return this.tolerances.needReferenceStage;\r\n }\r\n\r\n @computed('tolerances') get noise() {\r\n return this.tolerances.noise;\r\n }\r\n\r\n @computed('tolerances') get voltageRange() {\r\n return this.tolerances.voltageRange;\r\n }\r\n\r\n @computed('tolerances') get power() {\r\n return this.tolerances.power;\r\n }\r\n\r\n @computed('filter', 'specificationsInput', 'componentsInput', 'toleranceInput', 'tolerances') get billOfMaterials() {\r\n let filterType = this.filter.name;\r\n let specificationsInput = this.specificationsInput;\r\n let vsMinus = this.componentsInput.vsMinus;\r\n let needReferenceStage = this.needReferenceStage;\r\n let toleranceInput = this.toleranceInput;\r\n let stageDetails = this.tolerances.detailsOfStages;\r\n let circuitDetails = this.tolerances.detailsOfCircuits;\r\n let opAmpSource = this.opAmpSource;\r\n return Materials.billOfMaterials(\r\n filterType,\r\n specificationsInput,\r\n vsMinus,\r\n stageDetails,\r\n circuitDetails,\r\n toleranceInput,\r\n needReferenceStage,\r\n opAmpSource,\r\n );\r\n }\r\n\r\n @computed('componentsInput', 'toleranceInput', 'tolerances') get evalBoardData() {\r\n let vsMinus = this.componentsInput.vsMinus;\r\n let needReferenceStage = this.needReferenceStage;\r\n let toleranceInput = this.toleranceInput;\r\n let stageDetails = this.tolerances.detailsOfStages;\r\n let circuitDetails = this.tolerances.detailsOfCircuits;\r\n let opAmpSource = this.opAmpSource;\r\n return Materials.orderEvalBoard(\r\n vsMinus,\r\n stageDetails,\r\n circuitDetails,\r\n toleranceInput,\r\n needReferenceStage,\r\n opAmpSource,\r\n );\r\n }\r\n\r\n @computed('tolerances') get orderSamplesData() {\r\n let stageDetails = this.tolerances.detailsOfStages;\r\n let opAmpSource = this.opAmpSource;\r\n return Materials.orderSamples(stageDetails, opAmpSource);\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport SpecificationResult from './specification';\r\nimport ComponentsResult from './component-selection';\r\nimport ToleranceResult from './tolerance';\r\nimport NextStepsResult from './next-steps';\r\nimport { filters } from '../../models/filter/filter';\r\n\r\nexport default class Results extends EmberObject {\r\n inputs = null;\r\n opAmpSource = null;\r\n @computed('inputs.{filterType,specifications}') get filter() {\r\n // const selectedResponseType = this.inputs.specifications.selectedResponseType;\r\n // const selectedFilterType = this.inputs.filterType;\r\n // const result = Filter.create({ selectedFilterType: selectedFilterType, selectedResponseType: selectedResponseType });\r\n // const result = filters[this.inputs.filterType];\r\n return filters[this.inputs.filterType];\r\n }\r\n\r\n @computed('inputs.specifications', 'filter') get specifications() {\r\n const specificationsInput = this.inputs.specifications;\r\n // const filter = this.filter;\r\n\r\n return SpecificationResult.create({\r\n filter: filters[this.inputs.filterType],\r\n specificationsInput: specificationsInput,\r\n });\r\n }\r\n\r\n @computed('filter', 'specifications', 'inputs.{components,noise}', 'opAmpSource') get components() {\r\n // const filter = this.filter;\r\n // const specifications = this.specifications;\r\n // const componentsInput = this.inputs.components;\r\n // const noiseInput = this.inputs.noise;\r\n // const opAmpSource = this.opAmpSource;\r\n return ComponentsResult.create({\r\n filter: filters[this.inputs.filterType],\r\n specifications: this.specifications,\r\n componentsInput: this.inputs.components,\r\n noiseInput: this.inputs.noise,\r\n opAmpSource: this.opAmpSource,\r\n });\r\n }\r\n\r\n @computed('components', 'inputs.{tolerances,specifications}') get tolerances() {\r\n // const components = this.components;\r\n // const toleranceInput = this.inputs.tolerances;\r\n // const specificationsInput = this.inputs.specifications;\r\n // const componentsInput = this.inputs.components;\r\n // const result = ToleranceResult.create({\r\n // components: this.components,\r\n // componentsInput: this.inputs.components,\r\n // toleranceInput: this.inputs.tolerances,\r\n // specificationsInput: this.inputs.specifications,\r\n // });\r\n return ToleranceResult.create({\r\n components: this.components,\r\n componentsInput: this.inputs.components,\r\n toleranceInput: this.inputs.tolerances,\r\n specificationsInput: this.inputs.specifications,\r\n });\r\n }\r\n\r\n @computed('filter', 'tolerances', 'inputs.{specifications,components,tolerances}', 'opAmpSource') get nextSteps() {\r\n // const filter = this.filter;\r\n // const tolerances = this.tolerances;\r\n // const specificationsInput = this.inputs.specifications;\r\n // const componentsInput = this.inputs.components;\r\n // const toleranceInput = this.inputs.tolerances;\r\n // const opAmpSource = this.opAmpSource;\r\n // const result = NextStepsResult.create({\r\n // filter: filters[this.inputs.filterType],\r\n // tolerances: this.tolerances,\r\n // specificationsInput: this.inputs.specifications,\r\n // componentsInput: this.inputs.components,\r\n // toleranceInput: this.inputs.tolerances,\r\n // opAmpSource: this.opAmpSource,\r\n // });\r\n return NextStepsResult.create({\r\n filter: filters[this.inputs.filterType],\r\n tolerances: this.tolerances,\r\n specificationsInput: this.inputs.specifications,\r\n componentsInput: this.inputs.components,\r\n toleranceInput: this.inputs.tolerances,\r\n opAmpSource: this.opAmpSource,\r\n });\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport { A } from '@ember/array';\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport * as ArrayUtils from '../utils/array';\r\nimport MathUtils from '../utils/math';\r\nimport * as StageUtils from '../utils/stage';\r\nimport * as CommonUtils from '../../utils/common';\r\nimport * as ConversionUtils from '../utils/conversion';\r\nimport SecondOrderStage from '../stages/second-order';\r\nimport FirstOrderStage from '../stages/first-order';\r\nimport FilterConstants from '../../filter-constants';\r\nimport StageDetails from './sub-results/stage-details';\r\nimport * as ResultsUtils from '../utils/results';\r\n\r\n/**\r\n * Should contain data that will be used for output or computing data for the next step in the wizard.\r\n */\r\nexport default class SpecificationResults extends EmberObject {\r\n specificationsInput;\r\n filter;\r\n init() {\r\n var filter = this.filter;\r\n var specificationsInput = this.specificationsInput;\r\n if (CommonUtils.isNullOrUndefined(this.friendlyFrequencyArray)) {\r\n var frequencyArrayValue = filter.getFilterFrequencyRange(\r\n specificationsInput.stopbandFrequency,\r\n specificationsInput.passbandFrequency,\r\n specificationsInput.centerFrequency,\r\n ).friendlyFrequencyArray;\r\n set(this, 'friendlyFrequencyArray', frequencyArrayValue);\r\n }\r\n\r\n if (CommonUtils.isNullOrUndefined(this.timeAxis)) {\r\n var timeAxisValue = filter.createTimeAxis(\r\n specificationsInput.passbandFrequency,\r\n specificationsInput.stopbandFrequency,\r\n );\r\n set(this, 'timeAxis', timeAxisValue);\r\n }\r\n\r\n this.responseType = this.specificationsInput.selectedResponseType;\r\n this.filterResponseValue = this.specificationsInput.filterResponseValue;\r\n }\r\n\r\n @computed('filter', 'specificationsInput') get timeAxis() {\r\n var filter = this.filter;\r\n var specifications = this.specificationsInput;\r\n var result = filter.createTimeAxis(specifications.passbandFrequency, specifications.stopbandFrequency);\r\n return result;\r\n }\r\n\r\n @computed('filter', 'specificationsInput') get filterFrequencyRange() {\r\n var filter = this.filter;\r\n var specificationsInput = this.specificationsInput;\r\n var result = filter.getFilterFrequencyRange(\r\n specificationsInput.stopbandFrequency,\r\n specificationsInput.passbandFrequency,\r\n specificationsInput.centerFrequency,\r\n );\r\n return result;\r\n }\r\n @computed('filterFrequencyRange') get frequencyArray() {\r\n return this.filterFrequencyRange.narrowFrequencyArray;\r\n }\r\n @computed('filterFrequencyRange') get friendlyFrequencyArray() {\r\n return this.filterFrequencyRange.friendlyFrequencyArray;\r\n }\r\n @computed('filter') get filterName() {\r\n return this.filter.name;\r\n }\r\n\r\n @computed('specificationsInput') get targetGain() {\r\n var gainUnit = this.specificationsInput.gainUnit;\r\n var gain = this.specificationsInput.gain;\r\n var result = gain;\r\n if (gainUnit === FilterConstants.gainUnits.db) {\r\n result = ConversionUtils.dBtoVV(gain);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('specificationsInput', 'filter', 'filterFrequencyRange', 'timeAxis') get _targetStages() {\r\n var filter = this.filter;\r\n var specificationsInput = this.specificationsInput;\r\n var filterFrequencyRange = this.filterFrequencyRange;\r\n var timeAxis = this.timeAxis;\r\n var selectedResponseType = specificationsInput.selectedResponseType;\r\n set(filter, 'selectedResponseType', selectedResponseType);\r\n\r\n var stages = filter.getStages({\r\n filterResponseType: selectedResponseType,\r\n passbandFrequency: specificationsInput.passbandFrequency,\r\n passbandAttenuation: specificationsInput.passbandAttenuation,\r\n stopbandFrequency: specificationsInput.stopbandFrequency,\r\n stopbandAttenuation: specificationsInput.stopbandAttenuation,\r\n centerFrequency: specificationsInput.centerFrequency,\r\n filterResponseValue: specificationsInput.filterResponseValue,\r\n });\r\n // var standardComponentFrequencies = stages.filter((item) => { return !item.isHighSpeedHighGainStage; }).map((item) => { return item.stageFp; });\r\n var mappedStages = stages.map((stage, index) => {\r\n if (stage.filter === null || stage.filter === undefined) {\r\n set(stage, 'filter', filter);\r\n }\r\n\r\n // if(!stage.isHighSpeedHighGainStage')) {\r\n // stage.set('noiseResistanceFrequencyArray', standardComponentFrequencies);\r\n // }\r\n\r\n set(stage, 'filterFrequencyRange', filterFrequencyRange);\r\n set(stage, 'index', index);\r\n set(stage, 'timeAxis', timeAxis);\r\n set(stage, 'stageLetter', FilterConstants.stageLetter[index]);\r\n\r\n return stage;\r\n });\r\n\r\n mappedStages = A(mappedStages).sortBy('stageId');\r\n var result = StageUtils.setPreviousAndNextStage(mappedStages);\r\n\r\n return result;\r\n }\r\n\r\n @computed('_targetStages', 'targetGain', 'specificationsInput') get targetStagesWithDistributedGain() {\r\n var stages = this._targetStages;\r\n var targetGain = this.targetGain;\r\n var centerFrequency = this.specificationsInput.centerFrequency;\r\n var result = StageUtils.distributeGains(targetGain, stages, centerFrequency);\r\n return result;\r\n }\r\n\r\n @computed('targetStagesWithDistributedGain') get totalGain() {\r\n var gainArray = this.targetStagesWithDistributedGain.map((item) => {\r\n return item.gain;\r\n });\r\n var result = 1;\r\n for (var i = 0; i < gainArray.length; i++) {\r\n result *= gainArray[i];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('_targetStages') get nthOrder() {\r\n var stages = this._targetStages;\r\n var secondOrderStagesLength = stages.filter((stage) => {\r\n return stage instanceof SecondOrderStage;\r\n }).length;\r\n var firstOrderStageLength = stages.filter((stage) => {\r\n return stage instanceof FirstOrderStage;\r\n }).length;\r\n var result = secondOrderStagesLength * 2 + firstOrderStageLength;\r\n\r\n return result;\r\n }\r\n\r\n @computed('_targetStages') get numberOfStages() {\r\n var result = this._targetStages.length;\r\n return result;\r\n }\r\n\r\n @computed('targetStagesWithDistributedGain') get _magnitude() {\r\n var stagesArray = this.targetStagesWithDistributedGain;\r\n var individualStageMagnitude = stagesArray.map((stage) => {\r\n return stage.magnitude;\r\n });\r\n\r\n var result = ResultsUtils.getMagnitudeArray(individualStageMagnitude);\r\n return result;\r\n }\r\n\r\n @computed('_magnitude', 'friendlyFrequencyArray', 'specificationsInput') get magnitudeDb() {\r\n var magnitude = this._magnitude;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var dbData = ConversionUtils.VVarrtoDBarr(magnitude) || [];\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, dbData);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n\r\n var specInputs = this.specificationsInput;\r\n var gainDB =\r\n specInputs.gainUnit === FilterConstants.gainUnits.db ? specInputs.gain : ConversionUtils.VVtoDB(specInputs.gain);\r\n limits.ymin = gainDB + (specInputs.stopbandAttenuation - 20);\r\n limits.ymax = gainDB + 10;\r\n\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('_magnitude', 'friendlyFrequencyArray') get magnitudeVV() {\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var magnitude = this._magnitude;\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, magnitude);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n limits.ymax += 0.2; // give 0.2 V/V headroom\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('targetStagesWithDistributedGain') get _phase() {\r\n var stagesArray = this.targetStagesWithDistributedGain;\r\n var individualStagePhase = stagesArray.map((stage) => {\r\n return stage.phase;\r\n });\r\n\r\n var result = ResultsUtils.getPhaseArray(individualStagePhase);\r\n return result;\r\n }\r\n\r\n @computed('_phase', 'friendlyFrequencyArray') get phaseDegrees() {\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var phaseArray = this._phase;\r\n var dbData = ConversionUtils.radianArrayToDegreeArray(phaseArray);\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, dbData);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var newYmax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var newYmin = limits.ymin - (limits.ymax - limits.ymin) / 10;\r\n limits.ymax = newYmax;\r\n limits.ymin = newYmin;\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('_phase', 'friendlyFrequencyArray') get phaseRadians() {\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var phaseArray = this._phase;\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, phaseArray);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var result = { data: dataPoints, limits: limits };\r\n var newYmax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var newYmin = limits.ymin - (limits.ymax - limits.ymin) / 10;\r\n limits.ymax = newYmax;\r\n limits.ymin = newYmin;\r\n return result;\r\n }\r\n\r\n @computed('_phase', 'friendlyFrequencyArray') get groupDelay() {\r\n var phaseArray = this._phase;\r\n var narrowFreqArray = this.friendlyFrequencyArray;\r\n var { groupDelayArray, newFrequencyAxis } = ConversionUtils.groupDelay(phaseArray, narrowFreqArray);\r\n var dataPoints = ArrayUtils.joinArrays(newFrequencyAxis, groupDelayArray);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n limits.ymax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('_phase', 'friendlyFrequencyArray') get phaseDelay() {\r\n var phaseArray = this._phase;\r\n var narrowFreqArray = this.friendlyFrequencyArray;\r\n var dbData = ConversionUtils.phaseDelay(phaseArray, narrowFreqArray);\r\n var dataPoints = ArrayUtils.joinArrays(narrowFreqArray, dbData);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n limits.ymax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('targetStagesWithDistributedGain') get _stepResponse() {\r\n var stages = this.targetStagesWithDistributedGain;\r\n var tempArray1 = stages[0].stepResponseIdeal;\r\n var tempArray2 = [];\r\n for (var i = 1; i < stages.length; i++) {\r\n var stage = stages[i];\r\n var impulseRes = stage.impulseResponse;\r\n tempArray2 = MathUtils.convolve(tempArray1, impulseRes);\r\n tempArray1 = tempArray2;\r\n }\r\n\r\n return tempArray1;\r\n }\r\n\r\n @computed('_stepResponse', 'timeAxis') get stepResponse() {\r\n var stepResponse = this._stepResponse;\r\n var timeAxis = this.timeAxis;\r\n var dataPoints = ArrayUtils.joinArrays(timeAxis, stepResponse);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var overreach = (limits.ymax - limits.ymin) / 10;\r\n limits.ymax = limits.ymax + overreach;\r\n if (limits.ymin < 0) {\r\n limits.ymin = limits.ymin - overreach;\r\n }\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('targetStagesWithDistributedGain', 'magnitudeDb.limits') get detailsOfStages() {\r\n var limMagnitudeDb = this.magnitudeDb.limits;\r\n var targetStages = this.targetStagesWithDistributedGain;\r\n var result = targetStages.map((targetStage) => {\r\n var graphData = ResultsUtils.getGraphData(targetStage);\r\n graphData.limits = limMagnitudeDb;\r\n var res = StageDetails.create({ targetStage: targetStage, graphData: graphData });\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport * as CommonUtils from '../../../utils/common';\r\n\r\nexport default class CircuitDetailResults extends EmberObject {\r\n circuit;\r\n componentInput;\r\n stage;\r\n whoAmI = 'app/models/results/sub-results/circuit-details.js';\r\n stageLetter; // string (e.g: \"A\", \"B\")\r\n order; // int\r\n filter; // string\r\n implementation; // string\r\n vsPlus; // \"5V\"\r\n vsMinus; // \"-5V\"\r\n bypassCapacitors; // array of { name: \"c1\", value: \"1nF\", tolerance: \"5%\" },\r\n spares; // array of { name: \"LT2078\", url: \"\" }\r\n\r\n init() {\r\n super.init();\r\n if (!CommonUtils.isNullOrUndefined(this.stage)) {\r\n this.stageLetter = this.stage.stageLetter;\r\n this.order = this.stage.order;\r\n this.filter = this.stage.filter;\r\n this.implementation = this.stage.implementation.name;\r\n }\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.componentInput)) {\r\n this.vsPlus = this.componentInput.vsPlus;\r\n this.vsMinus = this.componentInput.vsMinus;\r\n }\r\n }\r\n\r\n @computed('circuit') get c1() {\r\n var c1 = this.circuit.c1;\r\n var result = { name: '', value: null, tolerance: null, minimum: null, maximum: null };\r\n if (c1) {\r\n var value = c1.value;\r\n var tolerance = c1.desiredTolerance;\r\n var minimum = c1.minimum;\r\n var maximum = c1.maximum;\r\n result = { name: 'c1', value: value, tolerance: tolerance, minimum: minimum, maximum: maximum };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get c2() {\r\n var c2 = this.circuit.c2;\r\n var result = { name: '', value: null, tolerance: null, minimum: null, maximum: null };\r\n if (c2) {\r\n var value = c2.value;\r\n var tolerance = c2.desiredTolerance;\r\n var minimum = c2.minimum;\r\n var maximum = c2.maximum;\r\n result = { name: 'c2', value: value, tolerance: tolerance, minimum: minimum, maximum: maximum };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get c5() {\r\n var c5 = this.circuit.c5;\r\n var result = { name: '', value: null, tolerance: null, minimum: null, maximum: null };\r\n if (c5) {\r\n var value = c5.value;\r\n var tolerance = c5.desiredTolerance;\r\n var minimum = c5.minimum;\r\n var maximum = c5.maximum;\r\n result = { name: 'c5', value: value, tolerance: tolerance, minimum: minimum, maximum: maximum };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get r1() {\r\n var r1 = this.circuit.r1;\r\n var result = { name: '', value: null, tolerance: null, minimum: null, maximum: null };\r\n if (r1) {\r\n var value = r1.value;\r\n var tolerance = r1.desiredTolerance;\r\n var minimum = r1.minimum;\r\n var maximum = r1.maximum;\r\n result = { name: 'r1', value: value, tolerance: tolerance, minimum: minimum, maximum: maximum };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get r2() {\r\n var r2 = this.circuit.r2;\r\n var result = { name: '', value: null, tolerance: null, minimum: null, maximum: null };\r\n if (r2) {\r\n var value = r2.value;\r\n var tolerance = r2.desiredTolerance;\r\n var minimum = r2.minimum;\r\n var maximum = r2.maximum;\r\n result = { name: 'r2', value: value, tolerance: tolerance, minimum: minimum, maximum: maximum };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get r3() {\r\n var r3 = this.circuit.r3;\r\n var result = { name: '', value: null, tolerance: null, minimum: null, maximum: null };\r\n if (r3) {\r\n var value = r3.value;\r\n var tolerance = r3.desiredTolerance;\r\n var minimum = r3.minimum;\r\n var maximum = r3.maximum;\r\n result = { name: 'r3', value: value, tolerance: tolerance, minimum: minimum, maximum: maximum };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get r4() {\r\n var r4 = this.circuit.r4;\r\n var result = { name: '', value: null, tolerance: null, minimum: null, maximum: null };\r\n if (r4) {\r\n var value = r4.value;\r\n var tolerance = r4.desiredTolerance;\r\n var minimum = r4.minimum;\r\n var maximum = r4.maximum;\r\n result = { name: 'r4', value: value, tolerance: tolerance, minimum: minimum, maximum: maximum };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get r5() {\r\n var r5 = this.circuit.r5;\r\n var result = { name: '', value: null, tolerance: null, minimum: null, maximum: null };\r\n if (r5) {\r\n var value = r5.value;\r\n var tolerance = r5.desiredTolerance;\r\n var minimum = r5.minimum;\r\n var maximum = r5.maximum;\r\n result = { name: 'r5', value: value, tolerance: tolerance, minimum: minimum, maximum: maximum };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get l1() {\r\n var l1 = this.circuit.l1;\r\n var result = { name: '', value: null, tolerance: null, minimum: null, maximum: null };\r\n if (l1) {\r\n var value = l1.value;\r\n var tolerance = l1.desiredTolerance;\r\n var minimum = l1.minimum;\r\n var maximum = l1.maximum;\r\n result = { name: 'l1', value: value, tolerance: tolerance, minimum: minimum, maximum: maximum };\r\n }\r\n return result;\r\n }\r\n\r\n @computed('circuit') get opAmp() {\r\n var opAmpName = this.circuit.opAmp.partNumber;\r\n var result = { name: opAmpName, url: null };\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport * as ArrayUtils from '../../utils/array';\r\nimport * as CommonUtils from '../../../utils/common';\r\nimport * as ConversionUtils from '../../utils/conversion';\r\n\r\nexport default class MagnitudDbResult extends EmberObject {\r\n specificationsInput;\r\n frequencyArray;\r\n magnitude;\r\n passbandFrequency;\r\n passbandAttenuation;\r\n stopbandFrequency;\r\n stopbandAttenuation;\r\n init() {\r\n if (!CommonUtils.isNullOrUndefined(this.specificationsInput)) {\r\n this.passbandFrequency = this.specificationsInput.passbandFrequency;\r\n this.passbandAttenuation = this.specificationsInput.passbandAttenuation;\r\n this.stopbandFrequency = this.specificationsInput.stopbandFrequency;\r\n this.stopbandAttenuation = this.specificationsInput.stopbandAttenuation;\r\n }\r\n }\r\n\r\n @computed('frequencyArray', 'magnitude') get graphData() {\r\n var friendlyFrequencyArray = this.frequencyArray;\r\n var magnitudeArray = this.magnitude;\r\n var dbData = ConversionUtils.VVarrtoDBarr(magnitudeArray) || [];\r\n var result = ArrayUtils.joinArrays(friendlyFrequencyArray, dbData);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport * as ArrayUtils from '../../utils/array';\r\nimport * as NoiseUtils from '../../utils/noise';\r\nimport * as CommonUtils from '../../../utils/common';\r\nimport * as ResultsUtils from '../../utils/results';\r\n\r\nexport default class NoiseResult extends EmberObject {\r\n frequencyArray;\r\n noiseFrequencyArray;\r\n noiseGroup;\r\n adcBandwidth;\r\n nominalNoiseArray;\r\n minimumNoiseArray;\r\n maximumNoiseArray;\r\n\r\n @computed('nominalNoiseArray', 'noiseFrequencyArray', 'adcBandwidth') get _nominalRmsValue() {\r\n var nominalNoiseArray = this.nominalNoiseArray;\r\n var noiseFrequencyArray = this.noiseFrequencyArray;\r\n var adcBandwidth = this.adcBandwidth;\r\n var result = NoiseUtils.getRmsNoise(nominalNoiseArray, adcBandwidth, noiseFrequencyArray);\r\n return result;\r\n }\r\n\r\n @computed('maximumNoiseArray', 'noiseFrequencyArray', 'adcBandwidth') get _worstCaseRmsValue() {\r\n var maximumNoiseArray = this.maximumNoiseArray;\r\n var noiseFrequencyArray = this.noiseFrequencyArray;\r\n var adcBandwidth = this.adcBandwidth;\r\n\r\n if (CommonUtils.isNullOrUndefined(maximumNoiseArray)) {\r\n return null;\r\n }\r\n\r\n var result = NoiseUtils.getRmsNoise(maximumNoiseArray, adcBandwidth, noiseFrequencyArray);\r\n return result;\r\n }\r\n\r\n @computed('_nominalRmsValue') get _nominalPeakToPeak() {\r\n var _nominalRmsValue = this._nominalRmsValue;\r\n var result = NoiseUtils.getPeakToPeak(_nominalRmsValue);\r\n return result;\r\n }\r\n\r\n @computed('_worstCaseRmsValue') get _worstCasePeakToPeak() {\r\n var _worstCaseRmsValue = this._worstCaseRmsValue;\r\n\r\n if (CommonUtils.isNullOrUndefined(_worstCaseRmsValue)) {\r\n return null;\r\n }\r\n\r\n var result = NoiseUtils.getPeakToPeak(_worstCaseRmsValue);\r\n return result;\r\n }\r\n\r\n @computed('frequencyArray', 'nominalNoiseArray', 'minimumNoiseArray', 'maximumNoiseArray') get graphData() {\r\n var frequencyArray = this.frequencyArray;\r\n var nominalNoiseArray = this.nominalNoiseArray;\r\n var minimumNoiseArray = this.minimumNoiseArray;\r\n var maximumNoiseArray = this.maximumNoiseArray;\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, nominalNoiseArray);\r\n\r\n if (!CommonUtils.isNullOrUndefined(minimumNoiseArray) && !CommonUtils.isNullOrUndefined(maximumNoiseArray)) {\r\n dataPoints = ArrayUtils.joinToleranceArrays(\r\n frequencyArray,\r\n nominalNoiseArray,\r\n minimumNoiseArray,\r\n maximumNoiseArray,\r\n );\r\n }\r\n\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('_nominalRmsValue', '_worstCaseRmsValue') get rms() {\r\n var _nominalRmsValue = this._nominalRmsValue;\r\n var _worstCaseRmsValue = this._worstCaseRmsValue;\r\n var result = { nominalValue: _nominalRmsValue, worstCaseValue: _worstCaseRmsValue };\r\n return result;\r\n }\r\n\r\n @computed('_nominalPeakToPeak', '_worstCasePeakToPeak') get peakToPeakNoise() {\r\n var _nominalPeakToPeak = this._nominalPeakToPeak;\r\n var _worstCasePeakToPeak = this._worstCasePeakToPeak;\r\n var result = { nominalValue: _nominalPeakToPeak, worstCaseValue: _worstCasePeakToPeak };\r\n return result;\r\n }\r\n\r\n @computed('_nominalRmsValue', '_worstCaseRmsValue') get adcTableData() {\r\n var _nominalRmsValue = this._nominalRmsValue;\r\n var _worstCaseRmsValue = this._worstCaseRmsValue;\r\n var nominalADCTableData = NoiseUtils.getSNRandENOB(_nominalRmsValue);\r\n var worstCaseADCTableData = NoiseUtils.getSNRandENOB(_worstCaseRmsValue);\r\n var result = nominalADCTableData.map((item, index) => {\r\n var worstCaseSNR = worstCaseADCTableData[index].snr;\r\n var worstCaseENOB = worstCaseADCTableData[index].enob;\r\n return {\r\n adc: item.adc,\r\n nominalSNR: item.snr,\r\n worstCaseSNR: worstCaseSNR,\r\n nominalENOB: item.enob,\r\n worstCaseENOB: worstCaseENOB,\r\n };\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport * as CommonUtils from '../../../utils/common';\r\n\r\nexport default class PowerDetailResults extends EmberObject {\r\n stage;\r\n powerSupply;\r\n resistorCurrent;\r\n stageLetter;\r\n order;\r\n\r\n init() {\r\n super.init();\r\n\r\n if (CommonUtils.isNullOrUndefined(this.stage)) {\r\n this.opAmp = null;\r\n this.inputSupplyCurrent = null;\r\n }\r\n\r\n if (!CommonUtils.isNullOrUndefined(this.stage)) {\r\n this.stageLetter = this.stage.stageLetter;\r\n this.order = this.stage.order;\r\n }\r\n }\r\n\r\n @computed('stage') get opAmp() {\r\n var stage = this.stage;\r\n var result = null;\r\n if (stage) {\r\n result = stage.circuit.opAmp.partNumber;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('stage') get inputSupplyCurrent() {\r\n var stage = this.stage;\r\n var result = null;\r\n if (stage) {\r\n result = stage.circuit.opAmp.supplyCurrent;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get power() {\r\n return this.powerSupply * this.inputSupplyCurrent;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport PowerDetails from './power-details';\r\nimport FilterConstants from '../../../filter-constants';\r\n\r\nexport default class PowerResults extends EmberObject {\r\n componentsInput = null; // input/component-selection\r\n stages = null; // stages/actual-stage array\r\n needReferenceStage = null; // boolean\r\n @computed('componentsInput') get powerSupply() {\r\n var vsMinus = this.componentsInput.vsMinus;\r\n var vsPlus = this.componentsInput.vsPlus;\r\n var result = Math.abs(vsMinus) + Math.abs(vsPlus);\r\n return result;\r\n }\r\n\r\n @computed('stages', 'powerSupply') get detailsOfPower() {\r\n var stages = this.stages;\r\n var powerSupply = this.powerSupply;\r\n var result = stages.map((stage) => {\r\n return PowerDetails.create({ stage: stage, powerSupply: powerSupply });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('needReferenceStage', 'powerSupply') get referenceStage() {\r\n var result = null;\r\n var needReferenceStage = this.needReferenceStage;\r\n if (needReferenceStage) {\r\n var powerSupply = this.powerSupply;\r\n var supplyCurrent = FilterConstants.Limits.REFERENCE_OPAMP_CURRENT;\r\n var resistorCurrent = powerSupply / (2 * FilterConstants.Limits.REFERENCE_RESISTOR);\r\n var power = powerSupply * (supplyCurrent + resistorCurrent);\r\n result = EmberObject.create({\r\n powerSupply: powerSupply,\r\n inputSupplyCurrent: supplyCurrent,\r\n resistorCurrent: resistorCurrent,\r\n power: power,\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('detailsOfPower', 'referenceStage') get totalSupplyCurrents() {\r\n var detailsOfPower = this.detailsOfPower;\r\n var referenceStage = this.referenceStage;\r\n var inputSupplyCurrents = detailsOfPower.map((item) => {\r\n return item.inputSupplyCurrent;\r\n });\r\n var result = 0;\r\n\r\n inputSupplyCurrents.forEach((element) => {\r\n result += element;\r\n });\r\n\r\n if (referenceStage) {\r\n result = result + referenceStage.inputSupplyCurrent + referenceStage.resistorCurrent;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('totalSupplyCurrents', 'powerSupply') get totalPowerConsumption() {\r\n var totalSupplyCurrents = this.totalSupplyCurrents;\r\n var powerSupply = this.powerSupply;\r\n var result = totalSupplyCurrents * powerSupply;\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport * as CommonUtils from '../../../utils/common';\r\nimport FirstOrderStage from '../../stages/first-order';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\n\r\nexport default class StageDetailResults extends EmberObject {\r\n targetStage = null;\r\n actualStage = null;\r\n interestingCircuitResult = null;\r\n circuitResult = null;\r\n graphData = null;\r\n whoAmI = 'app/models/results/sub-results/stage-details.js';\r\n\r\n @computed('targetStage') get stageLetter() {\r\n return this.targetStage.stageLetter;\r\n }\r\n @computed('actualStage') get implementation() {\r\n return this.actualStage.selectedImplementation;\r\n } // e.g: FilterConstants.implementationTypes.sallenKey\r\n @computed('targetStage') get filterName() {\r\n var filterName = this.targetStage.filter.name;\r\n var result = CommonUtils.displayStageType(filterName);\r\n return result;\r\n }\r\n\r\n @computed('targetStage') get nthOrder() {\r\n var order = this.targetStage.order;\r\n var result = CommonUtils.toOrdinal(order);\r\n return result;\r\n }\r\n\r\n @computed('interestingCircuitResult') get interestingCircuitStageValues() {\r\n var interestingCircuitResult = this.interestingCircuitResult;\r\n if (!interestingCircuitResult) {\r\n return null;\r\n }\r\n\r\n var stageValuesArray = interestingCircuitResult.map((item) => {\r\n return item.stageValues;\r\n });\r\n return stageValuesArray;\r\n }\r\n\r\n @computed('circuitResult', 'interestingCircuitStageValues') get toleranceGain() {\r\n var interestingCircuitStageValues = this.interestingCircuitStageValues;\r\n if (!interestingCircuitStageValues) {\r\n return { minimum: null, maximum: null };\r\n }\r\n\r\n var nominalGain = this.circuitResult.stageValues.gain;\r\n var gains = interestingCircuitStageValues.map((item) => {\r\n return item.gain;\r\n });\r\n gains.push(nominalGain);\r\n var minimum = Math.min.apply(Math, gains);\r\n var maximum = Math.max.apply(Math, gains);\r\n return { minimum: minimum, maximum: maximum };\r\n }\r\n\r\n @computed('targetStage', 'actualStage', 'toleranceGain') get gain() {\r\n var targetStageGain = this.targetStage.gain.toFixed(2);\r\n var actualGain = this.actualStage ? this.actualStage.gain : null;\r\n var toleranceGain = this.toleranceGain;\r\n var simulatedValue = actualGain ? actualGain.toFixed(2) : null;\r\n var result = {\r\n target: targetStageGain,\r\n simulatedValue: simulatedValue,\r\n simulatedFrom: toleranceGain.minimum,\r\n simulatedTo: toleranceGain.maximum,\r\n };\r\n return result;\r\n }\r\n\r\n @computed('actualStage', 'interestingCircuitStageValues') get toleranceStageFp() {\r\n var interestingCircuitStageValues = this.interestingCircuitStageValues;\r\n if (!interestingCircuitStageValues) {\r\n return { minimum: null, maximum: null };\r\n }\r\n\r\n var nominalStageFp = this.actualStage.stageFp;\r\n var stageFpArray = interestingCircuitStageValues.map((item) => {\r\n return item.fp;\r\n });\r\n stageFpArray.push(nominalStageFp);\r\n var minimum = Math.min.apply(Math, stageFpArray);\r\n var maximum = Math.max.apply(Math, stageFpArray);\r\n return { minimum: minimum, maximum: maximum };\r\n }\r\n\r\n @computed('targetStage', 'actualStage', 'toleranceStageFp') get stageFp() {\r\n var value = this.targetStage.stageFp;\r\n var actualStageFp = this.actualStage ? this.actualStage.stageFp : null;\r\n var toleranceStageFp = this.toleranceStageFp;\r\n var targetStageFp = numberToUserDisplay(value, 'Engineering', 4, { showZeroes: false });\r\n var simulatedValue = actualStageFp ? actualStageFp.toPrecision(4) : null;\r\n var result = {\r\n target: targetStageFp,\r\n simulatedValue: simulatedValue,\r\n simulatedFrom: toleranceStageFp.minimum,\r\n simulatedTo: toleranceStageFp.maximum,\r\n enabled: true,\r\n };\r\n return result;\r\n }\r\n\r\n @computed('actualStage', 'interestingCircuitStageValues') get toleranceStageQ() {\r\n var interestingCircuitStageValues = this.interestingCircuitStageValues;\r\n if (!interestingCircuitStageValues) {\r\n return { minimum: null, maximum: null };\r\n }\r\n\r\n var nominalStageQ = this.actualStage.stageQ;\r\n var stageQArray = interestingCircuitStageValues.map((item) => {\r\n return item.q;\r\n });\r\n stageQArray.push(nominalStageQ);\r\n var minimum = Math.min.apply(Math, stageQArray);\r\n var maximum = Math.max.apply(Math, stageQArray);\r\n return { minimum: minimum, maximum: maximum };\r\n }\r\n\r\n @computed('targetStage', 'actualStage', 'toleranceStageQ') get stageQ() {\r\n var value = this.targetStage.stageQ;\r\n var actualStageQ = this.actualStage ? this.actualStage.stageQ : null;\r\n var targetStage = this.targetStage;\r\n var toleranceStageQ = this.toleranceStageQ;\r\n var targetStageQ = numberToUserDisplay(value, 'Engineering', 4, { showZeroes: false });\r\n var simulatedValue = actualStageQ ? actualStageQ.toPrecision(4) : null;\r\n var enabled = true;\r\n if (targetStage instanceof FirstOrderStage) {\r\n enabled = false;\r\n }\r\n\r\n var result = {\r\n target: targetStageQ,\r\n simulatedValue: simulatedValue,\r\n simulatedFrom: toleranceStageQ.minimum,\r\n simulatedTo: toleranceStageQ.maximum,\r\n enabled: enabled,\r\n };\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\n/* This file creates the details per stage that we show in our voltage range view\r\n If number of stages = n, then for the component selection view, this object will get created n times. For the tolerance/next steps view\r\n this object will be created 2n times: we create a nominal and worst case version for each stage.\r\n\r\n Because this object is created separately for nominal and worst case, there should be no differentiation between worst case and nominal in this file.\r\n All differentiation between nominal and worst case should be handled in voltage-range.js\r\n\r\n*/\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport Rate from './voltage-range/rate';\r\nimport Signal from './voltage-range/signal';\r\nimport * as CommonUtils from '../../../utils/common';\r\n\r\nexport default class VoltageRangeDetails extends EmberObject {\r\n stage = null;\r\n smallestMultiplier = null;\r\n smallestMultiplierWorstCase = null;\r\n vRange = null;\r\n vRangeWorstCase = null;\r\n whoAmI = 'app/models/results/sub-results/voltage-range-detail.js';\r\n opAmp;\r\n opAmpDetails;\r\n stageLetter; // string\r\n vsPlus = null;\r\n vsMinus = null;\r\n init() {\r\n if (!CommonUtils.isNullOrUndefined(this.stage)) {\r\n this.opAmp = this.stage.circuit.opAmp.partNumber;\r\n this.opAmpDetails = this.stage.circuit.opAmp;\r\n this.stageLetter = this.stage.targetStage.stageLetter;\r\n }\r\n }\r\n\r\n @computed('smallestMultiplier', 'vRange') get warning() {\r\n var smallestMultiplier = this.smallestMultiplier;\r\n var multiplierSignalInput = this.vRange.multiplierSignalInput;\r\n var multiplierSignalOutput = this.vRange.multiplierSignalOutput;\r\n var multiplierSignalSlewRate = this.vRange.multiplierSignalSlewRate;\r\n var result = { slewRate: false, input: false, output: false };\r\n\r\n if (smallestMultiplier === multiplierSignalSlewRate) {\r\n result.slewRate = true;\r\n } else if (smallestMultiplier === multiplierSignalOutput) {\r\n result.output = true;\r\n } else if (smallestMultiplier === multiplierSignalInput) {\r\n result.input = true;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('vRange', 'smallestMultiplier') get maxInputSignal() {\r\n var vRange = this.vRange;\r\n var maxSignalInput = vRange.maxSignalInput;\r\n var smallestMultiplier = this.smallestMultiplier;\r\n var result = smallestMultiplier * maxSignalInput * 2;\r\n return result;\r\n }\r\n\r\n @computed('warning', 'vRange') get amplifierSpecs() {\r\n var warning = this.warning;\r\n var vRange = this.vRange;\r\n var stage = this.stage;\r\n var opAmpSlewRate = stage.circuit.opAmp.slewRate;\r\n var minimumInput = vRange.minInput;\r\n var slewRate = Rate.create({ value: opAmpSlewRate, frequency: null, warningEnabled: warning.slewRate });\r\n var inputRange = Signal.create({ minimum: minimumInput, maximum: vRange.maxInput, warningEnabled: warning.input });\r\n var outputRange = Signal.create({\r\n minimum: vRange.minOutput,\r\n maximum: vRange.maxOutput,\r\n warningEnabled: warning.output,\r\n });\r\n var result = { slewRate: slewRate, inputRange: inputRange, outputRange: outputRange };\r\n return result;\r\n }\r\n\r\n @computed('warning', 'smallestMultiplier', 'vRange', 'refV') get maxSignals() {\r\n var warning = this.warning;\r\n var vRange = this.vRange;\r\n var smallestMultiplier = this.smallestMultiplier;\r\n var refV = vRange.refV;\r\n var result = this.computeMaxSignals(warning, smallestMultiplier, vRange, refV);\r\n return result;\r\n }\r\n\r\n computeMaxSignals(warning, smallestMultiplier, vRange, refV) {\r\n var maxSignalInput = vRange.maxSignalInput;\r\n var maxSignalOutput = vRange.maxSignalOutput;\r\n\r\n var slewRateValue = vRange.maxSignalSlewRate * smallestMultiplier;\r\n var slewRateFrequency = vRange.maxSignalSlewRateFrequency;\r\n var slewRate = Rate.create({\r\n value: slewRateValue,\r\n frequency: slewRateFrequency,\r\n warningEnabled: warning.slewRate,\r\n });\r\n\r\n var minimumInput = refV + -1 * maxSignalInput * smallestMultiplier;\r\n var maximumInput = smallestMultiplier * maxSignalInput + refV;\r\n var inputRangeFrequency = vRange.maxSignalInputFrequency;\r\n var inputRange = Signal.create({\r\n frequency: inputRangeFrequency,\r\n minimum: minimumInput,\r\n maximum: maximumInput,\r\n warningEnabled: warning.input,\r\n });\r\n\r\n var minimumOutput = refV + -1 * maxSignalOutput * smallestMultiplier;\r\n var maximumOutput = smallestMultiplier * maxSignalOutput + refV;\r\n var outputRangeFrequency = vRange.maxSignalOutputFrequency;\r\n var outputRange = Signal.create({\r\n frequency: outputRangeFrequency,\r\n minimum: minimumOutput,\r\n maximum: maximumOutput,\r\n warningEnabled: warning.output,\r\n });\r\n\r\n var result = { slewRate: slewRate, inputRange: inputRange, outputRange: outputRange };\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\n/*Voltage range will be limited by one of the stages in the filter. It can be limited three ways:\r\n- The input signal is beyond the op amp's input range. \r\n- The output signal is beyond the op amp's output range\r\n- The signal exceeds the slew rate the op amp can offer\r\nFor each stage we determine a \"multiplier\" for these three properties. We then look at all the multipliers from all the stages. The smallest one sets the voltage range. \r\nHow we determine multipliers:\r\n- Input: Look at magnitude of the signal coming into the stage (this will be an array of points vs. frequency). Pick the biggest point.\r\n Divide the input range of that stage by that biggest point\r\n- Output: Look at magnitude of the signal coming out of the stage (this will be an array of points vs. frequency). Pick the biggest point.\r\n Divide the output range of the stage by that biggest point\r\n- Slew Rate: Look at the magnitude of the signal coming of the stage.\r\n For each point, compute product of: magnitude, frequency, 2, PI\r\n Get the biggest point from the computation above\r\n Divide slew rate by that biggest point\r\n\r\nPeak to peak input voltage range is then just: \r\nsmallest Multiplier * 2 \r\n\r\ninstantiated by: \r\n \\models\\results\\component-selection.js \r\n \\models\\results\\tolerance.js \r\n \\models\\optimization\\voltage-range.js\r\n\r\nWe have 7 voltage range files total:\r\n2 for voltage range optimization:\r\n \\optimization\\voltage-range.js: main optimization file. However calls the view based optimization files\r\n \\utils\\voltage-range.js: lower level functions used by \\optimization\\voltage-range.js, not used by view files\r\n5 for the voltage range view:\r\n \\results\\sub-results\\voltage-range.js: does the calculations that require all of the stages (this file)\r\n \\results\\sub-results\\voltage-range\\voltage-range-computations-per-stage.js: does the lower level calculations per stage\r\n \\results\\sub-results\\voltage-range-detail.js: does the higher level calculations per stage (these functions called directly by our templates)\r\n \\results\\sub-results\\voltage-range\\rate.js: trivial file to display slew rate\r\n \\results\\sub-results\\voltage-range\\signal.js: trivial file to display input and output range\r\nIf we do some refactoring in the future, a better organization would be 4 files:\r\n- one file for voltage range optimization (ember computed object)\r\n- one file for voltage range view (ember computed object)\r\n- one file for lower level calculations for all stages (pure javascript code) - called by both view & optimization\r\n- one file for lower level calculations per stage (pure javascript code) - called by all stage javascript functions\r\n\r\n*/\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport VoltageRangeDetail from './voltage-range-detail';\r\nimport VoltageRangeComputationPerStage from './voltage-range/voltage-range-computations-per-stage';\r\n\r\n// Set the following constant to true here to collect voltage-range data from the log\r\n// Also see REDUCE_GRANULARITY_FOR_TEST_DATA_COLLECTION in app/models/process-data/frequency to drop the data collected from 262 points to 10 points\r\nconst COLLECT_VOLTAGE_RANGE_DATA = false;\r\n\r\nconst insertBetween = function (string, pattern1, pattern2, insertion) {\r\n let i = string.indexOf(pattern1 + pattern2);\r\n return i < 0 ? string : string.substring(0, i + pattern1.length) + insertion + string.substring(i + pattern1.length);\r\n};\r\n\r\nconst formatStage = function (stage) {\r\n const CRLF = '\\r\\n';\r\n const IND = ' ';\r\n const IND1 = CRLF + IND;\r\n const IND2 = IND1 + IND;\r\n const IND3 = IND2 + IND;\r\n\r\n let logtext = JSON.stringify(stage) + '$$$';\r\n logtext = insertBetween(logtext, '[', '{', CRLF);\r\n\r\n logtext = insertBetween(logtext, '{', '\"input\":{', IND1);\r\n logtext = insertBetween(logtext, '\"input\":{', '\"simCircuit\"', IND2);\r\n logtext = insertBetween(logtext, ',', '\"components\":', IND2);\r\n\r\n logtext = insertBetween(logtext, '\"components\":{', '\"opAmp\":', IND3);\r\n logtext = insertBetween(logtext, ',', '\"c1\":', IND3);\r\n logtext = insertBetween(logtext, ',', '\"r1\":', IND3);\r\n logtext = insertBetween(logtext, ',', '\"l1\":', IND3);\r\n\r\n logtext = insertBetween(logtext, ',', '\"maxFrequency\":', IND2);\r\n logtext = insertBetween(logtext, ',', '\"frequencies\":', IND2);\r\n logtext = insertBetween(logtext, ',', '\"inputVoltages\":', IND2);\r\n\r\n logtext = insertBetween(logtext, '', '},\"intermediate\":{', IND1);\r\n logtext = insertBetween(logtext, ',', '\"intermediate\":{', IND1);\r\n\r\n logtext = insertBetween(logtext, '\"intermediate\":{', '\"outputVoltages\"', IND2);\r\n\r\n logtext = insertBetween(logtext, '', '},\"output\":{', IND1);\r\n logtext = insertBetween(logtext, ',', '\"output\":{', IND1);\r\n\r\n logtext = insertBetween(logtext, '\"output\":{', '\"amplifierSpecs\":', IND2);\r\n logtext = insertBetween(logtext, '\"amplifierSpecs\":{', '\"inputRange\":', IND3);\r\n logtext = insertBetween(logtext, '},', '\"outputRange\":', IND3);\r\n logtext = insertBetween(logtext, '},', '\"slewRate\":', IND3);\r\n logtext = insertBetween(logtext, '}', '},\"maxSignals\":', IND2);\r\n logtext = insertBetween(logtext, ',', '\"maxSignals\":', IND2);\r\n logtext = insertBetween(logtext, '\"maxSignals\":{', '\"inputRange\":', IND3);\r\n logtext = insertBetween(logtext, '},', '\"outputRange\":', IND3);\r\n logtext = insertBetween(logtext, '},', '\"slewRate\":', IND3);\r\n logtext = insertBetween(logtext, '}', '},\"maxGainAllowed\":', IND2);\r\n logtext = insertBetween(logtext, ',', '\"maxGainAllowed\":', IND2);\r\n logtext = insertBetween(logtext, ',', '\"maxInputSignal\":', IND2);\r\n\r\n logtext = insertBetween(logtext, '', '}}$$$', IND1);\r\n\r\n logtext = insertBetween(logtext, '', '}$$$', CRLF);\r\n\r\n return logtext.substring(0, logtext.length - 3);\r\n};\r\n\r\nconst logVoltageRange = function (result, vRanges) {\r\n let data = result.map((d, index) => {\r\n let v = vRanges[index],\r\n o = v._opAmp;\r\n const stage = {\r\n input: {\r\n simCircuit: v.circuitResult.actualStage.selectedImplementation + v.circuitResult.actualStage.filter.name,\r\n components: {\r\n opAmp: {\r\n inHeadroomMinus: o.inHeadroomMinus,\r\n inHeadroomPlus: o.inHeadroomPlus,\r\n name: o.partNumber,\r\n outHeadroomMinus: o.outHeadroomMinus,\r\n outHeadroomPlus: o.outHeadroomPlus,\r\n slewRate: o.slewRate,\r\n gbw: o.gbw,\r\n rOut: o.rOut,\r\n },\r\n c1: v.circuit.c1Value || 0,\r\n c2: v.circuit.c2Value || 0,\r\n c5: v.circuit.c5Value || 0,\r\n r1: v.circuit.r1Value || 0,\r\n r2: v.circuit.r2Value || 0,\r\n r3: v.circuit.r3Value || 0,\r\n r4: v.circuit.r4Value || 0,\r\n r5: v.circuit.r5Value || 0,\r\n r6: v.circuit.r6Value || 0,\r\n l1: v.circuit.l1Value || 0,\r\n l2: v.circuit.l2Value || 0,\r\n },\r\n maxFrequency: v._maxFrequency,\r\n frequencies: v.frequencyArray,\r\n inputVoltages: v._inputMagnitudeArray,\r\n },\r\n intermediate: {\r\n outputVoltages: v.outputMagnitudeArray,\r\n },\r\n output: {\r\n amplifierSpecs: {\r\n inputRange: d.nominalVoltageDisplay.amplifierSpecs.inputRange,\r\n outputRange: d.nominalVoltageDisplay.amplifierSpecs.outputRange,\r\n slewRate: d.nominalVoltageDisplay.amplifierSpecs.slewRate,\r\n },\r\n maxSignals: {\r\n inputRange: d.nominalVoltageDisplay.maxSignals.inputRange,\r\n outputRange: d.nominalVoltageDisplay.maxSignals.outputRange,\r\n slewRate: d.nominalVoltageDisplay.maxSignals.slewRate,\r\n },\r\n maxGainAllowed: d.nominalVoltageDisplay.smallestMultiplier,\r\n maxInputSignal: d.nominalVoltageDisplay.maxInputSignal,\r\n },\r\n };\r\n return formatStage(stage);\r\n });\r\n\r\n console.log('[' + '\\r\\n' + data.join(',\\r\\n') + '\\r\\n' + ']'); //eslint-disable-line no-console\r\n};\r\n\r\nexport default class VoltageRange extends EmberObject {\r\n circuitResults = null;\r\n toleranceInput = null; //used by figure-voltage-range.hbs to determine whether to show worst case specs\r\n vsPlus = null;\r\n vsMinus = null;\r\n //in tolerance tab, each stage has a worst case magnitude envelope, defined by a min array and max array. worstCaseMagnitudes is the max array for each stage\r\n worstCaseMagnitudes = null;\r\n whoAmI = 'app/models/results/sub-results/voltage-range.js';\r\n init() {\r\n //Dummy code to allow setting a breakpoint during init. This allows us to find out what instantiated the object (by looking at the call stack.)\r\n //var whoCreatedMe = \"\";\r\n }\r\n\r\n //Generate the object that does the voltage range computations\r\n @computed('vsMinus', 'vsPlus', 'circuitResults', 'worstCaseMagnitudes') get vRanges() {\r\n var vsMinus = this.vsMinus;\r\n var vsPlus = this.vsPlus;\r\n var circuitResults = this.circuitResults;\r\n return this._createVoltageRangeComputations(vsMinus, vsPlus, circuitResults, null);\r\n }\r\n\r\n //Generate the object that does the voltage range computations for worst case\r\n @computed('vsMinus', 'vsPlus', 'circuitResults', 'worstCaseMagnitudes') get vRangesWorstCase() {\r\n var worstCaseMagnitudes = this.worstCaseMagnitudes;\r\n var vsMinus = this.vsMinus;\r\n var vsPlus = this.vsPlus;\r\n var circuitResults = this.circuitResults;\r\n return this._createVoltageRangeComputations(vsMinus, vsPlus, circuitResults, worstCaseMagnitudes);\r\n }\r\n\r\n //Generate the object that contains what we'll display to the screen\r\n @computed('vsMinus', 'vsPlus', 'circuitResults', 'vRanges', 'vRangesWorstCase') get detailsOfVoltageRange() {\r\n var vsMinus = this.vsMinus;\r\n var vsPlus = this.vsPlus;\r\n var circuitResults = this.circuitResults;\r\n var vRanges = this.vRanges;\r\n var vRangesWorstCase = this.vRangesWorstCase;\r\n var smallestMultiplier = this._computeSmallestMultiplier(vRanges);\r\n if (vRangesWorstCase !== null) {\r\n var smallestMultiplierWorstCase = this._computeSmallestMultiplier(vRangesWorstCase);\r\n }\r\n var result = circuitResults.map((circuitResult, index) => {\r\n var nominalVoltageDisplay = VoltageRangeDetail.create({\r\n stage: circuitResult.actualStage,\r\n smallestMultiplier: smallestMultiplier,\r\n vsMinus: vsMinus,\r\n vsPlus: vsPlus,\r\n vRange: vRanges[index],\r\n });\r\n //only generate our worst case display details for tolerance/next steps, not component selection\r\n if (vRangesWorstCase[0] !== null) {\r\n var worstCaseVoltageDisplay = VoltageRangeDetail.create({\r\n stage: circuitResult.actualStage,\r\n smallestMultiplier: smallestMultiplierWorstCase,\r\n vsMinus: vsMinus,\r\n vsPlus: vsPlus,\r\n vRange: vRangesWorstCase[index],\r\n });\r\n }\r\n return { nominalVoltageDisplay: nominalVoltageDisplay, worstCaseVoltageDisplay: worstCaseVoltageDisplay };\r\n });\r\n\r\n if (COLLECT_VOLTAGE_RANGE_DATA) {\r\n logVoltageRange(result, vRanges);\r\n }\r\n return result;\r\n }\r\n\r\n //called by both figure-voltage-range.hbs as well as our voltage range optimization function\r\n //This is the number we display in the upper left of voltage range view.\r\n //Called for both components tab as well as the nominal value in the tolerances tab\r\n @computed('detailsOfVoltageRange') get maxInputSignalPossible() {\r\n var detailsOfVoltageRange = this.detailsOfVoltageRange;\r\n var result = detailsOfVoltageRange[0].nominalVoltageDisplay.maxInputSignal;\r\n return result;\r\n }\r\n\r\n //exactly the same as maxInputSignalPossible, except it's a worst case number for the tolerances tab\r\n @computed('detailsOfVoltageRange') get worstCaseInputSignal() {\r\n var detailsOfVoltageRange = this.detailsOfVoltageRange;\r\n var result = detailsOfVoltageRange[0].worstCaseVoltageDisplay.maxInputSignal;\r\n return result;\r\n }\r\n\r\n //instantiate an array of voltage-range-detail objects - one per stage\r\n _createVoltageRangeComputations(vsMinus, vsPlus, circuitResults, worstCaseMagnitudes) {\r\n var previousStageOutputMagnitude = null;\r\n var result = circuitResults.map((circuitResult, index) => {\r\n //will only have worstCaseMagnitudes in tolerance/next steps, not component selection\r\n if (worstCaseMagnitudes === null) {\r\n var worstCaseMagnitude = null;\r\n } else {\r\n worstCaseMagnitude = worstCaseMagnitudes[index];\r\n }\r\n var voltageRangeStage = VoltageRangeComputationPerStage.create({\r\n vsMinus: vsMinus,\r\n vsPlus: vsPlus,\r\n circuitResult: circuitResult,\r\n previousStageOutputMagnitude: previousStageOutputMagnitude,\r\n worstCaseMagnitude: worstCaseMagnitude,\r\n });\r\n previousStageOutputMagnitude = voltageRangeStage.outputMagnitudeArray;\r\n return voltageRangeStage;\r\n });\r\n return result;\r\n }\r\n\r\n //Look at input, output, and slew rate limits for all of our stages. Pick the one that limits the voltage range the most\r\n _computeSmallestMultiplier(vRanges) {\r\n var i;\r\n var inputMultipliers = [],\r\n outputMultipliers = [],\r\n slewRateMultipliers = [];\r\n for (i = 0; i < vRanges.length; i++) {\r\n inputMultipliers[i] = vRanges[i].multiplierSignalInput;\r\n outputMultipliers[i] = vRanges[i].multiplierSignalOutput;\r\n slewRateMultipliers[i] = vRanges[i].multiplierSignalSlewRate;\r\n }\r\n var minimumInputMultiplier = Math.min.apply(Math, inputMultipliers);\r\n var minimumOutputMultiplier = Math.min.apply(Math, outputMultipliers);\r\n var minimumSlewRateMultiplier = Math.min.apply(Math, slewRateMultipliers);\r\n var result = Math.min(minimumInputMultiplier, minimumOutputMultiplier, minimumSlewRateMultiplier);\r\n\r\n return result;\r\n }\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport default class VoltageRangeRate extends EmberObject {\r\n value; // double\r\n frequency; // double\r\n warningEnabled; // boolean\r\n}\r\n","import EmberObject from '@ember/object';\r\n\r\nexport default class VoltageRageSignal extends EmberObject {\r\n minimum; // double\r\n maximum; // double\r\n frequency; // double\r\n warningEnabled; // boolean\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\n/*This file does lower level voltage range calculations that are needed per stage. It should really be turned into functions rather \r\n than an object and combined with utils\\voltage-range, which currently duplicates some of the same functionality.\r\n See documentation at the top of \\results\\sub-results\\voltage-range.js for more details\r\n*/\r\n\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport OpAmpSelection from '../../../component-selector/op-amp-selection';\r\nimport * as CommonUtils from '../../../../utils/common';\r\n\r\nexport default class VoltageRangeComputationsPerStage extends EmberObject {\r\n vsPlus;\r\n vsMinus;\r\n circuitResult;\r\n previousStageOutputMagnitude;\r\n worstCaseMagnitude; //only used for worst case tolerance\r\n whoAmI = 'app/models/results/sub-results/voltage-range/voltage-range-computations-per-stage.js';\r\n frequencyArray;\r\n circuit;\r\n filter;\r\n stopbandFrequency;\r\n stageFp;\r\n opAmp;\r\n opAmpSource;\r\n init() {\r\n //Dummy code to allow setting a breakpoint during init. This allows us to find out what instantiated the object (by looking at the call stack.)\r\n //var whoCreatedMe = \"\";\r\n super.init();\r\n if (!CommonUtils.isNullOrUndefined(this.circuitResult)) {\r\n set(this, 'frequencyArray', this.circuitResult.frequencyArray);\r\n set(this, 'circuit', this.circuitResult.circuit);\r\n set(this, 'filter', this.circuitResult.actualStage.targetStage.filter);\r\n set(this, 'stopbandFrequency', this.circuitResult.actualStage.stopbandFrequency);\r\n set(this, 'stageFp', this.circuitResult.actualStage.targetStage.stageFp);\r\n set(this, 'opAmp', this.circuitResult.actualStage.opAmp);\r\n set(this, 'opAmpSource', this.circuitResult.actualStage.opAmpSource);\r\n }\r\n }\r\n\r\n //The magnitude waveform coming into the stage (i.e. output of previous stages)\r\n @computed('previousStageOutputMagnitude', '_maxFrequency', 'frequencyArray') get _inputMagnitudeArray() {\r\n var inputMagnitudeArray = [];\r\n var previousStageOutputMagnitude = this.previousStageOutputMagnitude;\r\n var frequencyArray = this.frequencyArray;\r\n if (previousStageOutputMagnitude === null) {\r\n inputMagnitudeArray = frequencyArray.map(() => 1);\r\n } else {\r\n inputMagnitudeArray = previousStageOutputMagnitude;\r\n }\r\n return inputMagnitudeArray;\r\n }\r\n\r\n //The magnitude waveform coming out of the stage (output of previous stages * this stage's transfer function).\r\n @computed('circuitResult.magnitude', 'inputMagnitudeArray', '_maxFrequency', 'frequencyArray')\r\n get outputMagnitudeArray() {\r\n var inputMagnitudeArray = this._inputMagnitudeArray;\r\n var maxFrequency = this._maxFrequency;\r\n var frequencyArray = this.frequencyArray;\r\n var worstCaseMagnitude = this.worstCaseMagnitude;\r\n var stageTransferFunction = worstCaseMagnitude !== null ? worstCaseMagnitude : this.circuitResult.magnitude;\r\n var outputMagnitudeArray = inputMagnitudeArray.map((inputMagnitude, index) => {\r\n return inputMagnitude * stageTransferFunction[index];\r\n });\r\n outputMagnitudeArray = this._blankOutHighFrequencies(maxFrequency, frequencyArray, outputMagnitudeArray);\r\n return outputMagnitudeArray;\r\n }\r\n\r\n //If a section of the waveform is in the stopband area, we don't care if that waveform section gets clipped,\r\n //so set that section of the waveform to zero when we're checking our limits\r\n _blankOutHighFrequencies(maxFrequency, frequencyArray, magnitudeArray) {\r\n var blankedArray = [];\r\n for (var i = 0; i < magnitudeArray.length; i++) {\r\n if (frequencyArray[i] <= maxFrequency) {\r\n blankedArray[i] = magnitudeArray[i];\r\n } else {\r\n blankedArray[i] = 0;\r\n }\r\n }\r\n return blankedArray;\r\n }\r\n\r\n //max frequency above which we blank out the magnitudes, since we don't care about clipping above that point\r\n @computed('filter', 'stopbandFrequency', 'stageFp', 'frequencyArray') get _maxFrequency() {\r\n var filter = this.filter;\r\n var stopbandFrequency = this.stopbandFrequency;\r\n var stageFp = this.stageFp;\r\n var frequencyArray = this.frequencyArray;\r\n\r\n var result = filter.getMaxFrequency(stopbandFrequency, frequencyArray, stageFp);\r\n return result;\r\n }\r\n\r\n @computed('vsPlus', 'vsMinus') get refV() {\r\n var vsMinus = this.vsMinus;\r\n var vsPlus = this.vsPlus;\r\n var result = 0;\r\n\r\n if (vsMinus === 0) {\r\n result = vsPlus / 2;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n //op amp limits section\r\n @computed('opAmp', 'opAmpSource') get _opAmp() {\r\n var opAmpName = this.opAmp;\r\n var opAmpData = this.opAmpSource.getOpAmp(opAmpName);\r\n //convert from string storage into numerics\r\n var opAmp = OpAmpSelection.create({ data: opAmpData });\r\n return opAmp;\r\n }\r\n\r\n @computed('vsPlus', '_opAmp.inHeadroomPlus') get maxInput() {\r\n var vsPlus = this.vsPlus;\r\n var inHeadroomPlus = this._opAmp.inHeadroomPlus;\r\n var result = vsPlus - inHeadroomPlus;\r\n return result;\r\n }\r\n\r\n @computed('vsMinus', '_opAmp.inHeadroomMinus') get minInput() {\r\n var vsMinus = this.vsMinus;\r\n var inHeadroomMinus = this._opAmp.inHeadroomMinus;\r\n var result = vsMinus + inHeadroomMinus;\r\n return result;\r\n }\r\n\r\n @computed('vsPlus', '_opAmp.outHeadroomPlus') get maxOutput() {\r\n var vsPlus = this.vsPlus;\r\n var outHeadroomPlus = this._opAmp.outHeadroomPlus;\r\n var result = vsPlus - outHeadroomPlus;\r\n return result;\r\n }\r\n\r\n @computed('vsMinus', '_opAmp.outHeadroomMinus') get minOutput() {\r\n var vsMinus = this.vsMinus;\r\n var outHeadroomMinus = this._opAmp.outHeadroomMinus;\r\n var result = vsMinus + outHeadroomMinus;\r\n return result;\r\n }\r\n\r\n @computed('refV', 'maxInput', 'minInput') get _inputRoom() {\r\n var refV = this.refV;\r\n var maxInput = this.maxInput;\r\n var minInput = this.minInput;\r\n var posInRoom = maxInput - refV;\r\n var negInRoom = refV - minInput;\r\n var result = Math.min(posInRoom, negInRoom);\r\n return result;\r\n }\r\n\r\n @computed('refV', 'maxOutput', 'minOutput') get _outputRoom() {\r\n var refV = this.refV;\r\n var maxOutput = this.maxOutput;\r\n var minOutput = this.minOutput;\r\n var posOutRoom = maxOutput - refV;\r\n var negOutRoom = refV - minOutput;\r\n var result = Math.min(posOutRoom, negOutRoom);\r\n return result;\r\n }\r\n\r\n @computed('outputMagnitudeArray', 'frequencyArray') get _slewRates() {\r\n var outputMagnitudeArray = this.outputMagnitudeArray;\r\n var frequencyArray = this.frequencyArray;\r\n\r\n var ONE_MILLION = 1000000;\r\n var result = [];\r\n\r\n for (var i = 0; i < outputMagnitudeArray.length; i++) {\r\n result.push((outputMagnitudeArray[i] * frequencyArray[i] * 2 * Math.PI) / ONE_MILLION);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n //largest magnitude point in the input magnitude\r\n @computed('_inputMagnitudeArray') get maxSignalInput() {\r\n var _inputMagnitudeArray = this._inputMagnitudeArray;\r\n var result = Math.max.apply(Math, _inputMagnitudeArray);\r\n return result;\r\n }\r\n //largest magnitude point in the output magnitude\r\n @computed('outputMagnitudeArray') get maxSignalOutput() {\r\n var outputMagnitudeArray = this.outputMagnitudeArray;\r\n var result = Math.max.apply(Math, outputMagnitudeArray);\r\n return result;\r\n }\r\n\r\n //fastest slewing point in the output magnitude\r\n @computed('_slewRates') get maxSignalSlewRate() {\r\n var _slewRates = this._slewRates;\r\n var result = Math.max.apply(Math, _slewRates);\r\n return result;\r\n }\r\n //The frequency of the fastest slewing output magnitude point. We calculate here because we report on the screen to the user.\r\n @computed('_slewRates', 'maxSignalSlewRate', 'frequencyArray') get maxSignalSlewRateFrequency() {\r\n var _slewRates = this._slewRates;\r\n var maxSignalSlewRate = this.maxSignalSlewRate;\r\n var frequencyArray = this.frequencyArray;\r\n var indexForMaxSlewRate = _slewRates.indexOf(maxSignalSlewRate);\r\n var result = frequencyArray[indexForMaxSlewRate];\r\n return result;\r\n }\r\n\r\n //The frequency of the biggest input magnitude point. We calculate here because we report on the screen to the user.\r\n @computed('_inputMagnitudeArray', 'maxSignalInput', 'frequencyArray') get maxSignalInputFrequency() {\r\n var _inputMagnitudeArray = this._inputMagnitudeArray;\r\n var maxSignalInput = this.maxSignalInput;\r\n var frequencyArray = this.frequencyArray;\r\n var index = _inputMagnitudeArray.indexOf(maxSignalInput);\r\n var result = frequencyArray[index];\r\n return result;\r\n }\r\n //The frequency of the biggest output magnitude point. We calculate here because we report on the screen to the user.\r\n @computed('outputMagnitudeArray', 'maxSignalOutput', 'frequencyArray') get maxSignalOutputFrequency() {\r\n var outputMagnitudeArray = this.outputMagnitudeArray;\r\n var maxSignalOutput = this.maxSignalOutput;\r\n var frequencyArray = this.frequencyArray;\r\n var index = outputMagnitudeArray.indexOf(maxSignalOutput);\r\n var result = frequencyArray[index];\r\n return result;\r\n }\r\n\r\n //multiplier section\r\n @computed('_inputRoom', 'maxSignalInput') get multiplierSignalInput() {\r\n var _inputRoom = this._inputRoom;\r\n var maxSignalInput = this.maxSignalInput;\r\n var result = _inputRoom / maxSignalInput;\r\n return result;\r\n }\r\n\r\n @computed('_outputRoom', 'maxSignalOutput') get multiplierSignalOutput() {\r\n var _outputRoom = this._outputRoom;\r\n var maxSignalOutput = this.maxSignalOutput;\r\n var result = _outputRoom / maxSignalOutput;\r\n return result;\r\n }\r\n\r\n @computed('_opAmp.slewRate', 'maxSignalSlewRate') get multiplierSignalSlewRate() {\r\n var maxSignalSlewRate = this.maxSignalSlewRate;\r\n var slewRate = this._opAmp.slewRate;\r\n var result = slewRate / maxSignalSlewRate;\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport * as ConversionUtils from '../utils/conversion';\r\nimport MathUtils from '../utils/math';\r\nimport * as ArrayUtils from '../utils/array';\r\nimport * as CommonUtils from '../../utils/common';\r\nimport CircuitResults from './circuit-results';\r\nimport FilterConstants from '../../filter-constants';\r\nimport CircuitDetails from './sub-results/circuit-details';\r\nimport StageDetails from './sub-results/stage-details';\r\nimport VoltageRange from './sub-results/voltage-range';\r\nimport Noise from './sub-results/noise';\r\nimport * as CircuitUtils from '../utils/circuit';\r\nimport * as ResultsUtils from '../utils/results';\r\n\r\n/**\r\n * Should contain data that will be used for output or computing data for the next step in the wizard.\r\n */\r\nexport default class ToleranceResults extends EmberObject {\r\n specifications = null;\r\n components = null;\r\n toleranceInput = null;\r\n specificationsInput = null;\r\n frequencyArray = null;\r\n friendlyFrequencyArray = null;\r\n circuits = null;\r\n needReferenceStage = null;\r\n adcBandwidth = null;\r\n noiseFrequencyArray = null;\r\n power = null;\r\n init() {\r\n super.init();\r\n if (!CommonUtils.isNullOrUndefined(this.components)) {\r\n set(this, 'frequencyArray', this.components.frequencyArray);\r\n set(this, 'friendlyFrequencyArray', this.components.friendlyFrequencyArray);\r\n set(this, 'circuits', this.components.circuits);\r\n this.needReferenceStage = this.components.needReferenceStage;\r\n set(this, 'adcBandwidth', this.components.adcBandwidth);\r\n set(this, 'noiseFrequencyArray', this.components.noiseFrequencyArray);\r\n this.power = this.components.power;\r\n }\r\n }\r\n\r\n //TODO: this might be better if there's a function\r\n @computed('circuits', 'toleranceInput') get commercialCircuits() {\r\n var result = this.circuits.map((circuit) => {\r\n return CircuitUtils.toCommercialCircuit(circuit, this.toleranceInput);\r\n });\r\n return result;\r\n }\r\n\r\n //Used for testing\r\n @computed('components.actualStages', 'commercialCircuits', 'toleranceInput') get bigHugeCircuit() {\r\n let actualStages = this.components.actualStages;\r\n let commercialCircuits = this.commercialCircuits;\r\n let toleranceInput = this.toleranceInput;\r\n let result = [];\r\n for (let i = 0; i < actualStages.length; i++) {\r\n let implementation = actualStages[i].implementation;\r\n let commercialCircuit = commercialCircuits[i];\r\n var bigHuge = implementation.createBigHugeCircuitGroup(commercialCircuit, toleranceInput);\r\n result.push(bigHuge);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('components', 'commercialCircuits', 'toleranceInput', 'frequencyArray') get interestingCircuitResults() {\r\n let actualStages = this.components.actualStages;\r\n let adcBandwidth = this.components.noiseInput.adcBandwidth;\r\n let commercialCircuits = this.commercialCircuits;\r\n let toleranceInput = this.toleranceInput;\r\n let frequencyArray = this.frequencyArray;\r\n let result = this._createInterestingCircuitResults(\r\n actualStages,\r\n commercialCircuits,\r\n toleranceInput,\r\n adcBandwidth,\r\n frequencyArray,\r\n );\r\n return result;\r\n }\r\n\r\n @computed('components', 'commercialCircuits', 'toleranceInput', 'friendlyFrequencyArray')\r\n get interestingCircuitResultsFriendly() {\r\n let actualStages = this.components.actualStages;\r\n let adcBandwidth = this.components.noiseInput.adcBandwidth;\r\n let commercialCircuits = this.commercialCircuits;\r\n let toleranceInput = this.toleranceInput;\r\n let frequencyArray = this.friendlyFrequencyArray;\r\n let result = this._createInterestingCircuitResults(\r\n actualStages,\r\n commercialCircuits,\r\n toleranceInput,\r\n adcBandwidth,\r\n frequencyArray,\r\n );\r\n return result;\r\n }\r\n\r\n @computed('commercialCircuits', 'components', 'friendlyFrequencyArray', 'toleranceInput') get circuitResults() {\r\n var commercialCircuits = this.commercialCircuits;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var actualStages = this.components.actualStages;\r\n let adcBandwidth = this.components.noiseInput.adcBandwidth;\r\n let toleranceInput = this.toleranceInput;\r\n var circuitResults = this._createNominalCircuitResults(\r\n commercialCircuits,\r\n actualStages,\r\n adcBandwidth,\r\n frequencyArray,\r\n toleranceInput,\r\n );\r\n\r\n return circuitResults;\r\n }\r\n\r\n @computed('components', 'commercialCircuits', 'toleranceInput', 'noiseFrequencyArray')\r\n get noiseInterestingCircuitResults() {\r\n let actualStages = this.components.actualStages;\r\n let adcBandwidth = this.components.noiseInput.adcBandwidth;\r\n let commercialCircuits = this.commercialCircuits;\r\n let toleranceInput = this.toleranceInput;\r\n let noiseFrequencyArray = this.noiseFrequencyArray;\r\n let result = this._createInterestingCircuitResults(\r\n actualStages,\r\n commercialCircuits,\r\n toleranceInput,\r\n adcBandwidth,\r\n noiseFrequencyArray,\r\n );\r\n return result;\r\n }\r\n\r\n @computed('commercialCircuits', 'components', 'noiseFrequencyArray', 'toleranceInput') get noiseCircuitResults() {\r\n var commercialCircuits = this.commercialCircuits;\r\n var noiseFrequencyArray = this.noiseFrequencyArray;\r\n var actualStages = this.components.actualStages;\r\n let adcBandwidth = this.components.noiseInput.adcBandwidth;\r\n let toleranceInput = this.toleranceInput;\r\n var circuitResults = this._createNominalCircuitResults(\r\n commercialCircuits,\r\n actualStages,\r\n adcBandwidth,\r\n noiseFrequencyArray,\r\n toleranceInput,\r\n );\r\n\r\n return circuitResults;\r\n }\r\n\r\n @computed('circuitResults') get _nominalMagnitudes() {\r\n let circuitResults = this.circuitResults;\r\n let magnitudes = circuitResults.map((circuitResult) => {\r\n return circuitResult.magnitude;\r\n });\r\n\r\n return magnitudes;\r\n }\r\n\r\n @computed('interestingCircuitResultsFriendly') get _interestingMagnitudes() {\r\n let interestingCircuitMagnitudes = this.interestingCircuitResultsFriendly.map((stage) => {\r\n return stage.map((interestingCircuit) => {\r\n return interestingCircuit.magnitude;\r\n });\r\n });\r\n\r\n return interestingCircuitMagnitudes;\r\n }\r\n\r\n @computed('_interestingMagnitudes', '_nominalMagnitudes') get _magnitudes() {\r\n let interestingCircuitMagnitudes = this._interestingMagnitudes;\r\n let magnitudes = this._nominalMagnitudes;\r\n let { minimumValues, maximumValues } = ArrayUtils.getMinimumAndMaximumArray(\r\n interestingCircuitMagnitudes,\r\n magnitudes,\r\n );\r\n let minimumMagnitude = ResultsUtils.getMagnitudeArray(minimumValues);\r\n let maximumMagnitude = ResultsUtils.getMagnitudeArray(maximumValues);\r\n let nominalMagnitude = ResultsUtils.getMagnitudeArray(magnitudes);\r\n return { nominalMagnitude, minimumMagnitude, maximumMagnitude };\r\n }\r\n\r\n @computed('_magnitudes', 'friendlyFrequencyArray') get magnitudeDb() {\r\n var { nominalMagnitude, minimumMagnitude, maximumMagnitude } = this._magnitudes;\r\n var nominalDb = ConversionUtils.VVarrtoDBarr(nominalMagnitude);\r\n var minimumDb = ConversionUtils.VVarrtoDBarr(minimumMagnitude);\r\n var maximumDb = ConversionUtils.VVarrtoDBarr(maximumMagnitude);\r\n\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var dataPoints = ArrayUtils.joinToleranceArrays(frequencyArray, nominalDb, minimumDb, maximumDb);\r\n\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n\r\n var specInputs = this.specificationsInput;\r\n var gainDB =\r\n specInputs.gainUnit === FilterConstants.gainUnits.db ? specInputs.gain : ConversionUtils.VVtoDB(specInputs.gain);\r\n limits.ymin = gainDB + (specInputs.stopbandAttenuation - 20);\r\n limits.ymax = gainDB + 10;\r\n\r\n return { data: dataPoints, limits: limits };\r\n }\r\n\r\n @computed('_magnitudes', 'friendlyFrequencyArray') get magnitudeVV() {\r\n var { nominalMagnitude, minimumMagnitude, maximumMagnitude } = this._magnitudes;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var dataPoints = ArrayUtils.joinToleranceArrays(\r\n frequencyArray,\r\n nominalMagnitude,\r\n minimumMagnitude,\r\n maximumMagnitude,\r\n );\r\n\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n limits.ymax += 0.2; // give 0.2 V/V headroom\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitResults', 'interestingCircuitResultsFriendly') get _phase() {\r\n var phases = this.circuitResults.map((item) => {\r\n return item.phase;\r\n });\r\n var interestingCircuitPhase = this.interestingCircuitResultsFriendly.map((stage) => {\r\n return stage.map((interestingCircuit) => {\r\n return interestingCircuit.phase;\r\n });\r\n });\r\n\r\n var { minimumValues, maximumValues } = ArrayUtils.getMinimumAndMaximumArray(interestingCircuitPhase, phases);\r\n let minimumPhase = ResultsUtils.getPhaseArray(minimumValues);\r\n let maximumPhase = ResultsUtils.getPhaseArray(maximumValues);\r\n let nominalPhase = ResultsUtils.getPhaseArray(phases);\r\n return { nominalPhase, minimumPhase, maximumPhase };\r\n }\r\n\r\n @computed('_phase', 'friendlyFrequencyArray') get phaseDegrees() {\r\n var { nominalPhase, minimumPhase, maximumPhase } = this._phase;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var nominal = ConversionUtils.radianArrayToDegreeArray(nominalPhase);\r\n var minimum = ConversionUtils.radianArrayToDegreeArray(minimumPhase);\r\n var maximum = ConversionUtils.radianArrayToDegreeArray(maximumPhase);\r\n var dataPoints = ArrayUtils.joinToleranceArrays(frequencyArray, nominal, minimum, maximum);\r\n\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var newYmax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var newYmin = limits.ymin - (limits.ymax - limits.ymin) / 10;\r\n limits.ymax = newYmax;\r\n limits.ymin = newYmin;\r\n\r\n var result = { data: dataPoints, limits: limits };\r\n\r\n return result;\r\n }\r\n\r\n @computed('_phase', 'friendlyFrequencyArray') get phaseRadians() {\r\n var { nominalPhase, minimumPhase, maximumPhase } = this._phase;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var dataPoints = ArrayUtils.joinToleranceArrays(frequencyArray, nominalPhase, minimumPhase, maximumPhase);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var newYmax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var newYmin = limits.ymin - (limits.ymax - limits.ymin) / 10;\r\n limits.ymax = newYmax;\r\n limits.ymin = newYmin;\r\n\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitResults', 'interestingCircuitResultsFriendly', 'friendlyFrequencyArray') get groupDelay() {\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var groupDelayFrequency = [];\r\n var nominalGroupDelayArray = this.circuitResults.map((item) => {\r\n let phase = item.phase;\r\n let { groupDelayArray, newFrequencyAxis } = ConversionUtils.groupDelay(phase, frequencyArray);\r\n groupDelayFrequency = newFrequencyAxis;\r\n return groupDelayArray;\r\n });\r\n\r\n var interestingCircuitGroupDelay = this.interestingCircuitResultsFriendly.map((stage) => {\r\n return stage.map((interestingCircuit) => {\r\n let phase = interestingCircuit.phase;\r\n return ConversionUtils.groupDelay(phase, frequencyArray).groupDelayArray;\r\n });\r\n });\r\n\r\n var { minimumValues, maximumValues } = ArrayUtils.getMinimumAndMaximumArray(\r\n interestingCircuitGroupDelay,\r\n nominalGroupDelayArray,\r\n );\r\n let minimumGroupDelay = ArrayUtils.addEnvelope(minimumValues);\r\n let maximumGroupDelay = ArrayUtils.addEnvelope(maximumValues);\r\n let nominalGroupDelay = ArrayUtils.addEnvelope(nominalGroupDelayArray);\r\n\r\n var dataPoints = ArrayUtils.joinToleranceArrays(\r\n groupDelayFrequency,\r\n nominalGroupDelay,\r\n minimumGroupDelay,\r\n maximumGroupDelay,\r\n );\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n limits.ymax = limits.ymax + (limits.ymax - limits.ymin) / 10;\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('_phase', 'friendlyFrequencyArray') get phaseDelay() {\r\n var { nominalPhase, minimumPhase, maximumPhase } = this._phase;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var nominalPhaseDelay = ConversionUtils.phaseDelay(nominalPhase, frequencyArray);\r\n var minimumPhaseDelay = ConversionUtils.phaseDelay(minimumPhase, frequencyArray);\r\n var maximumPhaseDelay = ConversionUtils.phaseDelay(maximumPhase, frequencyArray);\r\n var dataPoints = ArrayUtils.joinToleranceArrays(\r\n frequencyArray,\r\n nominalPhaseDelay,\r\n minimumPhaseDelay,\r\n maximumPhaseDelay,\r\n );\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitResults') get nominalStepResponse() {\r\n var circuitResults = this.circuitResults;\r\n var stepValues = circuitResults[0].stepResponse;\r\n\r\n if (circuitResults.length > 1) {\r\n for (var i = 1; i < circuitResults.length; i++) {\r\n var impulseValues = circuitResults[i].impulseResponse;\r\n stepValues = MathUtils.convolve(stepValues, impulseValues);\r\n }\r\n }\r\n\r\n return stepValues;\r\n }\r\n\r\n @computed('components', 'nominalStepResponse') get stepResponse() {\r\n var stepResponse = this.nominalStepResponse;\r\n var timeAxis = this.components.timeAxis;\r\n var dataPoints = ArrayUtils.joinArrays(timeAxis, stepResponse);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var overreach = (limits.ymax - limits.ymin) / 10;\r\n limits.ymax = limits.ymax + overreach;\r\n if (limits.ymin < 0) {\r\n limits.ymin = limits.ymin - overreach;\r\n }\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitResults', 'interestingCircuitResultsFriendly') get _inputImpedanceMagnitude() {\r\n var firstCircuitResult = this.circuitResults[0];\r\n var nominalInputImpedanceMagnitude = firstCircuitResult.inputImpedanceMagnitude;\r\n\r\n var interestingCircuitInputImpedanceMagnitude = this.interestingCircuitResultsFriendly.map((stage) => {\r\n return stage.map((interestingCircuit) => {\r\n return interestingCircuit.inputImpedanceMagnitude;\r\n });\r\n });\r\n\r\n // Need to be array as _getMinimumAndMaximumArray takes an array of arrays\r\n var firstCircuitValues = [interestingCircuitInputImpedanceMagnitude[0]];\r\n var { minimumValues, maximumValues } = ArrayUtils.getMinimumAndMaximumArray(firstCircuitValues, [\r\n nominalInputImpedanceMagnitude,\r\n ]);\r\n var minimumInputImpedanceMagnitude = minimumValues[0];\r\n var maximumInputImpedanceMagnitude = maximumValues[0];\r\n return { nominalInputImpedanceMagnitude, minimumInputImpedanceMagnitude, maximumInputImpedanceMagnitude };\r\n }\r\n\r\n @computed('_inputImpedanceMagnitude', 'friendlyFrequencyArray') get inputImpedanceMagnitude() {\r\n var { nominalInputImpedanceMagnitude, minimumInputImpedanceMagnitude, maximumInputImpedanceMagnitude } =\r\n this._inputImpedanceMagnitude;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var dataPoints = ArrayUtils.joinToleranceArrays(\r\n frequencyArray,\r\n nominalInputImpedanceMagnitude,\r\n minimumInputImpedanceMagnitude,\r\n maximumInputImpedanceMagnitude,\r\n );\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var newYmax = limits.ymax * 1.5;\r\n var newYmin = limits.ymin * 0.5;\r\n limits.ymax = newYmax;\r\n limits.ymin = newYmin;\r\n\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed('circuitResults', 'interestingCircuitResultsFriendly') get _inputImpedancePhase() {\r\n var firstCircuitResult = this.circuitResults[0];\r\n var nominalInputImpedancePhase = firstCircuitResult.inputImpedancePhase;\r\n\r\n var interestingCircuitInputImpedancePhase = this.interestingCircuitResultsFriendly.map((stage) => {\r\n return stage.map((interestingCircuit) => {\r\n return interestingCircuit.inputImpedancePhase;\r\n });\r\n });\r\n\r\n // Need to be array as _getMinimumAndMaximumArray takes an array of arrays\r\n var firstCircuitValues = [interestingCircuitInputImpedancePhase[0]];\r\n var { minimumValues, maximumValues } = ArrayUtils.getMinimumAndMaximumArray(firstCircuitValues, [\r\n nominalInputImpedancePhase,\r\n ]);\r\n var minimumInputImpedancePhase = minimumValues[0];\r\n var maximumInputImpedancePhase = maximumValues[0];\r\n return { nominalInputImpedancePhase, minimumInputImpedancePhase, maximumInputImpedancePhase };\r\n }\r\n\r\n @computed('_inputImpedancePhase', 'friendlyFrequencyArray') get inputImpedancePhase() {\r\n var { nominalInputImpedancePhase, minimumInputImpedancePhase, maximumInputImpedancePhase } =\r\n this._inputImpedancePhase;\r\n var frequencyArray = this.friendlyFrequencyArray;\r\n var dataPoints = ArrayUtils.joinToleranceArrays(\r\n frequencyArray,\r\n nominalInputImpedancePhase,\r\n minimumInputImpedancePhase,\r\n maximumInputImpedancePhase,\r\n );\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n\r\n @computed(\r\n 'components',\r\n 'commercialCircuits',\r\n 'noiseFrequencyArray',\r\n 'adcBandwidth',\r\n 'interestingCircuitResultsFriendly',\r\n 'circuitResults',\r\n 'friendlyFrequencyArray',\r\n )\r\n get noise() {\r\n console.time('tol-noise'); //eslint-disable-line no-console\r\n let adcBandwidth = this.components.noiseInput.adcBandwidth;\r\n let noiseFrequencyArray = this.noiseFrequencyArray;\r\n let frequencyArray = this.friendlyFrequencyArray;\r\n let isSameFrequency = noiseFrequencyArray.every((item, index) => {\r\n return item === frequencyArray[index];\r\n });\r\n let interestingCircuitResults = isSameFrequency\r\n ? this.interestingCircuitResultsFriendly\r\n : this.noiseInterestingCircuitResults;\r\n let circuitResults = isSameFrequency ? this.circuitResults : this.noiseCircuitResults;\r\n var minArray = [];\r\n var maxArray = [];\r\n var nominalArray = [];\r\n let commercialMagnitude = circuitResults.map((item) => {\r\n return item.magnitude;\r\n });\r\n let commercialNoise = circuitResults.map((item) => {\r\n return item.noiseGroup.noiseReferredToOutputArray;\r\n });\r\n let allInterestingMagnitude = interestingCircuitResults.map((interestingCircuitResult) => {\r\n return interestingCircuitResult.map((item) => {\r\n return item.magnitude;\r\n });\r\n });\r\n\r\n let allInterestingNoise = interestingCircuitResults.map((interestingCircuitResult) => {\r\n return interestingCircuitResult.map((item) => {\r\n return item.noiseGroup.noiseReferredToOutputArray;\r\n });\r\n });\r\n\r\n for (let i = 0; i < circuitResults.length; i++) {\r\n var oneStageNoise = commercialNoise[i];\r\n var magnitude = commercialMagnitude[i];\r\n\r\n if (i === 0) {\r\n oneStageNoise.forEach(() => {\r\n minArray.push(0);\r\n maxArray.push(0);\r\n nominalArray.push(0);\r\n });\r\n }\r\n\r\n let comparisonNominal = this._addNoise(\r\n this._noiseToleranceMultiplyArrays(nominalArray, magnitude),\r\n oneStageNoise,\r\n );\r\n let comparisonMin = this._addNoise(this._noiseToleranceMultiplyArrays(minArray, magnitude), oneStageNoise);\r\n let comparisonMax = this._addNoise(this._noiseToleranceMultiplyArrays(maxArray, magnitude), oneStageNoise);\r\n\r\n var interestingCircuitResult = interestingCircuitResults[i];\r\n let interestingMagnitude = allInterestingMagnitude[i];\r\n let interestingNoise = allInterestingNoise[i];\r\n for (let j = 0; j < interestingCircuitResult.length; j++) {\r\n let oneStageNoiseInteresting = interestingNoise[j];\r\n let oneStageMagnitudeInteresting = interestingMagnitude[j];\r\n\r\n //create three arrays based on our interesting component object\r\n //let tempNominal = this._addNoise(this._noiseToleranceMultiplyArrays(nominalArray, oneStageMagnitudeInteresting), oneStageNoiseInteresting);\r\n let tempMin = this._addNoise(\r\n this._noiseToleranceMultiplyArrays(minArray, oneStageMagnitudeInteresting),\r\n oneStageNoiseInteresting,\r\n );\r\n let tempMax = this._addNoise(\r\n this._noiseToleranceMultiplyArrays(maxArray, oneStageMagnitudeInteresting),\r\n oneStageNoiseInteresting,\r\n );\r\n\r\n //if any point in the tempMax or tempMin are outside of our existing envelope, replace the envelope point with temp point\r\n for (var k = 0; k < tempMin.length; k++) {\r\n if (tempMin[k] < comparisonMin[k]) {\r\n comparisonMin[k] = tempMin[k];\r\n }\r\n if (tempMax[k] > comparisonMax[k]) {\r\n comparisonMax[k] = tempMax[k];\r\n }\r\n }\r\n }\r\n\r\n minArray = CommonUtils.clone(comparisonMin);\r\n maxArray = CommonUtils.clone(comparisonMax);\r\n nominalArray = CommonUtils.clone(comparisonNominal);\r\n }\r\n\r\n var result = Noise.create({\r\n nominalNoiseArray: nominalArray,\r\n minimumNoiseArray: minArray,\r\n maximumNoiseArray: maxArray,\r\n frequencyArray: frequencyArray,\r\n adcBandwidth: adcBandwidth,\r\n noiseFrequencyArray: noiseFrequencyArray,\r\n });\r\n console.timeEnd('tol-noise'); //eslint-disable-line no-console\r\n return result;\r\n }\r\n\r\n @computed(\r\n 'magnitudes',\r\n 'components.componentsInput.{vsPlus,vsMinus}',\r\n 'circuitResults',\r\n 'interestingCircuitResultsFriendly',\r\n )\r\n get voltageRange() {\r\n var vsPlus = this.components.componentsInput.vsPlus;\r\n var vsMinus = this.components.componentsInput.vsMinus;\r\n var circuitResults = this.circuitResults;\r\n var interestingCircuitResults = this.interestingCircuitResultsFriendly;\r\n\r\n // Get the worst case magnitudes per stage or use the nominal magnitude if there are no interesting circuits generated for that stage\r\n var worstCaseMagnitudes = interestingCircuitResults.map((stage, index) => {\r\n var magnitude = null;\r\n if (stage && stage.length > 0) {\r\n var magnitudeVariationsForOneStage = stage.map((interestingCircuit) => {\r\n return interestingCircuit.magnitude;\r\n });\r\n var minAndMaxForOneStage = ArrayUtils.getMinimumAndMaximumForOneStage(magnitudeVariationsForOneStage);\r\n magnitude = minAndMaxForOneStage.maxForOneStage;\r\n } else {\r\n magnitude = circuitResults[index].magnitude;\r\n }\r\n return magnitude;\r\n });\r\n\r\n var result = VoltageRange.create({\r\n circuitResults: circuitResults,\r\n vsMinus: vsMinus,\r\n vsPlus: vsPlus,\r\n worstCaseMagnitudes: worstCaseMagnitudes,\r\n toleranceInput: true,\r\n });\r\n return result;\r\n }\r\n @computed(\r\n 'components.actualStages',\r\n 'circuitResults',\r\n 'interestingCircuitResults',\r\n 'interestingCircuitResultsFriendly',\r\n 'magnitudeDb.limits',\r\n )\r\n get detailsOfStages() {\r\n console.time('tolerance.detailsOfStages');\r\n var limMagnitudeDb = this.magnitudeDb.limits;\r\n var actualStages = this.components.actualStages;\r\n var interestingCircuitResults = this.interestingCircuitResults;\r\n var interestingCircuitResultsFriendly = this.interestingCircuitResultsFriendly;\r\n var circuitResults = this.circuitResults;\r\n\r\n var _magnitudes = this._magnitudes;\r\n var result = actualStages.map((actualStage, index) => {\r\n var targetStage = actualStage.targetStage;\r\n var interestingCircuitResult = interestingCircuitResults[index];\r\n var interestingCircuitResultFriendly = interestingCircuitResultsFriendly[index];\r\n var circuitResult = circuitResults[index];\r\n var graphData = this._getToleranceGraphData(interestingCircuitResultFriendly, circuitResult);\r\n graphData.limits = limMagnitudeDb;\r\n var res = StageDetails.create({\r\n targetStage: targetStage,\r\n actualStage: actualStage,\r\n circuitResult: circuitResult,\r\n interestingCircuitResult: interestingCircuitResult,\r\n graphData: graphData,\r\n magnitudesObject: _magnitudes,\r\n });\r\n return res;\r\n });\r\n\r\n console.timeEnd('tolerance.detailsOfStages');\r\n return result;\r\n }\r\n\r\n @computed('commercialCircuits', 'components') get detailsOfCircuits() {\r\n var circuits = this.commercialCircuits;\r\n var stages = this.components.actualStages;\r\n var componentsInput = this.components.componentsInput;\r\n var result = circuits.map((circuit, index) => {\r\n var actualStage = stages[index];\r\n return CircuitDetails.create({ circuit: circuit, stage: actualStage, componentsInput: componentsInput });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n _getMinimumAndMaximumArray(interestingCircuitValuesArray, nominalValuesArray) {\r\n var minimumValues = [];\r\n var maximumValues = [];\r\n for (let i = 0; i < interestingCircuitValuesArray.length; i++) {\r\n if (nominalValuesArray) {\r\n interestingCircuitValuesArray[i].push(nominalValuesArray[i]);\r\n }\r\n\r\n var groupedByIndex = ArrayUtils.groupByIndex(interestingCircuitValuesArray[i]);\r\n var minForOneStage = [];\r\n var maxForOneStage = [];\r\n for (let j = 0; j < groupedByIndex.length; j++) {\r\n var minimum = Math.min.apply(Math, groupedByIndex[j]);\r\n var maximum = Math.max.apply(Math, groupedByIndex[j]);\r\n minForOneStage.push(minimum);\r\n maxForOneStage.push(maximum);\r\n }\r\n\r\n minimumValues.push(minForOneStage);\r\n maximumValues.push(maxForOneStage);\r\n }\r\n\r\n return { minimumValues, maximumValues };\r\n }\r\n\r\n _joinEnvelopToFrequencyArray(envelop, frequencyArray) {\r\n var nominalResult = ArrayUtils.joinArrays(frequencyArray, envelop.nominalValues);\r\n var minimumResult = ArrayUtils.joinArrays(frequencyArray, envelop.minimumValues);\r\n var maximumResult = ArrayUtils.joinArrays(frequencyArray, envelop.maximumValues);\r\n set(envelop, 'nominalValues', nominalResult);\r\n set(envelop, 'minimumValues', minimumResult);\r\n set(envelop, 'maximumValues', maximumResult);\r\n\r\n return envelop;\r\n }\r\n\r\n _noiseToleranceMultiplyArrays(firstArray, secondArray) {\r\n var combinedArray = [];\r\n for (let k = 0; k < firstArray.length; k++) {\r\n combinedArray.push(firstArray[k] * secondArray[k]);\r\n }\r\n\r\n return combinedArray;\r\n }\r\n\r\n _addNoise(noiseArrayOne, noiseArrayTwo) {\r\n var noiseOutputArray = [];\r\n\r\n for (let j = 0; j < noiseArrayOne.length; j++) {\r\n noiseOutputArray[j] = Math.sqrt(noiseArrayOne[j] * noiseArrayOne[j] + noiseArrayTwo[j] * noiseArrayTwo[j]);\r\n }\r\n return noiseOutputArray;\r\n }\r\n\r\n _createInterestingCircuitResults(actualStages, commercialCircuits, toleranceInput, adcBandwidth, frequencyArray) {\r\n let result = [];\r\n for (let i = 0; i < actualStages.length; i++) {\r\n let implementation = actualStages[i].implementation;\r\n let commercialCircuit = commercialCircuits[i];\r\n let interestingCircuits = implementation\r\n .getInterestingCircuits(commercialCircuit, toleranceInput)\r\n .filter((item) => {\r\n return !!item;\r\n });\r\n let interestingCircuitResults = [];\r\n var actualStage = actualStages[i];\r\n for (let j = 0; j < interestingCircuits.length; j++) {\r\n let interestingCircuit = interestingCircuits[j];\r\n let circuitResult = CircuitResults.create({\r\n circuit: interestingCircuit,\r\n actualStage: actualStage,\r\n adcBandwidth: adcBandwidth,\r\n frequencyArray: frequencyArray,\r\n });\r\n interestingCircuitResults.push(circuitResult);\r\n }\r\n\r\n result.push(interestingCircuitResults);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _createNominalCircuitResults(commercialCircuits, actualStages, adcBandwidth, frequencyArray, toleranceInput) {\r\n var circuitResults = commercialCircuits.map((item, index) => {\r\n var circuitCopy = CircuitUtils.copyCircuit(item, true, toleranceInput);\r\n return CircuitResults.create({\r\n circuit: circuitCopy,\r\n actualStage: actualStages[index],\r\n adcBandwidth: adcBandwidth,\r\n frequencyArray: frequencyArray,\r\n });\r\n });\r\n\r\n return circuitResults;\r\n }\r\n\r\n _getToleranceGraphData(interestingCircuitResult, circuitResult) {\r\n var magnitudes = interestingCircuitResult.map((item) => {\r\n return item.magnitude;\r\n });\r\n var nominalValues = circuitResult.magnitude;\r\n var frequencyArray = circuitResult.frequencyArray;\r\n magnitudes.push(nominalValues);\r\n var groupByIndex = ArrayUtils.groupByIndex(magnitudes);\r\n var minimumValues = groupByIndex.map((item) => {\r\n return Math.min.apply(Math, item);\r\n });\r\n var maximumValues = groupByIndex.map((item) => {\r\n return Math.max.apply(Math, item);\r\n });\r\n var nominal = ConversionUtils.VVarrtoDBarr(nominalValues);\r\n var minimum = ConversionUtils.VVarrtoDBarr(minimumValues);\r\n var maximum = ConversionUtils.VVarrtoDBarr(maximumValues);\r\n var dataPoints = ArrayUtils.joinToleranceArrays(frequencyArray, nominal, minimum, maximum);\r\n var limits = ResultsUtils.getRangeLimits(dataPoints);\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport ActualStage from './actual-stage';\r\nimport * as ResultsUtils from '../utils/results';\r\n\r\nexport default class FirstOrderActualStage extends ActualStage {\r\n whoAmI = 'app/models/stages/actual-first-order.js';\r\n\r\n getActualFpArray(loopFp) {\r\n return [loopFp, loopFp * 0.9999, loopFp * 0.999, loopFp * 0.99, loopFp * 0.9, loopFp];\r\n }\r\n\r\n getActualQArray() {\r\n return [1, 1, 1, 1, 1, 1];\r\n }\r\n\r\n getActualGainArray(gain) {\r\n return [1, 1, 1, 1, 1, gain * 0.98];\r\n }\r\n\r\n @computed('filter', 'stageFp', 'gain') get stepResponseSetup() {\r\n var base = this; // for readability. To know which properties are declared in the base class\r\n var filter = base.filter;\r\n var actualStageFp = base.stageFp;\r\n var gain = base.gain;\r\n var result = filter.setupFirstOrderStepResponse(actualStageFp, gain);\r\n return result;\r\n }\r\n\r\n @computed('timeAxis', 'stepResponseSetup') get stepResponseIdeal() {\r\n var timeAxis = this.timeAxis;\r\n var stepResponseSetup = this.stepResponseSetup;\r\n var result = timeAxis.map((timePoint) => {\r\n var res = ResultsUtils.computeFirstOrderStepResponseIdeal(timePoint, stepResponseSetup);\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport ActualStage from './actual-stage';\r\nimport * as ResultsUtils from '../utils/results';\r\n\r\nexport default class SecondOrderActualStage extends ActualStage {\r\n whoAmI = 'app/models/stages/actual-second-order.js';\r\n\r\n getActualFpArray(loopFp) {\r\n return [loopFp, loopFp * 0.99, loopFp * 0.99, loopFp, loopFp * 0.96, loopFp, loopFp * 0.99];\r\n }\r\n\r\n getActualQArray(loopQ) {\r\n return [loopQ, loopQ * 1.005, loopQ, loopQ * 1.01, loopQ * 1.1, loopQ * 1.01, loopQ];\r\n }\r\n\r\n getActualGainArray(gain) {\r\n return [1, 1, 1, 1, 1, gain * 0.98, gain * 0.98];\r\n }\r\n\r\n @computed('filter', 'stageFp', 'stageQ', 'gain') get stepResponseSetup() {\r\n var base = this; // for readability. To know which properties are declared in the base class\r\n var filter = base.filter;\r\n var actualStageFp = base.stageFp;\r\n var actualStageQ = base.stageQ;\r\n var gain = base.gain;\r\n var result = filter.setupSecondOrderStepResponse(actualStageFp, actualStageQ, gain);\r\n return result;\r\n }\r\n\r\n @computed('timeAxis', 'stepResponseSetup') get stepResponseIdeal() {\r\n var timeAxis = this.timeAxis;\r\n var stepResponseSetup = this.stepResponseSetup;\r\n var result = timeAxis.map((timePoint) => {\r\n var res = ResultsUtils.computeSecondOrderStepResponseIdeal(timePoint, stepResponseSetup);\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport FilterConstants from '../../filter-constants';\r\nimport * as CommonUtils from '../../utils/common';\r\nimport OpAmpSelection from '../component-selector/op-amp-selection';\r\nimport Implementation from '../implementation/implementation';\r\nimport AllowedLimits from '../optimization/allowed-specific';\r\nimport RecommendedLimits from '../optimization/recommended-specific';\r\nimport CircuitResults from '../results/circuit-results';\r\n\r\nexport default class ActualStage extends EmberObject {\r\n targetStage;\r\n previousStage;\r\n nextStage;\r\n opAmpSource;\r\n whoAmI = 'app/models/stages/actual-stage.js';\r\n filter;\r\n timeAxis;\r\n filterFrequencyRange;\r\n frequencyArray;\r\n stageLetter;\r\n order;\r\n stageId;\r\n opAmp;\r\n compensateLoop;\r\n selectedImplementation;\r\n optimization;\r\n masterCapacitorValue;\r\n r3Value;\r\n stopbandFrequency;\r\n componentsInput;\r\n\r\n init() {\r\n if (!CommonUtils.isNullOrUndefined(this.targetStage)) {\r\n this.filter = this.targetStage.filter;\r\n this.timeAxis = this.targetStage.timeAxis;\r\n set(this, 'filterFrequencyRange', this.targetStage.filterFrequencyRange);\r\n this.stageLetter = this.targetStage.stageLetter;\r\n this.order = this.targetStage.order;\r\n this.stageId = this.targetStage.stageId;\r\n }\r\n\r\n if (CommonUtils.isNullOrUndefined(this.frequencyArray))\r\n set(this, 'frequencyArray', this.targetStage.frequencyArray);\r\n }\r\n\r\n @computed('selectedImplementation', 'optimization', 'targetStage', 'componentsInput') get implementation() {\r\n var selectedImplementation = this.selectedImplementation;\r\n var filter = this.targetStage.filter;\r\n var optimization = this.optimization;\r\n var stageFp = this.targetStage.stageFp;\r\n var stageQ = this.targetStage.stageQ;\r\n var gain = this.targetStage.gain;\r\n var frequencyArray = this.targetStage.frequencyArray;\r\n var preferredAlgorithm = this.componentsInput ? this.componentsInput.preferredAlgorithms : null;\r\n\r\n var result = Implementation.create({\r\n preferredAlgorithm: preferredAlgorithm,\r\n selectedImplementation: selectedImplementation,\r\n filter: filter,\r\n optimization: optimization,\r\n stageFp: stageFp,\r\n stageQ: stageQ,\r\n gain: gain,\r\n frequencyArray: frequencyArray,\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed(\r\n 'implementation',\r\n 'filterFrequencyRange',\r\n 'opAmp',\r\n 'masterCapacitorValue',\r\n 'r3Value',\r\n 'compensateLoop',\r\n 'opAmpSource',\r\n 'componentsInput',\r\n )\r\n get actualStageValues() {\r\n var filter = this.implementation.filter;\r\n var optimization = this.optimization;\r\n var filterFrequencyRange = this.filterFrequencyRange;\r\n var loopFp = this.implementation.stageFp;\r\n var loopQ = this.implementation.stageQ;\r\n var targetFp = this.implementation.stageFp;\r\n var targetQ = this.implementation.stageQ;\r\n var gain = this.implementation.gain;\r\n var opAmp = this.opAmp;\r\n var compensateLoop = this.compensateLoop;\r\n var actualFpGainAndQ = null;\r\n var circuit = null;\r\n var implementation = this.implementation;\r\n var isSpecific = this.componentsInput\r\n ? this.componentsInput.optimizationPreference === FilterConstants.optimizationPreferenceOptions.specific\r\n : false;\r\n var compensateLoopRun = 0;\r\n\r\n var circuitResult = null;\r\n var newFrequencyArray = null;\r\n do {\r\n // TODO: ARNA-4965 Temporary workaround for different implementations of getActualStageSpecFrequency\r\n // bandPass uses filterFrequencyRange, lowPass and highPass uses loopFp\r\n var actualStageFreqParam = filter.name === FilterConstants.filterType.bandPass ? filterFrequencyRange : loopFp;\r\n var newFrequencyPointsObject = filter.getActualStageSpecFrequency(actualStageFreqParam);\r\n newFrequencyArray = newFrequencyPointsObject.narrowFrequencyArray;\r\n circuit = implementation.createCircuit(loopFp, gain, loopQ, optimization);\r\n\r\n circuitResult = CircuitResults.create({\r\n circuit: circuit,\r\n actualStage: this,\r\n adcBandwidth: null,\r\n frequencyArray: newFrequencyArray,\r\n });\r\n\r\n this._setOpAmp(circuit, opAmp, circuitResult);\r\n actualFpGainAndQ = circuitResult.stageValues;\r\n\r\n loopFp = Math.pow(targetFp / actualFpGainAndQ.fp, 0.8) * loopFp;\r\n loopQ = Math.pow(targetQ / actualFpGainAndQ.q, 0.8) * loopQ;\r\n compensateLoopRun++;\r\n } while (compensateLoopRun < compensateLoop);\r\n\r\n if (isSpecific) {\r\n circuit.changeInitialCapacitor(this.masterCapacitorValue);\r\n circuit.changeGainValues(this.r3Value);\r\n let afterAdjustmentCircuitResult = CircuitResults.create({\r\n circuit: circuit,\r\n actualStage: this,\r\n adcBandwidth: null,\r\n frequencyArray: newFrequencyArray,\r\n });\r\n\r\n actualFpGainAndQ = afterAdjustmentCircuitResult.stageValues;\r\n }\r\n\r\n var result = {\r\n fp: actualFpGainAndQ.fp,\r\n q: actualFpGainAndQ.q,\r\n gain: actualFpGainAndQ.gain,\r\n circuit: circuit,\r\n };\r\n\r\n return result;\r\n }\r\n\r\n @computed('actualStageValues') get stageFp() {\r\n var actualStageValues = this.actualStageValues;\r\n var result = actualStageValues.fp;\r\n return result;\r\n }\r\n\r\n @computed('actualStageValues') get stageQ() {\r\n var actualStageValues = this.actualStageValues;\r\n var result = actualStageValues.q;\r\n return result;\r\n }\r\n\r\n @computed('actualStageValues', 'implementation') get gain() {\r\n var actualStageValues = this.actualStageValues;\r\n var result = actualStageValues.gain;\r\n return result;\r\n }\r\n\r\n @computed('previousStage', 'actualStageValues', 'frequencyArray') get circuit() {\r\n var result = this.actualStageValues.circuit;\r\n var previousCircuit = this.previousStage ? this.previousStage.circuit : null;\r\n var frequencyArray = this.frequencyArray;\r\n set(result, 'frequencyArray', frequencyArray);\r\n set(result, 'previousCircuit', previousCircuit);\r\n\r\n return result;\r\n }\r\n\r\n @computed('circuit') get magnitude() {\r\n var circuit = this.circuit;\r\n var frequencyArray = this.frequencyArray;\r\n var circuitResult = CircuitResults.create({\r\n circuit: circuit,\r\n actualStage: this,\r\n adcBandwidth: null,\r\n frequencyArray: frequencyArray,\r\n });\r\n var result = circuitResult.magnitude;\r\n return result;\r\n }\r\n\r\n _setOpAmp(circuit, opAmp, circuitResult) {\r\n if (opAmp !== FilterConstants.idealOpAmp) {\r\n var opAmpData = this.opAmpSource.getOpAmp(opAmp);\r\n var opAmpObj = OpAmpSelection.create({ data: opAmpData });\r\n set(circuit, 'opAmp', opAmpObj);\r\n set(circuit, 'recommendedAmp', true);\r\n } else {\r\n var idealOpAmp = circuitResult.idealOpAmp;\r\n set(circuit, 'opAmp', idealOpAmp);\r\n }\r\n }\r\n\r\n @computed(\r\n 'targetStage',\r\n 'implementation',\r\n 'stopbandFrequency',\r\n 'frequencyArray',\r\n 'masterCapacitorValue',\r\n 'r3Value',\r\n 'opAmp',\r\n )\r\n get allowedLimits() {\r\n var implementation = this.implementation;\r\n var stopbandFrequency = this.stopbandFrequency;\r\n var frequencyArray = this.frequencyArray;\r\n var optimization = AllowedLimits.create({ stopbandFrequency: stopbandFrequency });\r\n var stageFp = this.targetStage.stageFp;\r\n var stageQ = this.targetStage.stageQ;\r\n var gain = this.targetStage.gain;\r\n var circuit = implementation.createCircuit(stageFp, gain, stageQ, optimization, this.masterCapacitorValue);\r\n circuit.changeGainValues(this.r3Value);\r\n var circuitResult = CircuitResults.create({\r\n circuit: circuit,\r\n actualStage: this,\r\n adcBandwidth: null,\r\n frequencyArray: frequencyArray,\r\n });\r\n var result = circuitResult.idealOpAmp;\r\n return result;\r\n }\r\n\r\n @computed(\r\n 'targetStage',\r\n 'implementation',\r\n 'stopbandFrequency',\r\n 'frequencyArray',\r\n 'masterCapacitorValue',\r\n 'r3Value',\r\n 'opAmp',\r\n )\r\n get recommendedLimits() {\r\n var implementation = this.implementation;\r\n var stopbandFrequency = this.stopbandFrequency;\r\n var frequencyArray = this.frequencyArray;\r\n var optimization = RecommendedLimits.create({ stopbandFrequency: stopbandFrequency });\r\n var stageFp = this.targetStage.stageFp;\r\n var stageQ = this.targetStage.stageQ;\r\n var gain = this.targetStage.gain;\r\n var circuit = implementation.createCircuit(stageFp, gain, stageQ, optimization, this.masterCapacitorValue);\r\n circuit.changeGainValues(this.r3Value);\r\n var circuitResult = CircuitResults.create({\r\n circuit: circuit,\r\n actualStage: this,\r\n adcBandwidth: null,\r\n frequencyArray: frequencyArray,\r\n });\r\n var result = circuitResult.idealOpAmp;\r\n return result;\r\n }\r\n\r\n @computed('implementation', 'targetStage', 'previousStage', 'optimization', 'masterCapacitorValue')\r\n get highVNoiseCircuit() {\r\n var implementation = this.implementation;\r\n var stageFp = this.targetStage.stageFp;\r\n var stageQ = this.targetStage.stageQ;\r\n var gain = this.targetStage.gain;\r\n var optimization = this.optimization;\r\n var result = implementation.createCircuit(stageFp, gain, stageQ, optimization, this.masterCapacitorValue);\r\n var highVNoiseOpAmp = { gbw: 1e12, rOut: 1e-12, vNoise: 1e-6, iNoise: 0 };\r\n var previousHighVNoiseCircuit = this.previousStage ? this.previousStage.highVNoiseCircuit : null;\r\n set(result, 'opAmp', highVNoiseOpAmp);\r\n set(result, 'previousCircuit', previousHighVNoiseCircuit);\r\n\r\n return result;\r\n }\r\n\r\n @computed('implementation', 'targetStage', 'previousStage', 'optimization', 'masterCapacitorValue')\r\n get highINoiseCircuit() {\r\n var implementation = this.implementation;\r\n var stageFp = this.targetStage.stageFp;\r\n var stageQ = this.targetStage.stageQ;\r\n var gain = this.targetStage.gain;\r\n var optimization = this.optimization;\r\n var result = implementation.createCircuit(stageFp, gain, stageQ, optimization, this.masterCapacitorValue);\r\n var highINoiseOpAmp = { gbw: 1e12, rOut: 1e-12, vNoise: 0, iNoise: 1e-6 };\r\n var previousHighINoiseCircuit = this.previousStage ? this.previousStage.highINoiseCircuit : null;\r\n set(result, 'opAmp', highINoiseOpAmp);\r\n set(result, 'previousCircuit', previousHighINoiseCircuit);\r\n\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport TargetStage from './target-stage';\r\nimport FilterConstants from '../../filter-constants';\r\n\r\nexport default class FirstOrderTargetStage extends TargetStage {\r\n order = 1;\r\n @computed('filter', 'stageFp', 'stageQ', 'gain') get stepResponseSetup() {\r\n var base = this; // for readability. To know which properties are declared in the base class\r\n var filter = base.filter;\r\n var stageFp = base.stageFp;\r\n var gain = base.gain;\r\n var result = filter.setupFirstOrderStepResponse(stageFp, gain);\r\n return result;\r\n }\r\n\r\n @computed('timeAxis', 'stepResponseSetup') get stepResponseIdeal() {\r\n var timeAxis = this.timeAxis;\r\n var stepResponseSetup = this.stepResponseSetup;\r\n var a = stepResponseSetup.a;\r\n var b = stepResponseSetup.b;\r\n var w0 = stepResponseSetup.w0;\r\n\r\n var result = timeAxis.map((timePoint) => {\r\n var tw0 = -1 * timePoint * w0;\r\n var res = a - b * Math.exp(tw0);\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n defaultImplementation = FilterConstants.implementationType.firstOrder;\r\n createAmplitude(fp, Q, gain, frequencyArray) {\r\n return this.filter.createFirstOrderFilterAmplitude(fp, gain, frequencyArray);\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport { computed } from '@ember/object';\r\n\r\nimport TargetStage from './target-stage';\r\nimport MathUtils from '../utils/math';\r\n\r\nexport default class SecondOrderTargetStage extends TargetStage {\r\n order = 2;\r\n @computed('filter', 'stageFp', 'stageQ', 'gain') get stepResponseSetup() {\r\n var filter = this.filter;\r\n var stageFp = this.stageFp;\r\n var stageQ = this.stageQ;\r\n var gain = this.gain;\r\n var result = filter.setupSecondOrderStepResponse(stageFp, stageQ, gain);\r\n return result;\r\n }\r\n\r\n @computed('timeAxis', 'stepResponseSetup') get stepResponseIdeal() {\r\n var timeAxis = this.timeAxis;\r\n var stepResponseSetup = this.stepResponseSetup;\r\n var a = stepResponseSetup.a;\r\n var b = stepResponseSetup.b;\r\n var c = stepResponseSetup.c;\r\n var w0 = stepResponseSetup.w0;\r\n var Q = stepResponseSetup.Q;\r\n\r\n var result = timeAxis.map((timePoint) => {\r\n var X = -c - a * w0 * w0 + 2 * b * w0 * Q; //X=-c-a*wo**2+2*b*wo*Q;\r\n\r\n var Y = -(w0 * w0) * (-1 + 4 * Q * Q); //Y=-wo**2*(-1 + 4*Q**2);\r\n\r\n var W = a * w0 * w0 - c; //W=a*wo**2-c;\r\n\r\n var Z = Math.exp((-timePoint * w0) / 2 / Q); //Z=exp(-t*wo/2/Q);\r\n\r\n var sqrtY = Math.sqrt(Y); //sqrt(Y)\r\n var tYQ = (timePoint * sqrtY) / 2 / Q; //t*sqrt(Y)/2/Q\r\n var sinhY = MathUtils.sinh(tYQ); //sinh(t*sqrt(Y)/2/Q)\r\n var coshY = MathUtils.cosh(tYQ); //cosh(t*sqrt(Y)/2/Q)\r\n var sqrtNegY = Math.sqrt(-Y); //sqrt(-Y)\r\n var w02 = w0 * w0; //w0**2\r\n var w03 = w02 * w0; //w0**3\r\n var exptw0 = Math.exp(timePoint * w0); // exp(t*wo)\r\n var res = null;\r\n\r\n if (Y > 0) {\r\n res = (X * sinhY * Z) / sqrtY / w0 + (c + W * coshY * Z) / (w0 * w0);\r\n } else if (Y < 0) {\r\n res =\r\n (X * Math.sin((timePoint * sqrtNegY) / 2 / Q) * Z) / sqrtNegY / w0 +\r\n (c + W * Math.cos((timePoint * sqrtNegY) / 2 / Q) * Z) / (w0 * w0);\r\n } else {\r\n res =\r\n -(c - c * exptw0 - a * w02 + a * timePoint * w03 - b * timePoint * w02 + c * timePoint * w0) / (w02 * exptw0);\r\n }\r\n\r\n return res;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('filter', 'stageFp', 'stageQ', 'gain') get defaultImplementation() {\r\n var base = this; // for readability. To know which properties comes from the base class\r\n var filter = base.filter;\r\n var stageFp = base.stageFp;\r\n var stageQ = base.stageQ;\r\n var gain = base.gain;\r\n var implementation = filter.getSecondOrderStageImplementation(stageFp, stageQ, gain);\r\n return implementation;\r\n }\r\n\r\n createAmplitude(fp, Q, gain, frequencyArray) {\r\n return this.filter.createSecondOrderFilterAmplitude(fp, Q, gain, frequencyArray);\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nexport default class SignalRange extends EmberObject {\r\n maxMagnitudeObject = null;\r\n indexObject = null;\r\n smallestMultiplier = null;\r\n orderOptimizationFrequencyArray = null;\r\n vRef = null;\r\n whoAmI = 'app/models/stages/signal-range.js';\r\n @computed('maxMagnitudeObject', 'smallestMultiplier') get slewRate() {\r\n var smallestMultiplier = this.smallestMultiplier;\r\n var maxMagnitudeObject = this.maxMagnitudeObject;\r\n var result = maxMagnitudeObject.slewRate * smallestMultiplier;\r\n return result;\r\n }\r\n\r\n @computed('indexObject', 'orderOptimizationFrequencyArray') get slewRateFreq() {\r\n var indexObject = this.indexObject;\r\n var orderOptimizationFrequencyArray = this.orderOptimizationFrequencyArray;\r\n var result = orderOptimizationFrequencyArray[indexObject.slewRate];\r\n return result;\r\n }\r\n\r\n @computed('vRef', 'maxMagnitudeObject', 'smallestMultiplier') get minInput() {\r\n var vRef = this.vRef;\r\n var maxMagnitudeObject = this.maxMagnitudeObject;\r\n var smallestMultiplier = this.smallestMultiplier;\r\n var result = vRef + -1 * maxMagnitudeObject.input * smallestMultiplier;\r\n return result;\r\n }\r\n\r\n @computed('vRef', 'maxMagnitudeObject', 'smallestMultiplier') get maxInput() {\r\n var vRef = this.vRef;\r\n var maxMagnitudeObject = this.maxMagnitudeObject;\r\n var smallestMultiplier = this.smallestMultiplier;\r\n var result = smallestMultiplier * maxMagnitudeObject.input + vRef;\r\n return result;\r\n }\r\n\r\n @computed('indexObject', 'orderOptimizationFrequencyArray') get inputFrequency() {\r\n var indexObject = this.indexObject;\r\n var orderOptimizationFrequencyArray = this.orderOptimizationFrequencyArray;\r\n var result = orderOptimizationFrequencyArray[indexObject.input];\r\n return result;\r\n }\r\n\r\n @computed('vRef', 'maxMagnitudeObject', 'smallestMultiplier') get minOutput() {\r\n var vRef = this.vRef;\r\n var maxMagnitudeObject = this.maxMagnitudeObject;\r\n var smallestMultiplier = this.smallestMultiplier;\r\n var result = vRef + -1 * maxMagnitudeObject.output * smallestMultiplier;\r\n return result;\r\n }\r\n\r\n @computed('vRef', 'maxMagnitudeObject', 'smallestMultiplier') get maxOutput() {\r\n var vRef = this.vRef;\r\n var maxMagnitudeObject = this.maxMagnitudeObject;\r\n var smallestMultiplier = this.smallestMultiplier;\r\n var result = smallestMultiplier * maxMagnitudeObject.output + vRef;\r\n return result;\r\n }\r\n\r\n @computed('indexObject', 'orderOptimizationFrequencyArray') get outputFrequency() {\r\n var indexObject = this.indexObject;\r\n var orderOptimizationFrequencyArray = this.orderOptimizationFrequencyArray;\r\n var result = orderOptimizationFrequencyArray[indexObject.output];\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/classic-decorator-hooks, ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed, set } from '@ember/object';\r\n\r\nimport * as CommonUtils from '../../utils/common';\r\nimport * as ArrayUtils from '../utils/array';\r\nimport * as ConversionUtils from '../utils/conversion';\r\n\r\nexport default class TargetStage extends EmberObject {\r\n previousStage = null;\r\n filterFrequencyRange = null;\r\n filter;\r\n optimization = null;\r\n toleranceInput = null;\r\n stageQ;\r\n stageFp;\r\n stageFz = 1;\r\n gain;\r\n stageId = null;\r\n stageType = null;\r\n stageLetter = null;\r\n index = null;\r\n timeAxis = null;\r\n selectedImplementation = null;\r\n frequencyArray = null;\r\n stage = 0; // TODO: Believed not used? Carries the order, weirdly - probably a typo. Supplied to suppress TypeScript error. Examine use in narrow-band.ts\r\n\r\n init() {\r\n if (!CommonUtils.isNullOrUndefined(this.filterFrequencyRange))\r\n set(this, 'frequencyArray', this.filterFrequencyRange.friendlyFrequencyArray);\r\n }\r\n\r\n @computed('stageFp', 'gain') get isHighSpeedHighGainStage() {\r\n var stageFp = this.stageFp;\r\n var gain = this.gain;\r\n return gain >= 10 && stageFp > 1e6;\r\n }\r\n\r\n @computed('filter', 'gain') get impulseArrayFirstElement() {\r\n var filter = this.filter;\r\n var gain = this.gain;\r\n var result = filter.getImpulseArrayFirstElement(gain);\r\n return result;\r\n }\r\n\r\n @computed('impulseArrayFirstElement', 'timeAxis', 'stepResponseIdeal') get impulseResponse() {\r\n var impulseArrayFirstElement = this.impulseArrayFirstElement;\r\n var timeAxis = this.timeAxis;\r\n var stepResponseIdealArray = this.stepResponseIdeal;\r\n var firstPoint = stepResponseIdealArray[0];\r\n var result = [impulseArrayFirstElement];\r\n for (var i = 1; i < timeAxis.length; i++) {\r\n var secondPoint = stepResponseIdealArray[i];\r\n result.push(secondPoint - firstPoint);\r\n firstPoint = secondPoint;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @computed('frequencyArray', 'filter', 'stageFp', 'stageQ', 'gain') get filterAmplitude() {\r\n var base = this;\r\n var frequencyArray = base.frequencyArray;\r\n var fp = base.stageFp;\r\n var Q = base.stageQ;\r\n var gain = base.gain;\r\n var result = this.createAmplitude(fp, Q, gain, frequencyArray);\r\n\r\n return result;\r\n }\r\n\r\n @computed('filterAmplitude') get magnitude() {\r\n var filterAmplitude = this.filterAmplitude;\r\n var result = filterAmplitude.map((item) => {\r\n var magnitude = item.magnitude();\r\n return magnitude;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('filterAmplitude') get phase() {\r\n var filterAmplitude = this.filterAmplitude;\r\n var result = filterAmplitude.map((item) => {\r\n var phase = Math.atan2(item.imaginary, item.real);\r\n return phase;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n @computed('order') get ordinal() {\r\n var order = this.order;\r\n var result = CommonUtils.toOrdinal(order);\r\n return result;\r\n }\r\n\r\n @computed('stageType') get stageTypeDisplay() {\r\n var stageType = this.stageType;\r\n var result = CommonUtils.displayStageType(stageType);\r\n return result;\r\n }\r\n\r\n @computed('magnitude', 'frequencyArray') get chart() {\r\n var magnitude = this.magnitude;\r\n var frequencyArray = this.frequencyArray;\r\n var dbData = ConversionUtils.VVarrtoDBarr(magnitude);\r\n var result = ArrayUtils.joinArrays(frequencyArray, dbData);\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\r\nimport EmberObject, { computed } from '@ember/object';\r\n\r\nimport Envelope from '../process-data/envelope';\r\n\r\nexport default class ToleranceStage extends EmberObject {\r\n nominalCircuit = null;\r\n interestingCircuitArray = null;\r\n @computed('nominalCircuit', 'interestingCircuitArray') get magnitude() {\r\n var interestingCircuitsArray = this.interestingCircuitArray;\r\n var nominalCircuit = this.nominalCircuit;\r\n var nominalMagnitude = nominalCircuit.magnitude;\r\n var magnitudesArray = interestingCircuitsArray.map((bigHugeCircuit) => {\r\n return bigHugeCircuit.circuit.magnitude;\r\n });\r\n\r\n var result = Envelope.create({ nominalValuesArray: nominalMagnitude, simulatedValues: magnitudesArray });\r\n return result;\r\n }\r\n\r\n @computed('nominalCircuit', 'interestingCircuitArray') get phase() {\r\n var interestingCircuitsArray = this.interestingCircuitArray;\r\n var nominalCircuit = this.nominalCircuit;\r\n var nominalPhase = nominalCircuit.phase;\r\n var phaseArray = interestingCircuitsArray.map((bigHugeCircuit) => {\r\n return bigHugeCircuit.circuit.phase;\r\n });\r\n\r\n var result = Envelope.create({ nominalValuesArray: nominalPhase, simulatedValues: phaseArray });\r\n return result;\r\n }\r\n\r\n @computed('nominalCircuit', 'interestingCircuitArray') get groupDelay() {\r\n var interestingCircuitsArray = this.interestingCircuitArray;\r\n var nominalCircuit = this.nominalCircuit;\r\n var nominalGroupDelay = nominalCircuit.groupDelay;\r\n var groupDelayArrays = interestingCircuitsArray.map((bigHugeCircuit) => {\r\n return bigHugeCircuit.circuit.groupDelay;\r\n });\r\n\r\n var result = Envelope.create({ nominalValuesArray: nominalGroupDelay, simulatedValues: groupDelayArrays });\r\n return result;\r\n }\r\n\r\n @computed('nominalCircuit', 'interestingCircuitArray') get inputImpedanceMagnitude() {\r\n var interestingCircuitsArray = this.interestingCircuitArray;\r\n var nominalCircuit = this.nominalCircuit;\r\n var nominalInputImpedanceMagnitude = nominalCircuit.inputImpedanceMagnitude;\r\n var inputImpedanceMagnitudeArrays = interestingCircuitsArray.map((bigHugeCircuit) => {\r\n return bigHugeCircuit.circuit.inputImpedanceMagnitude;\r\n });\r\n\r\n var result = Envelope.create({\r\n nominalValuesArray: nominalInputImpedanceMagnitude,\r\n simulatedValues: inputImpedanceMagnitudeArrays,\r\n });\r\n return result;\r\n }\r\n\r\n @computed('nominalCircuit', 'interestingCircuitArray') get inputImpedancePhase() {\r\n var interestingCircuitsArray = this.interestingCircuitArray;\r\n var nominalCircuit = this.nominalCircuit;\r\n var nominalInputImpedancePhase = nominalCircuit.inputImpedancePhase;\r\n var inputImpedancePhaseArrays = interestingCircuitsArray.map((bigHugeCircuit) => {\r\n return bigHugeCircuit.circuit.inputImpedancePhase;\r\n });\r\n\r\n var result = Envelope.create({\r\n nominalValuesArray: nominalInputImpedancePhase,\r\n simulatedValues: inputImpedancePhaseArrays,\r\n });\r\n return result;\r\n }\r\n}\r\n","import * as ResultsUtils from '../utils/results';\r\nimport HighPass from '../filter/high-pass';\r\n\r\nfunction _getOpAmpNonIdealities(stageFp, gain, timeAxis) {\r\n // var filter = HighPass.create();\r\n var stepResponseSetup = HighPass.setupFirstOrderStepResponse(stageFp, gain);\r\n\r\n var opAmpNonIdealities = [];\r\n for (var t = 0; t < timeAxis.length; t++) {\r\n var val = ResultsUtils.computeFirstOrderStepResponseIdeal(timeAxis[t], stepResponseSetup);\r\n opAmpNonIdealities.push(val);\r\n }\r\n\r\n return opAmpNonIdealities;\r\n}\r\n\r\nfunction _getStageFp(circuit, k) {\r\n var rescombo = _computeResCombo(circuit);\r\n var gainTerm = _computeGainTerm(circuit, k);\r\n var result = 1 / (gainTerm * rescombo);\r\n return result;\r\n}\r\n\r\nfunction _getGain(circuit) {\r\n var rescombo = _computeResCombo(circuit);\r\n var result = 1 / rescombo;\r\n return result;\r\n}\r\n\r\nfunction _computeResCombo(circuit) {\r\n var r1 = circuit.r1.value;\r\n var r2 = circuit.r2.value;\r\n var result = r1 / r2 + r1 / circuit.opAmp.rOut + 1;\r\n return result;\r\n}\r\n\r\nfunction _computeGainTerm(circuit, kValue) {\r\n var r1 = circuit.r1.value;\r\n var result = (kValue * circuit.opAmp.rOut) / (r1 * circuit.opAmp.gbw);\r\n return result;\r\n}\r\n\r\nexport function getActualStepResponse(idealStep, circuit, timeAxis, k) {\r\n var stageFp = _getStageFp(circuit, k);\r\n var gain = _getGain(circuit);\r\n var opAmpNonIdealities = _getOpAmpNonIdealities(stageFp, gain, timeAxis);\r\n var result = idealStep.map((item, index) => {\r\n return item + opAmpNonIdealities[index];\r\n });\r\n\r\n return result;\r\n}\r\n","import * as ResultsUtils from '../utils/results';\r\nimport MathUtils from '../utils/math';\r\nimport LowPass from '../filter/low-pass';\r\n\r\nvar _getOpAmpNonIdealities = function (stageFp, gain, timeAxis) {\r\n var stepResponseSetup = LowPass.setupFirstOrderStepResponse(stageFp, gain);\r\n var impulseArrayFirstElement = LowPass.getImpulseArrayFirstElement(gain);\r\n var result = [impulseArrayFirstElement];\r\n var firstPoint = ResultsUtils.computeFirstOrderStepResponseIdeal(timeAxis[0], stepResponseSetup);\r\n //starting the loop with second point\r\n for (var t = 1; t < timeAxis.length; t++) {\r\n var secondPoint = ResultsUtils.computeFirstOrderStepResponseIdeal(timeAxis[t], stepResponseSetup);\r\n result.push(secondPoint - firstPoint);\r\n firstPoint = secondPoint;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nvar _getStageFp = function (circuit, k) {\r\n var gbw = circuit.opAmp.gbw;\r\n var result = gbw / k;\r\n return result;\r\n};\r\n\r\nexport function getActualStepResponse(idealStep, circuit, timeAxis, k) {\r\n var stageFp = _getStageFp(circuit, k);\r\n var opAmpNonIdealities = _getOpAmpNonIdealities(stageFp, 1, timeAxis);\r\n var result = MathUtils.convolve(idealStep, opAmpNonIdealities);\r\n return result;\r\n}\r\n","import FilterConstants from '../../filter-constants';\r\nimport * as ToleranceUtils from './tolerance-utils';\r\nimport * as CommonUtils from '../../utils/common';\r\n\r\nlet capacitorToleranceIdeal = {\r\n name: FilterConstants.capacitorTolerance.ideal,\r\n nominalFactor: 10000000,\r\n allowedMin: FilterConstants.Limits.CSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.CBIG_COMP_LIMIT,\r\n multiplicationFactors: [1],\r\n};\r\n\r\nlet capacitorToleranceOnePercent = {\r\n name: FilterConstants.capacitorTolerance.one,\r\n nominalFactor: 10000000,\r\n allowedMin: FilterConstants.Limits.CSMALL_COMP_LIMIT,\r\n allowedMax: 0.0000000048,\r\n multiplicationFactors: [0.99, 1.0, 1.01],\r\n};\r\n\r\nlet capacitorToleranceFivePercent = {\r\n name: FilterConstants.capacitorTolerance.five,\r\n nominalFactor: 10000000,\r\n allowedMin: FilterConstants.Limits.CSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.CBIG_COMP_LIMIT,\r\n multiplicationFactors: [0.95, 0.97, 1.0, 1.03, 1.05],\r\n};\r\n\r\nlet capacitorToleranceTenPercent = {\r\n name: FilterConstants.capacitorTolerance.ten,\r\n nominalFactor: 10000000,\r\n allowedMin: FilterConstants.Limits.CSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.CBIG_COMP_LIMIT,\r\n multiplicationFactors: [0.9, 0.95, 1.0, 1.05, 1.1],\r\n};\r\n\r\nlet capacitorToleranceTwentyPercent = {\r\n name: FilterConstants.capacitorTolerance.twenty,\r\n nominalFactor: 10000000,\r\n allowedMin: FilterConstants.Limits.CSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.CBIG_COMP_LIMIT,\r\n multiplicationFactors: [0.8, 0.9, 1.0, 1.1, 1.2],\r\n};\r\n\r\nlet capacitorToleranceConfigs = [\r\n capacitorToleranceIdeal,\r\n capacitorToleranceOnePercent,\r\n capacitorToleranceFivePercent,\r\n capacitorToleranceTenPercent,\r\n capacitorToleranceTwentyPercent,\r\n];\r\n\r\n// let supportedESeries = [\r\n// FilterConstants.eSeries.E6,\r\n// FilterConstants.eSeries.E12,\r\n// FilterConstants.eSeries.E24,\r\n// FilterConstants.eSeries.ideal,\r\n// ];\r\n\r\n// export function computeNominalValue(idealValue, toleranceInput, forceRoundDirection) {\r\n// let selectedSeries = toleranceInput.capacitorPreferredSeries;\r\n// let preferredSeries = getSeries(selectedSeries);\r\n// let nominalValue = ToleranceUtils.computeNominalValue(idealValue, preferredSeries, forceRoundDirection);\r\n\r\n// return nominalValue;\r\n// }\r\n\r\nexport function getToleranceValues(value, selectedTolerance) {\r\n if (CommonUtils.isNullOrUndefined(value) || value === 0 || CommonUtils.isNearInfinity(value)) {\r\n return {\r\n isToleranceCoerced: false,\r\n finalTolerance: FilterConstants.capacitorTolerance.ideal,\r\n toleranceArray: [value],\r\n };\r\n }\r\n\r\n let toleranceConfig = ToleranceUtils.getToleranceConfig(capacitorToleranceConfigs, value, selectedTolerance);\r\n let isToleranceCoerced = toleranceConfig !== null;\r\n let finalTolerance = toleranceConfig.name;\r\n let toleranceArray = ToleranceUtils.getToleranceArray(value, toleranceConfig);\r\n return {\r\n isToleranceCoerced: isToleranceCoerced,\r\n finalTolerance: finalTolerance,\r\n toleranceArray: toleranceArray,\r\n };\r\n}\r\n\r\n// function getSeries(selectedSeries) {\r\n// var isSupported = supportedESeries.some((item) => item === selectedSeries);\r\n// if (!isSupported) throw `Series ${selectedSeries} is not supported. Supported series are ${supportedESeries}`;\r\n\r\n// return ToleranceUtils.getSeries(selectedSeries);\r\n// }\r\n","import FilterConstants from '../../filter-constants';\r\nimport * as ToleranceUtils from './tolerance-utils';\r\nimport * as CommonUtils from '../../utils/common';\r\n\r\nlet inductorToleranceIdeal = {\r\n name: FilterConstants.inductorTolerance.ideal,\r\n allowedMin: FilterConstants.Limits.LSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.LBIG_COMP_LIMIT,\r\n multiplicationFactors: [1],\r\n};\r\n\r\nlet inductorToleranceFive = {\r\n name: FilterConstants.inductorTolerance.five,\r\n allowedMin: FilterConstants.Limits.LSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.LBIG_COMP_LIMIT,\r\n nominalFactor: 10000000,\r\n multiplicationFactors: [0.95, 0.97, 1.0, 1.03, 1.05],\r\n};\r\n\r\nlet inductorToleranceTen = {\r\n name: FilterConstants.inductorTolerance.ten,\r\n allowedMin: FilterConstants.Limits.LSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.LBIG_COMP_LIMIT,\r\n nominalFactor: 10000000,\r\n multiplicationFactors: [0.9, 0.95, 1.0, 1.05, 1.1],\r\n};\r\n\r\nlet inductorToleranceTwenty = {\r\n name: FilterConstants.inductorTolerance.twenty,\r\n allowedMin: FilterConstants.Limits.LSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.LBIG_COMP_LIMIT,\r\n nominalFactor: 10000000,\r\n multiplicationFactors: [0.8, 0.9, 1.0, 1.1, 1.2],\r\n};\r\n\r\nlet inductorToleranceConfigs = [\r\n inductorToleranceIdeal,\r\n inductorToleranceFive,\r\n inductorToleranceTen,\r\n inductorToleranceTwenty,\r\n];\r\n\r\n// let supportedESeries = [\r\n// FilterConstants.eSeries.E6,\r\n// FilterConstants.eSeries.E12,\r\n// FilterConstants.eSeries.E24,\r\n// FilterConstants.eSeries.ideal,\r\n// ];\r\n\r\n// export function computeNominalValue(idealValue, toleranceInput, forceRoundDirection) {\r\n// let selectedSeries = toleranceInput.inductorPreferredSeries;\r\n// let preferredSeries = getSeries(selectedSeries);\r\n// let nominalValue = ToleranceUtils.computeNominalValue(idealValue, preferredSeries, forceRoundDirection);\r\n\r\n// return nominalValue;\r\n// }\r\n\r\nexport function getToleranceValues(value, selectedTolerance) {\r\n if (CommonUtils.isNullOrUndefined(value) || value === 0 || CommonUtils.isNearInfinity(value)) {\r\n return {\r\n isToleranceCoerced: false,\r\n finalTolerance: FilterConstants.inductorTolerance.ideal,\r\n toleranceArray: [value],\r\n };\r\n }\r\n\r\n let toleranceConfig = ToleranceUtils.getToleranceConfig(inductorToleranceConfigs, value, selectedTolerance);\r\n let isToleranceCoerced = toleranceConfig !== null;\r\n let finalTolerance = toleranceConfig.name;\r\n let toleranceArray = ToleranceUtils.getToleranceArray(value, toleranceConfig);\r\n return {\r\n isToleranceCoerced: isToleranceCoerced,\r\n finalTolerance: finalTolerance,\r\n toleranceArray: toleranceArray,\r\n };\r\n}\r\n\r\n// function getSeries(selectedSeries) {\r\n// var isSupported = supportedESeries.some((item) => item === selectedSeries);\r\n// if (!isSupported) throw `Series ${selectedSeries} is not supported. Supported series are ${supportedESeries}`;\r\n\r\n// return ToleranceUtils.getSeries(selectedSeries);\r\n// }\r\n","import FilterConstants from '../../filter-constants';\r\nimport * as ToleranceUtils from './tolerance-utils';\r\nimport * as CommonUtils from '../../utils/common';\r\n\r\nlet resistorToleranceIdeal = {\r\n name: FilterConstants.resistorTolerance.ideal,\r\n allowedMin: FilterConstants.Limits.RSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.RBIG_COMP_LIMIT,\r\n multiplicationFactors: [1],\r\n};\r\n\r\nlet resistorToleranceOneTenth = {\r\n name: FilterConstants.resistorTolerance.oneTenth,\r\n allowedMin: 10,\r\n allowedMax: 1000000,\r\n multiplicationFactors: [0.999, 1.0, 1.001],\r\n};\r\n\r\nlet resistorToleranceFiveTenth = {\r\n name: FilterConstants.resistorTolerance.fiveTenths,\r\n allowedMin: 10,\r\n allowedMax: 1000000,\r\n multiplicationFactors: [0.995, 1.0, 1.005],\r\n};\r\n\r\nlet resistorToleranceOne = {\r\n name: FilterConstants.resistorTolerance.one,\r\n allowedMin: FilterConstants.Limits.RSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.RBIG_COMP_LIMIT,\r\n multiplicationFactors: [0.99, 1.0, 1.01],\r\n};\r\n\r\nlet resistorToleranceFive = {\r\n name: FilterConstants.resistorTolerance.five,\r\n allowedMin: FilterConstants.Limits.RSMALL_COMP_LIMIT,\r\n allowedMax: FilterConstants.Limits.RBIG_COMP_LIMIT,\r\n multiplicationFactors: [0.95, 1.0, 1.05],\r\n};\r\n\r\nlet resistorToleranceConfigs = [\r\n resistorToleranceIdeal,\r\n resistorToleranceOneTenth,\r\n resistorToleranceFiveTenth,\r\n resistorToleranceOne,\r\n resistorToleranceFive,\r\n];\r\n\r\n// let supportedESeries = [\r\n// FilterConstants.eSeries.E6,\r\n// FilterConstants.eSeries.E12,\r\n// FilterConstants.eSeries.E24,\r\n// FilterConstants.eSeries.E48,\r\n// FilterConstants.eSeries.E96,\r\n// FilterConstants.eSeries.ideal,\r\n// ];\r\n\r\n// export function computeNominalValue(idealValue, toleranceInput, forceRoundDirection) {\r\n// let selectedSeries = toleranceInput.resistorPreferredSeries;\r\n// let preferredSeries = getSeries(selectedSeries);\r\n// let nominalValue = ToleranceUtils.computeNominalValue(idealValue, preferredSeries, forceRoundDirection);\r\n\r\n// return nominalValue;\r\n// }\r\n\r\nexport function getToleranceValues(value, selectedTolerance) {\r\n let toleranceConfig = ToleranceUtils.getToleranceConfig(resistorToleranceConfigs, value, selectedTolerance);\r\n if (\r\n CommonUtils.isNullOrUndefined(value) ||\r\n value === 0 ||\r\n CommonUtils.isNearInfinity(value) ||\r\n CommonUtils.isNullOrUndefined(toleranceConfig)\r\n ) {\r\n return {\r\n isToleranceCoerced: false,\r\n finalTolerance: FilterConstants.resistorTolerance.ideal,\r\n toleranceArray: [value],\r\n };\r\n }\r\n\r\n let isToleranceCoerced = toleranceConfig !== null;\r\n let finalTolerance = toleranceConfig.name;\r\n let toleranceArray = ToleranceUtils.getToleranceArray(value, toleranceConfig);\r\n return {\r\n isToleranceCoerced: isToleranceCoerced,\r\n finalTolerance: finalTolerance,\r\n toleranceArray: toleranceArray,\r\n };\r\n}\r\n\r\n// function getSeries(selectedSeries) {\r\n// var isSupported = supportedESeries.some((item) => item === selectedSeries);\r\n// if (!isSupported) throw `Series ${selectedSeries} is not supported. Supported series are ${supportedESeries}`;\r\n\r\n// return ToleranceUtils.getSeries(selectedSeries);\r\n// }\r\n","export default {\r\n eSeries6: 2,\r\n eSeries12: 2,\r\n eSeries24: 2,\r\n eSeries48: 3,\r\n eSeries96: 3,\r\n};\r\n","export default {\r\n eSeries6: [1, 1.5, 2.2, 3.3, 4.7, 6.8, 10],\r\n eSeries12: [1, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2, 10],\r\n eSeries24: [\r\n 1, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2, 2.2, 2.4, 2.7, 3, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1,\r\n 10,\r\n ],\r\n eSeries48: [\r\n 1, 1.05, 1.1, 1.15, 1.21, 1.27, 1.33, 1.4, 1.47, 1.54, 1.62, 1.69, 1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49,\r\n 2.61, 2.74, 2.87, 3.01, 3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36, 5.62, 5.9, 6.19,\r\n 6.49, 6.81, 7.15, 7.5, 7.87, 8.25, 8.66, 9.09, 9.53, 10,\r\n ],\r\n eSeries96: [\r\n 1, 1.02, 1.05, 1.07, 1.1, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.3, 1.33, 1.37, 1.4, 1.43, 1.47, 1.5, 1.54, 1.58,\r\n 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2, 2.05, 2.1, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55,\r\n 2.61, 2.67, 2.74, 2.8, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.4, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02,\r\n 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.9, 6.04, 6.19, 6.34,\r\n 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.5, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76, 10,\r\n ],\r\n};\r\n","import * as CommonUtils from '../../utils/common';\r\nimport FilterConstants from '../../filter-constants';\r\nimport Series from './series';\r\nimport { normalizeToPreferredSeries } from '@ebiz/aditools-filter';\r\n\r\n// get the tolerance config where the idealValue fits.\r\n// This goes from the selected tolerance up to the bigger tolerance percentages.\r\n// Each tolerance config will have their own\r\nexport function getToleranceConfig(listOfConfigs, idealValue, selectedTolerance) {\r\n var toleranceConfig = listOfConfigs.find((item) => {\r\n return item.name === selectedTolerance;\r\n });\r\n if (CommonUtils.isNullOrUndefined(toleranceConfig)) throw `unknown selectedTolerance ${selectedTolerance}`;\r\n\r\n let result = null;\r\n var indexOfToleranceConfig = listOfConfigs.indexOf(toleranceConfig);\r\n for (let i = indexOfToleranceConfig; i < listOfConfigs.length; i++) {\r\n let currentRow = listOfConfigs[i];\r\n let allowedMin = currentRow.allowedMin;\r\n let allowedMax = currentRow.allowedMax;\r\n\r\n if (idealValue + 0.00000000000000000001 >= allowedMin && idealValue - 0.00000000000000000001 <= allowedMax) {\r\n result = currentRow;\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function computeNominalValue(desiredValue, preferredSeries, roundDirection) {\r\n if (preferredSeries === 'ideal') {\r\n const exponent = getExponent(desiredValue);\r\n const nominalValue = getBaseValue(desiredValue);\r\n return parseFloat(nominalValue.toString() + exponent);\r\n }\r\n\r\n return normalizeToPreferredSeries(desiredValue, preferredSeries, { forceRoundDirection: roundDirection });\r\n}\r\n\r\n// export function computeNominalValue(desiredValue, preferredSeries, forceRoundDirection) {\r\n// let desiredVal = getBaseValue(desiredValue);\r\n// let nominalValue = desiredVal;\r\n// if (preferredSeries === 'NA') nominalValue = desiredVal;\r\n// else {\r\n// for (var i = 0; i < preferredSeries.length; i++) {\r\n// if (preferredSeries[i] <= desiredVal && desiredVal < preferredSeries[i + 1]) {\r\n// var distanceBelow = desiredVal / preferredSeries[i];\r\n// var distanceAbove = preferredSeries[i + 1] / desiredVal;\r\n\r\n// if (forceRoundDirection === FilterConstants.roundDirection.down && distanceAbove > 1) {\r\n// nominalValue = preferredSeries[i];\r\n// } else if (forceRoundDirection === FilterConstants.roundDirection.up && distanceBelow > 1) {\r\n// nominalValue = preferredSeries[i + 1];\r\n// }\r\n// //round to closest\r\n// else {\r\n// if (distanceBelow < distanceAbove) {\r\n// nominalValue = preferredSeries[i];\r\n// } else if (distanceAbove < distanceBelow) {\r\n// nominalValue = preferredSeries[i + 1];\r\n// }\r\n// }\r\n\r\n// break;\r\n// }\r\n// }\r\n// }\r\n\r\n// let exponent = getExponent(desiredValue);\r\n// nominalValue = nominalValue.toString() + exponent;\r\n// let result = parseFloat(nominalValue);\r\n// return result;\r\n// }\r\n\r\nexport function getToleranceArray(value, toleranceConfig) {\r\n var multiplicationFactors = toleranceConfig.multiplicationFactors;\r\n var result = multiplicationFactors.map((item) => {\r\n var res = value * item;\r\n return res;\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function getSeries(selectedSeries) {\r\n var result = 'NA';\r\n switch (selectedSeries) {\r\n case FilterConstants.eSeries.E6:\r\n result = Series.eSeries6;\r\n break;\r\n case FilterConstants.eSeries.E12:\r\n result = Series.eSeries12;\r\n break;\r\n case FilterConstants.eSeries.E24:\r\n result = Series.eSeries24;\r\n break;\r\n case FilterConstants.eSeries.E48:\r\n result = Series.eSeries48;\r\n break;\r\n case FilterConstants.eSeries.E96:\r\n result = Series.eSeries96;\r\n break;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/// Given 11e-3, this will get 11\r\nfunction getBaseValue(idealValue) {\r\n let scientificNotation = idealValue.toExponential().toString();\r\n var indexOfE = scientificNotation.indexOf('e');\r\n let baseValue = parseFloat(scientificNotation.slice(0, indexOfE));\r\n\r\n return baseValue;\r\n}\r\n\r\n/// Given 11e-3, this will get e-3\r\nfunction getExponent(idealValue) {\r\n let scientificNotation = idealValue.toExponential().toString();\r\n var stringLength = scientificNotation.length;\r\n var indexOfE = scientificNotation.indexOf('e');\r\n\r\n let exponent = scientificNotation.slice(indexOfE, stringLength);\r\n return exponent;\r\n}\r\n","function arrayLengthsEqual(array) {\r\n var result = true;\r\n if (array.length > 0) {\r\n var benchMarkLength = array[0].length;\r\n for (var i = 1; i < array.length; i++) {\r\n if (array[i].length !== benchMarkLength) {\r\n result = false;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function groupByIndex(array) {\r\n var result = [];\r\n var validArray = arrayLengthsEqual(array);\r\n\r\n if (validArray) {\r\n var subArrayLength = array[0].length;\r\n for (var i = 0; i < subArrayLength; i++) {\r\n var newSubArray = [];\r\n for (var j = 0; j < array.length; j++) {\r\n newSubArray.push(array[j][i]);\r\n }\r\n\r\n result.push(newSubArray);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function rotate(arr, turnsParam) {\r\n let turnsAdjusted = turnsParam;\r\n for (\r\n var l = arr.length,\r\n turns = (Math.abs(turnsAdjusted) >= l && (turnsAdjusted %= l), turns < 0 && (turns += l), turns),\r\n i,\r\n x;\r\n turns;\r\n turns = (Math.ceil(l / turns) - 1) * turns - l + (l = turns)\r\n )\r\n for (i = l; i > turns; x = arr[--i], arr[i] = arr[i - turns], arr[i - turns] = x);\r\n\r\n return arr;\r\n}\r\n\r\nexport function joinArrays(array1, array2) {\r\n var length = Math.min(array1.length, array2.length);\r\n var result = [];\r\n for (var n = 0; n < length; n++) {\r\n result.push([array1[n], array2[n]]);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function joinToleranceArrays(frequency, nominal, minimum, maximum) {\r\n var length = Math.min(frequency.length, nominal.length, minimum.length, maximum.length);\r\n var result = [];\r\n for (var n = 0; n < length; n++) {\r\n result.push([frequency[n], nominal[n], minimum[n], maximum[n]]);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function getMinimumAndMaximumForOneStage(interestingCircuitValuesforOneStage) {\r\n var groupedByIndex = this.groupByIndex(interestingCircuitValuesforOneStage);\r\n var minForOneStage = [];\r\n var maxForOneStage = [];\r\n //loop through pts vs. frequency\r\n for (let j = 0; j < groupedByIndex.length; j++) {\r\n var minimum = Math.min.apply(Math, groupedByIndex[j]);\r\n var maximum = Math.max.apply(Math, groupedByIndex[j]);\r\n minForOneStage.push(minimum);\r\n maxForOneStage.push(maximum);\r\n }\r\n return { minForOneStage: minForOneStage, maxForOneStage: maxForOneStage };\r\n}\r\n\r\nexport function getMinimumAndMaximumArray(interestingCircuitValuesArray, nominalValuesArray) {\r\n var minimumValues = [];\r\n var maximumValues = [];\r\n //loop through stages\r\n for (let i = 0; i < interestingCircuitValuesArray.length; i++) {\r\n if (nominalValuesArray) {\r\n interestingCircuitValuesArray[i].push(nominalValuesArray[i]);\r\n }\r\n\r\n // var groupedByIndex = this.groupByIndex(interestingCircuitValuesArray[i]);\r\n // var minForOneStage = [];\r\n // var maxForOneStage = [];\r\n // //loop through pts vs. frequency\r\n // for(let j = 0; j < groupedByIndex.length; j++) {\r\n // var minimum = Math.min.apply(Math, groupedByIndex[j]);\r\n // var maximum = Math.max.apply(Math, groupedByIndex[j]);\r\n // minForOneStage.push(minimum);\r\n // maxForOneStage.push(maximum);\r\n // }\r\n\r\n var result = this.getMinimumAndMaximumForOneStage(interestingCircuitValuesArray[i]);\r\n minimumValues.push(result.minForOneStage);\r\n maximumValues.push(result.maxForOneStage);\r\n }\r\n\r\n return { minimumValues, maximumValues };\r\n}\r\n\r\nexport function addEnvelope(individualStageArray) {\r\n var groupedByIndex = this.groupByIndex(individualStageArray);\r\n var result = groupedByIndex.map((item) => {\r\n var sum = 0;\r\n for (var i = 0; i < item.length; i++) {\r\n sum += item[i];\r\n }\r\n\r\n return sum;\r\n });\r\n\r\n return result;\r\n}\r\n","import FilterConstants from '../../filter-constants';\r\nimport ToleranceInput from '../inputs/tolerance';\r\nimport C1 from '../components/c1';\r\nimport OpAmpSelection from '../component-selector/op-amp-selection';\r\nimport MathUtils from './math';\r\nimport * as CommonUtils from '../../utils/common';\r\n\r\nexport function computeR3AndR4(r3plusr4, gain) {\r\n var r3, r4;\r\n var result;\r\n\r\n if (gain >= 1.0001) {\r\n r3 = r3plusr4 / gain;\r\n r4 = r3plusr4 - r3;\r\n //make sure r3 value stays reasonable (at least 1 ohm)\r\n if (r3 < FilterConstants.Limits.RSMALL_COMP_LIMIT) {\r\n r4 = (r4 * FilterConstants.Limits.RSMALL_COMP_LIMIT) / r3;\r\n r3 = FilterConstants.Limits.RSMALL_COMP_LIMIT;\r\n }\r\n } else if (gain < 1.0001 && gain > 0.9999) {\r\n r3 = FilterConstants.Limits.INFINITY; //case of no resistor\r\n r4 = 0;\r\n } else {\r\n //error gain should never be less than 1\r\n return;\r\n }\r\n\r\n result = { r3: r3, r4: r4 };\r\n\r\n return result;\r\n}\r\n\r\nexport function computeMasterCapacitorValue(optimization, stageFp) {\r\n var initialCapacitorValue = optimization.determineCapacitorValue(stageFp);\r\n var toleranceInput = new ToleranceInput({\r\n capacitorTolerance: FilterConstants.capacitorTolerance.ideal,\r\n capacitorPreferredSeries: 'E24',\r\n });\r\n\r\n var c1 = C1.create({ idealValue: initialCapacitorValue });\r\n var result = c1.toCommercialComponent(toleranceInput).getNominalValue();\r\n return result;\r\n}\r\n\r\nexport function getInverseOfMasterCapacitorRatio(c1) {\r\n var c1Value = c1.value;\r\n var c1Tiny = c1.minimum;\r\n var c1Big = c1.maximum;\r\n var result = 1 - MathUtils.logBaseTen(c1Value / c1Tiny) / MathUtils.logBaseTen(c1Big / c1Tiny);\r\n return result;\r\n}\r\n\r\nexport function computeGbwToleranceArray(opAmp, toleranceInput) {\r\n var result = [];\r\n var gbw = opAmp.gbw;\r\n var opAmpGbwTolerance = toleranceInput.opAmpGbwTolerance;\r\n\r\n if (opAmpGbwTolerance === FilterConstants.gbwTolerance.twenty) {\r\n result.push(gbw * 0.8, gbw * 1, gbw * 1.2);\r\n } else {\r\n result.push(gbw);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function copyCircuit(circuit, isCommercial, toleranceInput) {\r\n var circuitModel = circuit.circuitModel;\r\n var algorithm = circuit.algorithm;\r\n var stageFp = circuit.stageFp;\r\n var gain = circuit.gain;\r\n var stageQ = circuit.stageQ;\r\n var optimization = circuit.optimization;\r\n var opAmpData = circuit.opAmp.data;\r\n var initialCapacitorValue = circuit.masterCapacitor.value;\r\n var r3Value = circuit.r3 ? circuit.r3.value : null;\r\n var gbw = circuit.opAmp.gbw;\r\n var opAmpCopy = null;\r\n if (opAmpData !== null) {\r\n opAmpCopy = OpAmpSelection.create({ data: opAmpData, gbw: gbw });\r\n } else {\r\n var rOut = circuit.opAmp.rOut;\r\n var specialGain = circuit.opAmp.specialGain;\r\n var iBias = circuit.opAmp.iBias;\r\n opAmpCopy = OpAmpSelection.create({ gbw: gbw, rOut: rOut, specialGain: specialGain, iBias: iBias });\r\n }\r\n\r\n var hash = {\r\n algorithm: algorithm,\r\n stageFp: stageFp,\r\n gain: gain,\r\n stageQ: stageQ,\r\n optimization: optimization,\r\n opAmp: opAmpCopy,\r\n initialCapacitorValue: initialCapacitorValue,\r\n };\r\n var result = circuitModel.create(hash);\r\n result.changeGainValues(r3Value);\r\n\r\n if ((typeof isCommercial === 'undefined' && toleranceInput !== null) || isCommercial) {\r\n toCommercialCircuit(result, toleranceInput);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function toCommercialCircuit(circuit, toleranceInput) {\r\n if (toleranceInput === null) {\r\n throw 'toleranceInput should not be null';\r\n }\r\n\r\n var supportedComponents = circuit.supportedComponents;\r\n for (let i = 0; i < circuit.supportedComponents.length; i++) {\r\n if (supportedComponents[i] === 'r4') circuit.updateR4();\r\n\r\n circuit.get(supportedComponents[i]).toCommercialComponent(toleranceInput);\r\n }\r\n\r\n return circuit;\r\n}\r\n\r\nexport function getResistorSize(resistor) {\r\n var idealValue = resistor.idealValue;\r\n var minimum = resistor.minimum;\r\n var maximum = resistor.maximum;\r\n var result = null;\r\n\r\n if (idealValue < minimum) {\r\n result = FilterConstants.sizing.tiny;\r\n } else if (idealValue > maximum) {\r\n result = FilterConstants.sizing.big;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function getGainChangeSupportStatus(r3Value, r4Value) {\r\n var disallow =\r\n //If R3 = 0, then it's not being used at all\r\n r3Value === 0 ||\r\n //If R3 is infinity, this means we have a buffer configuration\r\n CommonUtils.isNearInfinity(r3Value) ||\r\n //If R4 is huge compared to R3, then we don't know how to calculate slider, so don't allow (this should never happen)\r\n r4Value / r3Value >= FilterConstants.Limits.RBIG_COMP_LIMIT / FilterConstants.Limits.RSMALL_COMP_LIMIT;\r\n\r\n return !disallow;\r\n}\r\n\r\nexport function getResistorMinimumLimitMultiplier(r3Value, r4Value) {\r\n var result = FilterConstants.Limits.RSMALL_LOAD_LIMIT / (r3Value + r4Value);\r\n var r3TinyTemp = r3Value * result;\r\n\r\n if (r3TinyTemp < FilterConstants.Limits.RSMALL_COMP_LIMIT) {\r\n result = (result * FilterConstants.Limits.RSMALL_COMP_LIMIT) / r3TinyTemp;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function getResistorMaximumLimitMultiplier(r3Value, r4Value) {\r\n var result = FilterConstants.Limits.RBIG_COMP_LIMIT / r3Value;\r\n var rBigTemp = r4Value * result;\r\n\r\n if (rBigTemp > FilterConstants.Limits.RBIG_COMP_LIMIT) {\r\n result = (result * FilterConstants.Limits.RBIG_COMP_LIMIT) / rBigTemp;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function computeCapacitorLimit(capacitorBaseValue, capacitorLimitMultiplier) {\r\n return capacitorBaseValue * capacitorLimitMultiplier;\r\n}\r\n\r\nexport function computeGainResistorLimit(resistorBaseValue, resistorLimitMultiplier) {\r\n // Gain Resistors are R3 and R4\r\n return resistorBaseValue * resistorLimitMultiplier;\r\n}\r\n\r\nexport function computeResistorLimit(resistorBaseValue, capacitorLimitMultiplier) {\r\n return resistorBaseValue / capacitorLimitMultiplier;\r\n}\r\n\r\nexport function computeComponentValueFromMinMaxAndRcRatio(minimum, maximum, rcRatio) {\r\n var result = minimum * Math.pow(10, MathUtils.logBaseTen(maximum / minimum) * rcRatio);\r\n return result;\r\n}\r\n\r\nexport function createToleranceInputDefaults() {\r\n return new ToleranceInput({\r\n capacitorTolerance: FilterConstants.capacitorTolerance.five,\r\n resistorTolerance: FilterConstants.resistorTolerance.one,\r\n inductorTolerance: FilterConstants.inductorTolerance.five,\r\n opAmpGbwTolerance: FilterConstants.gbwTolerance.twenty,\r\n capacitorPreferredSeries: FilterConstants.eSeries.E24,\r\n resistorPreferredSeries: FilterConstants.eSeries.E96,\r\n inductorPreferredSeries: FilterConstants.eSeries.E12,\r\n });\r\n}\r\n","import MathUtils from './math';\r\n\r\n/**\r\n@function negatePhaseArray\r\n@param phaseArray\r\n@returns negatedPhaseArray\r\n@description This function converts phaseArray points to negatives\r\n*/\r\nvar negatePhase = function (phaseArray) {\r\n var negatedPhaseArray = [];\r\n\r\n for (var i = 0; i < phaseArray.length; i++) {\r\n negatedPhaseArray.push(phaseArray[i] * -1);\r\n }\r\n return negatedPhaseArray;\r\n};\r\n\r\n/**\r\n@function hzToRadPerSecond(frequencyArray)\r\n@param frequencyArray in Hz\r\n@returns [frequency in rad/s]\r\n@description takes a frequency array in HZ and converts to rad/s\r\n*/\r\nvar hzToRadPerSecond = function (frequencyArray) {\r\n var result = [];\r\n\r\n for (var i = 0; i < frequencyArray.length; i++) {\r\n result.push(frequencyArray[i] * (2 * Math.PI));\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n@function radianArrayToDegreeArray\r\n@param radian point\r\n@returns degree point\r\n@description This function takes as a parameter as a radian and returns a degree point\r\n*/\r\nexport function radianArrayToDegreeArray(radArray) {\r\n var result = radArray.map((item) => {\r\n return this.radianToDegree(item);\r\n });\r\n return result;\r\n}\r\n\r\n/**\r\n@function radianToDegree\r\n@param radian point\r\n@returns degree point\r\n@description This function takes as a parameter as a radian and returns a degree point\r\n*/\r\nexport function radianToDegree(radian) {\r\n return radian * (180 / Math.PI);\r\n}\r\n\r\n/**\r\n@function VVarrtoDBarr\r\n@param V/V arr\r\n@returns dB arr\r\n@description This function takes as a parameter as a V/V arr and returns a dB arr\r\n*/\r\nexport function VVarrtoDBarr(vvArr) {\r\n var vvArray = [];\r\n var dbArray = new Array();\r\n\r\n if (vvArr) {\r\n vvArray = vvArr; // putting the values of input vvArr to a new array vvArray.\r\n var len = vvArray.length;\r\n for (var i = 0; i < len; i++) {\r\n dbArray[i] = this.VVtoDB(vvArray[i]);\r\n }\r\n }\r\n\r\n return dbArray;\r\n}\r\n\r\n/**\r\n@function dBtoVV\r\n@param db point\r\n@returns V/V point\r\n@description This function takes as a parameter as a DB and returns a V/V point\r\n*/\r\nexport function dBtoVV(db) {\r\n var x = db / 20;\r\n var vv = Math.pow(10, x);\r\n\r\n return vv;\r\n}\r\n\r\n/**\r\n@function VVtoDB\r\n@param V/V point\r\n@returns dB point\r\n@description This function takes as a parameter as a V/V and returns a dB point\r\n*/\r\nexport function VVtoDB(vv) {\r\n var log10vv = MathUtils.logBaseTen(vv);\r\n var db = 20 * log10vv;\r\n\r\n return db;\r\n}\r\n\r\n/**\r\n@function groupDelay\r\n@param PhaseArray (in radians)\r\n@param FrequencyArray (in Hz)\r\n@returns [newFrequencyAxis,groupDelay] (x,y respectfully)\r\n@description This function loops through negatedPhaseArray and for each point (except the first one)\r\ngets the frequency difference between the 1st frequency point and previous frequency point, gets the\r\nphase difference between the first phase point and previous phase point,\r\ngets the group delay point by dividing the phase difference/ frequency difference,\r\ngets the new FrequencyAxis by getting the sqrt of the first point frequencyArray parameter and the previous frequencyArray point.\r\nUtilizes the joinArrays function to merge the newFrequencyAxis array with the groupDelayArray.\r\n*/\r\nexport function groupDelay(phaseArray, frequencyArray) {\r\n var frequencyDifference, phaseDifference;\r\n var groupDelayArray = [];\r\n var newFrequencyAxis = [];\r\n var negatedPhaseArray = negatePhase(phaseArray);\r\n\r\n //convert array from Hz to rad/s\r\n var frequencyRadPerSecondArray = hzToRadPerSecond(frequencyArray);\r\n\r\n //loop through negatedPhaseArray\r\n for (var i = 1; i < negatedPhaseArray.length; i++) {\r\n //calculate frequencyDifference\r\n frequencyDifference = frequencyRadPerSecondArray[i] - frequencyRadPerSecondArray[i - 1];\r\n\r\n //calculate phaseDifference\r\n phaseDifference = negatedPhaseArray[i] - negatedPhaseArray[i - 1];\r\n\r\n //calculate groupDelay\r\n groupDelayArray.push(phaseDifference / frequencyDifference);\r\n\r\n //use original frequencyArray to calculate newFrequencyAxis\r\n newFrequencyAxis.push(Math.sqrt(frequencyArray[i] * frequencyArray[i - 1]));\r\n }\r\n\r\n return { groupDelayArray, newFrequencyAxis };\r\n}\r\n\r\n/**\r\n@function phaseDelay\r\n@param phaseArray\r\n@param frequencyArray\r\n@returns result of negatedPhaseArray/frequency(radians/sec)\r\n@description This function converts frequency HZ to rad/s, calls negatePhaseArray, and divides negatedPhaseArray by the frequency result\r\n*/\r\nexport function phaseDelay(phaseArray, frequencyArray) {\r\n var radPerS = [],\r\n result = [];\r\n\r\n //convert frequencyArray convert from Hz to rad/s\r\n radPerS = hzToRadPerSecond(frequencyArray);\r\n //negate Phase Array\r\n var negatedPhaseArray = negatePhase(phaseArray);\r\n //divide negatedPhase array by frequency array\r\n for (var m = 0; m < radPerS.length; m++) {\r\n result.push(negatedPhaseArray[m] / radPerS[m]);\r\n }\r\n\r\n return result;\r\n}\r\n","const POINTS_PER_DECADE_63 /* vs 50 */ = [\r\n // by 0.05 (mostly)\r\n 1.0, 1.05, 1.1, 1.15, 1.2, 1.25, 1.3, 1.35, 1.4, 1.45, 1.5, 1.55, 1.6, 1.65, 1.7, 1.75, 1.8, 1.85, 1.9, 1.95, 2.0,\r\n // by 0.10\r\n 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2,\r\n // by 0.15\r\n 3.35, 3.5, 3.7, 3.85, 4.0, 4.15, 4.3,\r\n // by 0.20 (mostly)\r\n 4.5, 4.7, 4.85, 5.0, 5.2, 5.4, 5.6, 5.8, 6.0,\r\n // by 0.25\r\n 6.25, 6.5, 6.75, 7.0, 7.25, 7.5, 8.0, 8.25, 8.5, 8.75, 9.0, 9.25, 9.75, 10.0,\r\n];\r\n\r\nconst POINTS_PER_DECADE_99 /* vs 101 */ = [\r\n // by 0.02\r\n 1.0, 1.02, 1.04, 1.06, 1.08, 1.1,\r\n // by 0.025 (0.02/0.03/0.03/0.02)\r\n 1.12, 1.15, 1.18, 1.2, 1.22, 1.25, 1.28, 1.3, 1.32, 1.35, 1.38, 1.4, 1.42, 1.45, 1.48, 1.5,\r\n // by 0.05\r\n 1.55, 1.6, 1.65, 1.7, 1.75, 1.8, 1.85, 1.9, 1.95, 2.0, 2.05, 2.1, 2.15, 2.2, 2.25, 2.3, 2.35, 2.4, 2.45, 2.5, 2.55,\r\n 2.6, 2.7, 2.75, 2.8, 2.85, 2.9, 2.95, 3.0, 3.05, 3.1, 3.15, 3.2,\r\n // by 0.10\r\n 3.3, 3.4, 3.5, 3.6, 3.7, 3.9, 4.0, 4.1, 4.2,\r\n // by 0.125 (0.12/0.13/0.13/0.12)\r\n 4.32, 4.45, 4.58, 4.75, 4.88, 5.0,\r\n // by 0.15\r\n 5.15, 5.3, 5.5, 5.65, 5.8, 6.0, 6.15, 6.3, 6.45, 6.6, 6.75, 6.88, 7.0, 7.15, 7.32, 7.5, 7.65, 7.8,\r\n //by 0.20\r\n 8.0, 8.2, 8.4, 8.6, 8.8, 9.0, 9.2, 9.4, 9.6, 9.8, 10,\r\n];\r\n\r\nconst POINTS_PER_DECADE_607 /* vs 603 */ = [\r\n // by 0.005\r\n 1.005, 1.01, 1.015, 1.02, 1.025, 1.03, 1.035, 1.04, 1.045, 1.05, 1.055, 1.06, 1.065, 1.07, 1.075, 1.08, 1.085, 1.09,\r\n 1.095, 1.1, 1.105, 1.11, 1.115, 1.12, 1.125, 1.13, 1.135, 1.14, 1.145, 1.15, 1.155, 1.16, 1.165, 1.17, 1.175, 1.18,\r\n 1.185, 1.19, 1.195, 1.2, 1.205, 1.21, 1.215, 1.22, 1.225, 1.23, 1.235, 1.24, 1.245, 1.25, 1.255, 1.26, 1.265, 1.27,\r\n 1.275, 1.28, 1.285, 1.29, 1.295, 1.3, 1.305, 1.31, 1.315, 1.32, 1.325, 1.33, 1.335, 1.34, 1.345, 1.35, 1.355, 1.36,\r\n 1.365, 1.37, 1.375, 1.38, 1.385, 1.39, 1.395, 1.4, 1.405, 1.41, 1.415, 1.42, 1.425, 1.43, 1.435, 1.44, 1.445, 1.45,\r\n 1.455, 1.46, 1.465, 1.47, 1.475, 1.48, 1.485, 1.49, 1.495, 1.5, 1.505, 1.51, 1.515, 1.52, 1.525, 1.53, 1.535, 1.54,\r\n 1.545, 1.55, 1.555, 1.56, 1.565, 1.57, 1.575, 1.58, 1.585, 1.59, 1.595, 1.6,\r\n // by 0.0075 (.008/.007/0.007/0.008)\r\n 1.608, 1.615, 1.622, 1.63, 1.638, 1.645, 1.652, 1.66, 1.668, 1.675, 1.682, 1.69, 1.698, 1.705, 1.712, 1.72, 1.728,\r\n 1.735, 1.742, 1.75, 1.758, 1.765, 1.772, 1.78, 1.788, 1.795, 1.802, 1.81, 1.818, 1.825, 1.832, 1.84, 1.848, 1.855,\r\n 1.862, 1.87, 1.878, 1.885, 1.892, 1.9, 1.908, 1.915, 1.922, 1.93, 1.938, 1.945, 1.952, 1.96, 1.968, 1.975, 1.981,\r\n 1.987, 1.993, 2.0, 2.006, 2.013, 2.02, 2.028, 2.035, 2.042, 2.05, 2.057, 2.065, 2.072, 2.08, 2.088, 2.095, 2.102,\r\n 2.11, 2.118, 2.125, 2.133, 2.14, 2.148, 2.155, 2.162, 2.17, 2.178, 2.185, 2.192, 2.2, 2.208, 2.216, 2.225, 2.231,\r\n 2.238, 2.244, 2.25, 2.259, 2.267, 2.275, 2.282, 2.29, 2.298, 2.305, 2.312, 2.32, 2.328, 2.335, 2.342, 2.35, 2.358,\r\n 2.365, 2.372, 2.38,\r\n // by 0.01\r\n 2.39, 2.4, 2.41, 2.42, 2.43, 2.44, 2.45, 2.46, 2.47, 2.48, 2.49, 2.5, 2.51, 2.52, 2.53, 2.54, 2.55, 2.56, 2.57, 2.58,\r\n 2.59, 2.6, 2.61, 2.62, 2.63, 2.64, 2.65, 2.66, 2.67, 2.68, 2.69, 2.7, 2.71, 2.72, 2.73, 2.74, 2.75, 2.76, 2.77, 2.78,\r\n 2.79, 2.8, 2.81, 2.82, 2.83, 2.84, 2.85, 2.86, 2.87, 2.88, 2.89, 2.9, 2.91, 2.92, 2.93, 2.94, 2.95, 2.96, 2.97, 2.98,\r\n 2.99, 3.0, 3.01, 3.02, 3.03, 3.04, 3.05, 3.06, 3.07, 3.08, 3.09, 3.1, 3.11, 3.12, 3.13, 3.14, 3.15, 3.16, 3.17, 3.18,\r\n 3.19, 3.2, 3.21, 3.22, 3.23, 3.24, 3.25, 3.26, 3.27, 3.28, 3.29, 3.3, 3.31, 3.32, 3.33, 3.34, 3.35, 3.36, 3.37, 3.38,\r\n 3.39,\r\n // by 0.02\r\n 3.4, 3.42, 3.44, 3.46, 3.48, 3.5, 3.52, 3.54, 3.56, 3.58, 3.6, 3.62, 3.64, 3.66, 3.68, 3.7, 3.72, 3.74, 3.76, 3.78,\r\n 3.8, 3.82, 3.84, 3.86, 3.88, 3.9, 3.92, 3.93, 3.96, 3.98, 4.0, 4.02, 4.04, 4.06, 4.08, 4.1, 4.12, 4.14, 4.16, 4.18,\r\n 4.2, 4.22, 4.24, 4.26, 4.28, 4.3, 4.32, 4.34, 4.36, 4.38, 4.4, 4.42, 4.44, 4.46, 4.48, 4.5, 4.52, 4.54, 4.56, 4.58,\r\n 4.6, 4.62, 4.64, 4.66, 4.68, 4.7, 4.72, 4.74, 4.76, 4.78, 4.8, 4.82, 4.84, 4.86, 4.88, 4.9, 4.92, 4.94, 4.96, 4.98,\r\n 5.0, 5.02, 5.04, 5.06, 5.08, 5.1, 5.12, 5.14, 5.16, 5.18, 5.2, 5.22, 5.24, 5.26, 5.28, 5.3, 5.32, 5.34, 5.36, 5.38,\r\n 5.4, 5.42, 5.44, 5.46, 5.48, 5.5, 5.52, 5.54, 5.56, 5.58, 5.6, 5.62, 5.64, 5.66, 5.68, 5.7, 5.72, 5.74, 5.76, 5.78,\r\n 5.8, 5.82, 5.84, 5.86, 5.88, 5.9, 5.92, 5.94, 5.96, 5.98, 6.0, 6.02, 6.04, 6.06, 6.08, 6.1, 6.12, 6.14, 6.16, 6.18,\r\n 6.2, 6.22, 6.24, 6.26, 6.28, 6.3, 6.32, 6.34, 6.36, 6.38, 6.4, 6.42, 6.44, 6.46, 6.48, 6.5, 6.52, 6.54, 6.56, 6.58,\r\n 6.6, 6.62, 6.64, 6.66, 6.68, 6.7, 6.72, 6.74, 6.76, 6.78, 6.8, 6.82, 6.84, 6.86, 6.88, 6.9, 6.92, 6.94, 6.96, 6.98,\r\n 7.0,\r\n // 0.025 => (0.02/0.03/0.03/0.02)\r\n 7.02, 7.05, 7.08, 7.1, 7.12, 7.15, 7.18, 7.2, 7.22, 7.25, 7.28, 7.3, 7.32, 7.35, 7.38, 7.4, 7.42, 7.45, 7.48, 7.5,\r\n 7.52, 7.55, 7.58, 7.6, 7.62, 7.65, 7.68, 7.7, 7.72, 7.75, 7.78, 7.8, 7.82, 7.85, 7.88, 7.9, 7.92, 7.95, 7.98, 8.0,\r\n 8.02, 8.05, 8.08, 8.1, 8.12, 8.15, 8.18, 8.2, 8.22, 8.25, 8.28, 8.3, 8.32, 8.35, 8.38, 8.4, 8.42, 8.45, 8.48, 8.5,\r\n 8.52, 8.55, 8.58, 8.6, 8.62, 8.65, 8.68, 8.7, 8.72, 8.75, 8.78, 8.8, 8.82, 8.85, 8.88, 8.9, 8.92, 8.95, 8.98, 9.0,\r\n // 0.05\r\n 9.05, 9.1, 9.15, 9.2, 9.25, 9.3, 9.35, 9.4, 9.45, 9.5, 9.55, 9.6, 9.65, 9.7, 9.75, 9.8, 9.85, 9.9, 9.95, 10.0,\r\n];\r\n\r\n/**\r\n * Total of 63 points per decade\r\n * @param {*} start first frequency in array\r\n * @param {*} stop last frequency in array. Must be bigger than start.\r\n * @param {*} expectedPoints (optional): Array of points that are expected in each decade. Overrides POINTS_PER_DECADE constant. For example passing in [1,2] will result in 1, 2, 10, 20, 100, 200, etc.\r\n */\r\nexport function generateModerateGranularityFreqArray(start, stop, expectedPoints) {\r\n return generateFreqArray(start, stop, expectedPoints, POINTS_PER_DECADE_63);\r\n}\r\n\r\n/**\r\n * Total of 99 points per decade\r\n * @param {*} start first frequency in array\r\n * @param {*} stop last frequency in array. Must be bigger than start.\r\n * @param {*} expectedPoints (optional): Array of points that are expected in each decade. Overrides POINTS_PER_DECADE constant. For example passing in [1,2] will result in 1, 2, 10, 20, 100, 200, etc.\r\n */\r\nexport function generateFineGranularityFreqArray(start, stop, expectedPoints) {\r\n return generateFreqArray(start, stop, expectedPoints, POINTS_PER_DECADE_99);\r\n}\r\n\r\n/**\r\n * Total of 607 points per decade\r\n * @param {*} start first frequency in array\r\n * @param {*} stop last frequency in array. Must be bigger than start.\r\n * @param {*} expectedPoints (optional): Array of points that are expected in each decade. Overrides POINTS_PER_DECADE constant. For example passing in [1,2] will result in 1, 2, 10, 20, 100, 200, etc.\r\n */\r\nexport function generateExtremelyFineGranularityFreqArray(start, stop, expectedPoints) {\r\n return generateFreqArray(start, stop, expectedPoints, POINTS_PER_DECADE_607);\r\n}\r\n\r\nfunction generateFreqArray(start, stop, expectedPoints, pointsPerDecade) {\r\n // error checking\r\n if (typeof start !== 'number') throw new Error('Cannot generate frequency array, start freq is not a number');\r\n if (typeof stop !== 'number') throw new Error('Cannot generate frequency array, stop freq is not a number');\r\n\r\n if (start <= 0) throw new Error('Cannot generate frequency array when start freq is <= 0');\r\n if (start >= stop) throw new Error('Cannot generate frequency array when start frequency is >= stop frequency');\r\n\r\n let results = [],\r\n currentPosition = start;\r\n\r\n const expectedPointsArr = expectedPoints || pointsPerDecade;\r\n\r\n let decadeStart = Math.floor(Math.log10(start));\r\n\r\n // Iterate through each decade and add the corresponding point values\r\n for (let decade = decadeStart; currentPosition < stop; decade++) {\r\n let newPoints = expectedPointsArr\r\n .map((value) => Number(value + 'e' + decade))\r\n .filter((value) => !results.includes(value)); // ensure we aren't adding duplicates\r\n\r\n results.push(...newPoints);\r\n currentPosition = results[results.length - 1] + 1;\r\n }\r\n\r\n // find index of the nearest start value\r\n const index = results.findIndex((value) => value >= start);\r\n // if index is not 0, get the value before the index result above, this index will be the starting point of the array\r\n const startIndex = index === 0 ? index : index - 1;\r\n const endIndex = results.findIndex((value) => value >= stop);\r\n\r\n const filteredResult = results.filter((_value, index) => {\r\n return index >= startIndex && index <= endIndex;\r\n });\r\n\r\n return filteredResult;\r\n}\r\n","const MathUtils = {\r\n /**\r\n @function convolv \r\n @param array 2\r\n @returns convolution of two arrays.\r\n @description Takes parameter as two arrays and returns its convolution array.\r\n */\r\n convolve(xArr: number[], yArr: number[]) {\r\n const resultArray = [];\r\n const nLength = xArr.length;\r\n const mLength = yArr.length;\r\n\r\n for (let i = 0, j = 0; i < mLength; i++) {\r\n let result = 0;\r\n for (let k = 0; k < nLength; k++) {\r\n j = i - k;\r\n if (j >= 0 && j < mLength && typeof xArr[k] !== 'undefined' && typeof yArr[j] !== 'undefined')\r\n result += (xArr[k] as number) * (yArr[j] as number);\r\n else break;\r\n }\r\n resultArray[i] = result;\r\n }\r\n\r\n return resultArray;\r\n },\r\n\r\n /**\r\n @function asinh \r\n @param arg\r\n @returns asinh(arg)\r\n @description Returns the inverse hyperbolic sine of the number\r\n */\r\n asinh(arg: number) {\r\n return Math.log(arg + Math.sqrt(arg * arg + 1));\r\n },\r\n\r\n /**\r\n @function aCosh\r\n @param arg {int} the number you want acosh(value)\r\n @returns inverse hyperbolic cosine number\r\n @description this function calculates the inverse hyperbolic cosine number\r\n */\r\n aCosh(arg: number) {\r\n return Math.log(arg + Math.sqrt(arg * arg - 1));\r\n },\r\n\r\n /**\r\n @function sinh\r\n @param number\r\n @returns sinh(number)\r\n @description This function takes as a parameter as anumber and returns hyperbolic sine of the number\r\n */\r\n sinh(number: number) {\r\n const x = number;\r\n const expNumber = Math.exp(x);\r\n const expNegNumber = Math.exp(-x);\r\n\r\n const sinhNumber = (expNumber - expNegNumber) / 2;\r\n\r\n return sinhNumber;\r\n },\r\n\r\n /**\r\n @function cosh\r\n @param number\r\n @returns cosh(number)\r\n @description This function takes as a parameter as anumber and returns hyperbolic cos of the number\r\n */\r\n cosh(number: number) {\r\n const x = number;\r\n const expNumber = Math.exp(x);\r\n const expNegNumber = Math.exp(-x);\r\n\r\n const coshNumber = (expNumber + expNegNumber) / 2;\r\n\r\n return coshNumber;\r\n },\r\n\r\n /**\r\n @function logBaseTen\r\n @param your_log{int} the number you want to get the log base of 10 from.\r\n @returns log base ten of number.\r\n @description Takes in a number and gets the log base of ten.\r\n */\r\n logBaseTen(your_log: number) {\r\n const result = Math.log(your_log) / Math.log(10);\r\n\r\n return result;\r\n },\r\n\r\n /**\r\n @function getLogMidPoint\r\n */\r\n getLogMidPoint(maxVal: number, minVal: number) {\r\n const avg = (this.logBaseTen(maxVal) + this.logBaseTen(minVal)) / 2;\r\n const val = Math.pow(10, avg);\r\n\r\n return val;\r\n },\r\n};\r\nexport default MathUtils;\r\n","import LowPassFilter from '../filter/low-pass';\r\n\r\nexport function getAdcFilteredNoise(totalSpectralNoiseReferredToOutputArray, adcBandwidth, frequencyArray) {\r\n // var filter = LowPassFilter.create();\r\n var filterAmplitude = LowPassFilter.createFirstOrderFilterAmplitude(adcBandwidth, 1, frequencyArray);\r\n var result = filterAmplitude.map((item, index) => {\r\n return item.magnitude() * totalSpectralNoiseReferredToOutputArray[index];\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function getRmsNoise(totalSpectralNoiseReferredToOutputArray, adcBandwidth, frequencyArray) {\r\n var adcFilteredNoise = this.getAdcFilteredNoise(\r\n totalSpectralNoiseReferredToOutputArray,\r\n adcBandwidth,\r\n frequencyArray,\r\n );\r\n var rmsNoise = 0;\r\n for (var i = 1; i < frequencyArray.length; i++) {\r\n var frequencySpan = frequencyArray[i] - frequencyArray[i - 1];\r\n var noiseAverage = (adcFilteredNoise[i] + adcFilteredNoise[i - 1]) / 2;\r\n var noiseRootHz = noiseAverage * Math.sqrt(frequencySpan);\r\n rmsNoise = Math.sqrt(rmsNoise * rmsNoise + noiseRootHz * noiseRootHz);\r\n }\r\n\r\n return rmsNoise;\r\n}\r\n\r\nexport function getPeakToPeak(rmsNoise) {\r\n return rmsNoise * 6.6;\r\n}\r\n\r\nexport function getSNRandENOB(rmsNoise) {\r\n var ADC_RANGES = [1, 2, 5, 10];\r\n var result = ADC_RANGES.map((item) => {\r\n var maxsignal = item / (2 * Math.sqrt(2));\r\n var snr = (20 * Math.log(maxsignal / rmsNoise)) / Math.log(10);\r\n var enob = (snr - 1.76) / 6.02;\r\n return { adc: item, snr: snr, enob: enob };\r\n });\r\n\r\n return result;\r\n}\r\n","var get_next = function (k, value) {\r\n var i = k - 1;\r\n while (value[i - 1] >= value[i]) i--;\r\n\r\n // all in reverse order\r\n if (i < 1) return false;\r\n\r\n var j = k;\r\n while (value[j - 1] <= value[i - 1]) j--;\r\n\r\n swap(i - 1, j - 1, value);\r\n\r\n i++;\r\n j = k;\r\n\r\n while (i < j) {\r\n swap(i - 1, j - 1, value);\r\n i++;\r\n j--;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nvar swap = function (a, b, value) {\r\n var temp = value[a];\r\n value[a] = value[b];\r\n value[b] = temp;\r\n};\r\n\r\nvar put_next = function (pArray, k, value) {\r\n var tempArray = new Array();\r\n for (var i = 0; i < k; i++) tempArray.push(value[i]);\r\n\r\n pArray.push(tempArray);\r\n\r\n return pArray;\r\n};\r\n\r\nexport function permutation(number, select) {\r\n // check input\r\n if (isNaN(number) || number <= 0 || isNaN(select) || select <= 0 || select > number) {\r\n return;\r\n }\r\n\r\n var permutationArray = new Array();\r\n var value = new Array();\r\n\r\n var a = new Array();\r\n for (var i = 0; i < select; i++) a[i] = i + 1;\r\n\r\n // The while (true) has a break in the middle of the block and is trending \"i\" downward - we're good.\r\n //eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n for (var n = 0; n < select; n++) value[n] = a[n];\r\n\r\n // for this combination, list permutations in lexicographical order\r\n permutationArray = put_next(permutationArray, select, value);\r\n while (get_next(select, value)) permutationArray = put_next(permutationArray, select, value);\r\n\r\n // generate next combination in lexicographical order\r\n i = select - 1; // start at last item\r\n\r\n // find next item to increment\r\n while (a[i] === number - select + i + 1) --i;\r\n\r\n if (i < 0) break; // all done\r\n ++a[i];\r\n\r\n // do next combination\r\n for (var j = i + 1; j < select; j++) {\r\n a[j] = a[i] + j - i;\r\n }\r\n }\r\n\r\n return permutationArray;\r\n}\r\n","import * as ArrayUtils from './array';\r\nimport * as ConversionUtils from './conversion';\r\nimport AdiMath from './math';\r\n\r\nexport function getRangeLimits(graphData) {\r\n var model = graphData;\r\n var minx = Math.min(...model.map((x) => x[0]));\r\n var maxx = Math.max(...model.map((x) => x[0]));\r\n var miny = null;\r\n var maxy = null;\r\n if (graphData.length > 0 && graphData[0].length === 2) {\r\n miny = Math.min(...model.map((x) => x[1]));\r\n maxy = Math.max(...model.map((x) => x[1]));\r\n } else {\r\n var yValues = [];\r\n model.forEach((x) => {\r\n yValues.push(x[1]);\r\n yValues.push(x[2]);\r\n yValues.push(x[3]);\r\n });\r\n miny = Math.min(...yValues);\r\n maxy = Math.max(...yValues);\r\n }\r\n\r\n var result = { xmin: minx, xmax: maxx, ymin: miny, ymax: maxy };\r\n return result;\r\n}\r\n\r\nexport function getGraphData(stage) {\r\n var magnitude = stage.magnitude;\r\n var frequencyArray = stage.frequencyArray;\r\n var dbData = ConversionUtils.VVarrtoDBarr(magnitude);\r\n var dataPoints = ArrayUtils.joinArrays(frequencyArray, dbData);\r\n var limits = this.getRangeLimits(dataPoints);\r\n var result = { data: dataPoints, limits: limits };\r\n return result;\r\n}\r\n\r\n// magnitude util\r\nexport function getMagnitudeArray(individualStageArray) {\r\n var groupedByIndex = ArrayUtils.groupByIndex(individualStageArray);\r\n var result = groupedByIndex.map((item) => {\r\n var product = 1;\r\n for (var i = 0; i < item.length; i++) {\r\n product *= item[i];\r\n }\r\n\r\n return product;\r\n });\r\n\r\n return result;\r\n}\r\n\r\n// Phase util\r\nexport function getPhaseArray(individualStageArray) {\r\n var groupedByIndex = ArrayUtils.groupByIndex(individualStageArray);\r\n var summedByIndex = groupedByIndex.map((item) => {\r\n var sum = 0;\r\n for (var i = 0; i < item.length; i++) {\r\n sum += item[i];\r\n }\r\n\r\n return sum;\r\n });\r\n\r\n var result = summedByIndex;\r\n return result;\r\n}\r\n\r\n// phase util\r\nexport function unwrapPhase(phaseArray) {\r\n var halfcircle = Math.PI,\r\n fullcircle = 2 * Math.PI;\r\n\r\n var length = phaseArray.length;\r\n for (var n = 1; n <= length - 1; n++) {\r\n var phase_diff = phaseArray[n] - phaseArray[n - 1];\r\n if (phase_diff > halfcircle) {\r\n for (var k = n; k <= length - 1; k++) {\r\n phaseArray[k] = phaseArray[k] - fullcircle;\r\n }\r\n }\r\n if (phase_diff < -halfcircle) {\r\n for (var j = n; j <= length - 1; j++) {\r\n phaseArray[j] = phaseArray[j] + fullcircle;\r\n }\r\n }\r\n }\r\n\r\n return phaseArray;\r\n}\r\n\r\n// step response util\r\nexport function computeFirstOrderStepResponseIdeal(timePoint, stepResponseSetup) {\r\n var tw0 = -1 * timePoint * stepResponseSetup.w0;\r\n var result = stepResponseSetup.a - stepResponseSetup.b * Math.exp(tw0);\r\n return result;\r\n}\r\n\r\n// step response util\r\nexport function computeSecondOrderStepResponseIdeal(timePoint, stepResponseSetup) {\r\n var a = stepResponseSetup.a;\r\n var b = stepResponseSetup.b;\r\n var c = stepResponseSetup.c;\r\n var w0 = stepResponseSetup.w0;\r\n var Q = stepResponseSetup.Q;\r\n\r\n var X = -c - a * w0 * w0 + 2 * b * w0 * Q; //X=-c-a*wo**2+2*b*wo*Q;\r\n var Y = -(w0 * w0) * (-1 + 4 * Q * Q); //Y=-wo**2*(-1 + 4*Q**2);\r\n var W = a * w0 * w0 - c; //W=a*wo**2-c;\r\n var Z = Math.exp((-timePoint * w0) / 2 / Q); //Z=exp(-t*wo/2/Q);\r\n var sqrtY = Math.sqrt(Y); //sqrt(Y)\r\n var tYQ = (timePoint * sqrtY) / 2 / Q; //t*sqrt(Y)/2/Q\r\n var sinhY = AdiMath.sinh(tYQ); //sinh(t*sqrt(Y)/2/Q)\r\n var coshY = AdiMath.cosh(tYQ); //cosh(t*sqrt(Y)/2/Q)\r\n var sqrtNegY = Math.sqrt(-Y); //sqrt(-Y)\r\n var w02 = w0 * w0; //w0**2\r\n var w03 = w02 * w0; //w0**3\r\n var exptw0 = Math.exp(timePoint * w0); // exp(t*wo)\r\n var answer = null;\r\n if (Y > 0) {\r\n answer = (X * sinhY * Z) / sqrtY / w0 + (c + W * coshY * Z) / (w0 * w0);\r\n }\r\n if (Y < 0) {\r\n answer =\r\n (X * Math.sin((timePoint * sqrtNegY) / 2 / Q) * Z) / sqrtNegY / w0 +\r\n (c + W * Math.cos((timePoint * sqrtNegY) / 2 / Q) * Z) / (w0 * w0);\r\n }\r\n if (Y === 0) {\r\n answer =\r\n -(c - c * exptw0 - a * w02 + a * timePoint * w03 - b * timePoint * w02 + c * timePoint * w0) / (w02 * exptw0);\r\n }\r\n\r\n return answer;\r\n}\r\n","import { copy } from 'ember-copy';\r\n\r\nconst capacitorExponents = [-12, -9, -6];\r\nconst gainExponents = [0, 3, 6];\r\nconst decadesMultiplier = [1, 10, 100];\r\n\r\nexport function generateRange(series, exponents) {\r\n var possibleValues = [];\r\n for (var i = 0; i < exponents.length; i++) {\r\n for (var j = 0; j < decadesMultiplier.length; j++) {\r\n for (var k = 0; k < series.length; k++) {\r\n var strValue = series[k] * decadesMultiplier[j] + 'e' + exponents[i];\r\n var item = parseFloat(strValue);\r\n\r\n if (item > 100) {\r\n item = Math.round(item);\r\n }\r\n\r\n possibleValues.push(item);\r\n }\r\n }\r\n }\r\n\r\n return possibleValues;\r\n}\r\n\r\nexport function generateCapacitorRange(series) {\r\n var indexOf10 = series.indexOf(10);\r\n var copySeries = copy(series);\r\n copySeries.splice(indexOf10, 1);\r\n var result = generateRange(copySeries, capacitorExponents);\r\n return result;\r\n}\r\n\r\nexport function generateGainRange(series) {\r\n var indexOfOne = series.indexOf(1);\r\n var indexOfTen = series.indexOf(10);\r\n var copySeries = copy(series);\r\n if (indexOfOne !== -1 && indexOfTen !== -1) {\r\n copySeries.splice(indexOfTen, 1);\r\n }\r\n\r\n var result = generateRange(copySeries, gainExponents);\r\n return result;\r\n}\r\n\r\nexport function getMinimumValueIndex(values, minimum, precision) {\r\n var startingValue = values.filter((p) => p >= minimum)[0];\r\n var result = indexOfWithPrecision(values, startingValue, precision);\r\n\r\n if (startingValue < minimum) {\r\n result += 1;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function getMaximumValueIndex(values, maximum, precision) {\r\n var endingValue = values.filter((p) => p <= maximum).slice(-1)[0];\r\n var result = indexOfWithPrecision(values, endingValue, precision);\r\n return result;\r\n}\r\n\r\nexport function getValueIndex(values, minimum, maximum, value, precision) {\r\n var valueIsValid = maximum >= value && minimum <= value;\r\n var result = indexOfWithPrecision(values, value, precision);\r\n\r\n if (result === -1 && valueIsValid) {\r\n let startingBracket = values.filter((p) => p < value).slice(-1)[0];\r\n let endingBracket = values.filter((p) => p > value)[0];\r\n let resultValue = null;\r\n let differenceValueToStarting = value - startingBracket;\r\n let differenceValuesToEnding = endingBracket - value;\r\n\r\n // if value greater than maximum, choose the lower value, the starting bracket.\r\n if (value >= maximum) {\r\n resultValue = startingBracket;\r\n }\r\n\r\n // if value is less than minimum, choose the higher value, the ending bracket.\r\n else if (value <= minimum) {\r\n resultValue = endingBracket;\r\n }\r\n\r\n // if value is within the limits.\r\n else {\r\n // get the closer one. Works if value is within limits.\r\n if (differenceValueToStarting < differenceValuesToEnding) {\r\n resultValue = startingBracket;\r\n } else {\r\n resultValue = endingBracket;\r\n }\r\n }\r\n\r\n result = indexOfWithPrecision(values, resultValue, precision);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function indexOfWithPrecision(values, value, precision) {\r\n let result = -1;\r\n\r\n if (typeof value !== 'undefined' && value !== null && precision !== null) {\r\n let val = value.toPrecision(precision);\r\n for (let i = 0; i < values.length; i++) {\r\n var item = values[i].toPrecision(precision);\r\n if (item === val) {\r\n result = i;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n","import { set } from '@ember/object';\r\nimport FilterConstants from '../../filter-constants';\r\nimport FirstOrderStage from '../stages/first-order';\r\nimport SecondOrderStage from '../stages/second-order';\r\nimport * as ArrayUtils from './array';\r\n\r\nfunction gainNeed1(targetGain, stages, centerFrequency, maxQ) {\r\n var result = stages.map((stage) => {\r\n if (stage instanceof FirstOrderStage) {\r\n var gainNeed = gainNeeded(targetGain, stages, centerFrequency);\r\n var gain = stage.gain;\r\n if (gainNeed.gainNeeded) {\r\n var maxGainAllowed = 10;\r\n if (maxQ > 1) {\r\n maxGainAllowed = maxQ * 10;\r\n }\r\n\r\n gain = Math.min(maxGainAllowed, gainNeed.extraGainNeeded);\r\n }\r\n\r\n set(stage, 'gain', gain);\r\n }\r\n\r\n return stage;\r\n });\r\n\r\n return result;\r\n}\r\n\r\nfunction gainNeed2(targetGain, stages, centerFrequency, maxQ) {\r\n var gainNeed = gainNeeded(targetGain, stages, centerFrequency);\r\n var result = stages;\r\n if (gainNeed.gainNeeded) {\r\n var sortStages = stages;\r\n sortStages.sort(function (obj1, obj2) {\r\n return obj1.StageQ > obj2.StageQ ? -1 : obj1.StageQ < obj2.StageQ ? 1 : 0;\r\n });\r\n\r\n var value = [];\r\n for (var i = 0; i < sortStages.length; i++) {\r\n if (sortStages[i].stageQ < 0.708) {\r\n value[i] = sortStages[i];\r\n break;\r\n }\r\n }\r\n\r\n var index = sortStages.indexOf(value[i]) - 1;\r\n sortStages = ArrayUtils.rotate(sortStages, -index); // object rotation based on the value of Q\r\n\r\n result = sortStages.map((stage) => {\r\n if (stage.order === 2) {\r\n var qMargin = maxQ / stage.stageQ;\r\n var gainNeed2 = gainNeeded(targetGain, stages, centerFrequency);\r\n if (gainNeed2.gainNeeded) {\r\n var minVal = Math.min(gainNeed2.extraGainNeeded, qMargin);\r\n var stageGain = stage.gain;\r\n set(stage, 'gain', stageGain * minVal);\r\n }\r\n }\r\n\r\n return stage;\r\n });\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction gainNeed3(targetGain, stages, centerFrequency, dataQ) {\r\n var gainNeed3 = gainNeeded(targetGain, stages, centerFrequency);\r\n var result = stages;\r\n if (gainNeed3.gainNeeded) {\r\n var oneByNumOfStages = 1 / dataQ.length;\r\n var multiplier = Math.pow(gainNeed3.extraGainNeeded, oneByNumOfStages);\r\n\r\n result = stages.map((stage) => {\r\n var stageGain = stage.gain;\r\n set(stage, 'gain', stageGain * multiplier);\r\n return stage;\r\n });\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\nDistribute Gain Algorithm\r\nLAST UPDATED : 09/19/2012 11:11 AM\r\n@author Created by : Archita Ghosh on behalf of Collaborative Consulting and ADI\r\n@function gainNeeded\r\n@param {int} targetGain target gain provided by the user\r\n@param {object} order order obtained after the bessel algorithm.\r\n@returns gainNeeded a boolean value indicating if gain is needed or not ,extraGainNeeded,double value indicating how much extra gain is needed.\r\n@description

This function takes input as target gain and stage specifications and calculates extra gain needed

\r\n

INPUT : target gain, order , stage specifications of the order

\r\n

OUTPUT : Gain Needed -Boolean\r\nExtra Gain still needed -Double

\r\n

NOTE : We do not need center frequency in case of low pass filter

\r\n*/\r\n\r\nfunction gainNeeded(targetGain, stages, centerFrequency) {\r\n var allgain = 1;\r\n stages.forEach((stage) => {\r\n var multiplier = 1;\r\n if (stage.stageType === FilterConstants.filterType.bandPass) {\r\n let factor = centerFrequency / stage.stageFp - stage.stageFp / centerFrequency;\r\n multiplier = 1 / Math.sqrt(1 + stage.stageQ * stage.stageQ * factor * factor);\r\n }\r\n\r\n allgain = allgain * stage.gain * multiplier;\r\n });\r\n\r\n var gainNeeded = false;\r\n var extraGainNeeded = 1;\r\n\r\n if (targetGain > allgain) {\r\n gainNeeded = true;\r\n extraGainNeeded = targetGain / allgain;\r\n }\r\n\r\n var result = {\r\n gainNeeded: gainNeeded,\r\n extraGainNeeded: extraGainNeeded,\r\n };\r\n\r\n return result;\r\n}\r\n\r\nexport function setPreviousAndNextStage(stages) {\r\n var result = stages.map((stage, index) => {\r\n if (index > 0) {\r\n set(stage, 'previousStage', stages[index - 1]);\r\n }\r\n\r\n if (index < stages.length - 1) {\r\n set(stage, 'nextStage', stages[index + 1]);\r\n }\r\n\r\n return stage;\r\n });\r\n\r\n return result;\r\n}\r\n\r\n//function to add stageLetter to each stage of Order object\r\nexport function addStageLetter(stages) {\r\n // get the stage letter array to add the stage letter to the order object\r\n var stageLetterArray = FilterConstants.stageLetter;\r\n //var orderObject = data;\r\n\r\n for (var i = 0; i < stages.length; i++) {\r\n var stage = stages[i];\r\n stage.stageLetter = stageLetterArray[i]; // adding the stage letter to each order object\r\n }\r\n\r\n return stages;\r\n}\r\n\r\n/**\r\n * @param stageValues array of stage values (stageFp, stageQ, stageFz, gain, orderType, stageId)\r\n */\r\nexport function createTargetStages(stageValues) {\r\n var result = stageValues.map((stageValue) => {\r\n var stage = null;\r\n if (stageValue.orderType === 1) {\r\n stage = FirstOrderStage.create({\r\n stageFp: stageValue.stageFp,\r\n stageQ: stageValue.stageQ,\r\n gain: stageValue.gain,\r\n stageFz: stageValue.stageFz,\r\n stageId: stageValue.stageId,\r\n });\r\n } else {\r\n stage = SecondOrderStage.create({\r\n stageFp: stageValue.stageFp,\r\n stageQ: stageValue.stageQ,\r\n gain: stageValue.gain,\r\n stageFz: stageValue.stageFz,\r\n stageId: stageValue.stageId,\r\n });\r\n }\r\n\r\n return stage;\r\n });\r\n\r\n return result;\r\n}\r\n\r\nexport function clone(stage) {\r\n var result = null;\r\n if (stage instanceof FirstOrderStage) {\r\n result = FirstOrderStage.create(stage);\r\n } else {\r\n result = SecondOrderStage.create(stage);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function distributeGains(targetGain, stages, centerFrequency) {\r\n var dataQ = stages.map((stage) => {\r\n return stage.stageQ;\r\n });\r\n\r\n var stagesClone = [];\r\n for (var i = 0; i < stages.length; i++) {\r\n var item = clone(stages[i]);\r\n stagesClone.push(item);\r\n }\r\n\r\n var maxQ = Math.max.apply(Math, dataQ);\r\n stagesClone = gainNeed1(targetGain, stagesClone, centerFrequency, maxQ);\r\n stagesClone = gainNeed2(targetGain, stagesClone, centerFrequency, maxQ);\r\n stagesClone = gainNeed3(targetGain, stagesClone, centerFrequency, dataQ);\r\n\r\n // sorting the stage array in ascending order according to the value of StageId\r\n stagesClone.sort(function (obj1, obj2) {\r\n return obj1.stageId < obj2.stageId ? -1 : obj1.stageId > obj2.stageId ? 1 : 0;\r\n });\r\n\r\n return stagesClone;\r\n}\r\n\r\nexport function getStageInputsInImplementationOrder(stageInputs, detailsOfCircuits) {\r\n let individualStageInputs = [];\r\n for (let i = 0; i < detailsOfCircuits.length; i++) {\r\n const item = stageInputs.find((stage) => stage.stageLetter === detailsOfCircuits[i].stageLetter);\r\n if (item) {\r\n individualStageInputs.push(item);\r\n }\r\n }\r\n return individualStageInputs;\r\n}\r\n","import { modifier } from 'ember-modifier';\r\n\r\nexport default modifier(\r\n (element, [triggerValue, iconValue]) => {\r\n let triggerElem = element.querySelector('.ember-power-select-trigger');\r\n if (triggerValue && triggerElem) {\r\n triggerElem.setAttribute('data-qa-element', triggerValue);\r\n }\r\n let iconElem = element.querySelector('.ember-power-select-status-icon');\r\n if (iconValue && iconElem) {\r\n iconElem.setAttribute('data-qa-element', iconValue);\r\n }\r\n },\r\n { eager: false },\r\n);\r\n","import { modifier } from 'ember-modifier';\r\n\r\nexport default modifier((element, [isFocused]) => {\r\n let currentValue = element.innerText.trim() || element.value.trim();\r\n if (isFocused) {\r\n if (currentValue !== '') {\r\n element.select();\r\n }\r\n setTimeout(function () {\r\n element.focus();\r\n }, 0);\r\n }\r\n});\r\n","import EmberRouter from '@ember/routing/router';\r\nimport config from 'filter-wizard/config/environment';\r\n\r\nexport default class Router extends EmberRouter {\r\n location = config.locationType;\r\n rootURL = config.rootURL;\r\n}\r\n\r\nRouter.map(function () {\r\n this.route('legacy', { path: '/Type' });\r\n this.route('legacy', { path: '/type' });\r\n this.route('legacy', { path: '/Specifications' });\r\n this.route('legacy', { path: '/specifications' });\r\n this.route('legacy', { path: '/ComponentSelection' });\r\n this.route('legacy', { path: '/componentselection' });\r\n this.route('legacy', { path: '/ComponentTolerances' });\r\n this.route('legacy', { path: '/componenttolerances' });\r\n this.route('legacy', { path: '/FinalResults' });\r\n this.route('legacy', { path: '/finalresults' });\r\n});\r\n","import Route from '@ember/routing/route';\r\nimport { inject as service } from '@ember/service';\r\n\r\nexport default class EmptyRoute extends Route {\r\n @service router;\r\n model() {\r\n this.router.transitionTo('index', 'en', 'filterwizard');\r\n }\r\n}\r\n","import Route from '@ember/routing/route';\r\nimport { inject as service } from '@ember/service';\r\nimport { set } from '@ember/object';\r\nimport { getOwner } from '@ember/owner';\r\nimport { isTesting } from '@embroider/macros';\r\nimport '@formatjs/intl-getcanonicallocales/polyfill';\r\nimport '@formatjs/intl-pluralrules/polyfill';\r\nimport '@formatjs/intl-pluralrules/locale-data/en';\r\nimport '@formatjs/intl-pluralrules/locale-data/zh';\r\nimport '@formatjs/intl-pluralrules/locale-data/ja';\r\nimport IndexModel from '../models/index';\r\nimport ENV from '../config/environment';\r\nimport { loadTimeAnalytics } from '../utils/analytics';\r\nimport '@ebiz/ember-aditools-graph/ember-aditools-graph.css';\r\n\r\nconst LOCALES = { 'en-us': 'en', 'zh-cn': 'cn', 'ja-jp': 'jp', 'ru-ru': 'ru' };\r\n\r\nexport default class IndexRoute extends Route {\r\n @service intl;\r\n @service logger;\r\n @service('aditools-analytics') analytics;\r\n @service('aditools-site') siteconfig;\r\n @service fastboot;\r\n @service headData;\r\n @service opamps;\r\n\r\n beforeModel() {\r\n // Ensure the presence of the terminal slash in the URL\r\n if (window && window.location && window.location.href) {\r\n let url = window.location.href;\r\n let queryIndex = url.indexOf('?');\r\n if (queryIndex === -1) {\r\n queryIndex = url.length;\r\n }\r\n if (url[queryIndex - 1] !== '/') {\r\n let newUrl = url.substring(0, queryIndex) + '/' + url.substring(queryIndex);\r\n window.history.replaceState({}, '', newUrl);\r\n }\r\n }\r\n }\r\n\r\n model(params) {\r\n const configURL = ENV.rootURL.endsWith('/') ? ENV.rootURL + 'siteconfig.json' : ENV.rootURL + '/siteconfig.json';\r\n const docService = getOwner(this).lookup('service:-document');\r\n // This little song and dance is because document isn't defined in fastboot, but docService is\r\n let htmlElement = docService ? docService.documentElement : document ? document.querySelector('html') : undefined;\r\n let fullLanguage = htmlElement?.getAttribute('lang');\r\n if (!fullLanguage) fullLanguage = 'en-us';\r\n const defaultLanguage = params.lang ? params.lang : LOCALES[fullLanguage];\r\n return this.siteconfig\r\n .start(configURL, ENV.rootURL, defaultLanguage, this.intl.locales.concat('ru-ru'), this.logger, this.fastboot)\r\n .then((/*site*/) => {\r\n if (this.siteconfig.FullLocale === 'ru-ru') {\r\n this.intl.setLocale('en-us');\r\n } else {\r\n this.intl.setLocale(this.siteconfig.FullLocale);\r\n }\r\n this.analytics.start(\r\n ENV.toolname,\r\n this.siteconfig.AnalyticsUrl,\r\n this.fastboot.isFastBoot,\r\n isTesting(),\r\n ENV.environment === 'development',\r\n this.logger,\r\n );\r\n this.opamps.requiresExternalSimulation = params.invokerId && params.invokerId !== '';\r\n this.opamps.load(); //Initiate it and let it float until we really need it\r\n return new IndexModel(this.opamps);\r\n });\r\n }\r\n\r\n afterModel() {\r\n const docService = getOwner(this).lookup('service:-document');\r\n if (docService) {\r\n docService.documentElement.setAttribute('lang', this.siteconfig.FullLocale);\r\n }\r\n set(this, 'headData.analyticsUrl', this.siteconfig.AnalyticsUrl);\r\n set(this, 'headData.contentLanguage', this.siteconfig.IsoLocale);\r\n set(this, 'headData.canonicalUrl', this.siteconfig.CanonicalUrl);\r\n set(this, 'headData.title', this.intl.t('page.title').toString());\r\n set(this, 'headData.description', this.intl.t('page.description').toString());\r\n }\r\n\r\n setupController(controller, model) {\r\n super.setupController(controller, model);\r\n if (!this.fastboot.isFastBoot) {\r\n controller.setupConnectionToChannel();\r\n }\r\n controller.setupAdvisors();\r\n controller.checkBrowserSuitability();\r\n controller.setupStudioLinks();\r\n controller.setupShoppingCartUrl();\r\n if (!this.fastboot.isFastBoot) {\r\n controller.loadFromUrlDesign();\r\n }\r\n loadTimeAnalytics(window.appStartDateTime, new Date().getTime(), this.analytics); // Analytics Placed here for Load Complete. (Unless there is a better place)\r\n }\r\n}\r\n","import Route from '@ember/routing/route';\r\nimport { inject as service } from '@ember/service';\r\n\r\nexport default class LegacyRoute extends Route {\r\n @service router;\r\n model() {\r\n this.router.transitionTo('index');\r\n }\r\n}\r\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\n\r\n/////////////////////////////////////////////////////////////////////////////////\r\n// assets - service for getting internal resources from the application //\r\n/////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class AssetsService extends Service {\r\n @service logger;\r\n abortController = new AbortController();\r\n\r\n willDestroy() {\r\n this.abortController.abort();\r\n }\r\n\r\n getAsset(url, type) {\r\n return fetch(url, { headers: { 'Cache-Control': 'no-store' }, method: 'GET', signal: this.abortController.signal })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n throw `HTTP Request Failed: ${response.status} ${response.statusText}`;\r\n }\r\n switch (type) {\r\n case 'JSON':\r\n return response.json();\r\n case 'BLOB':\r\n return response.blob();\r\n case 'TEXT':\r\n default:\r\n return response.text();\r\n }\r\n })\r\n .catch((error) => {\r\n this.logger.error(`Fetch of ${url} failed: ${error}`);\r\n return null;\r\n });\r\n }\r\n}\r\n","const str = () => ('00000000000000000' + (Math.random() * 0xffffffffffffffff).toString(16)).slice(-16);\nconst uuid = () => {\n const a = str();\n const b = str();\n return a.slice(0, 8) + '-' + a.slice(8, 12) + '-4' + a.slice(13) + '-a' + b.slice(1, 4) + '-' + b.slice(4);\n};\nexport default uuid;\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\nimport { getURL } from '../utils/resource';\r\nimport { loadCDPAnalytics } from '../utils/analytics';\r\nimport uuid from 'v4-uuid';\r\n\r\nconst FETCH_POLL_INTERVAL_MS = 1000;\r\n\r\nexport default class CdpService extends Service {\r\n @service logger;\r\n @service fastboot;\r\n @service('aditools-site') siteconfig;\r\n @service('aditools-analytics') analytics;\r\n abortController = new AbortController();\r\n cdpSessionId;\r\n\r\n constructor(owner) {\r\n super(owner);\r\n this.cdpSessionId = uuid();\r\n }\r\n\r\n willDestroy() {\r\n this.abortController.abort();\r\n }\r\n\r\n _getFetchPromise(description, url) {\r\n let reqId = uuid();\r\n let fastboot = this.fastboot;\r\n let logger = this.logger;\r\n if (fastboot.isFastBoot) {\r\n return Promise.resolve(null);\r\n } else {\r\n let startTime = new Date();\r\n loadCDPAnalytics(\r\n 'Start',\r\n { sId: this.cdpSessionId, reqId: reqId, name: description, url: url, timeStart: startTime },\r\n this.analytics,\r\n );\r\n let pollHandler = setInterval(() => {\r\n let endTime = new Date();\r\n loadCDPAnalytics(\r\n 'In Process',\r\n {\r\n sId: this.cdpSessionId,\r\n reqId: reqId,\r\n name: description,\r\n timeStart: startTime,\r\n timeEnd: endTime,\r\n },\r\n this.analytics,\r\n );\r\n }, FETCH_POLL_INTERVAL_MS);\r\n return (this.request = fetch(getURL(url, fastboot, logger), { signal: this.abortController.signal })\r\n .then((response) => {\r\n let endTime = new Date();\r\n if (response.status !== 200) {\r\n throw { code: response.status, message: response.statusText };\r\n }\r\n clearInterval(pollHandler);\r\n loadCDPAnalytics(\r\n 'End',\r\n {\r\n sId: this.cdpSessionId,\r\n reqId: reqId,\r\n name: description,\r\n timeStart: startTime,\r\n timeEnd: endTime,\r\n status: { code: response.status, message: response.statusText },\r\n },\r\n this.analytics,\r\n );\r\n return response.json();\r\n })\r\n .catch((error) => {\r\n clearInterval(pollHandler);\r\n let endTime = new Date();\r\n let status = { code: error.code ? error.code : -1, message: error.message ? error.message : 'Other' };\r\n loadCDPAnalytics(\r\n 'End',\r\n {\r\n sId: this.cdpSessionId,\r\n reqId: reqId,\r\n name: description,\r\n timeStart: startTime,\r\n timeEnd: endTime,\r\n status: status,\r\n },\r\n this.analytics,\r\n );\r\n this.logger.error(\r\n `Load of ${description} at ${url} failed: HTTP Request Failed: ${status.code} ${status.message}`,\r\n );\r\n return null;\r\n }));\r\n }\r\n }\r\n _applyJsonOverrides(item, override, defaultpath, forceunique) {\r\n const suffix = override && override.startsWith('/testdata') ? 'json' : 'js';\r\n let url = override ? `${override}/${item}.${suffix}` : `${defaultpath}/${item}.js`;\r\n return forceunique ? url + '?id=' + new Date().getTime().toString() : url;\r\n }\r\n\r\n getDeviceModelData(item) {\r\n return this._getFetchPromise(\r\n 'Model data',\r\n this._applyJsonOverrides(item, this.siteconfig.ModelUrl, `${this.siteconfig.CdpUrl}/genericsmodelinfo`, false),\r\n );\r\n }\r\n getCmsData(item) {\r\n return this._getFetchPromise(\r\n 'CMS data',\r\n this._applyJsonOverrides(\r\n item,\r\n this.siteconfig.CmsUrl,\r\n `${this.siteconfig.CdpUrl}/cms/${this.siteconfig.CdpLocale}`,\r\n false,\r\n ),\r\n );\r\n }\r\n getPstIndex(item) {\r\n let nonRuLocale = this.siteconfig['CdpLocale'] === 'ru' ? 'en' : this.siteconfig['CdpLocale'];\r\n return this._getFetchPromise(\r\n 'PST index',\r\n this._applyJsonOverrides(\r\n item,\r\n this.siteconfig.PstIndexUrl,\r\n `${this.siteconfig.CdpUrl}/pst/view/${nonRuLocale}`,\r\n true,\r\n ),\r\n );\r\n }\r\n getPstData(item) {\r\n let nonRuLocale = this.siteconfig['CdpLocale'] === 'ru' ? 'en' : this.siteconfig['CdpLocale'];\r\n return this._getFetchPromise(\r\n 'PST data',\r\n this._applyJsonOverrides(\r\n item,\r\n this.siteconfig.PstDataUrl,\r\n `${this.siteconfig.CdpUrl}/pst/data/${nonRuLocale}`,\r\n true,\r\n ),\r\n );\r\n }\r\n getPstMapping() {\r\n return this._getFetchPromise(\r\n 'PST mappings',\r\n this._applyJsonOverrides(\r\n 'parametermapping',\r\n this.siteconfig.PstMappingUrl,\r\n `${this.siteconfig.CdpUrl}/pst`,\r\n true,\r\n ),\r\n );\r\n }\r\n getToolsConfig(item) {\r\n return this._getFetchPromise(\r\n 'tools config',\r\n this._applyJsonOverrides(item, this.siteconfig.ConfigUrl, `${this.siteconfig.CdpUrl}/toolsconfig`, true),\r\n );\r\n }\r\n}\r\n","export interface TabLinkOptions {\n id: any;\n domain?: string;\n verbose?: boolean;\n isInitiator?: boolean;\n useOnUnload?: boolean;\n\n // events\n onDisconnect?: (clean: boolean) => void;\n onConnect?: () => void;\n onData?: (data: any, event: Event) => void;\n}\n\nenum MessageType {\n DATA = 'data',\n DISCONNECT = 'disconnect',\n HANDSHAKE = 'hs',\n HANDSHAKE_ACK = 'hs_ack',\n}\n\ninterface BaseMessageType {\n type: MessageType;\n integrationId: string;\n}\ninterface DataMessageType extends BaseMessageType {\n data: any;\n}\n\nexport default class TabLink {\n _window?: Window;\n _useOnUnload = true;\n\n // configurable?\n _verbose = false;\n\n isInitiator = false;\n\n _myId = '';\n get id() {\n return this._myId;\n }\n\n domain = '*';\n\n // events\n onConnect?: () => void;\n onDisconnect?: (isClean: boolean) => void;\n onData?: (data: any, event: Event) => void;\n\n _messageEventListener: (event: MessageEvent) => void = (event) => {\n const data: BaseMessageType = event.data;\n console.log('_messageEventListener data:', data);\n if (data.integrationId !== this.id) {\n console.warn('Invalid ID received; message discarded.', data);\n return;\n }\n\n switch (data.type) {\n case MessageType.HANDSHAKE:\n if (this.isInitiator) {\n const msg: BaseMessageType = {\n type: MessageType.HANDSHAKE_ACK,\n integrationId: this.id,\n };\n this._window?.postMessage(msg, this.domain);\n if (this.onConnect) this.onConnect();\n } else {\n console.error('Handshake sent to wrong side!');\n }\n break;\n case MessageType.HANDSHAKE_ACK:\n if (!this.isInitiator) {\n if (this.onConnect) {\n this.onConnect();\n }\n } else {\n console.error('Handshack ack sent to wrong side!');\n }\n break;\n case MessageType.DATA:\n if (this._verbose) console.log('received data');\n {\n const msg: DataMessageType = event.data;\n if (typeof this.onData === 'function') {\n this.onData(msg.data, event);\n }\n }\n break;\n case MessageType.DISCONNECT:\n console.log('Intercepted clean disconnect request');\n if (this.onDisconnect) {\n this.onDisconnect(true);\n }\n return;\n }\n };\n\n _unloadEvent = () => {\n this._window?.postMessage({ type: MessageType.DISCONNECT }, this.domain);\n };\n\n constructor(winId: any, options: TabLinkOptions) {\n // Check if window is anonymous function.\n const windowIsAnonymousFunction = typeof winId === 'function';\n\n // If it is not, we will immediately save the window ID\n if (!windowIsAnonymousFunction) {\n this._window = winId;\n if (this._verbose) console.log('Got window from value');\n }\n\n // Save options\n this._myId = options.id;\n this.isInitiator = options.isInitiator ?? false;\n this.domain = options.domain ?? '*';\n this._verbose = options.verbose ?? false;\n // event options\n this.onDisconnect = options.onDisconnect;\n this.onConnect = options.onConnect;\n this.onData = options.onData;\n this._useOnUnload = options.useOnUnload ?? true;\n\n window.addEventListener('message', this._messageEventListener); // onMessage\n\n if (this._useOnUnload) {\n window.addEventListener('beforeunload', this._unloadEvent); // onBeforeUnload\n }\n\n // if not initiator, immediately trigger handshake\n if (!this.isInitiator) {\n const msg: BaseMessageType = {\n type: MessageType.HANDSHAKE,\n integrationId: this.id,\n };\n this._window?.postMessage(msg, this.domain);\n }\n\n if (windowIsAnonymousFunction) {\n this._window = winId();\n if (this._verbose) console.log('Got window from anonymous function'); // note: cannot console.log this._window\n }\n } //constructor\n\n send(data: any) {\n const msg: DataMessageType = {\n type: MessageType.DATA,\n integrationId: this.id,\n data,\n };\n this._window?.postMessage(msg, this.domain);\n }\n\n disconnect() {\n const msg: BaseMessageType = {\n type: MessageType.DISCONNECT,\n integrationId: this.id,\n };\n this._window?.postMessage(msg, this.domain);\n }\n\n destroy() {\n window.removeEventListener('message', this._messageEventListener);\n if (this._useOnUnload) {\n window.removeEventListener('beforeunload', this._unloadEvent);\n }\n\n delete this.onConnect;\n delete this.onData;\n delete this.onDisconnect;\n }\n} // class\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\nimport TabLink from '@ebiz/ember-aditools-ipc/utils/tab-link';\r\n\r\nconst TIMEOUT = 10000; // 10 seconds\r\n\r\n/////////////////////////////////////////////////////////////////////////////////\r\n// channel - service for communicating with another web applicaion via SignalR //\r\n/////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class ChannelService extends Service {\r\n @service('aditools-site') siteconfig;\r\n @service logger;\r\n connection = null;\r\n invokerId = null;\r\n isConnectionActive = null;\r\n selfLink = null;\r\n\r\n setInvokerId(id) {\r\n this.invokerId = id;\r\n }\r\n\r\n connect(eventList, handShakeTimeOut) {\r\n let selfRef = this;\r\n console.time('Handshake');\r\n handShakeTimeOut.timeOut = setTimeout(() => handShakeTimeOut.handlerFunc(), TIMEOUT);\r\n this.selfLink = new TabLink(window.opener, {\r\n id: this.invokerId,\r\n isInitiator: false,\r\n verbose: true,\r\n onConnect: () => {\r\n this.logger.log(`On Connect Event Raised!`);\r\n if (eventList['onConnect']) eventList['onConnect']();\r\n selfRef.isConnectionActive = true;\r\n },\r\n onDisconnect: (clean) => {\r\n this.logger.log(`On Disconnect Event Raised!` + (clean ? ' (Clean)' : ''));\r\n if (eventList['onDisconnect']) eventList['onDisconnect']();\r\n selfRef.invokerId = null;\r\n selfRef.isConnectionActive = false;\r\n },\r\n onData: (data) => {\r\n this.logger.log(`On Data Event Raised!`);\r\n if (eventList['onData']) eventList['onData'](data);\r\n },\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.selfLink.disconnect();\r\n }\r\n\r\n sendDesign(designData, designTimeOut) {\r\n console.time('Send Design');\r\n try {\r\n designTimeOut.timeOut = setTimeout(() => designTimeOut.handlerFunc(), TIMEOUT);\r\n this.selfLink.send({ type: 'design', design: designData });\r\n } catch (err) {\r\n console.timeEnd('Send Design');\r\n this.logger.error(`Send Design to Parent failed: ${err}`);\r\n }\r\n }\r\n}\r\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\nimport RSVP from 'rsvp';\r\n\r\n///////////////////////////////////////////////////////////////////////////////\r\n// download - service for downloading design files //\r\n///////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class DownloadService extends Service {\r\n @service('aditools-analytics') analytics;\r\n @service logger;\r\n @service('aditools-site') siteconfig;\r\n\r\n downloadDesign(downloadData) {\r\n return fetch(`${this.siteconfig.ApiUrl}/download/${this.siteconfig.AdiLocale}`, {\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Cache-Control': 'no-store',\r\n },\r\n method: 'POST',\r\n body: '\"' + encodeURIComponent(JSON.stringify(downloadData)) + '\"',\r\n })\r\n .then((response) => {\r\n if (response.ok) {\r\n let contentType = response.headers.get('Content-Type');\r\n let contentDisposition = response.headers.get('Content-Disposition');\r\n let fileName = '';\r\n if (contentDisposition && contentDisposition.indexOf('attachment') !== -1) {\r\n let filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n let matches = filenameRegex.exec(contentDisposition);\r\n if (matches !== null && matches[1]) {\r\n fileName = matches[1].replace(/['\"]/g, '');\r\n } else {\r\n fileName = 'DesignFiles.zip';\r\n }\r\n } else {\r\n fileName = 'DesignFiles.zip';\r\n }\r\n return RSVP.Promise.all([contentType, fileName, response.blob()]);\r\n } else {\r\n return RSVP.Promise.all(['', '', null]);\r\n }\r\n })\r\n .catch((error) => {\r\n this.logger.error(`Download failed: ${error}`);\r\n return RSVP.Promise.all(['', '', null]);\r\n });\r\n }\r\n}\r\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\n\r\nexport default class FeedbackService extends Service {\r\n @service('aditools-site') siteconfig;\r\n @service logger;\r\n deliverFeedback(name, email, feedback) {\r\n let feedbackData = {\r\n ToolId: 1,\r\n Name: encodeURIComponent(name),\r\n Email: encodeURIComponent(email),\r\n Feedback: encodeURIComponent(feedback),\r\n };\r\n return fetch(`${this.siteconfig.ApiUrl}/feedback/${this.siteconfig.AdiLocale}`, {\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n method: 'POST',\r\n body: JSON.stringify(feedbackData),\r\n })\r\n .then((response) => {\r\n return response.json();\r\n })\r\n .catch((error) => {\r\n this.logger.error(`Give feedback failed: ${error}`);\r\n return { status: -1 };\r\n });\r\n }\r\n}\r\n","import Service from '@ember/service';\r\n\r\n// Logging Service: Centralizes logging for the application so we can filter it or direct it as we please.\r\n\r\n/* eslint-disable no-console */\r\n// It's what this service *does* :)\r\nexport default class LoggingService extends Service {\r\n log() {\r\n console.log(...arguments);\r\n }\r\n info() {\r\n console.info(...arguments);\r\n }\r\n warn() {\r\n console.warn(...arguments);\r\n }\r\n error() {\r\n console.error(...arguments);\r\n }\r\n time() {\r\n console.time(...arguments);\r\n }\r\n timeEnd() {\r\n console.timeEnd(...arguments);\r\n }\r\n}\r\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\nimport StaticParts from '../data/local-parts';\r\nimport WhyNot from '../models/component-selector/why-not';\r\nimport * as Format from '../utils/format';\r\nimport FilterConstants from '../filter-constants';\r\nimport { collectOpAmps, collectMockOpAmps, DataType as D, CardinalityType as C } from './opamps/loader';\r\nimport { applyAdditionalCriteria, reasonsOpampPackagingMarginal } from './opamps/ratings';\r\nimport { evaluateOpAmps } from '@ebiz/aditools-filter/recommendations';\r\nimport { getCircuitValues } from 'filter-wizard/models/gestures/optimization';\r\nimport { camelize } from '@ember/string';\r\n\r\nlet set_iNoise = function (part) {\r\n if (\r\n 'iBias' in part &&\r\n part.iBias < 80e-12 &&\r\n 'architecture' in part &&\r\n -1 === part.architecture.indexOf('Zero Drift')\r\n ) {\r\n return 1e-12;\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\nconst PST_Parameters = {\r\n 0: { id: '0', name: 'partNumber', data: D.t_none, value: C.c_none, optional: true },\r\n 4502: { id: '4502', name: 'gbw', data: D.t_float, value: C.c_single, optional: false },\r\n 300: { id: '300', name: 'slewRate', data: D.t_float, value: C.c_single, optional: false },\r\n 4401: { id: '4401', name: 'rOut', data: D.t_float, value: C.c_single, optional: false },\r\n 4108: { id: '4108', name: 'supplyCurrent', data: D.t_float, value: C.c_single, optional: false },\r\n 4124: { id: '4124', name: 'iNoise', data: D.t_float, value: C.c_single, optional: false, default: set_iNoise },\r\n 4101: { id: '4101', name: 'vNoise', data: D.t_float, value: C.c_single, optional: false },\r\n 4099: { id: '4099', name: 'outHeadroomPlus', data: D.t_float, value: C.c_single, optional: false },\r\n 4100: { id: '4100', name: 'outHeadroomMinus', data: D.t_float, value: C.c_single, optional: false },\r\n 4084: { id: '4084', name: 'inHeadroomPlus', data: D.t_float, value: C.c_single, optional: false },\r\n 4085: { id: '4085', name: 'inHeadroomMinus', data: D.t_float, value: C.c_single, optional: false },\r\n 5034: { id: '5034', name: 'feedbackMethod', data: D.t_pulldown, value: C.c_single, optional: true },\r\n 5056: { id: '5056', name: 'architecture', data: D.t_pulldown, value: C.c_multi, optional: true },\r\n 2839: { id: '2839', name: 'minSupplyVoltage', data: D.t_float, value: C.c_single, optional: false },\r\n 2840: { id: '2840', name: 'maxSupplyVoltage', data: D.t_float, value: C.c_single, optional: false },\r\n 2687: { id: '2687', name: 'numberChannels', data: D.t_integer, value: C.c_single, optional: false },\r\n s4: { id: 's4', name: 'packageCode', data: D.t_pulldown, value: C.c_multi, optional: false },\r\n 4127: { id: '4127', name: 'minStableGain', data: D.t_float, value: C.c_single, optional: false },\r\n 4455: { id: '4455', name: 'cCm', data: D.t_float, value: C.c_single, optional: true },\r\n 4117: { id: '4117', name: 'cDiff', data: D.t_float, value: C.c_single, optional: true },\r\n 4500: { id: '4500', name: 'iBias', data: D.t_float, value: C.c_single, optional: false },\r\n 4501: { id: '4501', name: 'vos', data: D.t_float, value: C.c_single, optional: true },\r\n s1: { id: 's1', name: 'vintage', data: D.t_integer, value: C.c_single, optional: true },\r\n s7: { id: 's7', name: 'statusText', data: D.t_string, value: C.c_single, optional: true },\r\n s11: { id: 's11', name: 'status', data: D.t_integer, value: C.c_single, optional: true },\r\n s3: { id: 's3', name: 'price', data: D.t_float, value: C.c_single, optional: true },\r\n s14: { id: 's14', name: 'tempRange', data: D.t_string, value: C.c_single, optional: true },\r\n};\r\n\r\nlet buildOpAmpDisplayItem = function (opAmp, selectable, status, commentList, canOrderEvalBoard, _intl) {\r\n let opAmpItem = {\r\n partNumber: opAmp.partNumber,\r\n gbw: Format.formatFieldValue(parseFloat(opAmp.gbw), FilterConstants.fieldTypes.Engineering, '3s'),\r\n rawGBW: opAmp.gbw,\r\n minSupplyVoltage: Format.formatFieldValue(\r\n parseFloat(opAmp.minSupplyVoltage),\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n maxSupplyVoltage: Format.formatFieldValue(\r\n parseFloat(opAmp.maxSupplyVoltage),\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n feedbackMethod: opAmp.feedbackMethod\r\n ? opAmp.feedbackMethod\r\n : opAmp.architecture.indexOf('Current Feedback') > -1\r\n ? 'Current'\r\n : 'Voltage',\r\n iBias: !isNaN(parseFloat(opAmp.iBias))\r\n ? Format.formatFieldValue(parseFloat(opAmp.iBias), FilterConstants.fieldTypes.Engineering, '3s')\r\n : '-',\r\n vNoise: Format.formatFieldValue(parseFloat(opAmp.vNoise), FilterConstants.fieldTypes.Engineering, '3s'),\r\n supplyCurrent: Format.formatFieldValue(\r\n parseFloat(opAmp.supplyCurrent),\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n vos: !isNaN(parseFloat(opAmp.vos))\r\n ? Format.formatFieldValue(parseFloat(opAmp.vos), FilterConstants.fieldTypes.Engineering, '3s')\r\n : '-',\r\n numberChannels: Format.formatFieldValue(\r\n parseFloat(opAmp.numberChannels),\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n outHeadroomPlus: Format.formatFieldValue(\r\n parseFloat(opAmp.outHeadroomPlus),\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n outHeadroomMinus: Format.formatFieldValue(\r\n parseFloat(opAmp.outHeadroomMinus),\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n inHeadroomPlus: Format.formatFieldValue(\r\n parseFloat(opAmp.inHeadroomPlus),\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n inHeadroomMinus: Format.formatFieldValue(\r\n parseFloat(opAmp.inHeadroomMinus),\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ),\r\n statusText: opAmp.statusText,\r\n isLTSpiceOpAmp: 'spice' in opAmp ? 'Yes' : 'No',\r\n price: '$' + parseFloat(opAmp.price).toFixed(2),\r\n selectable: selectable,\r\n status: status,\r\n comments: buildComments(commentList, _intl),\r\n commentList: commentList,\r\n disallowed: commentList[0].messageId === 'opAmpSelection.status.not-allowed',\r\n canOrderEvalBoard: canOrderEvalBoard,\r\n vintage: opAmp.vintage,\r\n tempRange: opAmp.tempRange === '' ? ' ' : opAmp.tempRange,\r\n };\r\n\r\n return opAmpItem;\r\n};\r\n\r\nlet buildComments = function (commentList, intl) {\r\n let translatedElements = commentList.map((comment) => {\r\n return intl.t(comment.messageId, { value: comment.value }).toString();\r\n });\r\n if (translatedElements.length > 1) {\r\n return translatedElements[0] + ': ' + translatedElements.slice(1).join(', ');\r\n } else {\r\n return translatedElements[0];\r\n }\r\n};\r\n\r\nclass SelectionTableFilterOptions {\r\n constructor() {\r\n this.columns = undefined;\r\n this.filters = undefined;\r\n this.sortColumns = undefined;\r\n }\r\n columns;\r\n filters;\r\n sortColumns;\r\n}\r\n\r\n// ------ The service that interacts with the rest of the program ------\r\n\r\nexport default class OpAmpsService extends Service {\r\n @service('aditools-site') siteconfig;\r\n @service fastboot;\r\n @service logger;\r\n @service cdp;\r\n @service intl;\r\n\r\n request = null; // holds the promise from the request\r\n opamps = [];\r\n requiresExternalSimulation = false;\r\n pstData = null;\r\n pstViewPromise = null;\r\n pstView = null;\r\n pstMappingPromise = null;\r\n pstMapping = null;\r\n selectionFilterOptions = new SelectionTableFilterOptions();\r\n\r\n load() {\r\n this.logger.time('opampsLoadTime');\r\n const logger = this.logger;\r\n if (this.fastboot.isFastBoot) {\r\n this.request = Promise.resolve(null);\r\n } else if (this.siteconfig.OpAmpsUrl) {\r\n this.request = collectMockOpAmps(this.siteconfig.OpAmpsUrl, logger)\r\n .then((json) => {\r\n this.opamps = json.data;\r\n this.logger.timeEnd('opampsLoadTime');\r\n return json;\r\n })\r\n .catch((error) => {\r\n this.logger.error(`Load of mock opamps failed: ${error}`);\r\n this.logger.timeEnd('opampsLoadTime');\r\n });\r\n } else {\r\n this.request = collectOpAmps(\r\n this.cdp,\r\n this.siteconfig.AdiLocale,\r\n 'fw',\r\n StaticParts,\r\n PST_Parameters,\r\n logger,\r\n this.requiresExternalSimulation,\r\n )\r\n .then((opamps) => {\r\n this.opamps = opamps;\r\n this.logger.timeEnd('opampsLoadTime');\r\n\r\n this.pstData = opamps.pstData;\r\n this.pstViewPromise = opamps.pstViewPromise;\r\n this.pstMappingPromise = opamps.pstMappingPromise;\r\n\r\n return opamps;\r\n })\r\n .catch((error) => {\r\n this.logger.error(`Load of opamps failed: ${error}`);\r\n this.logger.timeEnd('opampsLoadTime');\r\n });\r\n }\r\n }\r\n\r\n getRequest() {\r\n return this.request;\r\n }\r\n\r\n getOpAmps() {\r\n return this.opamps;\r\n }\r\n\r\n getOpAmp(devicename) {\r\n return this.opamps.find(function (item) {\r\n return item.partNumber === devicename;\r\n });\r\n }\r\n\r\n getOpAmpsForDisplay(limits, posVS, negVS, implementation) {\r\n const modelParams = {\r\n circuits: limits.allowedLimits,\r\n individualStageInputs: {\r\n implementation: implementation,\r\n },\r\n vsPlus: posVS,\r\n vsMinus: negVS,\r\n optimization: limits.allowedLimits.optimization.name,\r\n stopbandFrequency: limits.allowedLimits.optimization.stopbandFrequency,\r\n };\r\n const paramsAllowed = this.getFilterOpampsParams(modelParams);\r\n const evaluatedOpAmps = evaluateOpAmps(\r\n paramsAllowed.opAmps,\r\n paramsAllowed.circuits,\r\n paramsAllowed.vsPlus,\r\n paramsAllowed.vsMinus,\r\n paramsAllowed.optimization,\r\n paramsAllowed.stopbandFrequency,\r\n );\r\n\r\n return this.opamps.map((amp) => {\r\n let selectable, canOrderEvalBoard, status;\r\n let commentList = [];\r\n const reasonsPackagingMarginal = reasonsOpampPackagingMarginal(amp);\r\n\r\n const evaluatedOpAmp = evaluatedOpAmps.find((opamp) => opamp.partNumber === amp.partNumber);\r\n if (evaluatedOpAmp) {\r\n switch (evaluatedOpAmp.status) {\r\n case 'notAllowed':\r\n status = FilterConstants.ampRecommendationStatus.notAllowed;\r\n commentList.push(WhyNot.create({ messageId: 'opAmpSelection.status.not-allowed' }));\r\n evaluatedOpAmp.reasons\r\n .map((reason) => {\r\n reason.messageId = `opAmpSelection.status.${reason.messageId}`;\r\n return reason;\r\n })\r\n .forEach((reason) => {\r\n commentList.push(reason);\r\n });\r\n selectable = false;\r\n canOrderEvalBoard = true;\r\n break;\r\n case 'recommended':\r\n if (reasonsPackagingMarginal.length === 0) {\r\n status = FilterConstants.ampRecommendationStatus.recommended;\r\n commentList.push(WhyNot.create({ messageId: 'opAmpSelection.status.recommended' }));\r\n canOrderEvalBoard = true;\r\n } else {\r\n // A recommended opamp becomes allowed/marginal when there are marginal reasons like\r\n // opamp channels, packaging, or eval board incompatibility\r\n status = FilterConstants.ampRecommendationStatus.marginal;\r\n commentList.push(WhyNot.create({ messageId: 'opAmpSelection.status.not-recommended' }));\r\n reasonsPackagingMarginal.forEach((reason) => {\r\n commentList.push(reason);\r\n });\r\n canOrderEvalBoard = reasonsPackagingMarginal.length === 0;\r\n }\r\n selectable = true;\r\n break;\r\n case 'allowed':\r\n status = FilterConstants.ampRecommendationStatus.marginal;\r\n commentList.push(WhyNot.create({ messageId: 'opAmpSelection.status.not-recommended' }));\r\n evaluatedOpAmp.reasons\r\n .map((reason) => {\r\n reason.messageId = `opAmpSelection.status.${reason.messageId}`;\r\n return reason;\r\n })\r\n .forEach((reason) => {\r\n commentList.push(reason);\r\n });\r\n\r\n reasonsPackagingMarginal.forEach((reason) => {\r\n commentList.push(reason);\r\n });\r\n selectable = true;\r\n canOrderEvalBoard = reasonsPackagingMarginal.length === 0;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n return buildOpAmpDisplayItem(amp, selectable, status, commentList, canOrderEvalBoard, this.intl);\r\n });\r\n }\r\n\r\n getOpAmpModelsArray(opAmpList) {\r\n return this.cdp.getDeviceModelData(this.getOpAmp(opAmpList.toUpperCase()).generic);\r\n }\r\n\r\n getFilterOpampsParams(model) {\r\n let opampList;\r\n if (model.opAmpsList && model.opAmpsList.length > 0) {\r\n opampList = model.opAmpsList.map((opamp) => {\r\n opamp.inHeadroomPlus = parseFloat(opamp.inHeadroomPlus);\r\n opamp.inHeadroomMinus = parseFloat(opamp.inHeadroomMinus);\r\n opamp.outHeadroomPlus = parseFloat(opamp.outHeadroomPlus);\r\n opamp.outHeadroomMinus = parseFloat(opamp.outHeadroomMinus);\r\n opamp.iNoise = parseFloat(opamp.iNoise);\r\n opamp.vNoise = parseFloat(opamp.vNoise);\r\n\r\n return opamp;\r\n });\r\n } else {\r\n opampList = this.opamps.map((opamp) => {\r\n opamp.inHeadroomPlus = parseFloat(opamp.inHeadroomPlus);\r\n opamp.inHeadroomMinus = parseFloat(opamp.inHeadroomMinus);\r\n opamp.outHeadroomPlus = parseFloat(opamp.outHeadroomPlus);\r\n opamp.outHeadroomMinus = parseFloat(opamp.outHeadroomMinus);\r\n opamp.iNoise = parseFloat(opamp.iNoise);\r\n opamp.vNoise = parseFloat(opamp.vNoise);\r\n\r\n return opamp;\r\n });\r\n }\r\n\r\n const circuitParams = getCircuitValues(model.circuits, model.individualStageInputs);\r\n let optimization = camelize(model.optimization);\r\n // Normalize to only provide one of the three defined values - default to power\r\n if (!['noise', 'voltageRange', 'power'].includes(optimization)) {\r\n optimization = 'power';\r\n }\r\n return {\r\n opAmps: opampList,\r\n circuits: circuitParams,\r\n vsPlus: model.vsPlus,\r\n vsMinus: model.vsMinus,\r\n optimization: optimization,\r\n stopbandFrequency: model.stopbandFrequency ?? 0,\r\n applyAdditionalCriteria: applyAdditionalCriteria,\r\n };\r\n }\r\n}\r\n","// Contains custom data for our differential amplifiers.\r\n// This file is used to define irregular data, particularly for fixed / programmable gain differential amplifiers or the differential amplifiers used inside our uModules\r\n\r\nexport let data = {\r\n \"map\": {\r\n // SAR ADCs\r\n \"AD4000\" : \"AD4000_AD4004_AD4008\",\r\n \"AD4001\" : \"AD4001_AD4003_AD4005_AD4007_AD4011\",\r\n \"AD4002\" : \"AD4002_AD4006_AD4010\",\r\n \"AD4003\" : \"AD4001_AD4003_AD4005_AD4007_AD4011\",\r\n \"AD4004\" : \"AD4000_AD4004_AD4008\",\r\n \"AD4005\" : \"AD4001_AD4003_AD4005_AD4007_AD4011\",\r\n \"AD4006\" : \"AD4002_AD4006_AD4010\",\r\n \"AD4007\" : \"AD4001_AD4003_AD4005_AD4007_AD4011\",\r\n \"AD4008\" : \"AD4000_AD4004_AD4008\",\r\n \"AD4010\" : \"AD4002_AD4006_AD4010\",\r\n \"AD4011\" : \"AD4001_AD4003_AD4005_AD4007_AD4011\",\r\n \"AD4020\" : \"AD4020_AD4021_AD4022\",\r\n \"AD4021\" : \"AD4020_AD4021_AD4022\",\r\n \"AD4022\" : \"AD4020_AD4021_AD4022\",\r\n \"AD4695\" : \"AD4695_AD4696_AD4697_AD4698\",\r\n \"AD4696\" : \"AD4695_AD4696_AD4697_AD4698\",\r\n \"AD4697\" : \"AD4695_AD4696_AD4697_AD4698\",\r\n \"AD4698\" : \"AD4695_AD4696_AD4697_AD4698\",\r\n \"AD7380\" : \"AD7380_AD7381\",\r\n \"AD7381\" : \"AD7380_AD7381\",\r\n \"AD7383\" : \"AD7383_AD7384\",\r\n \"AD7384\" : \"AD7383_AD7384\",\r\n \"AD7380-4\" : \"AD7380-4\",\r\n \"AD7381-4\" : \"AD7381-4\",\r\n \"AD7383-4\" : \"AD7383-4_AD7384-4\",\r\n \"AD7384-4\" : \"AD7383-4_AD7384-4\",\r\n \"AD7915\" : \"AD7915\",\r\n \"LTC2380-16\" : \"LTC2380-16\",\r\n \"LTC2387-16\" : \"LTC2387\",\r\n \"LTC2387-18\" : \"LTC2387\",\r\n \"AD4630-24\" : \"AD4630-24_AD4030-24\",\r\n \"AD4630-16\" : \"AD4630-16\",\r\n \"AD4030-24\" : \"AD4630-24_AD4030-24\",\r\n \"AD4632-24\" : \"AD4632-24_AD4032-24\",\r\n \"AD4632-16\" : \"AD4632-16\",\r\n \"AD4032-24\" : \"AD4632-24_AD4032-24\",\r\n \"AD4858\" : \"AD4858_AD4857\",\r\n \"AD4052\" : \"AD4052_AD4050_AD4051_AD4053_AD4054_AD4055\",\r\n \"AD7982\" : \"AD7982\",\r\n \"AD7980\" : \"AD7980\",\r\n \"AD7981\" : \"AD7981\",\r\n \"AD7983\" : \"AD7983\",\r\n \"AD4080\" : \"AD4080\",\r\n \"ADC40Msps\" : \"AD4080\", // temporary, to allow customer to preview\r\n \r\n\r\n // SAR uModules\r\n \"ADAQ4001\" : \"ADAQ4001_ADAQ4003\",\r\n \"ADAQ4003\" : \"ADAQ4001_ADAQ4003\",\r\n \"ADAQ4380-4\" : \"ADAQ4380-4\",\r\n \"ADAQ23875\" : \"ADAQ23875_ADAQ23876\",\r\n \"ADAQ23876\" : \"ADAQ23875_ADAQ23876\",\r\n \"ADAQ23878\" : \"ADAQ23878\",\r\n\r\n\r\n // Sigma-Delta ADCs\r\n \"AD4129-8\" : \"AD4129-8\",\r\n \"AD4130-8\" : \"AD4130-8\",\r\n \"AD4131-8\" : \"AD4131-8\",\r\n \"AD4134\" : \"AD4134\",\r\n \"AD7172-2\" : \"AD7172-2\",\r\n \"AD7172-4\" : \"AD7172-4\",\r\n \"AD7173-8\" : \"AD7173-8\",\r\n \"AD7175-2\" : \"AD7175-2\",\r\n \"AD7175-8\" : \"AD7175-8\",\r\n \"AD7177-2\" : \"AD7177-2\",\r\n \"AD7768-1\" : \"AD7768-1\",\r\n\r\n // Sigma-Delta uModules\r\n \"ADAQ7768-1\": \"ADAQ7768-1\"\r\n \r\n },\r\n \"partData\": {\r\n \"AD7982\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n multiplier : 0.475,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 0.525,\r\n referredTo : 'VREF'\r\n },\r\n },\r\n },\r\n supplyCurrent: [\r\n {\r\n userConfig: {},\r\n data : {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1e6 ],\r\n yValues: [ 350e-9, 15.238e-6, 1.524e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1e6 ],\r\n yValues: [ 0, 4.333e-6, 433.3e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1e6 ],\r\n yValues: [ 0, 3.4e-6, 340e-6 ]\r\n }\r\n }\r\n }\r\n ],\r\n },\r\n \"AD7980\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1e6 ],\r\n yValues: [ 350e-9, 15.238e-6, 1.524e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1e6 ],\r\n yValues: [ 0, 4.333e-6, 433.3e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1e6 ],\r\n yValues: [ 0, 3.4e-6, 340e-6 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD7981\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 600e3 ],\r\n yValues: [ 350e-9, 14.286e-6, 857.143e-6 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 600e3 ],\r\n yValues: [ 0, 5e-6, 300e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 600e3 ],\r\n yValues: [ 0, 5e-6, 300e-6 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD7983\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1.33e6 ],\r\n yValues: [ 350e-9, 14.7e-6, 1.955e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1.33e6 ],\r\n yValues: [ 0, 5e-6, 665e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1.33e6 ],\r\n yValues: [ 0, 5e-6, 665e-6 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD4000_AD4004_AD4008\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: { hiZ : 'off' },\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues : [ 0, 500e3, 1e6, 2e6 ],\r\n yValues : [ 1.14e-6, 1.39e-3, 2.72e-3, 5.42e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 0.05e-6, 55.6e-6, 111.1e-6, 277.8e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 0.4e-6, 180e-6, 380e-6, 750e-6 ]\r\n }\r\n }\r\n },\r\n {\r\n userConfig: { hiZ : 'on' },\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues : [ 0, 500e3, 1e6, 2e6 ],\r\n yValues : [ 1.3e-6, 1.59e-3, 3.11e-3, 6.19e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 0.057e-6, 63.5e-6, 127e-6, 317.5e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 0.457e-6, 205.7e-6, 434.3e-6, 857.1e-6 ]\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n \"AD4001_AD4003_AD4005_AD4007_AD4011\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.125,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n },\r\n max: {\r\n delta : 0.125,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent: [\r\n {\r\n userConfig: { hiZ: 'off' },\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 1e6, 2e6 ],\r\n yValues: [ 0.97e-6, 2.72e-3, 5.28e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 1e6, 2e6 ],\r\n yValues: [ 0.079e-6, 222.2e-6, 555.6e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 1e6, 2e6 ],\r\n yValues: [ 0.553e-6, 560e-6, 1.1e-3 ]\r\n }\r\n },\r\n },\r\n {\r\n userConfig: { hiZ: 'on' },\r\n data : {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 1e6, 2e6 ],\r\n yValues: [ 1.21e-6, 3.4e-3, 6.6e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 1e6, 2e6 ],\r\n yValues: [ 0.099e-6, 277.8e-6, 694.5e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 1e6, 2e6 ],\r\n yValues: [ 0.691e-6, 700e-6, 1.375e-3 ]\r\n }\r\n }\r\n }\r\n ],\r\n },\r\n \"AD4002_AD4006_AD4010\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent: [\r\n {\r\n userConfig: { hiZ: 'off' },\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 1.14e-6, 1.39e-3, 2.72e-3, 5.42e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 0.05e-6, 55.6e-6, 111.1e-6, 333.4e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 0.4e-6, 190e-6, 380e-6, 730e-6 ]\r\n }\r\n },\r\n },\r\n {\r\n userConfig: { hiZ: 'on' },\r\n data : {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 1.24e-6, 1.51e-3, 2.95e-3, 5.88e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 0.054e-6, 60.4e-6, 120.6e-6, 362e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 2e6 ],\r\n yValues: [ 0.44e-6, 206e-6, 412.6e-6, 792.6e-6 ]\r\n }\r\n }\r\n }\r\n ],\r\n },\r\n \"AD4020_AD4021_AD4022\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.125,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n },\r\n max: {\r\n delta : 0.125,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent: [\r\n {\r\n userConfig: { hiZ: 'off' },\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 1.8e6 ],\r\n yValues: [ 0.97e-6, 1.5e-3, 2.83e-3, 5e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 1.8e6 ],\r\n yValues: [ 0.076e-6, 72.2e-6, 222.2e-6, 555.6e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 1.8e6 ],\r\n yValues: [ 0.552e-6, 320e-6, 580e-6, 1e-3 ]\r\n }\r\n },\r\n },\r\n {\r\n userConfig: { hiZ: 'on' },\r\n data : {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 1.8e6 ],\r\n yValues: [ 0.97e-6, 1.9e-3, 3.68e-3, 6.33e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 1.8e6 ],\r\n yValues: [ 0.076e-6, 91.5e-6, 289.1e-6, 703.4e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3, 1e6, 1.8e6 ],\r\n yValues: [ 0.552e-6, 405e-6, 754.7e-6, 1.267e-3 ]\r\n }\r\n }\r\n }\r\n ],\r\n },\r\n \"AD4695_AD4696_AD4697_AD4698\": {\r\n requiredSupplyPins : [\r\n 'AVDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: { hiZ : 'off', ldo: 'off' },\r\n data: {\r\n 'AVDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.16e-6, 0.68e-6, 26e-6, 52e-6 ]\r\n },\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 1.5e-6, 42e-6, 2e-3, 4e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.25e-6, 3.5e-6, 162e-6, 325e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.165e-6, 3.3e-6, 160e-6, 320e-6 ]\r\n }\r\n }\r\n },\r\n {\r\n userConfig: { hiZ : 'on', ldo: 'off' },\r\n data: {\r\n 'AVDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.16e-6, 13e-6, 0.64e-3, 1.28e-3 ]\r\n },\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 1.5e-6, 53e-6, 2.5e-3, 5e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.25e-6, 3.5e-6, 162e-6, 325e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.165e-6, 0.3e-6, 6e-6, 12e-6 ]\r\n }\r\n }\r\n },\r\n {\r\n userConfig: { hiZ : 'off', ldo: 'on' },\r\n data: {\r\n 'AVDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.16e-6, 0.68e-6, 26e-6, 52e-6 ]\r\n },\r\n 'LDO_IN' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 9e-6, 64e-6, 2.6e-3, 5.2e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.25e-6, 3.5e-6, 162e-6, 325e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.165e-6, 3.3e-6, 160e-6, 320e-6 ]\r\n }\r\n }\r\n },\r\n {\r\n userConfig: { hiZ : 'on', ldo: 'on' },\r\n data: {\r\n 'AVDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.16e-6, 13e-6, 0.64e-3, 1.28e-3 ]\r\n },\r\n 'LDO_IN' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 9e-6, 64e-6, 2.6e-3, 5.2e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.25e-6, 3.5e-6, 162e-6, 325e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 500e3, 1e6 ],\r\n yValues: [ 0.165e-6, 0.3e-6, 6e-6, 12e-6 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD7380_AD7381\": {\r\n requiredSupplyPins : [\r\n 'VCC',\r\n 'VLOGIC'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 0.2,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : -0.2,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VCC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 2.3e-3, 21.5e-3 ]\r\n },\r\n 'VLOGIC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 10e-9, 3.5e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 0, 470e-6 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD7383_AD7384\": {\r\n requiredSupplyPins : [\r\n 'VCC',\r\n 'VLOGIC'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VCC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 2.3e-3, 22.5e-3 ]\r\n },\r\n 'VLOGIC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 10e-9, 3.5e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 0, 470e-6 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD7380-4\": {\r\n requiredSupplyPins : [\r\n 'VCC',\r\n 'VLOGIC'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 0.2,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : -0.2,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VCC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 1.7e-3, 38e-3 ]\r\n },\r\n 'VLOGIC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 10e-9, 7.3e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 0, 0.9e-3 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD7381-4\": {\r\n requiredSupplyPins : [\r\n 'VCC',\r\n 'VLOGIC'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 0.2,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : -0.2,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VCC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 1.7e-3, 38e-3 ]\r\n },\r\n 'VLOGIC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 10e-9, 7.3e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 0, 0.9e-3 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD7383-4_AD7384-4\": {\r\n requiredSupplyPins : [\r\n 'VCC',\r\n 'VLOGIC'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 0.2,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : -0.2,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VCC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 2.6e-3, 39e-3 ]\r\n },\r\n 'VLOGIC' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 155e-9, 7.6e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 4e6 ],\r\n yValues: [ 0, 0.91e-3 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD7915\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n multiplier : 0.475,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 0.525,\r\n referredTo : 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 1e6 ],\r\n yValues: [ 200e-9, 1.524e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 1e6 ],\r\n yValues: [ 65e-9, 433e-6 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 1e6 ],\r\n yValues: [ 85e-9, 340e-6 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"LTC2380-16\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'OVDD',\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.1,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n },\r\n max: {\r\n delta : 0.1,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 690e-9, 7.5e-3 ]\r\n },\r\n 'OVDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 101e-9, 1.1e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 110e-9, 1.2e-3 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"LTC2387\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VDDL',\r\n 'OVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.1,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n },\r\n max: {\r\n delta : 0.1,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 15e6 ],\r\n yValues: [ 2e-3, 5e-3 ]\r\n },\r\n 'VDDL' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 15e6 ],\r\n yValues: [ 27e-3, 31.4e-3 ]\r\n },\r\n 'OVDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 15e6 ],\r\n yValues: [ 8e-3, 8.8e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 15e6 ],\r\n yValues: [ 0.5e-3, 1.6e-3 ]\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n \"AD4630-24_AD4030-24\": {\r\n requiredSupplyPins : [\r\n 'VDD_5V',\r\n 'VDD_1.8V',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n multiplier : -0.007813,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 1.0078125,\r\n referredTo : 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n multiplier : -0.007813,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 1.0078125,\r\n referredTo : 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD_5V' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 500e-6, 2.7e-3 ]\r\n },\r\n 'VDD_1.8V' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 90e-6, 8.2e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 1e-6, 0.6e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 0, 1.8e-6 ]\r\n }\r\n }\r\n },\r\n ],\r\n userConfig: [\r\n {\r\n option: { refBuff: 'off'},\r\n dcErrors: {\r\n 'fullScaleErrorAtMaxTemp': 671, //lsbs\r\n 'fullScaleErrorDrift' : 25e-3,\r\n }\r\n },\r\n {\r\n option: { refBuff: 'on'},\r\n dcErrors: {\r\n 'fullScaleErrorAtMaxTemp': 1.342e3, //lsbs, twice as much as when ref buff is off\r\n 'fullScaleErrorDrift': 70e-3,\r\n // custom parameters for reference buffer - not in pdb\r\n 'RefIbias': 5e-9,\r\n 'RefIbiasAtMaxTemp': 50e-9,\r\n 'RefBufferOffset': 25e-6, //volts\r\n 'RefBufferDrift': 0.3e-6, // Volts / degrees C\r\n }\r\n },\r\n\r\n ]\r\n },\r\n \"AD4630-16\": {\r\n requiredSupplyPins : [\r\n 'VDD_5V',\r\n 'VDD_1.8V',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n multiplier : -0.007813,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 1.0078125,\r\n referredTo : 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n multiplier : -0.007813,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 1.0078125,\r\n referredTo : 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD_5V' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 500e-6, 2.7e-3 ]\r\n },\r\n 'VDD_1.8V' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 90e-6, 8.2e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 1e-6, 0.6e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 0, 1.8e-6 ]\r\n }\r\n }\r\n },\r\n ],\r\n userConfig: [\r\n {\r\n option: { refBuff: 'off'},\r\n dcErrors: {\r\n 'fullScaleErrorAtMaxTemp': 3.275, //lsbs\r\n 'fullScaleErrorDrift' : 50e-3,\r\n }\r\n },\r\n {\r\n option: { refBuff: 'on'},\r\n dcErrors: {\r\n 'fullScaleErrorAtMaxTemp': 6.55, //lsbs, twice as much as when ref buff is off\r\n 'fullScaleErrorDrift': 100e-3,\r\n // custom parameters for reference buffer - not in pdb\r\n 'RefIbias': 5e-9,\r\n 'RefIbiasAtMaxTemp': 50e-9,\r\n 'RefBufferOffset': 25e-6, //volts\r\n 'RefBufferDrift': 0.3e-6, // Volts / degrees C\r\n }\r\n },\r\n ]\r\n },\r\n \"AD4632-24_AD4032-24\": {\r\n requiredSupplyPins : [\r\n 'VDD_5V',\r\n 'VDD_1.8V',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n multiplier : -0.007813,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 1.0078125,\r\n referredTo : 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n multiplier : -0.007813,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 1.0078125,\r\n referredTo : 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD_5V' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3 ],\r\n yValues: [ 500e-6, 1.1e-3 ]\r\n },\r\n 'VDD_1.8V' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3 ],\r\n yValues: [ 90e-6, 2.1e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3 ],\r\n yValues: [ 1e-6, 0.15e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3 ],\r\n yValues: [ 0, 0.5e-6 ]\r\n }\r\n }\r\n },\r\n ],\r\n userConfig: [\r\n {\r\n option: { refBuff: 'off'},\r\n dcErrors: {\r\n 'fullScaleErrorAtMaxTemp': 671, //lsbs\r\n 'fullScaleErrorDrift' : 25e-3,\r\n }\r\n },\r\n {\r\n option: { refBuff: 'on'},\r\n dcErrors: {\r\n 'fullScaleErrorAtMaxTemp': 1.342e3, //lsbs, twice as much as when ref buff is off\r\n 'fullScaleErrorDrift': 70e-3,\r\n // custom parameters for reference buffer - not in pdb\r\n 'RefIbias': 5e-9,\r\n 'RefIbiasAtMaxTemp': 50e-9,\r\n 'RefBufferOffset': 25e-6, //volts\r\n 'RefBufferDrift': 0.3e-6, // Volts / degrees C\r\n }\r\n },\r\n ]\r\n },\r\n \"AD4632-16\": {\r\n requiredSupplyPins : [\r\n 'VDD_5V',\r\n 'VDD_1.8V',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n multiplier : -0.007813,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 1.0078125,\r\n referredTo : 'VREF'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n multiplier : -0.007813,\r\n referredTo : 'VREF'\r\n },\r\n max: {\r\n multiplier : 1.0078125,\r\n referredTo : 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD_5V' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3 ],\r\n yValues: [ 500e-6, 1.1e-3 ]\r\n },\r\n 'VDD_1.8V' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3 ],\r\n yValues: [ 90e-6, 2.1e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3 ],\r\n yValues: [ 1e-6, 0.15e-3 ]\r\n },\r\n 'REF' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 500e3 ],\r\n yValues: [ 0, 0.5e-6 ]\r\n }\r\n }\r\n },\r\n ],\r\n userConfig: [\r\n {\r\n option: { refBuff: 'off'},\r\n dcErrors: {\r\n 'fullScaleErrorAtMaxTemp': 3.275, //lsbs\r\n 'fullScaleErrorDrift' : 50e-3,\r\n }\r\n },\r\n {\r\n option: { refBuff: 'on'},\r\n dcErrors: {\r\n 'fullScaleErrorAtMaxTemp': 6.55, //lsbs\r\n 'fullScaleErrorDrift' : 100e-3,\r\n 'RefIbias': 5e-9,\r\n 'RefIbiasAtMaxTemp': 50e-9,\r\n 'RefBufferOffset': 25e-6, //volts\r\n 'RefBufferDrift': 0.3e-6 // Volts / degrees C\r\n }\r\n },\r\n ]\r\n },\r\n \"AD4858_AD4857\": {\r\n internalReference: {\r\n vOut: 4.096,\r\n },\r\n internalReferenceBuffer : {\r\n gain: 1,\r\n },\r\n requiredSupplyPins : [\r\n 'VCC',\r\n 'VDD',\r\n 'VIO',\r\n 'VEE'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : 3.2,\r\n referredTo : 'VEE'\r\n },\r\n max: {\r\n delta : -3.2,\r\n referredTo : 'VCC'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 3.2,\r\n referredTo : 'VEE'\r\n },\r\n max: {\r\n delta : -3.2,\r\n referredTo : 'VCC'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"VCC\" : \"ivcc\",\r\n \"VDD\" : \"ivdd\",\r\n \"VDDH\" : \"ivddh\",\r\n \"VDDL\" : \"ivddl\",\r\n \"VEE\" : \"ivee\",\r\n \"VIO\" : \"ivio\",\r\n },\r\n userConfig : [\r\n ]\r\n },\r\n \"AD4052_AD4050_AD4051_AD4053_AD4054_AD4055\": {\r\n requiredSupplyPins : [\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo : 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo : 'VDD'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.1,\r\n referredTo : 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo : 'VDD'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: {},\r\n data: {\r\n 'VDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 10e3, 1e6, 1.5e6, 2e6 ],\r\n yValues: [ 990e-9, 5.3e-6, 0.4e-3, 0.6e-3, 0.8e-3 ]\r\n },\r\n 'VIO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 2e6 ],\r\n yValues: [ 260e-9, 260e-9 ]\r\n },\r\n }\r\n }\r\n ]\r\n },\r\n \"AD4080\": {\r\n requiredSupplyPins : [\r\n 'VDD33'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo : 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo : 'VDD33'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.05,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n },\r\n max: {\r\n delta : 0.05,\r\n multiplier: 0.5,\r\n referredTo: 'VREF'\r\n }\r\n },\r\n },\r\n supplyCurrent : [\r\n {\r\n userConfig: { ldo: \"off\" },\r\n data: {\r\n 'VDD33' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 40e6 ],\r\n yValues: [ 5.4e-3, 15.7e-3 ]\r\n },\r\n 'VDD11' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 40e6 ],\r\n yValues: [ 15.3e-3, 23.2e-3 ]\r\n },\r\n 'IOVDD' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 40e6 ],\r\n yValues: [ 5.2e-3, 6e-3 ]\r\n },\r\n }\r\n },\r\n {\r\n userConfig: { ldo: \"on\" },\r\n data: {\r\n 'VDD33' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 40e6 ],\r\n yValues: [ 5.4e-3, 15.7e-3 ]\r\n },\r\n 'VDDLDO' : {\r\n dataFormat: \"x-y values\",\r\n xUnits: \"Samples/sec\",\r\n yUnits: \"A\",\r\n xValues: [ 0, 40e6 ],\r\n yValues: [ 21.5e-3, 29.8e-3 ]\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n // SAR uModules:\r\n \"ADAQ4001_ADAQ4003\" : {\r\n requiredSupplyPins : [\r\n 'VS+',\r\n 'VS-',\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n supplyCurrent: [], // uModule supply current handled by internal component supply currents\r\n userConfig : [\r\n {\r\n option: { gain: 1},\r\n dcErrors: {\r\n 'zeroScaleErrorDrift': 10, //ppm\r\n 'zeroScaleErrorAtMaxTemp': 5.89824, //lsbs\r\n }\r\n },\r\n {\r\n option: { gain: 0.454},\r\n dcErrors: {\r\n 'zeroScaleErrorDrift': 8,\r\n 'zeroScaleErrorAtMaxTemp': 2.9753344,\r\n }\r\n },\r\n {\r\n option: { gain: 0.909},\r\n dcErrors: {\r\n 'zeroScaleErrorDrift': 10,\r\n 'zeroScaleErrorAtMaxTemp': 5.36150016,\r\n }\r\n },\r\n {\r\n option: { gain: 1.9},\r\n dcErrors: {\r\n 'zeroScaleErrorDrift': 15,\r\n 'zeroScaleErrorAtMaxTemp': 18.67776,\r\n }\r\n },\r\n ]\r\n },\r\n \"ADAQ4380-4\" : {\r\n requiredSupplyPins : [\r\n 'VS+',\r\n 'VS-',\r\n 'VCC',\r\n 'VLOGIC'\r\n ],\r\n supplyCurrent: [], // uModule supply current handled by internal component supply currents\r\n userConfig : [\r\n {\r\n option: { gain: 0.3},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 0.6, //lsbs\r\n 'zeroScaleErrorDrift': 0.09 //ppm\r\n }\r\n },\r\n {\r\n option: { gain: 0.6},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 1.19,\r\n 'zeroScaleErrorDrift': 0.18\r\n }\r\n },\r\n {\r\n option: { gain: 1},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 1.99,\r\n 'zeroScaleErrorDrift': 0.3\r\n }\r\n },\r\n {\r\n option: { gain: 1.6},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 3.18,\r\n 'zeroScaleErrorDrift': 0.48\r\n }\r\n },\r\n ]\r\n },\r\n \"ADAQ23875_ADAQ23876\" : {\r\n requiredSupplyPins : [\r\n 'VS+',\r\n 'VS-',\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n supplyCurrent: [], // uModule supply current handled by internal component supply currents\r\n userConfig : [\r\n {\r\n option: { gain: 0.37},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 1, //lsbs\r\n 'zeroScaleErrorAtMaxTemp': 7.4, //lsbs\r\n }\r\n },\r\n {\r\n option: { gain: 0.73},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 2,\r\n 'zeroScaleErrorAtMaxTemp': 14.6,\r\n }\r\n },\r\n {\r\n option: { gain: 0.87},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 1.2,\r\n 'zeroScaleErrorAtMaxTemp': 17.4,\r\n }\r\n },\r\n {\r\n option: { gain: 1.38},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 1.2,\r\n 'zeroScaleErrorAtMaxTemp': 27.6,\r\n }\r\n },\r\n {\r\n option: { gain: 2.25},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 1.2,\r\n 'zeroScaleErrorAtMaxTemp': 45,\r\n }\r\n },\r\n ]\r\n },\r\n \"ADAQ23878\" : {\r\n requiredSupplyPins : [\r\n 'VS+',\r\n 'VS-',\r\n 'VDD',\r\n 'VIO'\r\n ],\r\n supplyCurrent: [], // uModule supply current handled by internal component supply currents\r\n userConfig : [\r\n {\r\n option: { gain: 0.37},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 2.5, //lsbs\r\n 'zeroScaleErrorAtMaxTemp': 24.864, //lsbs\r\n }\r\n },\r\n {\r\n option: { gain: 0.73},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 2,\r\n 'zeroScaleErrorAtMaxTemp': 49.056,\r\n }\r\n },\r\n {\r\n option: { gain: 0.87},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 2,\r\n 'zeroScaleErrorAtMaxTemp': 58.464,\r\n }\r\n },\r\n {\r\n option: { gain: 1.38},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 2,\r\n 'zeroScaleErrorAtMaxTemp': 92.736,\r\n }\r\n },\r\n {\r\n option: { gain: 2.25},\r\n dcErrors: {\r\n 'inlErrorAtMaxTemp' : 2,\r\n 'zeroScaleErrorAtMaxTemp': 151.2,\r\n }\r\n },\r\n ]\r\n },\r\n\r\n // Sigma-Delta ADCs\r\n \"AD4129-8\" : {\r\n requiredSupplyPins : [\r\n 'AVDD',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD\" : \"avdd\",\r\n \"IOVDD\" : \"iovdd\",\r\n //\"AVSS\" : \"avss\", //missing in AFM results\r\n },\r\n // NOTE:\r\n // DC Error section copied from AD4130-8. Need to update with AD4129-8 data.\r\n // userConfig : [\r\n // {\r\n // option: { pgaGain: 1},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 33.554432, //lsbs\r\n // 'zeroScaleErrorDrift': 0.046, //ppm\r\n // 'fullScaleErrorDrift' : 2, //ppm\r\n // 'inlErrorAt25C' : 84 //lsbs\r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 2},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 67.108864,\r\n // 'zeroScaleErrorDrift': 0.064,\r\n // 'fullScaleErrorDrift' : 2, \r\n // 'inlErrorAt25C' : 251.7,\r\n \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 4},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 134.217728,\r\n // 'zeroScaleErrorDrift': 0.1,\r\n // 'fullScaleErrorDrift' : 2, \r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 8},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 268.435456,\r\n // 'zeroScaleErrorDrift': 0.172,\r\n // 'fullScaleErrorDrift' : 2, \r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 16},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 536.870912,\r\n // 'zeroScaleErrorDrift': 0.316,\r\n // 'fullScaleErrorDrift' : 2,\r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 32},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 214.7483648,\r\n // 'zeroScaleErrorDrift': 0.604,\r\n // 'fullScaleErrorDrift' : 3, \r\n // 'inlErrorAt25C' : 251.7,\r\n \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 64},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 429.4967296,\r\n // 'zeroScaleErrorDrift': 1.18,\r\n // 'fullScaleErrorDrift' : 3, \r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 128},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 858.9934592,\r\n // 'zeroScaleErrorDrift': 2.332,\r\n // 'fullScaleErrorDrift' : 3, \r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // ]\r\n },\r\n \"AD4130-8\" : {\r\n requiredSupplyPins : [\r\n 'AVDD',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD\" : \"avdd\",\r\n \"IOVDD\" : \"iovdd\",\r\n //\"AVSS\" : \"avss\", //missing in AFM results\r\n },\r\n userConfig : [\r\n {\r\n option: { pgaGain: 1},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 33.554432, //lsbs\r\n 'zeroScaleErrorDrift': 0.046, //ppm\r\n 'fullScaleErrorDrift' : 2, //ppm\r\n 'inlErrorAt25C' : 84 //lsbs\r\n }\r\n },\r\n {\r\n option: { pgaGain: 2},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 67.108864,\r\n 'zeroScaleErrorDrift': 0.064,\r\n 'fullScaleErrorDrift' : 2, \r\n 'inlErrorAt25C' : 251.7,\r\n \r\n }\r\n },\r\n {\r\n option: { pgaGain: 4},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 134.217728,\r\n 'zeroScaleErrorDrift': 0.1,\r\n 'fullScaleErrorDrift' : 2, \r\n 'inlErrorAt25C' : 251.7 \r\n }\r\n },\r\n {\r\n option: { pgaGain: 8},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 268.435456,\r\n 'zeroScaleErrorDrift': 0.172,\r\n 'fullScaleErrorDrift' : 2, \r\n 'inlErrorAt25C' : 251.7 \r\n }\r\n },\r\n {\r\n option: { pgaGain: 16},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 536.870912,\r\n 'zeroScaleErrorDrift': 0.316,\r\n 'fullScaleErrorDrift' : 2,\r\n 'inlErrorAt25C' : 251.7 \r\n }\r\n },\r\n {\r\n option: { pgaGain: 32},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 214.7483648,\r\n 'zeroScaleErrorDrift': 0.604,\r\n 'fullScaleErrorDrift' : 3, \r\n 'inlErrorAt25C' : 251.7,\r\n \r\n }\r\n },\r\n {\r\n option: { pgaGain: 64},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 429.4967296,\r\n 'zeroScaleErrorDrift': 1.18,\r\n 'fullScaleErrorDrift' : 3, \r\n 'inlErrorAt25C' : 251.7 \r\n }\r\n },\r\n {\r\n option: { pgaGain: 128},\r\n dcErrors: {\r\n 'zeroScaleErrorAt25C' : 858.9934592,\r\n 'zeroScaleErrorDrift': 2.332,\r\n 'fullScaleErrorDrift' : 3, \r\n 'inlErrorAt25C' : 251.7 \r\n }\r\n },\r\n ]\r\n },\r\n \"AD4131-8\" : {\r\n requiredSupplyPins : [\r\n 'AVDD',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD\" : \"avdd\",\r\n \"IOVDD\" : \"iovdd\",\r\n //\"AVSS\" : \"avss\", //missing in AFM results\r\n },\r\n // NOTE:\r\n // DC Error section copied from AD4130-8. Need to update with AD4129-8 data.\r\n // userConfig : [\r\n // {\r\n // option: { pgaGain: 1},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 33.554432, //lsbs\r\n // 'zeroScaleErrorDrift': 0.046, //ppm\r\n // 'fullScaleErrorDrift' : 2, //ppm\r\n // 'inlErrorAt25C' : 84 //lsbs\r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 2},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 67.108864,\r\n // 'zeroScaleErrorDrift': 0.064,\r\n // 'fullScaleErrorDrift' : 2, \r\n // 'inlErrorAt25C' : 251.7,\r\n \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 4},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 134.217728,\r\n // 'zeroScaleErrorDrift': 0.1,\r\n // 'fullScaleErrorDrift' : 2, \r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 8},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 268.435456,\r\n // 'zeroScaleErrorDrift': 0.172,\r\n // 'fullScaleErrorDrift' : 2, \r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 16},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 536.870912,\r\n // 'zeroScaleErrorDrift': 0.316,\r\n // 'fullScaleErrorDrift' : 2,\r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 32},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 214.7483648,\r\n // 'zeroScaleErrorDrift': 0.604,\r\n // 'fullScaleErrorDrift' : 3, \r\n // 'inlErrorAt25C' : 251.7,\r\n \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 64},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 429.4967296,\r\n // 'zeroScaleErrorDrift': 1.18,\r\n // 'fullScaleErrorDrift' : 3, \r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // {\r\n // option: { pgaGain: 128},\r\n // dcErrors: {\r\n // 'zeroScaleErrorAt25C' : 858.9934592,\r\n // 'zeroScaleErrorDrift': 2.332,\r\n // 'fullScaleErrorDrift' : 3, \r\n // 'inlErrorAt25C' : 251.7 \r\n // }\r\n // },\r\n // ]\r\n },\r\n \"AD4134\" : {\r\n requiredSupplyPins : [\r\n 'AVDD5',\r\n 'DVDD5',\r\n 'IOVDD',\r\n 'DVDD1V8',\r\n 'AVDD1V8',\r\n 'CLKVDD',\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.1,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0.1,\r\n referredTo: 'AVDD5'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 0,\r\n referredTo: 'GND'\r\n },\r\n max: {\r\n delta : 0,\r\n multiplier: 0.5,\r\n referredTo: 'AVDD5'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD5\" : \"avdd5\",\r\n \"DVDD5\" : \"dvdd5\",\r\n \"IOVDD\" : \"iovdd\",\r\n \"DVDD1V8\" : \"dvdd1v8\",\r\n \"AVDD1V8\" : \"avdd1v8\",\r\n \"CLKVDD\" : \"clkvdd\",\r\n },\r\n userConfig : [\r\n {\r\n option: { powerMode: 'highPerformance'},\r\n dcErrors: {\r\n 'zeroScaleErrorDrift': 0.45, //ppm\r\n }\r\n },\r\n {\r\n option: { powerMode: 'lowPower'},\r\n dcErrors: {\r\n 'zeroScaleErrorDrift': 0.37, //ppm\r\n }\r\n },\r\n ]\r\n },\r\n \"AD7172-2\" : {\r\n requiredSupplyPins : [\r\n 'AVDD1',\r\n 'AVDD2',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD1\" : \"aIdd1\",\r\n \"AVDD2\" : \"aIdd2\",\r\n \"IOVDD\" : \"dIdd\",\r\n }\r\n },\r\n \"AD7172-4\" : {\r\n requiredSupplyPins : [\r\n 'AVDD1',\r\n 'AVDD2',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD1\" : \"aIdd1\",\r\n \"AVDD2\" : \"aIdd2\",\r\n \"IOVDD\" : \"dIdd\",\r\n }\r\n },\r\n \"AD7173-8\" : {\r\n requiredSupplyPins : [\r\n 'AVDD1',\r\n 'AVDD2',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : 0,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : -1.1,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 0,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : -1.1,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD1\" : \"aIdd1\",\r\n \"AVDD2\" : \"aIdd2\",\r\n \"IOVDD\" : \"dIdd\",\r\n }\r\n },\r\n \"AD7175-2\" : {\r\n requiredSupplyPins : [\r\n 'AVDD1',\r\n 'AVDD2',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : 0,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 0,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD1\" : \"aIdd1\",\r\n \"AVDD2\" : \"aIdd2\",\r\n \"IOVDD\" : \"dIdd\",\r\n }\r\n },\r\n \"AD7175-8\" : {\r\n requiredSupplyPins : [\r\n 'AVDD1',\r\n 'AVDD2',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : 0,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 0,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD1\" : \"aIdd1\",\r\n \"AVDD2\" : \"aIdd2\",\r\n \"IOVDD\" : \"dIdd\",\r\n }\r\n },\r\n \"AD7177-2\" : {\r\n requiredSupplyPins : [\r\n 'AVDD1',\r\n 'AVDD2',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : 0,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : 0,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"AVDD1\" : \"aIdd1\",\r\n \"AVDD2\" : \"aIdd2\",\r\n \"IOVDD\" : \"dIdd\",\r\n }\r\n },\r\n \"AD7768-1\" : {\r\n requiredSupplyPins : [\r\n 'AVDD1',\r\n 'AVDD2',\r\n 'AVSS',\r\n 'IOVDD'\r\n ],\r\n inputRange: {\r\n absolute: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n commonMode: {\r\n min: {\r\n delta : -0.05,\r\n referredTo: 'AVSS'\r\n },\r\n max: {\r\n delta : 0.05,\r\n referredTo: 'AVDD1'\r\n }\r\n },\r\n },\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n // These names may be wrong - update when AFM API call is fixed\r\n \"AVDD1\" : \"avdd1\",\r\n \"AVDD2\" : \"avdd2\",\r\n // \"AVSS\" : \"aIss\",\r\n \"IOVDD\" : \"iOvdd\",\r\n },\r\n dcErrors: {\r\n 'RefIbias': 300e-9,\r\n 'RefIbiasTC': 4e-9, // Amps / degrees C\r\n }\r\n },\r\n \"ADAQ7768-1\" : {\r\n requiredSupplyPins : [\r\n 'VDD_PGA',\r\n 'VSS_PGA',\r\n 'VDD2_PGA',\r\n 'VDD_FDA',\r\n 'VDD_ADC',\r\n 'VDD2_ADC',\r\n 'VDD_IO',\r\n ],\r\n supplyCurrentMap : {\r\n // Power supply name : AFM Result key\r\n \"VDD_ADC\" : \"avdd1\",\r\n \"VDD2_ADC\" : \"avdd2\",\r\n // \"AVSS\" : \"aIss\",\r\n \"VDD_IO\" : \"iOvdd\",\r\n },\r\n userConfig : [\r\n {\r\n option: { gain: 0.325},\r\n dcErrors: {\r\n 'inlErrorAt25C': 18, //lsbs\r\n 'zeroScaleErrorAt25C' : 3860, //lsbs\r\n 'zeroScaleErrorDrift': 2.4, //ppm\r\n 'RefIbias': 300e-9,\r\n 'RefIbiasTC': 4e-9, // Amps / degrees C\r\n }\r\n },\r\n {\r\n option: { gain: 0.65},\r\n dcErrors: {\r\n 'inlErrorAt25C': 17, \r\n 'zeroScaleErrorAt25C' : 3860,\r\n 'zeroScaleErrorDrift': 2.5,\r\n 'RefIbias': 300e-9,\r\n 'RefIbiasTC': 4e-9,\r\n }\r\n },\r\n {\r\n option: { gain: 1.3},\r\n dcErrors: {\r\n 'inlErrorAt25C': 17, \r\n 'zeroScaleErrorAt25C' : 5590,\r\n 'zeroScaleErrorDrift': 2.5,\r\n 'RefIbias': 300e-9,\r\n 'RefIbiasTC': 4e-9, \r\n }\r\n },\r\n {\r\n option: { gain: 2.6},\r\n dcErrors: {\r\n 'inlErrorAt25C': 18, \r\n 'zeroScaleErrorAt25C' : 7450,\r\n 'zeroScaleErrorDrift': 2.7,\r\n 'RefIbias': 300e-9,\r\n 'RefIbiasTC': 4e-9,\r\n }\r\n },\r\n {\r\n option: { gain: 5.2},\r\n dcErrors: {\r\n 'inlErrorAt25C': 19, \r\n 'zeroScaleErrorAt25C' : 10600,\r\n 'zeroScaleErrorDrift': 3.2,\r\n 'RefIbias': 300e-9,\r\n 'RefIbiasTC': 4e-9,\r\n }\r\n },\r\n {\r\n option: { gain: 10.4},\r\n dcErrors: {\r\n 'inlErrorAt25C': 22, \r\n 'zeroScaleErrorAt25C' : 17000,\r\n 'zeroScaleErrorDrift': 3.8,\r\n 'RefIbias': 300e-9,\r\n 'RefIbiasTC': 4e-9,\r\n }\r\n },\r\n {\r\n option: { gain: 20.8},\r\n dcErrors: {\r\n 'inlErrorAt25C': 30, \r\n 'zeroScaleErrorAt25C' : 29800,\r\n 'zeroScaleErrorDrift': 5.6,\r\n 'RefIbias': 300e-9,\r\n 'RefIbiasTC': 4e-9,\r\n }\r\n }\r\n ]\r\n },\r\n }\r\n}","\r\n/**\r\n * We store simulation constants for our simulation library here.\r\n */\r\n\r\nexport const noiseSources = {\r\n r1: \"r1\",\r\n r2: \"r2\",\r\n r3: \"r3\",\r\n r4: \"r4\",\r\n r5: \"r5\",\r\n r6: \"r6\",\r\n r7: \"r7\",\r\n r8: \"r8\",\r\n opAmpVoltage: \"OpAmpVoltage\",\r\n opAmpNegCurrent: \"OpAmpNegCurrent\",\r\n opAmpPosCurrent: \"OpAmpPosCurrent\",\r\n\r\n differentialAmpVoltage: \"DifferentialAmpVoltage\",\r\n differentialAmpNegCurrent: \"DifferentialAmpNegCurrent\",\r\n differentialAmpPosCurrent: \"DifferentialAmpPosCurrent\",\r\n differentialAmpVocm: \"DifferentialAmpVocm\",\r\n};\r\n\r\n//Noise of 1k resistor at 27 degrees C (300.15 K)\r\n//We use 27 degrees because that's what LTspice uses (TNOM)\r\nexport const resistorNoiseBase = 4.07137e-9;\r\n\r\nexport const Limits = {\r\n PARASITIC_INPUT_CAP: 3e-12\r\n};\r\n\r\n// When cascading y-parameter blocks, too-small series resistance leads to computational errors. \r\n// To avoid errors, We have been using 1e-3 for most series resistances.\r\n// TODO: replace all instances of small series resistors in our models with this constant and see how small we can make the value before unaccepatble computational errors occur\r\nexport const MIN_SERIES_RESISTANCE = 1e-3;\r\n\r\nexport const transferFunctionType = {\r\n r1: 'r1',\r\n r2: 'r2',\r\n r3: 'r3',\r\n r4: 'r4',\r\n r5: 'r5',\r\n r6: 'r6',\r\n r7: 'r7',\r\n r8: 'r8',\r\n ref: 'ref',\r\n vIn: 'vIn',\r\n vInPositivePath: 'vInPositivePath',\r\n vInNegativePath: 'vInNegativePath',\r\n opAmpNegINoise: 'opAmpNegINoise',\r\n opAmpPosINoise: 'opAmpPosINoise',\r\n opAmpVNoise: 'opAmpVNoise',\r\n\r\n differentialAmpNegINoise: 'differentialAmpNegINoise',\r\n differentialAmpPosINoise: 'differentialAmpPosINoise',\r\n differentialAmpVNoise: 'differentialAmpVNoise',\r\n differentialAmpVocmNoise: 'differentialAmpVocmNoise',\r\n vOcm: 'vOcm',\r\n vOutPositive: 'vOutPositive',\r\n vOutNegative: 'vOutNegative'\r\n};\r\n\r\nexport const outputVoltageType = {\r\n vOut: 'vOut',\r\n vOutPositive: 'vOutPositive',\r\n vOutNegative: 'vOutNegative',\r\n vOutDifferential: 'vOutDifferential',\r\n vOutCommonMode: 'vOutCommonMode',\r\n currentIntoGroundedVOutPositive: 'currentIntoGroundedVOutPositive',\r\n currentIntoGroundedVOutNegative: 'currentIntoGroundedVOutNegative',\r\n};\r\n\r\n // levelShift:'r5 Ground, r6 Reference' commonModePin:'Reference with r7 & r8' 1: R5 to GND, R6 to VREF, voltage divider between VREF and VOCM\r\n // levelShift:'r5 Reference, r6 Ground' commonModePin:'Reference with r7 & r8' 2: R5 to VREF, R6 to GND, voltage divider between VREF and VOCM \r\n // levelShift:'None' commonModePin:'Reference with r7 & r8' 3: No R5, R6, voltage divider between VREF and VOCM \r\n // levelShift:'r5 Ground, r6 Reference' commonModePin:'Ground' 4: R5 to GND, R6 to VREF, NO voltage divider between VREF and VOCM \r\n // levelShift:'r5 Reference, r6 Ground' commonModePin:'Ground' 5: R5 to VREF, R6 to GND, NO voltage divider between VREF and VOCM \r\n // levelShift:'None' commonModePin:'Ground' 6: No R5, R6, NO voltage divider between VREF and VOCM (VREF directly tied to VOCM) \r\n\r\nexport let configurationType = {\r\n r5Groundr6Reference: 'r5 Ground, r6 Reference',\r\n r5Referencer6Ground: 'r5 Reference, r6 Ground',\r\n none: 'None',\r\n ground: 'Ground',\r\n reference: 'Reference',\r\n referencer7r8: 'Reference with r7 & r8',\r\n negativeDifferential: 'Negative Differential',\r\n positiveDifferential: 'Positive Differential',\r\n negativeSingleEnded: 'Negative Single Ended',\r\n positiveSingleEnded: 'Positive Single Ended',\r\n // polarity and IO_TYPE should eventually replace above, since they are independent properties\r\n polarity: {\r\n positive: 'positive',\r\n negative: 'negative'\r\n }\r\n};\r\n\r\nexport const REFERENCE_CONFIG = {\r\n NONE : 'None',\r\n FLOATING: 'Floating',\r\n GROUND : 'Ground',\r\n REFERENCE_ONLY: 'Reference Only',\r\n DIVIDER : 'Divider',\r\n RC_FILTER : 'RC Filter',\r\n BUFFERED_RC_FILTER: 'Buffered RC Filter',\r\n BUFFER : 'Buffer',\r\n BUFFERED_DIVIDER: 'Buffered Divider',\r\n NONINVERTING : 'Noninverting',\r\n INVERTING : 'Inverting',\r\n REFERENCE_AND_INVERTING: 'Reference and Inverting'\r\n}\r\n\r\nexport const AMP_CONFIG = {\r\n // Available positive circuits\r\n BUFFERED_DIVIDER: 'Buffered Divider',\r\n DIVIDER: \"Divider\",\r\n BUFFER: \"Buffer\",\r\n NONINVERTING: \"Noninverting\",\r\n NONINVERTING_OFFSET_2_RESISTOR: \"Noninverting 2 Resistor with Offset\",\r\n NONINVERTING_OFFSET_3_RESISTOR: \"Noninverting 3 Resistor with Offset\",\r\n DIVIDER_OFFSET_2_RESISTOR: \"2 Resistor Divider with Offset\",\r\n DIVIDER_OFFSET_3_RESISTOR: \"3 Resistor Divider with Offset\",\r\n NONINVERTING_DIVIDER_OFFSET: \"Noninverting Divider with Offset\",\r\n // Available negative circuits\r\n INVERTING: \"Inverting\",\r\n INVERTING_OFFSET_4_RESISTOR: \"Inverting 4 Resistor with Offset\",\r\n INVERTING_OFFSET_2_RESISTOR: \"Inverting 2 Resistor with Offset\" ,\r\n};\r\n\r\nexport const IO_TYPE = {\r\n SINGLE_ENDED_VOLTAGE: \"Single Ended Voltage\",\r\n DIFFERENTIAL_VOLTAGE: \"Differential Voltage\",\r\n SINGLE_ENDED_CURRENT: \"Single Ended Current\",\r\n DIFFERENTIAL_CURRENT: \"Differential Current\",\r\n SINGLE_ENDED_IMPEDANCE: \"Single Ended Impedance\",\r\n DIFFERENTIAL_IMPEDANCE: \"Differential Impedance\",\r\n GENERIC_ADMITTANCE: \"Generic Admittance\"\r\n}\r\n\r\nexport const SENSOR_TYPE = {\r\n VOLTAGE_SENSOR: 'Voltage Sensor',\r\n CURRENT_SENSOR: 'Current Sensor',\r\n BRIDGE_SENSOR: 'Bridge Sensor',\r\n PHOTODIODE: 'Photodiode'\r\n}\r\n\r\nexport const INPUT_PROTECTION_TYPE = {\r\n VARISTOR : 'Varistor',\r\n BACK_TO_BACK : 'Back to Back',\r\n STACKED : 'Stacked'\r\n}\r\n\r\nexport const POWER_SUPPLIES = {\r\n POS : 'vsP',\r\n NEG : 'vsN',\r\n}\r\n\r\nexport const ADC_PIN_LIMITERS = {\r\n GND : 'GND',\r\n REF : 'VREF',\r\n AVDD : 'AVDD',\r\n AVSS : 'AVSS',\r\n AVDD5 : 'AVDD5',\r\n AVDD1 : 'AVDD1',\r\n}\r\n\r\nconst COMMON_PIN_NAMES = {\r\n INPUT_POS: 'Input+',\r\n INPUT_NEG: 'Input-',\r\n OUTPUT: 'Output',\r\n OUTPUT_POS: 'Output+',\r\n OUTPUT_NEG: 'Output-',\r\n OUTPUT_CM : 'OutputCM',\r\n VOCM: 'Vocm',\r\n REF : 'Ref',\r\n SUPPLY_POS: 'vsP',\r\n SUPPLY_NEG: 'vsN'\r\n}\r\nexport const PIN_NAMES = {\r\n COMMON: COMMON_PIN_NAMES,\r\n OP_AMP : {\r\n INPUT_POS : COMMON_PIN_NAMES.INPUT_POS,\r\n INPUT_NEG : COMMON_PIN_NAMES.INPUT_NEG,\r\n OUTPUT : COMMON_PIN_NAMES.OUTPUT,\r\n SUPPLY_POS : COMMON_PIN_NAMES.SUPPLY_POS,\r\n SUPPLY_NEG : COMMON_PIN_NAMES.SUPPLY_NEG,\r\n }, \r\n DIFF_AMP : {\r\n INPUT_POS : COMMON_PIN_NAMES.INPUT_POS,\r\n INPUT_NEG : COMMON_PIN_NAMES.INPUT_NEG,\r\n OUTPUT_POS : COMMON_PIN_NAMES.OUTPUT_POS,\r\n OUTPUT_NEG : COMMON_PIN_NAMES.OUTPUT_NEG,\r\n OUTPUT_CM : COMMON_PIN_NAMES.OUTPUT_CM,\r\n VOCM : COMMON_PIN_NAMES.VOCM,\r\n SUPPLY_POS : COMMON_PIN_NAMES.SUPPLY_POS,\r\n SUPPLY_NEG : COMMON_PIN_NAMES.SUPPLY_NEG,\r\n SUPPLY_INPUT_POS : 'Input ' + COMMON_PIN_NAMES.SUPPLY_POS,\r\n SUPPLY_INPUT_NEG : 'Input ' + COMMON_PIN_NAMES.SUPPLY_NEG,\r\n },\r\n IN_AMP : {\r\n INPUT_POS : COMMON_PIN_NAMES.INPUT_POS,\r\n INPUT_NEG : COMMON_PIN_NAMES.INPUT_NEG,\r\n OUTPUT : COMMON_PIN_NAMES.OUTPUT,\r\n OUTPUT_POS : COMMON_PIN_NAMES.OUTPUT_POS,\r\n OUTPUT_NEG : COMMON_PIN_NAMES.OUTPUT_NEG,\r\n PRE_AMP_OUT_POS : 'Pre-Amp ' + COMMON_PIN_NAMES.OUTPUT_POS,\r\n PRE_AMP_OUT_NEG : 'Pre-Amp ' + COMMON_PIN_NAMES.OUTPUT_NEG,\r\n DIFF_AMP_IN_POS: 'Diff-Amp In+', \r\n DIFF_AMP_IN_NEG: 'Diff-Amp In-', \r\n REF : COMMON_PIN_NAMES.REF,\r\n VOCM : COMMON_PIN_NAMES.VOCM,\r\n SUPPLY_POS : COMMON_PIN_NAMES.SUPPLY_POS,\r\n SUPPLY_NEG : COMMON_PIN_NAMES.SUPPLY_NEG,\r\n SUPPLY_INPUT_POS : 'Input ' + COMMON_PIN_NAMES.SUPPLY_POS,\r\n SUPPLY_INPUT_NEG : 'Input ' + COMMON_PIN_NAMES.SUPPLY_NEG,\r\n SUPPLY_DIGITAL_POS: 'DVDD',\r\n SUPPLY_DIGITAL_NEG: 'DVSS',\r\n SUPPLY_CP_POS : 'CP ' + COMMON_PIN_NAMES.SUPPLY_POS,\r\n },\r\n ADC : {\r\n INPUT_POS : COMMON_PIN_NAMES.INPUT_POS,\r\n INPUT_NEG : COMMON_PIN_NAMES.INPUT_NEG,\r\n DIFF_INPUT : 'Input',\r\n CM_INPUT : 'InputCM',\r\n SUPPLY_POS : COMMON_PIN_NAMES.SUPPLY_POS,\r\n SUPPLY_NEG : COMMON_PIN_NAMES.SUPPLY_NEG,\r\n DRIVER_SUPPLY_POS : 'Driver ' + COMMON_PIN_NAMES.SUPPLY_POS,\r\n DRIVER_SUPPLY_NEG : 'Driver ' + COMMON_PIN_NAMES.SUPPLY_NEG,\r\n FILTER_SUPPLY_POS : 'Filter ' + COMMON_PIN_NAMES.SUPPLY_POS,\r\n FILTER_SUPPLY_NEG : 'Filter ' + COMMON_PIN_NAMES.SUPPLY_NEG,\r\n },\r\n REF : {\r\n OUTPUT : COMMON_PIN_NAMES.OUTPUT,\r\n SUPPLY_POS : COMMON_PIN_NAMES.SUPPLY_POS,\r\n SUPPLY_NEG : COMMON_PIN_NAMES.SUPPLY_NEG,\r\n },\r\n DIODE : {\r\n OUTPUT : COMMON_PIN_NAMES.OUTPUT,\r\n SUPPLY_POS : COMMON_PIN_NAMES.SUPPLY_POS,\r\n SUPPLY_NEG : COMMON_PIN_NAMES.SUPPLY_NEG,\r\n },\r\n POWER_SUPPLY : {\r\n OUTPUT : COMMON_PIN_NAMES.OUTPUT,\r\n }\r\n}\r\n\r\nexport const COMPONENT_NAMES = {\r\n OP_AMP : 'opAmp',\r\n IN_AMP : 'inAmp',\r\n DIFF_AMP : 'differentialAmp',\r\n ADC : 'adc',\r\n DRIVER : 'driver',\r\n REFERENCE: 'reference',\r\n REF_BUF : 'referenceBuffer',\r\n DIODE : 'd',\r\n // POWER_SUPPLIES : 'powerSupplies'\r\n}\r\n\r\nexport const ALTERNATE_NAMES = {\r\n 'ref' : COMPONENT_NAMES.REFERENCE,\r\n 'refBuf' : COMPONENT_NAMES.REF_BUF,\r\n [COMPONENT_NAMES.REFERENCE] : 'ref',\r\n [COMPONENT_NAMES.REF_BUF] : 'refBuf',\r\n}\r\n\r\nexport const AMBIENT_UPPER = 85;\r\nexport const AMBIENT_LOWER = 25;\r\nexport const DC_ERROR_ABBREVIATIONS = {\r\n OP_AMP: {\r\n OFFSET: \"Vos\",\r\n OFFSET_DRIFT: \"VosTC\",\r\n BIAS_CURRENT: \"Ibias\",\r\n BIAS_CURRENT_DRIFT: \"IbiasTC\",\r\n OFFSET_CURRENT: \"Ios\",\r\n OFFSET_CURRENT_DRIFT: \"IosTC\",\r\n OPEN_LOOP_GAIN: \"Aol\",\r\n CMRR: \"CMRR\",\r\n },\r\n IN_AMP: {\r\n OFFSET: \"Vos\",\r\n OFFSET_DRIFT: \"VosTC\",\r\n BIAS_CURRENT: \"Ibias\",\r\n BIAS_CURRENT_DRIFT: \"IbiasTC\",\r\n OFFSET_CURRENT: \"Ios\",\r\n OFFSET_CURRENT_DRIFT: \"IosTC\",\r\n GAIN_ERROR: \"GainError\",\r\n GAIN_DRIFT: \"GainTC\",\r\n CMRR: \"CMRR\",\r\n },\r\n DIFF_AMP: {\r\n OFFSET: \"Vos\",\r\n OFFSET_DRIFT: \"VosTC\",\r\n BIAS_CURRENT: \"Ibias\",\r\n BIAS_CURRENT_DRIFT: \"IbiasTC\",\r\n OFFSET_CURRENT: \"Ios\",\r\n OFFSET_CURRENT_DRIFT: \"IosTC\",\r\n GAIN_ERROR: \"GainError\",\r\n GAIN_DRIFT: \"GainTC\",\r\n CMRR: \"CMRR\",\r\n CMRR_DRIFT: \"CMRRTC\",\r\n },\r\n REFERENCE: {\r\n INITIAL_ACCURACY: \"InitAcc\",\r\n DRIFT: \"InitAccTC\",\r\n LOAD_REGULATION: \"LoadReg\",\r\n },\r\n ADC: {\r\n ZERO_ERROR: \"ZeroError\",\r\n ZERO_ERROR_DRIFT: \"ZeroTC\",\r\n GAIN_ERROR: \"GainError\",\r\n GAIN_DRIFT: \"GainTC\",\r\n INPUT_CURRENT: \"Ibias\",\r\n OFFSET_CURRENT: \"Ios\",\r\n OFFSET_CURRENT_DRIFT: \"IosTC\",\r\n INL: \"INL\",\r\n VREF_ERROR: \"RefInitAcc\",\r\n VREF_DRIFT: \"RefInitAccTC\",\r\n REF_INPUT_CURRENT: \"RefInIbias\",\r\n REF_INPUT_CURRENT_DRIFT: \"RefInIbiasTC\",\r\n REF_BUFFER_OFFSET: \"RefInVos\",\r\n REF_BUFFER_DRIFT: \"RefInTC\",\r\n },\r\n DIODE: {\r\n LEAKAGE: \"ILeakage\",\r\n LEAKAGE_DRIFT: \"ILeakageTC\"\r\n } \r\n};\r\n\r\nexport const SYSTEMIC_ERRORS = {\r\n AOL: 'Aol',\r\n DRIVE_IMPEDANCE: 'Drive Impedance',\r\n SOURCE_IMPEDANCE: 'Source Impedance',\r\n IC_INPUT_IMPEDANCE: 'IC Input Impedance',\r\n RESISTOR_ROUNDING: 'Standard Resistor Rounding',\r\n}\r\n\r\nexport const DC_ERROR_SENSITIVITY_MINIMUM = 1e-6;\r\n\r\nexport const DEFAULT_SUPPLY_TOLERANCE = {\r\n INPUT_RANGE_SIM : 'typ',\r\n POWER_SIM : 'typ',\r\n}\r\n\r\nexport const HELP_TEXT_ICON = {\r\n INFO: 'info',\r\n WARNING: 'warning',\r\n ERROR: 'error',\r\n}\r\n\r\nexport const DC_ERROR_DIALOG = {\r\n COARSE: \"coarse\",\r\n MISSING: \"missing\",\r\n GENERIC_WARNING: \"genericWarning\",\r\n INFO: \"info\"\r\n}\r\n\r\nexport const INPUT_RANGE_VIOLATIONS = {\r\n SIGNAL_EXCEEDS_LIMIT : 'Signal Exceeds Limit',\r\n NO_LIMITS : 'No Limits Specified',\r\n INFINITE_INPUT_RANGE : 'Infinite Input Range',\r\n DC_OPERATING_POINT : 'DC Operating Point',\r\n NO_SIGNAL_RANGE : 'No Signal Range',\r\n SIGNAL_RANGE_INCOMPATIBILITY : 'Signal Range Incompatibility',\r\n ADC_RANGE_NOT_OPTIMIZED : 'ADC Input Range Not Optimized',\r\n ADC_INPUT_CM_ERROR: 'ADC Input CM Range Error',\r\n SUPPLY_NOT_CONNECTED : 'Supply Pin Not Connected',\r\n SUPPLY_NOT_FOUND : 'Power Supply Not Found',\r\n VOCM_OUT_OF_RANGE : 'Vocm Pin Out of Range',\r\n DIFF_AMP_OCM_ERROR: 'Output CM Out of Range',\r\n OVERCURRENT_1 : 'Overcurrent 1',\r\n OVERCURRENT_2 : 'Overcurrent 2',\r\n OVERVOLTAGE_1 : 'Overvoltage 1',\r\n OVERVOLTAGE_2 : 'Overvoltage 2',\r\n}\r\n\r\nexport const POWER_TYPE = {\r\n QUIESCENT : 'quiescent',\r\n SIGNAL : 'signal',\r\n // SAMPLE_RATE_DEPENDENT : 'quiescent'\r\n SAMPLE_RATE_DEPENDENT : 'sample-rate dependent'\r\n}\r\n\r\nexport const POWER_SIM_MIN_REPORTED_CURRENT = 0.1e-6;\r\nexport const POWER_SIM_MIN_REPORTED_POWER = 0.1e-6;\r\n\r\n// Allow amplifier inputs to go past headroom spec by x amount since input limits are typically \"soft\" and will report violations when right at the limit, where the amplifier is still functional\r\nexport const AMP_INPUT_ADDITIONAL_HEADROOM = 10e-3;\r\n\r\n// Reference pin on in-amps is a resistor with ESD diodes to the supplies. The voltage on the REF pin can go beyond the supplies by some amount before engaging the ESD diodes\r\nexport const IN_AMP_REF_PIN_HEADROOM = -10e-3;","//Contains custom data for our instrumentation amplifiers. Because in-amps have unique structures that require additional curve-fitting by the modelers, this file is \r\n// used to store and edit the data without fear of it being overwritten by the python automation script which overwrites the in-amp-tpc-database.js file. The data in \r\n\r\nimport { PIN_NAMES } from \"../sim-constants\";\r\n\r\n// this file should be elements that are not readily discerned from the datasheet (i.e. table data or plots should be in the pdb-database & tpc-database files, respectively)\r\nexport let data = {\r\n \"map\": {\r\n \"AD620\": \"AD620\", \r\n \"AD621\": \"AD621\", \r\n \"AD622\": \"AD622\",\r\n \"AD623\": \"AD623\",\r\n \"AD8220\": \"AD8220\",\r\n \"AD8221\": \"AD8221\",\r\n \"AD8222\": \"AD8222\",\r\n \"AD8223\": \"AD8223\",\r\n \"AD8224\": \"AD8224\",\r\n \"AD8226\": \"AD8226\",\r\n \"AD8227\": \"AD8227\",\r\n \"AD8228\": \"AD8228\",\r\n \"AD8229\": \"AD8229\",\r\n \"AD8229S\": \"AD8229\", //AD8229S is space grade version of AD8229 - need to revisit when we do DC specs\r\n \"AD8235\": \"AD8235_AD8236\",\r\n \"AD8236\": \"AD8235_AD8236\",\r\n \"AD8250\": \"AD8250\",\r\n \"AD8251\": \"AD8251\",\r\n \"AD8253\": \"AD8253\",\r\n \"AD8295\": \"AD8295\", \r\n \"AD8421\": \"AD8421\",\r\n \"AD8422\": \"AD8422\",\r\n \"AD8426\": \"AD8426\",\r\n \"AD8429\": \"AD8429\",\r\n \"LT1167\": \"LT1167_LT1167-1\",\r\n \"LT1167-1\": \"LT1167_LT1167-1\",\r\n \"LT6370\" : \"LT6370\",\r\n \"LT6372-0.2\": \"LT6372-0.2\", // No data in TPC database, will not be allowed\r\n \"LT6372-1\": \"LT6372-1\", // No data in TPC database, will not be allowed\r\n \"LTC6373\": \"LTC6373\",\r\n \"MAX41400\" : \"MAX41400\",\r\n \"ADA4254\": \"ADA4254\",\r\n \"ADA4255\": \"ADA4255\",\r\n \"AD8428\": \"AD8428\", \r\n },\r\n \"partData\": {\r\n\r\n \"AD620\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 9.55e6,\r\n \"gbwMin\" : 1.26e6,\r\n \"gmMin\" : 1.74e-4,\r\n \"rF\" : 50000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 3.63e-12,\r\n \"cCm\" : 1.05e-12,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 2.75e5,\r\n 8.71e6\r\n ],\r\n \"zeros\": [\r\n 6.61e5\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 5.75e+00,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD621\": {\r\n \"inputStage\" : {\r\n \"gains (V/V)\" : [\r\n \"100\",\r\n \"10\",\r\n ],\r\n \"cDiff\": 5e-11, \r\n \"cCm\": 2e-12, \r\n \"rDiff\": 10e9, \r\n \"rCm\": 10e9,\r\n \"100\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\":140,\r\n \"poles\": [\r\n 1.26e+00,\r\n 3.16e+05,\r\n 7.94e+05,\r\n ],\r\n \"zeros\": [\r\n 5.25e+05,\r\n ],\r\n\r\n },\r\n \"r1\" : 25e3,\r\n \"r2\" : 25e3,\r\n \"r3\" : 5.05e+2,\r\n \"cF\" : 1e-15, \r\n },\r\n \"10\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 4.13e-1,\r\n 3.16e+05,\r\n 7.94e+05,\r\n ],\r\n \"zeros\": [\r\n 5.25e5,\r\n ],\r\n\r\n },\r\n \"r1\" : 25e3,\r\n \"r2\" : 25e3,\r\n \"r3\" : 5.56e3,\r\n \"cF\" : 1e-15\r\n },\r\n\r\n },\r\n \"outputStage\" : {\r\n \"cDiff\" : 0.4e-10,\r\n \"cCm\" : 1.5e-12, \r\n \"rDiff\" : 5.3e9,\r\n \"rCm\" : 2.5e9,\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 2e0,\r\n 7.94e5,\r\n 6.31e6,\r\n ],\r\n \"zeros\": [\r\n 1.20e+05,\r\n ],\r\n\r\n },\r\n \r\n \"cf\" : 1.15e-12,\r\n \"r1\" : 10e3,\r\n \"r2\" : 10e3,\r\n \"r3\" : 10e3,\r\n \"r4\" : 10e3\r\n },\r\n },\r\n \"AD622\": { //data copied from AD8221\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.32e7,\r\n \"gbwMin\" : 8.71e5,\r\n \"gmMin\" : 7.59e-5,\r\n \"rF\" : 49400,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 6.92e5,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 2.00e+00,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD623\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.32e6,\r\n \"gbwMin\" : 8.71e5,\r\n \"gmMin\" : 1e-4,\r\n \"rF\" : 100000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 2.29e-12,\r\n \"cCm\" : 5.75e-12,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 50000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 6e-13,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 5.50e-01,\r\n 1.66e+06,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n }, \r\n },\r\n \"AD8220\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.45e7,\r\n \"gbwMin\" : 2.40e6,\r\n \"gmMin\" : 9.12e-5,\r\n \"rF\" : 49400,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 3e-12,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 20000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.51e+00,\r\n 3.31e+06,\r\n 4.37e+06,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8221\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.32e7,\r\n \"gbwMin\" : 8.71e5,\r\n \"gmMin\" : 7.59e-5,\r\n \"rF\" : 49400,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 6.92e5,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 2.00e+00,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8222\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.32e7,\r\n \"gbwMin\" : 1e6,\r\n \"gmMin\" : 7.94e-5,\r\n \"rF\" : 49400,\r\n \"cF\" : 0,\r\n \"cDiff\" : 2.88e-12,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 1e6\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 2.75e+00,\r\n 2.75e+06,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8223\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.66e6,\r\n \"gbwMin\" : 1e10,\r\n \"gmMin\" : 1e-4,\r\n \"rF\" : 16000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 2.19e6\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 50000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.05e+00,\r\n 2.19e+06,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8224\": { //data copied from AD8220\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.45e7,\r\n \"gbwMin\" : 2.40e6,\r\n \"gmMin\" : 9.12e-5,\r\n \"rF\" : 49400,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 3e-12,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 20000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.51e+00,\r\n 3.31e+06,\r\n 4.37e+06,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8226\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 2.19e6,\r\n \"gbwMin\" : 1.66e6,\r\n \"gmMin\" : 0.0347,\r\n \"rF\" : 49400,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 50000,\r\n \"cF\" : 2.00e-12,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 3.80e+00,\r\n 1.66e+06,\r\n 5.01e+06,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8227\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.05e6,\r\n \"gbwMin\" : 1e10,\r\n \"gmMin\" : 3e-5,\r\n \"rF\" : 16000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 3.31e-12,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 1.20e6,\r\n 1.32e6,\r\n 2.51e6,\r\n 4.57e6,\r\n ],\r\n \"zeros\": [\r\n 5.25e5,\r\n 8.32e5,\r\n 1.15e7\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 50000,\r\n \"cF\" : 1.32e-12,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.51e+00,\r\n 3.02e+06,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8228\": {\r\n \"inputStage\" : {\r\n \"gains (V/V)\" : [\r\n \"100\",\r\n \"10\",\r\n ],\r\n \"cDiff\": 1e-15, \r\n \"cCm\": 1e-15, \r\n \"rDiff\": 10e9, \r\n \"rCm\": 10e9,\r\n \"100\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\":140,\r\n \"poles\": [\r\n 1.31,\r\n 4.79e+05,\r\n 3.16e6\r\n ],\r\n \"zeros\": [\r\n 1.26e6,\r\n 1.45e6,\r\n ],\r\n\r\n },\r\n \"r1\" : 22e3,\r\n \"r2\" : 22e3,\r\n \"r3\" : 4.45e+2,\r\n \"cF\" : 6.03e-12, \r\n },\r\n \"10\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 0.84,\r\n 4.79e+05,\r\n 3.16e6\r\n ],\r\n \"zeros\": [\r\n 1.26e6,\r\n 1.45e6,\r\n ],\r\n\r\n },\r\n \"r1\" : 25e3,\r\n \"r2\" : 25e3,\r\n \"r3\" : 4.89e3,\r\n \"cF\" : 6.03e-12\r\n },\r\n\r\n },\r\n \"outputStage\" : {\r\n \"cDiff\" : 9.12e-12,\r\n \"cCm\" : 3.63e-12, \r\n \"rDiff\" : 5.3e9,\r\n \"rCm\" : 2.5e9,\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 3.02e0,\r\n 3.47e5,\r\n 6.31e6,\r\n ],\r\n \"zeros\": [\r\n 7.59e+05,\r\n 2.63e+06\r\n ],\r\n\r\n },\r\n \r\n \"cF\" : 1e-15,\r\n \"r1\" : 10e3,\r\n \"r2\" : 10e3,\r\n \"r3\" : 10e3,\r\n \"r4\" : 10e3\r\n },\r\n },\r\n \"AD8229\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.58e8,\r\n \"gbwMin\" : 1.82e7,\r\n \"gmMin\" : 0.00191,\r\n \"rF\" : 6000,\r\n \"cF\" : 3.00e-12,\r\n \"cDiff\" : 5.50e-12,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 2.75e7,\r\n 7.24e7\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 5000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.51e+01,\r\n 3.31e+07,\r\n 3.47e+07,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8235_AD8236\": {\r\n \"opAmp\" : 'AD8505',\r\n \"rg1\" : 210e3,\r\n \"rf1\" : 52.5e3,\r\n \"rg2\" : 52.5e3,\r\n \"rf2\" : 210e3\r\n },\r\n \"AD8250\" : {\r\n \"emiFilter\" : {\r\n \"r\" : 2.2e3,\r\n \"cCm\" : 0,\r\n \"cDiff\" : 0\r\n },\r\n \"inputStage\" : {\r\n \"gains (V/V)\" : [\r\n \"10\",\r\n \"5\",\r\n \"2\",\r\n \"1\",\r\n ],\r\n \"cDiff\": 0.5e-12, \r\n \"cCm\": 1e-12, \r\n \"rDiff\": 5.3e9, \r\n \"rCm\": 2.5e9, \r\n \"10\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 119,\r\n \"poles\": [\r\n 4.26e+01,\r\n 3.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 2.00e+07,\r\n ],\r\n },\r\n \"r1\" : 4.5e3,\r\n \"r2\" : 4.5e3,\r\n \"r3\" : 1e3,\r\n \"cF\" : 1.5e-12\r\n },\r\n \"5\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 119,\r\n \"poles\": [\r\n 6.16e+01,\r\n 3.00e+07,\r\n ],\r\n \"zeros\": [\r\n 2.00e+07,\r\n ],\r\n },\r\n \"r1\" : 4e3,\r\n \"r2\" : 4e3,\r\n \"r3\" : 2e3,\r\n \"cF\" : 1.5e-12\r\n },\r\n \"2\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 119,\r\n \"poles\": [\r\n 3.54e+01,\r\n 1.50e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 2.00e+07,\r\n ],\r\n },\r\n \"r1\" : 2.5e3,\r\n \"r2\" : 2.5e3,\r\n \"r3\" : 5e3,\r\n \"cF\" : 1.5e-12\r\n },\r\n \"1\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 119,\r\n \"poles\": [\r\n 1.12e+02,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 1e-3,\r\n \"r2\" : 1e-3,\r\n \"r3\" : 10e3,\r\n \"cF\" : 1.5e-12\r\n },\r\n },\r\n \"outputStage\" : {\r\n \"cDiff\" : 0.5e-12,\r\n \"cCm\" : 1.5e-12, \r\n \"rDiff\" : 5.3e9,\r\n \"rCm\" : 2.5e9,\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 159,\r\n \"poles\": [\r\n 2.56e-01,\r\n 6.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 3.16e+07,\r\n ],\r\n },\r\n \"r1\" : 10e3,\r\n \"r2\" : 10e3,\r\n \"r3\" : 10e3,\r\n \"r4\" : 10e3\r\n },\r\n },\r\n \"AD8251\" : {\r\n \"emiFilter\" : {\r\n \"r\" : 2.2e3,\r\n \"cCm\" : 0,\r\n \"cDiff\" : 0\r\n },\r\n \"inputStage\" : {\r\n \"gains (V/V)\" : [\r\n \"8\",\r\n \"4\",\r\n \"2\",\r\n \"1\",\r\n ],\r\n \"cDiff\": 0.5e-12, \r\n \"cCm\": 1e-12, \r\n \"rDiff\": 5.3e9, \r\n \"rCm\": 2.5e9,\r\n \"8\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 119,\r\n \"poles\": [\r\n 2.95e+01,\r\n 3.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 2.00e+07,\r\n ],\r\n },\r\n \"r1\" : 3.5e3,\r\n \"r2\" : 3.5e3,\r\n \"r3\" : 1e3,\r\n \"cF\" : 1.5e-12, \r\n },\r\n \"4\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 119,\r\n \"poles\": [\r\n 4.00e+01,\r\n 6.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 2.00e+07,\r\n ],\r\n },\r\n \"r1\" : 3e3,\r\n \"r2\" : 3e3,\r\n \"r3\" : 2e3,\r\n \"cF\" : 1.5e-12\r\n },\r\n \"2\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 119,\r\n \"poles\": [\r\n 5.62e+01,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 3.00e+07,\r\n ],\r\n },\r\n \"r1\" : 2e3,\r\n \"r2\" : 2e3,\r\n \"r3\" : 4e3,\r\n \"cF\" : 1.5e-12\r\n },\r\n \"1\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 119,\r\n \"poles\": [\r\n 5.62e+01,\r\n 6.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 3.00e+07,\r\n ],\r\n },\r\n \"r1\" : 1e-3,\r\n \"r2\" : 1e-3,\r\n \"r3\" : 8e3,\r\n \"cF\" : 1.5e-12\r\n },\r\n },\r\n \"outputStage\" : {\r\n \"cDiff\" : 0.5e-12,\r\n \"cCm\" : 1.5e-12, \r\n \"rDiff\" : 5.3e9,\r\n \"rCm\" : 2.5e9,\r\n \"gains (V/V)\" : [\r\n \"8\",\r\n \"4\",\r\n \"2\",\r\n \"1\",\r\n ], \r\n \"8\" : { \r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 159,\r\n \"poles\": [\r\n 1.90e-01,\r\n 6.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 4.00e+07,\r\n ],\r\n },\r\n \"r1\" : 10e3,\r\n \"r2\" : 10e3,\r\n \"r3\" : 10e3,\r\n \"r4\" : 10e3\r\n },\r\n \"4\" : { \r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 159,\r\n \"poles\": [\r\n 1.90e-01,\r\n 6.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 4.00e+07,\r\n ],\r\n },\r\n \"r1\" : 10e3,\r\n \"r2\" : 10e3,\r\n \"r3\" : 10e3,\r\n \"r4\" : 10e3\r\n },\r\n \"2\" : { \r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 159,\r\n \"poles\": [\r\n 1.90e-01,\r\n 6.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 4.00e+07,\r\n ],\r\n },\r\n \"r1\" : 10e3,\r\n \"r2\" : 10e3,\r\n \"r3\" : 10e3,\r\n \"r4\" : 10e3\r\n },\r\n \"1\" : { \r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 159,\r\n \"poles\": [\r\n 2.57e-01,\r\n 6.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 4.00e+07,\r\n ],\r\n },\r\n \"r1\" : 10e3,\r\n \"r2\" : 10e3,\r\n \"r3\" : 10e3,\r\n \"r4\" : 10e3,\r\n \"cF\" : 2.75e-13\r\n }\r\n },\r\n },\r\n \"AD8253\" : {\r\n \"emiFilter\" : {\r\n \"r\" : 1.2e3,\r\n \"cCm\" : 0,\r\n \"cDiff\" : 0\r\n },\r\n \"inputStage\" : {\r\n \"gains (V/V)\" : [\r\n \"1000\",\r\n \"100\",\r\n \"10\",\r\n \"1\",\r\n ],\r\n \"cDiff\": 1.25e-12, \r\n \"cCm\": 2.5e-12, \r\n \"rDiff\": 4e9, \r\n \"rCm\": 2e9,\r\n \"1000\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120, \r\n \"poles\": [\r\n 7.00e+01,\r\n 1.30e+08,\r\n 1.30e+08,\r\n 2.00e+08,\r\n ],\r\n \"zeros\": [\r\n 6.50e+07,\r\n ],\r\n },\r\n \"r1\" : 49.95e3,\r\n \"r2\" : 49.95e3,\r\n \"r3\" : 100,\r\n \"cF\" : 1.5e-12, \r\n },\r\n \"100\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 6.30e+01,\r\n 1.30e+08,\r\n 1.30e+08,\r\n 2.00e+08,\r\n ],\r\n \"zeros\": [\r\n 6.50e+07,\r\n ],\r\n },\r\n \"r1\" : 19.8e3,\r\n \"r2\" : 19.8e3,\r\n \"r3\" : 400,\r\n \"cF\" : 1.5e-12\r\n },\r\n \"10\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 4.80e+01,\r\n 2.00e+08,\r\n 2.00e+08,\r\n 2.00e+08,\r\n ],\r\n \"zeros\": [\r\n 6.50e+07,\r\n ],\r\n },\r\n \"r1\" : 6.75e3,\r\n \"r2\" : 6.75e3,\r\n \"r3\" : 1.5e3,\r\n \"cF\" : 1.5e-12\r\n },\r\n \"1\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 8.70e+00,\r\n 2.00e+08,\r\n 2.30e+08,\r\n 2.30e+08,\r\n ],\r\n \"zeros\": [\r\n 2.50e+07,\r\n ],\r\n },\r\n \"r1\" : 1e-3,\r\n \"r2\" : 1e-3,\r\n \"r3\" : 100e3,\r\n \"cF\" : 1.5e-12\r\n },\r\n },\r\n \"outputStage\" : {\r\n \"cDiff\" : 1.25e-12,\r\n \"cCm\" : 1e-15,\r\n \"rDiff\" : 4e9,\r\n \"rCm\" : 2e9,\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 159,\r\n \"poles\": [\r\n 2.40e-01,\r\n 6.00e+07,\r\n 1.00e+08,\r\n 1.00e+08,\r\n ],\r\n \"zeros\": [\r\n 4.00e+07,\r\n ],\r\n },\r\n \"r1\" : 10e3,\r\n \"r2\" : 10e3,\r\n \"r3\" : 10e3,\r\n \"r4\" : 10e3\r\n },\r\n },\r\n \"AD8295\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.32e7,\r\n \"gbwMin\" : 8.32e5,\r\n \"gmMin\" : 7.59e-5,\r\n \"rF\" : 49400,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 1.38e6,\r\n 1.38e6,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.05e+01,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8421\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 2.09e8,\r\n \"gbwMin\" : 1e10,\r\n \"gmMin\" : 1,\r\n \"rF\" : 9900,\r\n \"cF\" : 1.9e-12,\r\n \"cDiff\" : 2.19e-11,\r\n \"cCm\" : 3.63e-12,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 1.45e-12,\r\n \"cCm\" : 1.05e-12,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.58e+01,\r\n 3.31e+07,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8422\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.32e7,\r\n \"gbwMin\" : 8.71e6,\r\n \"gmMin\" : 2.63e-2,\r\n \"rF\" : 19800,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 2.75e+00,\r\n 2.75e+06,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8426\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 2.00e6,\r\n \"gbwMin\" : 6.03e5,\r\n \"gmMin\" : 2.51e-4,\r\n \"rF\" : 49400,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 2.09e6,\r\n 2.63e6\r\n ],\r\n \"zeros\": [\r\n 2.88e6\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 50000,\r\n \"cF\" : 1.74e-12,\r\n \"cDiff\" : 2.40e-12,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 9.12e+00,\r\n 1.00e+06,\r\n ],\r\n \"zeros\": [\r\n 2.51e6\r\n ]\r\n }\r\n },\r\n },\r\n \"AD8428\": {\r\n \"inputStage\" : {\r\n \"gains (V/V)\" : [\r\n \"2000\",\r\n \r\n ],\r\n //Values taken from the part's data sheet, then cCm is halved and rCm is doubled to acount for the two input opamps in parallel\r\n \"cDiff\": 1e-12, \r\n \"cCm\": 2e-12, \r\n \"rDiff\": 2e9, \r\n \"rCm\": 1e9,\r\n \"2000\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 575,\r\n 8.32e6,\r\n ],\r\n \"zeros\":[\r\n\r\n ]\r\n \r\n },\r\n \"r1\" : 3e3,\r\n \"r2\" : 3e3,\r\n \"r3\" : 30.15,\r\n \"cF\" : 1.5e-12\r\n },\r\n },\r\n \"outputStage\" : {\r\n\r\n \"cDiff\" : 1e-15,\r\n \"cCm\" : 1e-15,//cCm changed from 2.5pF to 1fF to better match AD8253's gain vs frequency response in Nimble to its datasheet.\r\n \"rDiff\" : 1e20,\r\n \"rCm\" : 1e20,\r\n \r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 38,\r\n 4.17e6,\r\n \r\n ],\r\n \"zeros\":[\r\n \r\n ]\r\n\r\n },\r\n \r\n \"r1\" : 12e3,\r\n \"r2\" : 120e3,\r\n \"r3\" : 12e3,\r\n \"r4\" : 120e3,\r\n \"cF\" : 5.01e-14\r\n },\r\n },\r\n \"AD8429\": { //data copied from AD8229\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.58e8,\r\n \"gbwMin\" : 1.82e7,\r\n \"gmMin\" : 0.00191,\r\n \"rF\" : 6000,\r\n \"cF\" : 3.00e-12,\r\n \"cDiff\" : 5.50e-12,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 2.75e7,\r\n 7.24e7\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 5000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.51e+01,\r\n 3.31e+07,\r\n 3.47e+07,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"ADA4254\": {\r\n //The ADA4254 is so unique that all its data is stored within its code. If we create\r\n //future parts with the same architecture, data should be pulled out to here. \r\n //Hopefully lint doesn't get grumpy about this.\r\n\r\n // Had to break the above comment because the required supply pins looks specifically in custom data\r\n requiredSupplyPins: [\r\n PIN_NAMES.IN_AMP.SUPPLY_POS,\r\n PIN_NAMES.IN_AMP.SUPPLY_NEG,\r\n PIN_NAMES.IN_AMP.SUPPLY_INPUT_POS,\r\n PIN_NAMES.IN_AMP.SUPPLY_INPUT_NEG,\r\n ]\r\n },\r\n \"ADA4255\": {\r\n //The ADA4255 is so unique that all its data is stored within its code. If we create\r\n //future parts with the same architecture, data should be pulled out to here. \r\n //Hopefully lint doesn't get grumpy about this.\r\n \r\n // Had to break the above comment because the required supply pins looks specifically in custom data\r\n requiredSupplyPins: [\r\n PIN_NAMES.IN_AMP.SUPPLY_POS,\r\n PIN_NAMES.IN_AMP.SUPPLY_NEG,\r\n PIN_NAMES.IN_AMP.SUPPLY_CP_POS,\r\n PIN_NAMES.IN_AMP.SUPPLY_DIGITAL_POS,\r\n PIN_NAMES.IN_AMP.SUPPLY_DIGITAL_NEG,\r\n ]\r\n },\r\n \"LT1167_LT1167-1\": {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.20e7,\r\n \"gbwMin\" : 7.94e5,\r\n \"gmMin\" : 1.20e-4,\r\n \"rF\" : 49400,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 3.16e5,\r\n 5.50e6,\r\n ],\r\n \"zeros\": [\r\n 1.5e6,\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.91e+00,\r\n 1.5e+06,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"LT6370\" : {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.32e7,\r\n \"gbwMin\" : 2.75e6,\r\n \"gmMin\" : 1.00e-4,\r\n \"rF\" : 24200,\r\n \"cF\" : 5.50e-12,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 7.24e6,\r\n 9.12e6,\r\n ],\r\n \"zeros\": [\r\n 2.00e7, // added after curve-fitting to make input stage net 2 poles (3 poles / 1 zero)\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 5.50e+00,\r\n 1.05e+07,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"LT6372-0.2\" : {\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.32e7,\r\n \"gbwMin\" : 2.75e6,\r\n \"gmMin\" : 1.00e-4,\r\n \"rF\" : 24200,\r\n \"cF\" : 5.50e-12,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 7.24e6,\r\n 9.12e6,\r\n ],\r\n \"zeros\": [\r\n 2.00e7, // added after curve-fitting to make input stage net 2 poles (3 poles / 1 zero)\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 2000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 5.50e+00,\r\n 1.05e+07,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"LT6372-1\" : { //data copied from LT6370\r\n \"inputStage\" : {\r\n \"gbwMax\" : 1.32e7,\r\n \"gbwMin\" : 2.75e6,\r\n \"gmMin\" : 1.00e-4,\r\n \"rF\" : 24200,\r\n \"cF\" : 5.50e-12,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n // Dominant pole calculated in model,\r\n 7.24e6,\r\n 9.12e6,\r\n ],\r\n \"zeros\": [\r\n 2.00e7, // added after curve-fitting to make input stage net 2 poles (3 poles / 1 zero)\r\n ]\r\n }\r\n },\r\n \"outputStage\": {\r\n \"rF\" : 10000,\r\n \"cF\" : 0,\r\n \"cDiff\" : 0,\r\n \"cCm\" : 0,\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 5.50e+00,\r\n 1.05e+07,\r\n ],\r\n \"zeros\": [\r\n ]\r\n }\r\n },\r\n },\r\n \"LTC6373\" : {\r\n \"inputStage\" : {\r\n \"gains (V/V)\" : [\r\n \"16\",\r\n \"8\",\r\n \"4\",\r\n \"2\",\r\n \"1\",\r\n \"0.5\",\r\n \"0.25\"\r\n ],\r\n \"cDiff\": 1e-15, \r\n \"cCm\": 1.6e-12, \r\n \"rDiff\": 5e12, \r\n \"rCm\": 5e12, \r\n \"supplyCurrentTyp\" : 0.6e-3, // Iq/amp\r\n // \"rOut\": 110,\r\n \"16\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 128,\r\n \"poles\": [\r\n 2.40e+01,\r\n 3.80e+06,\r\n 3.80e+06,\r\n 3.00e+07,\r\n 3.00e+07,\r\n ],\r\n \"zeros\": [\r\n 1.26e+07,\r\n ],\r\n },\r\n \"r1\" : 1.875e3,\r\n \"r2\" : 1.875e3,\r\n \"r3\" : 250,\r\n \"cF\" : 2.63e-11\r\n },\r\n \"8\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 128,\r\n \"poles\": [\r\n 1.58e+01,\r\n 3.00e+06,\r\n 1.82e+07,\r\n 1.82e+07,\r\n ],\r\n \"zeros\": [\r\n 7.24e+07,\r\n ],\r\n },\r\n \"r1\" : 1.75e3,\r\n \"r2\" : 1.75e3,\r\n \"r3\" : 500,\r\n \"cF\" : 1.05e-11\r\n },\r\n \"4\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 128,\r\n \"poles\": [\r\n 9.55e+00,\r\n 3.00e+06,\r\n 1.82e+07,\r\n 1.82e+07,\r\n ],\r\n \"zeros\": [\r\n 7.24e+07,\r\n ],\r\n },\r\n \"r1\" : 1.5e3,\r\n \"r2\" : 1.5e3,\r\n \"r3\" : 1e3,\r\n \"cF\" : 1.26e-11\r\n },\r\n \"2\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 128,\r\n \"poles\": [\r\n 4.78e+00,\r\n 3.31e+06,\r\n 1.45e+07,\r\n 1.45e+07,\r\n ],\r\n \"zeros\": [\r\n 1.15e+07,\r\n ],\r\n },\r\n \"r1\" : 1e3,\r\n \"r2\" : 1e3,\r\n \"r3\" : 2e3,\r\n \"cF\" : 8e-12\r\n },\r\n \"1\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 128,\r\n \"poles\": [\r\n 2.40e+00,\r\n 3.00e+06,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 1e-3,\r\n \"r2\" : 1e-3,\r\n \"r3\" : 4e3,\r\n \"cF\" : 8e-12\r\n },\r\n \"0.5\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 128,\r\n \"poles\": [\r\n 2.51e+00,\r\n 3.00e+06,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 1e-3,\r\n \"r2\" : 1e-3,\r\n \"r3\" : 4e3,\r\n \"cF\" : 8e-12\r\n },\r\n \"0.25\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 128,\r\n \"poles\": [\r\n 2.63e+00,\r\n 3.16e+06,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 1e-3,\r\n \"r2\" : 1e-3,\r\n \"r3\" : 4e3,\r\n \"cF\" : 8e-12\r\n }\r\n },\r\n \"outputStage\" : {\r\n // \"rOutParasitic\" : 1,\r\n \"gbwCm\": 1e6, \r\n \"rInVocm\": 2.3e6, \r\n \"cDiff\": 2.75e-12, \r\n \"cCm\": 1e-15, \r\n \"rDiff\": 5e12, \r\n \"rCm\": 5e12, \r\n // \"rOut\": 500,\r\n \"vNoise\": 0,\r\n \"vNoiseVocm\": 24e-9,\r\n \"supplyCurrentTyp\" : 3.2e-3,\r\n \"gains (V/V)\" : [\r\n \"16\",\r\n \"8\",\r\n \"4\",\r\n \"2\",\r\n \"1\",\r\n \"0.5\",\r\n \"0.25\"\r\n ],\r\n \"16\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 3.63e+00,\r\n 1.10e+07,\r\n ],\r\n \"zeros\": [\r\n 2.75e+07,\r\n ],\r\n },\r\n \"r1\" : 2e3,\r\n \"r2\" : 2e3,\r\n \"r3\" : 2e3,\r\n \"r4\" : 2e3,\r\n \"cF\" : 1e-15\r\n },\r\n \"8\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 3.63e+00,\r\n 1.10e+07,\r\n ],\r\n \"zeros\": [\r\n 2.75e+07,\r\n ],\r\n },\r\n \"r1\" : 2e3,\r\n \"r2\" : 2e3,\r\n \"r3\" : 2e3,\r\n \"r4\" : 2e3,\r\n \"cF\" : 1e-15\r\n },\r\n \"4\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 3.63e+00,\r\n 1.10e+07,\r\n ],\r\n \"zeros\": [\r\n 2.75e+07,\r\n ],\r\n },\r\n \"r1\" : 2e3,\r\n \"r2\" : 2e3,\r\n \"r3\" : 2e3,\r\n \"r4\" : 2e3,\r\n \"cF\" : 1e-15\r\n },\r\n \"2\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 3.63e+00,\r\n 1.10e+07,\r\n ],\r\n \"zeros\": [\r\n 2.75e+07,\r\n ],\r\n },\r\n \"r1\" : 2e3,\r\n \"r2\" : 2e3,\r\n \"r3\" : 2e3,\r\n \"r4\" : 2e3,\r\n \"cF\" : 1e-15\r\n },\r\n \"1\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 3.63e+00,\r\n 1.10e+07,\r\n ],\r\n \"zeros\": [\r\n 1.26e+08,\r\n ],\r\n },\r\n \"r1\" : 2e3,\r\n \"r2\" : 2e3,\r\n \"r3\" : 2e3,\r\n \"r4\" : 2e3,\r\n \"cF\" : 1e-15\r\n },\r\n \"0.5\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 3.63e+00,\r\n 7.94e+06,\r\n ],\r\n \"zeros\": [\r\n 6.00e+07,\r\n ],\r\n },\r\n \"r1\" : 8e3 / 3,\r\n \"r2\" : 4e3 / 3,\r\n \"r3\" : 8e3 / 3,\r\n \"r4\" : 4e3 / 3,\r\n \"cF\" : 1e-15\r\n },\r\n \"0.25\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 3.63e+00,\r\n 6.31e+06,\r\n ],\r\n \"zeros\": [\r\n 6.00e+07,\r\n ],\r\n },\r\n \"r1\" : 3.2e3,\r\n \"r2\" : 800,\r\n \"r3\" : 3.2e3,\r\n \"r4\" : 800,\r\n \"cF\" : 1e-15\r\n }\r\n },\r\n \"requiredSupplyPins\" : [\r\n PIN_NAMES.IN_AMP.SUPPLY_POS,\r\n PIN_NAMES.IN_AMP.SUPPLY_NEG,\r\n PIN_NAMES.IN_AMP.SUPPLY_INPUT_POS,\r\n ]\r\n },\r\n \"MAX41400\" : {\r\n \"requiredPDBParameters\" : [],\r\n \"emiFilter\" : {\r\n \"r\" : 2e3,\r\n \"cCm\" : 5e-12,\r\n \"cDiff\" : 0\r\n },\r\n \"inputStage\" : {\r\n \"gains (V/V)\" : [\r\n \"250\",\r\n \"200\",\r\n \"150\",\r\n \"100\",\r\n \"80\",\r\n \"40\",\r\n \"20\",\r\n \"10\"\r\n ],\r\n \"250\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 7.60e-03,\r\n 1.20e+05,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 55.2e3,\r\n \"r2\" : 55.2e3,\r\n \"r3\" : 4.6e3,\r\n },\r\n \"200\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 7.60e-03,\r\n 1.20e+05,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 54.625e3,\r\n \"r2\" : 54.625e3,\r\n \"r3\" : 5.75e3,\r\n },\r\n \"150\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 7.60e-03,\r\n 1.20e+05,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 161e3/3,\r\n \"r2\" : 161e3/3,\r\n \"r3\" : 23e3/3,\r\n },\r\n \"100\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 1.05e-02,\r\n 5.50e+03,\r\n 1.00e+05,\r\n 1.00e+05,\r\n 1.00e+05,\r\n ],\r\n \"zeros\": [\r\n 8.71e+03,\r\n ],\r\n },\r\n \"r1\" : 51.75e3,\r\n \"r2\" : 51.75e3,\r\n \"r3\" : 11.5e3,\r\n },\r\n \"80\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 1.05e-02,\r\n 5.50e+03,\r\n 1.00e+05,\r\n 1.00e+05,\r\n 1.00e+05,\r\n ],\r\n \"zeros\": [\r\n 8.71e+03,\r\n ],\r\n },\r\n \"r1\" : 50.3125e3,\r\n \"r2\" : 50.3125e3,\r\n \"r3\" : 14.375e3,\r\n },\r\n \"40\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 5.01e-02,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 54.625e3,\r\n \"r2\" : 54.625e3,\r\n \"r3\" : 5.75e3,\r\n },\r\n \"20\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 5.01e-02,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 51.75e3,\r\n \"r2\" : 51.75e3,\r\n \"r3\" : 11.5e3,\r\n },\r\n \"10\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 140,\r\n \"poles\": [\r\n 2.19e-02,\r\n ],\r\n \"zeros\": [\r\n ],\r\n },\r\n \"r1\" : 46e3,\r\n \"r2\" : 46e3,\r\n \"r3\" : 23e3,\r\n },\r\n },\r\n \"outputStage\" : {\r\n \"slewRate\" : 0.08e6,\r\n \"gains (V/V)\" : [\r\n \"250\",\r\n \"200\",\r\n \"150\",\r\n \"100\",\r\n \"80\",\r\n \"40\",\r\n \"20\",\r\n \"10\"\r\n ], \r\n \"250\" : {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 8.00e-01,\r\n 4.40e+04,\r\n 8.00e+05,\r\n ],\r\n \"zeros\": [\r\n 2.40e+05,\r\n ],\r\n },\r\n \"r1\" : 81.818e3,\r\n \"r2\" : 818.18e3,\r\n \"r3\" : 81.818e3,\r\n \"r4\" : 818.18e3,\r\n \"cF\" : 6.31e-13,\r\n },\r\n \"200\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 8.00e-01,\r\n 4.40e+04,\r\n 8.00e+05,\r\n ],\r\n \"zeros\": [\r\n 2.40e+05,\r\n ],\r\n },\r\n \"r1\" : 81.818e3,\r\n \"r2\" : 818.18e3,\r\n \"r3\" : 81.818e3,\r\n \"r4\" : 818.18e3,\r\n \"cF\" : 6.31e-13,\r\n },\r\n \"150\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 8.00e-01,\r\n 4.40e+04,\r\n 8.00e+05,\r\n ],\r\n \"zeros\": [\r\n 2.40e+05,\r\n ],\r\n },\r\n \"r1\" : 81.818e3,\r\n \"r2\" : 818.18e3,\r\n \"r3\" : 81.818e3,\r\n \"r4\" : 818.18e3,\r\n \"cF\" : 6.31e-13,\r\n },\r\n \"100\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.20e+00,\r\n 7.94e+05,\r\n ],\r\n \"zeros\": [\r\n 2.40e+05,\r\n ],\r\n },\r\n \"r1\" : 81.818e3,\r\n \"r2\" : 818.18e3,\r\n \"r3\" : 81.818e3,\r\n \"r4\" : 818.18e3,\r\n \"cF\" : 6.31e-13,\r\n },\r\n \"80\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.20e+00,\r\n 7.94e+05,\r\n ],\r\n \"zeros\": [\r\n 2.40e+05,\r\n ],\r\n },\r\n \"r1\" : 81.818e3,\r\n \"r2\" : 818.18e3,\r\n \"r3\" : 81.818e3,\r\n \"r4\" : 818.18e3,\r\n \"cF\" : 6.31e-13,\r\n },\r\n \"40\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 7.59e-02,\r\n 4.37e+04,\r\n 1.00e+05,\r\n 2.00e+05,\r\n ],\r\n \"zeros\": [\r\n 1.66e+05,\r\n ],\r\n },\r\n \"r1\" : 300e3,\r\n \"r2\" : 600e3,\r\n \"r3\" : 300e3,\r\n \"r4\" : 600e3\r\n },\r\n \"20\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 7.59e-02,\r\n 4.37e+04,\r\n 1.00e+05,\r\n 2.00e+05,\r\n ],\r\n \"zeros\": [\r\n 1.66e+05,\r\n ],\r\n },\r\n \"r1\" : 300e3,\r\n \"r2\" : 600e3,\r\n \"r3\" : 300e3,\r\n \"r4\" : 600e3\r\n },\r\n \"10\": {\r\n \"openLoopGain\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Db, Degrees\",\r\n \"dcGain\": 120,\r\n \"poles\": [\r\n 1.05e-01,\r\n 9.12e+03,\r\n 2.40e+04,\r\n 5.01e+04,\r\n ],\r\n \"zeros\": [\r\n 2.00e+04,\r\n 2.29e+04,\r\n ],\r\n },\r\n \"r1\" : 300e3,\r\n \"r2\" : 600e3,\r\n \"r3\" : 300e3,\r\n \"r4\" : 600e3\r\n }\r\n },\r\n }\r\n }\r\n}","export let data = {\r\n \"map\": {\r\n \"ADA4351-2\": \"ADA4351-2\",\r\n },\r\n \"partData\": {\r\n \"ADA4351-2\": {\r\n outputArchitecture: \"Kelvin Switching\",\r\n cF: 3e-12,\r\n rKelvin: 13\r\n }\r\n }\r\n}","// Contains custom data for our differential amplifiers.\r\n// This file is used to define irregular data, particularly for fixed / programmable gain differential amplifiers or the differential amplifiers used inside our uModules\r\n\r\nexport let data = {\r\n \"map\": {\r\n \"LTC6363-0.5\": \"LTC6363-0.5\",\r\n \"LTC6363-1\": \"LTC6363-1\",\r\n \"LTC6363-2\": \"LTC6363-2\",\r\n \"AD8475\" : \"AD8475\",\r\n \"AD8476\" : \"AD8476\",\r\n \"ADAQ400X_ADC_DRIVER_FP\" : \"ADAQ400X_ADC_DRIVER_FP\",\r\n \"ADAQ400X_ADC_DRIVER_LP\" : \"ADAQ400X_ADC_DRIVER_LP\",\r\n \"ADAQ2387X_ADC_DRIVER\" : \"ADAQ2387X_ADC_DRIVER\",\r\n \"ADAQ4380_ADC_DRIVER_FP\" : \"ADAQ4380_ADC_DRIVER_FP\",\r\n \"ADAQ4380_ADC_DRIVER_LP\" : \"ADAQ4380_ADC_DRIVER_LP\",\r\n },\r\n \"partData\": {\r\n \"LTC6363-0.5\": {\r\n rF: 0.7e3,\r\n rG: 1.4e3,\r\n cF: 4e-12,\r\n differentialAmp: {\r\n partName: 'LTC6363',\r\n gainError: 0.0045,\r\n gainErrorAtMaxTemp: 0.0075,\r\n gainTC: 0.5, \r\n cmrr: 94,\r\n },\r\n requiredPDBParameters: []\r\n },\r\n \"LTC6363-1\": {\r\n rF: 1.05e3,\r\n rG: 1.05e3,\r\n cF: 2.9e-12,\r\n differentialAmp: {\r\n partName: 'LTC6363',\r\n gainError: 0.0045,\r\n gainErrorAtMaxTemp: 0.0075,\r\n gainTC: 0.5, \r\n cmrr: 94,\r\n },\r\n requiredPDBParameters: []\r\n },\r\n \"LTC6363-2\": {\r\n rF: 1.4e3,\r\n rG: 0.7e3,\r\n cF: 5.8e-12,\r\n differentialAmp: {\r\n partName: 'LTC6363',\r\n gainError: 0.0045,\r\n gainErrorAtMaxTemp: 0.0075,\r\n gainTC: 0.5, \r\n cmrr: 94,\r\n },\r\n requiredPDBParameters: []\r\n },\r\n \"AD8475\": {\r\n \"gains (V/V)\" : [\r\n \"0.4\",\r\n \"0.8\"\r\n ],\r\n \"0.4\": {\r\n rF: 1e3,\r\n rG: 2.5e3,\r\n cF: 0.9e-12,\r\n },\r\n \"0.8\": {\r\n rF: 1e3,\r\n rG: 1.25e3,\r\n cF: 0.9e-12,\r\n },\r\n differentialAmp: {\r\n partName: 'AD8475-INT',\r\n // Useful PDB parameters, since internal amp is not in PDB database\r\n gbw: 240e6,\r\n gbwCm: 10e6, \r\n rInVocm: 100e3, \r\n rDiff: 50e3, \r\n rCm: 5e6, \r\n cDiff: 1e-20,\r\n cCm: 1e-20,\r\n rOut: 50, //SIM-629\r\n vNoise: 6.48e-9,\r\n /* The AD8475 datasheet doesn't specify any value for the VOCM noise of the part, so we choose a conservative value based on similar FDA's. \r\n However, since the resistors around AD8475's internal FDA are symmetric (balanced), the noise contribution of the VOCM noise is zero anyway.*/\r\n vNoiseVocm: 40e-9, \r\n slewRate: 50e6,\r\n gainError: 0.02,\r\n gainTC: 3, \r\n cmrr: 86,\r\n outHeadroomVminusTyp: 0.05,\r\n outHeadroomVplusTyp: 0.05,\r\n inHeadroomVminusMax: 0,\r\n inHeadroomVplusMax: 1,\r\n supplyCurrentTyp: 3e-3,\r\n supplyCurrentMax: 3.2e-3,\r\n },\r\n // No PDB or TPC parameters required for the full AD8475 - parameters will come from AD8475-INT\r\n requiredPDBParameters: [],\r\n requiredTPCParameters: [], \r\n },\r\n \"AD8476\": {\r\n rF: 10e3,\r\n rG: 10e3,\r\n cF: 1e-15,\r\n differentialAmp: {\r\n partName: 'AD8476-INT',\r\n // Useful PDB parameters, since internal amp is not in PDB database\r\n gbw: 9.5e6,\r\n gbwCm: 1e6, \r\n rInVocm: 500e3, \r\n cDiff: 0.4e-12, \r\n cCm: 1e-20, \r\n rDiff: 500e3, \r\n rCm: 50e6, \r\n vNoise: 1.56e-8,\r\n rOut: 100, //SIM-629\r\n /* The AD8476 datasheet doesn't specify any value for the VOCM noise of the part, so we choose a conservative value based on similar FDA's. \r\n However, since the resistors around AD8476's internal FDA are symmetric (balanced), the noise contribution of the VOCM noise is zero anyway.*/\r\n vNoiseVocm: 50e-9, \r\n slewRate: 10e6,\r\n gainError: 0.02,\r\n gainTC: 1, \r\n cmrr: 90, \r\n outHeadroomVminusTyp: 0.05,\r\n outHeadroomVplusTyp: 0.05,\r\n inHeadroomVminusMax: 0,\r\n inHeadroomVplusMax: 1,\r\n supplyCurrentTyp: 330e-6,\r\n supplyCurrentMax: 500e-6,\r\n },\r\n // No PDB or TPC parameters required for the full AD8476 - parameters will come from AD8476-INT\r\n requiredPDBParameters: [],\r\n requiredTPCParameters: [], \r\n },\r\n // This is not a stand alone part - it's the driver inside the ADAQ400X family of uModules. This driver uses the ADA4945-1, but since the ADAQ400X includes internal\r\n // resistors we will model this part as a programmable gain part (like the AD8475). This section models the ADA4945 at full power. Same passives\r\n // as ADAQ400X_ADC_DRIVER_LP.\r\n \"ADAQ400X_ADC_DRIVER_FP\": {\r\n \"gains (V/V)\" : [\r\n \"0.454\",\r\n \"0.909\",\r\n \"1\",\r\n \"1.9\"\r\n ],\r\n \"0.454\": {\r\n rF: 500,\r\n rG: 1.1e3,\r\n cF: 19e-12,\r\n },\r\n \"0.909\": {\r\n rF: 1e3,\r\n rG: 1.1e3,\r\n cF: 19e-12,\r\n },\r\n \"1\": {\r\n rF: 1e3,\r\n rG: 1e3,\r\n cF: 19e-12,\r\n },\r\n \"1.9\": {\r\n rF: 1e3,\r\n rG: 524,\r\n cF: 19e-12,\r\n },\r\n differentialAmp: {\r\n partName: 'ADA4945-1 full power',\r\n cDiff: 105e-12,\r\n rInVocm: 1e12,\r\n },\r\n requiredPDBParameters: [], \r\n },\r\n // This is not a stand alone part - it's the driver inside the ADAQ400X family of uModules. This driver uses the ADA4945-1, but since the ADAQ400X includes internal\r\n // resistors we will model this part as a programmable gain part (like the AD8475). This section models the ADA4945 at low power. Same passives\r\n // as ADAQ400X_ADC_DRIVER_FP.\r\n \"ADAQ400X_ADC_DRIVER_LP\": {\r\n \"gains (V/V)\" : [\r\n \"0.454\",\r\n \"0.909\",\r\n \"1\",\r\n \"1.9\"\r\n ],\r\n \"0.454\": {\r\n rF: 500,\r\n rG: 1.1e3,\r\n // cF: 19e-12,\r\n cF: 29e-12,\r\n },\r\n \"0.909\": {\r\n rF: 1e3,\r\n rG: 1.1e3,\r\n cF: 19e-12,\r\n },\r\n \"1\": {\r\n rF: 1e3,\r\n rG: 1e3,\r\n cF: 19e-12,\r\n },\r\n \"1.9\": {\r\n rF: 1e3,\r\n rG: 524,\r\n cF: 19e-12,\r\n },\r\n differentialAmp: {\r\n partName: 'ADA4945-1 low power',\r\n cDiff: 105e-12,\r\n rInVocm: 1e12,\r\n },\r\n requiredPDBParameters: [], \r\n },\r\n // This is not a stand alone part - it's the driver inside the ADAQ2387X family of uModules. This driver uses the ADA4945-1 (always at full power), \r\n // but since the ADAQ2387X includes internal resistors we will model this part as a programmable gain part (like the AD8475). \r\n \"ADAQ2387X_ADC_DRIVER\": {\r\n \"gains (V/V)\" : [\r\n \"0.37\",\r\n \"0.73\",\r\n \"0.87\",\r\n \"1.38\",\r\n \"2.25\",\r\n \"2\"\r\n ],\r\n \"0.37\": {\r\n rF: 578.9,\r\n rG: 1571.4,\r\n cF: 2.6e-12,\r\n },\r\n \"0.73\": {\r\n rF: 733.3,\r\n rG: 1000,\r\n cF: 2.6e-12,\r\n },\r\n \"0.87\": {\r\n rF: 1375,\r\n rG: 1571.4,\r\n // cF was originally 2.6pF, but changed to 2.3pF to tweak our model to match datasheet better\r\n cF: 2.3e-12,\r\n },\r\n \"1.38\": {\r\n rF: 1375,\r\n rG: 1000,\r\n cF: 2.6e-12,\r\n },\r\n \"2.25\": {\r\n rF: 1375,\r\n rG: 611.1,\r\n // cF was originally 2.6pF, but changed to 3.3pF to tweak our model to match datasheet better\r\n cF: 3.3e-12,\r\n },\r\n // The gain of 2 below is only applicable to the ADAQ23875.\r\n \"2\": {\r\n rF: 1100,\r\n rG: 550,\r\n // cF was originally 1.3pF, but changed to 3.2pF to tweak our model to match datasheet better\r\n cF: 3.2e-12,\r\n },\r\n differentialAmp: {\r\n partName: 'ADA4945-1 full power',\r\n cDiff: 3.3e-12/2,\r\n rInVocm: 1e12,\r\n vocmHeadroomVminusTyp: 0,\r\n vocmHeadroomVplusTyp : 0.9\r\n },\r\n requiredPDBParameters: [], \r\n },\r\n // This is not a stand alone part - it's the driver inside the ADAQ4380-4 uModule. This driver uses the ADA4945-1, but since the ADAQ4380-4 includes internal\r\n // resistors we will model this part as a programmable gain part (like the AD8475). This section models the ADA4945 at full power. Same passives\r\n // as ADAQ4380_ADC_DRIVER_LP.\r\n \"ADAQ4380_ADC_DRIVER_FP\": {\r\n \"gains (V/V)\" : [\r\n \"0.3\",\r\n \"0.6\",\r\n \"1\",\r\n \"1.6\"\r\n ],\r\n \"0.3\": {\r\n rF: 810,\r\n rG: 2.7e3,\r\n cF: 15e-12,\r\n },\r\n \"0.6\": {\r\n rF: 1.62e3,\r\n rG: 2.7e3,\r\n cF: 15e-12,\r\n },\r\n \"1\": {\r\n rF: 1.62e3,\r\n rG: 1.62e3,\r\n cF: 15e-12,\r\n },\r\n \"1.6\": {\r\n rF: 1.62e3,\r\n rG: 1.0125e3,\r\n cF: 15e-12,\r\n },\r\n differentialAmp: {\r\n partName: 'ADA4945-1 full power',\r\n cDiff: 15e-12/2,//best estimate now, to be measured later\r\n rInVocm: 1e12,\r\n },\r\n requiredPDBParameters: [], \r\n },\r\n // This is not a stand alone part - it's the driver inside the ADAQ4380-4 uModule. This driver uses the ADA4945-1, but since the ADAQ4380-4 includes internal\r\n // resistors we will model this part as a programmable gain part (like the AD8475). This section models the ADA4945 at low power. Same passives\r\n // as ADAQ4380_ADC_DRIVER_FP.\r\n \"ADAQ4380_ADC_DRIVER_LP\": {\r\n \"gains (V/V)\" : [\r\n \"0.3\",\r\n \"0.6\",\r\n \"1\",\r\n \"1.6\"\r\n ],\r\n \"0.3\": {\r\n rF: 810,\r\n rG: 2.7e3,\r\n cF: 15e-12,\r\n },\r\n \"0.6\": {\r\n rF: 1.62e3,\r\n rG: 2.7e3,\r\n cF: 15e-12,\r\n },\r\n \"1\": {\r\n rF: 1.62e3,\r\n rG: 1.62e3,\r\n cF: 15e-12,\r\n },\r\n \"1.6\": {\r\n rF: 1.62e3,\r\n rG: 1.0125e3,\r\n cF: 15e-12,\r\n },\r\n differentialAmp: {\r\n partName: 'ADA4945-1 low power',\r\n cDiff: 15e-12/2,//best estimate now, to be measured later\r\n rInVocm: 1e12,\r\n },\r\n requiredPDBParameters: [], \r\n },\r\n }\r\n}","//Contains custom data for our series voltage references. Because the references are modeled with an internal amplifier that require additional curve-fitting by the modelers, this file is \r\n// used to store and edit the data without fear of it being overwritten by the python automation script which overwrites the reference-tpc-database.js file. The data in \r\n// this file should be elements that are not readily discerned from the datasheet (i.e. table data or plots should be in the pdb-database & tpc-database files, respectively)\r\nexport let data = {\r\n \"map\": {\r\n \"LT6657AHMS8-1.25\": \"LT6657-1.25\",\r\n \"LT6657AHMS8-2.5\": \"LT6657-2.5\",\r\n \"LT6657AHMS8-3\": \"LT6657-3\",\r\n \"LT6657AHMS8-4.096\": \"LT6657-4.096\",\r\n \"LT6657AHMS8-5\": \"LT6657-5\",\r\n \"LT6657BHMS8-1.25\": \"LT6657-1.25\",\r\n \"LT6657BHMS8-2.5\": \"LT6657-2.5\",\r\n \"LT6657BHMS8-3\": \"LT6657-3\",\r\n \"LT6657BHMS8-4.096\": \"LT6657-4.096\",\r\n \"LT6657BHMS8-5\": \"LT6657-5\",\r\n\r\n \"LTC6655B-1.25\": \"LTC6655-1.25\",\r\n \"LTC6655B-2.048\": \"LTC6655-2.048\",\r\n \"LTC6655B-2.5\": \"LTC6655-2.5\",\r\n \"LTC6655B-3\": \"LTC6655-3\",\r\n \"LTC6655B-3.3\": \"LTC6655-3.3\",\r\n \"LTC6655B-4.096\": \"LTC6655-4.096\",\r\n \"LTC6655B-5\": \"LTC6655-5\",\r\n \"LTC6655C-1.25\": \"LTC6655-1.25\",\r\n \"LTC6655C-2.048\": \"LTC6655-2.048\",\r\n \"LTC6655C-2.5\": \"LTC6655-2.5\",\r\n \"LTC6655C-3\": \"LTC6655-3\",\r\n \"LTC6655C-3.3\": \"LTC6655-3.3\",\r\n \"LTC6655C-4.096\": \"LTC6655-4.096\",\r\n \"LTC6655C-5\": \"LTC6655-5\",\r\n\r\n \"LTC6655LNB-2.5\": \"LTC6655LN-2.5\",\r\n \"LTC6655LNB-4.096\": \"LTC6655LN-4.096\",\r\n \"LTC6655LNB-5\": \"LTC6655LN-5\",\r\n \"LTC6655LNC-2.5\": \"LTC6655LN-2.5\",\r\n \"LTC6655LNC-4.096\": \"LTC6655LN-4.096\",\r\n \"LTC6655LNC-5\": \"LTC6655LN-5\",\r\n\r\n \"ADR3412\" : \"ADR3412\",\r\n \"ADR3420\" : \"ADR3420\",\r\n \"ADR3425\" : \"ADR3425\",\r\n \"ADR3430\" : \"ADR3430\",\r\n \"ADR3433\" : \"ADR3433\",\r\n \"ADR3440\" : \"ADR3440\",\r\n \"ADR3450\" : \"ADR3450\",\r\n\r\n \"ADR3610\" : \"ADR3610\",\r\n \"ADR3612\" : \"ADR3612\",\r\n \"ADR3618\" : \"ADR3618\",\r\n \"ADR3620\" : \"ADR3620\",\r\n \"ADR3625\" : \"ADR3625\",\r\n \"ADR3630\" : \"ADR3630\",\r\n \"ADR3633\" : \"ADR3633\",\r\n \"ADR3640\" : \"ADR3640\",\r\n \"ADR3650\" : \"ADR3650\",\r\n\r\n \"ADR4520A\" : \"ADR4520\",\r\n \"ADR4520B\" : \"ADR4520\",\r\n \"ADR4525A\" : \"ADR4525\",\r\n \"ADR4525B\" : \"ADR4525\",\r\n \"ADR4525C\" : \"ADR4525\",\r\n \"ADR4525D\" : \"ADR4525\",\r\n \"ADR4530A\" : \"ADR4530\",\r\n \"ADR4530B\" : \"ADR4530\",\r\n \"ADR4533A\" : \"ADR4533\",\r\n \"ADR4533B\" : \"ADR4533\",\r\n \"ADR4540A\" : \"ADR4540\",\r\n \"ADR4540B\" : \"ADR4540\",\r\n \"ADR4540C\" : \"ADR4540\",\r\n \"ADR4540D\" : \"ADR4540\",\r\n \"ADR4550A\" : \"ADR4550\",\r\n \"ADR4550B\" : \"ADR4550\",\r\n \"ADR4550C\" : \"ADR4550\",\r\n \"ADR4550D\" : \"ADR4550\",\r\n \r\n // \"LTZ1000ACH\" : \"LTZ1000\",\r\n // \"LTZ1000CH\" : \"LTZ1000\",\r\n\r\n \"ADAQ2387X_INT_REF\" : \"ADAQ2387X_INT_REF\",\r\n },\r\n \"partData\": {\r\n\r\n \"LT6657-1.25\":{\r\n \"cmin\" : 2.7e-6,\r\n \"rf\" : 125,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 1.03, //2.56\r\n \"alpha\" : 0.758, //1\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 23.9e-9,\r\n \"rOut\" : 30.229,//1.3, //1.5\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\" : \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\": 147.55, //98.75, //100\r\n \"poles\" : [\r\n 3.835,//1.07, //0.42,\r\n 580.2,\r\n ],\r\n \"zeros\" : [\r\n 3.977e4\r\n ]\r\n },\r\n // \"outputImpedanceOpenLoop\": {\r\n // \"dataFormat\": \"pole zero\",\r\n // \"xUnits\": \"Hz\",\r\n // \"yUnits\": \"Ohms, Degrees\",\r\n // \"dcResistance\": 0.25, \r\n // \"poles\": [\r\n // 343.2e3,\r\n // ],\r\n // \"zeros\": [\r\n // 65e3,\r\n // ]\r\n // },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LT6657-2.5\":{\r\n \"cmin\": 1e-6,\r\n \"rf\": 750,\r\n \"rg\": 500,\r\n \"rs\": 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 0.659, //2.56\r\n \"alpha\" : 0.737, //1\r\n \"bandgapOutputNoise\": 1e-9,\r\n \"opAmp\": {\r\n \"iNoise\" : 0,\r\n \"vNoise\": 25.4e-9,\r\n \"rOut\" : 3.834, //2.37, //2.5\r\n \"tpcData\": {\r\n \"openLoopGain\" : {\r\n \"dataFormat\" : \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\": 117.02, //99.552, //100\r\n \"poles\" : [\r\n 0.0543, //0.0766, //1.87, //0.995\r\n 7.517e3\r\n ],\r\n \"zeros\" : [\r\n 1.7e3,\r\n ]\r\n },\r\n // \"outputImpedanceOpenLoop\": {\r\n // \"dataFormat\": \"pole zero\",\r\n // \"xUnits\": \"Hz\",\r\n // \"yUnits\": \"Ohms, Degrees\",\r\n // \"dcResistance\": 0.588, \r\n // \"poles\": [\r\n // 20e3*5.28,\r\n // ],\r\n // \"zeros\": [\r\n // 20e3,\r\n // ]\r\n // },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LT6657-3\":{\r\n \"cmin\": 1e-6,\r\n \"rf\": 1000,\r\n \"rg\": 500,\r\n \"rs\": 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 0.659, //2.56\r\n \"alpha\" : 0.737, //1\r\n \"bandgapOutputNoise\": 1e-9,\r\n \"opAmp\": {\r\n \"iNoise\" : 0,\r\n \"vNoise\": 25.4e-9,\r\n \"rOut\" : 2.37, //2.5\r\n \"tpcData\": {\r\n \"openLoopGain\" : {\r\n \"dataFormat\" : \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\": 99.552, //100\r\n \"poles\" : [\r\n 1.87, //0.995\r\n ],\r\n \"zeros\" : [\r\n ]\r\n },\r\n // \"outputImpedanceOpenLoop\": {\r\n // \"dataFormat\": \"pole zero\",\r\n // \"xUnits\": \"Hz\",\r\n // \"yUnits\": \"Ohms, Degrees\",\r\n // \"dcResistance\": 0.588, \r\n // \"poles\": [\r\n // 20e3*5.28,\r\n // ],\r\n // \"zeros\": [\r\n // 20e3,\r\n // ]\r\n // },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LT6657-4.096\":{\r\n \"cmin\": 1e-6,\r\n \"rf\": 1548,\r\n \"rg\": 500,\r\n \"rs\": 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2.56,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\": 1e-9,\r\n \"opAmp\": {\r\n \"iNoise\" : 0,\r\n \"vNoise\": 25.6e-9,\r\n \"rOut\" : 5.16, //5\r\n \"tpcData\": {\r\n \"openLoopGain\" : {\r\n \"dataFormat\" : \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\": 101.15, //100\r\n \"poles\" : [\r\n 2.07, //1.99\r\n ],\r\n \"zeros\" : [\r\n ]\r\n },\r\n // \"outputImpedanceOpenLoop\": {\r\n // \"dataFormat\": \"pole zero\",\r\n // \"xUnits\": \"Hz\",\r\n // \"yUnits\": \"Ohms, Degrees\",\r\n // \"dcResistance\": 0.25, \r\n // \"poles\": [\r\n // 20e3*5.28,\r\n // ],\r\n // \"zeros\": [\r\n // 20e3,\r\n // ]\r\n // },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LT6657-5\":{\r\n \"cmin\" : 1e-6,\r\n \"rf\" : 2e3,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 3.09,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\": 25.6e-9,\r\n \"rOut\" : 6.902, //5, //1.39, //5\r\n \"tpcData\": {\r\n \"openLoopGain\" : {\r\n \"dataFormat\" : \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\": 118.34, //101.15, //76.84, //101.15, //100\r\n \"poles\" : [\r\n 0.125,//2.08, //6.92, //2.08, //1.99\r\n 4.082e3,// 15e3,// 5.12e4,\r\n // 35.2e3,\r\n ],\r\n \"zeros\" : [\r\n 1.528e3\r\n // 10e3,// 2.69e4\r\n // 10e3,\r\n ]\r\n },\r\n // \"outputImpedanceOpenLoop\": {\r\n // \"dataFormat\": \"pole zero\",\r\n // \"xUnits\": \"Hz\",\r\n // \"yUnits\": \"Ohms, Degrees\",\r\n // \"dcResistance\": 6.902,//5, //1.39, //1.39\r\n // \"poles\": [\r\n // // 35.2e3,\r\n // ],\r\n // \"zeros\": [\r\n // // 10e3,\r\n // ]\r\n // },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n\r\n \"LTC6655-1.25\":{\r\n \"cmin\" : 1e-6,\r\n \"rf\" : 125,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LTC6655-2.048\":{\r\n \"rf\" : 524,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1,\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LTC6655-2.5\":{\r\n \"rf\" : 750,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LTC6655-3\":{\r\n \"rf\" : 1e3,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1,\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LTC6655-3.3\":{\r\n \"rf\" : 1.15e3,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1,\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LTC6655-4.096\":{\r\n \"rf\" : 1548,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1,\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LTC6655-5\":{\r\n \"rf\" : 2e3,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1,\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LTC6655LN-2.5\":{\r\n \"rf\" : 750,\r\n \"rg\" : 500,\r\n \"rs\" : 300,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1,\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LTC6655LN-4.096\":{\r\n \"rf\" : 1548,\r\n \"rg\" : 500,\r\n \"rs\" : 378,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1,\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"LTC6655LN-5\":{\r\n \"rf\" : 2000,\r\n \"rg\" : 500,\r\n \"rs\" : 400,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 8,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 11.9e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 6.64e-9,\r\n \"rOut\" : 8000,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 120,\r\n \"poles\" : [\r\n 0.1,\r\n 40e3,\r\n 10e9,\r\n 10e9,\r\n 10e9\r\n ],\r\n \"zeros\" : [\r\n 4e3,\r\n 100e6,\r\n 100e6,\r\n 100e6 \r\n ]\r\n },\r\n \"outputImpedanceOpenLoop\": {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\": \"Hz\",\r\n \"yUnits\": \"Ohms, Degrees\",\r\n \"dcResistance\": 8000,\r\n \"poles\": [\r\n 0.1,\r\n ],\r\n \"zeros\": [\r\n 100,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n\r\n \"ADR3412\":{\r\n \"rf\" : 2.12e3, \r\n \"rg\" : 1.06e4, \r\n \"rs\" : 5e5,\r\n \"cs\" : 91.4e-12, \r\n \"flickerNoiseCorner\" : 3.742e1, //Larger corner due to contribution only from amp\r\n \"alpha\" : 0.9097, \r\n \"bandgapOutputNoise\" : 369.6e-9, \r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 107.4e-9, \r\n \"rOut\" : 2.0925e2, \r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 108.26, //100\r\n \"poles\" : [\r\n 0.0248, //0.05\r\n 1.089e4, //7.943e3\r\n ],\r\n \"zeros\" : [\r\n 1.889e3, //1.995e3 \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3420\":{\r\n \"rf\" : 6.4976e3, \r\n \"rg\" : 6.2e3, \r\n \"rs\" : 5e5,\r\n \"cs\" : 153e-12, \r\n \"flickerNoiseCorner\" : 7.196e1, \r\n \"alpha\" : 0.9038, \r\n \"bandgapOutputNoise\" : 359.4e-9, \r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 81.33e-9, \r\n \"rOut\" : 1.825e2, \r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 107.86, //100\r\n \"poles\" : [\r\n 0.03541, //0.0759\r\n 1.09e4, //7.2e3\r\n\r\n ],\r\n \"zeros\" : [\r\n 1.903e3, //1.995e3 \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3425\":{\r\n \"rf\" : 7.5e3, \r\n \"rg\" : 5e3, \r\n \"rs\" : 5e5,\r\n \"cs\" : 196.5e-12, \r\n \"flickerNoiseCorner\" : 1.386e2, \r\n \"alpha\" : 0.9031, \r\n \"bandgapOutputNoise\" : 363.7e-9, \r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 60.61e-9, \r\n \"rOut\" : 2.152e2, \r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 110.584, //100\r\n \"poles\" : [\r\n 0.02943, //0.0738\r\n 1.09e4, //6.7e3\r\n ],\r\n \"zeros\" : [\r\n 1.464e3, //1.595e3 \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3430\":{\r\n \"rf\" : 8.4e3, \r\n \"rg\" : 4.2e3, \r\n \"rs\" : 5e5,\r\n \"cs\" : 229.2e-12, \r\n \"flickerNoiseCorner\" : 1.899e2, \r\n \"alpha\" : 0.9031, \r\n \"bandgapOutputNoise\" : 364.1e-9, \r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 52.6e-9, \r\n \"rOut\" : 2.124e2, \r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 112.105, //100\r\n \"poles\" : [\r\n 0.025, //0.0763\r\n 1.09e4, //8e3\r\n ],\r\n \"zeros\" : [\r\n 1.299e3, //1.585e3 \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3433\":{\r\n \"rf\" : 8.74e3, \r\n \"rg\" : 3.8e3, \r\n \"rs\" : 5e5,\r\n \"cs\" : 247.2e-12, \r\n \"flickerNoiseCorner\" : 2.349e2,\r\n \"alpha\" : 0.9032, \r\n \"bandgapOutputNoise\" : 364.4e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 47.81e-9,\r\n \"rOut\" : 2.144e2,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 109.783, //100\r\n \"poles\" : [\r\n 0.0339, //0.0775\r\n 1.09e4, //6.5e3\r\n ],\r\n \"zeros\" : [\r\n 1.231e3, //1.2e3\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3440\":{\r\n \"rf\" : 9.5976e3, \r\n \"rg\" : 3.1e3, \r\n \"rs\" : 5e5,\r\n \"cs\" : 279.8e-12, \r\n \"flickerNoiseCorner\" : 3.584e2, \r\n \"alpha\" : 0.9036, \r\n \"bandgapOutputNoise\" : 358.4e-9, \r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 39.44e-9, \r\n \"rOut\" : 2.077e2, \r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 110.14, //100\r\n \"poles\" : [\r\n 0.0343, //0.0831\r\n 1.09e4, //8.3e3\r\n ],\r\n \"zeros\" : [\r\n 1.143e3, //1.4e3\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3450\":{\r\n \"rf\" : 1e4, \r\n \"rg\" : 2.5e3, \r\n \"rs\" : 5e5,\r\n \"cs\" : 308.8e-12, \r\n \"flickerNoiseCorner\" : 6.435e2, \r\n \"alpha\" : 0.9041, \r\n \"bandgapOutputNoise\" : 362.5e-9, \r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 30.2e-9, \r\n \"rOut\" : 2.134e2, \r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 110.15, //100\r\n \"poles\" : [\r\n 0.03878, //0.0898\r\n 1.09e4, //8.2e3\r\n\r\n ],\r\n \"zeros\" : [\r\n 1.069e3, //1.385 \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3612\":{\r\n \"rf\" : 2.4e4,\r\n \"rg\" : 1.2e5,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 3,\r\n \"alpha\" : 0.899,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 90e-9,\r\n \"rOut\" : 1.2e3,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 79.55,\r\n \"poles\" : [\r\n 0.5,\r\n 650,\r\n ],\r\n \"zeros\" : [\r\n 250,\r\n 15849, \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3618\":{\r\n \"rf\" : 9.6e4,\r\n \"rg\" : 1.2e5,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2.5,\r\n \"alpha\" : 0.95,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 93.33e-9,\r\n \"rOut\" : 1.2e3,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 79.805,\r\n \"poles\" : [\r\n 0.5,\r\n 500,\r\n ],\r\n \"zeros\" : [\r\n 200,\r\n 1e4, \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3620\":{\r\n \"rf\" : 1.2576e5,\r\n \"rg\" : 1.2e5,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2.5,\r\n \"alpha\" : 0.965,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 93.33e-9,\r\n \"rOut\" : 1.2e3,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 79.92,\r\n \"poles\" : [\r\n 0.5,\r\n 500,\r\n 8e5,\r\n ],\r\n \"zeros\" : [\r\n 200,\r\n 1.1e4,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3625\":{\r\n \"rf\" : 1.8e5,\r\n \"rg\" : 1.2e5,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2.5,\r\n \"alpha\" : 0.96,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 98e-9,\r\n \"rOut\" : 1.2e3, //16.40\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 80.251,\r\n \"poles\" : [\r\n 0.50, \r\n 580, \r\n 1.5e4 \r\n ],\r\n \"zeros\" : [\r\n 180, \r\n 3.3e3 \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3630\":{\r\n \"rf\" : 2.4e5,\r\n \"rg\" : 1.2e5,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 3,\r\n \"alpha\" : 0.925,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 98e-9,\r\n \"rOut\" : 1.2e3,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 80.127,\r\n \"poles\" : [\r\n 0.5,\r\n 370,\r\n 5e4,\r\n ],\r\n \"zeros\" : [\r\n 125,\r\n 5e3,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3633\":{\r\n \"rf\" : 2.76e5,\r\n \"rg\" : 1.2e5,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 3,\r\n \"alpha\" : 0.93,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 98e-9,\r\n \"rOut\" : 1.2e3,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 80.109,\r\n \"poles\" : [\r\n 0.5,\r\n 400,\r\n 4e4,\r\n ],\r\n \"zeros\" : [\r\n 125,\r\n 6e3,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3640\":{\r\n \"rf\" : 3.7152e5,\r\n \"rg\" : 1.2e5,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 3,\r\n \"alpha\" : 0.95,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 98e-9,\r\n \"rOut\" : 1.2e3,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 79.968,\r\n \"poles\" : [\r\n 0.5,\r\n 370,\r\n 5e4,\r\n ],\r\n \"zeros\" : [\r\n 125,\r\n 4.1e3\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \"ADR3650\":{\r\n \"rf\" : 4.8e5,\r\n \"rg\" : 1.2e5,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 3,\r\n \"alpha\" : 0.97,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 98e-9,\r\n \"rOut\" : 1.2e3,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 80.366,\r\n \"poles\" : [\r\n 0.5,\r\n 380,\r\n 4e4,\r\n ],\r\n \"zeros\" : [\r\n 125,\r\n 4e3,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n \r\n \"ADR3610\":{\r\n \"rf\" : 1.08e6,\r\n \"rg\" : 1.2e5,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 3.1,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 98e-9,\r\n \"rOut\" : 1.2e3,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 82.367,\r\n \"poles\" : [\r\n 0.5,\r\n 300,\r\n 2.5e4,\r\n ],\r\n \"zeros\" : [\r\n 105,\r\n 2.5e3,\r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : []\r\n }\r\n }\r\n }\r\n },\r\n\r\n \"ADR4520\":{\r\n \"cmin\" : 1e-6,\r\n \"rf\" : 524,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 17.14e-9,\r\n \"rOut\" : 29.24,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 100,\r\n \"poles\" : [\r\n 0.0847,\r\n ],\r\n \"zeros\" : [ \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : [3.09093097e-08, 2.71668811e-08, 2.48587104e-08, 2.36365779e-08,\r\n 2.19530352e-08, 2.07681951e-08, 2.12942351e-08, 2.00666752e-08,\r\n 1.95382968e-08, 1.90678045e-08, 1.89011071e-08, 1.84896604e-08,\r\n 1.84079292e-08, 1.80759953e-08, 1.78500146e-08, 1.77459918e-08,\r\n 1.84557641e-08, 1.75840409e-08, 1.79002894e-08, 1.80676745e-08,\r\n 1.83245200e-08, 1.75974463e-08, 1.80415267e-08, 1.72075319e-08,\r\n 1.75011677e-08, 1.73922424e-08, 1.71045647e-08, 1.73958073e-08,\r\n 1.68224002e-08, 1.66564871e-08, 1.72115912e-08, 1.64029987e-08,\r\n 1.58394345e-08, 1.56420244e-08, 1.49218364e-08, 1.37164091e-08,\r\n 1.43604945e-08, 1.56797486e-08, 1.95125068e-08, 2.60088333e-08,\r\n 3.44871679e-08, 4.59836955e-08]\r\n }\r\n }\r\n }\r\n },\r\n \"ADR4525\":{\r\n \"cmin\" : 1e-6,\r\n \"rf\" : 750,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 16.64e-9,\r\n \"rOut\" : 34, //45.45\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 100, //50.15\r\n \"poles\" : [\r\n 0.102,//25.12\r\n ],\r\n \"zeros\" : [\r\n \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : [2.87502327e-08, 2.64028527e-08, 2.61939969e-08, 2.35709927e-08,\r\n 2.28718066e-08, 2.22366583e-08, 2.16459365e-08, 2.10808737e-08,\r\n 2.08088790e-08, 1.97283616e-08, 1.86916877e-08, 1.92706871e-08,\r\n 1.89064003e-08, 1.83196222e-08, 1.83798001e-08, 1.87310174e-08,\r\n 1.85569496e-08, 1.85639841e-08, 1.79580302e-08, 1.83279739e-08,\r\n 1.86254347e-08, 1.80365348e-08, 1.84208657e-08, 1.80802400e-08,\r\n 1.86278162e-08, 1.81018363e-08, 1.83664044e-08, 1.62445941e-08,\r\n 1.65835475e-08, 1.60387405e-08, 1.62249965e-08, 1.56466861e-08,\r\n 1.51548208e-08, 1.44184320e-08, 1.28817308e-08, 1.22435987e-08,\r\n 1.25959305e-08, 1.38445731e-08, 1.78441704e-08, 2.46407601e-08,\r\n 3.25620130e-08, 4.23018283e-08]\r\n }\r\n }\r\n }\r\n },\r\n \"ADR4530\":{\r\n \"cmin\" : 1e-6,\r\n \"rf\" : 1000,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 21.42e-9,\r\n \"rOut\" : 19.26,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 100,\r\n \"poles\" : [\r\n 0.116\r\n ],\r\n \"zeros\" : [ \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : [3.50333845e-08, 3.37400465e-08, 3.21118305e-08, 3.11809873e-08,\r\n 3.00094919e-08, 2.88882210e-08, 2.74767587e-08, 2.65071554e-08,\r\n 2.52864973e-08, 2.48734130e-08, 2.43537408e-08, 2.35909630e-08,\r\n 2.26306840e-08, 2.23410809e-08, 2.19767975e-08, 2.19258429e-08,\r\n 2.18618044e-08, 2.19105767e-08, 2.19720057e-08, 2.19489276e-08,\r\n 2.19199103e-08, 2.17515040e-08, 2.15396551e-08, 2.15475598e-08,\r\n 2.15580455e-08, 2.15286623e-08, 2.14927992e-08, 2.14757844e-08,\r\n 2.14574724e-08, 2.13713092e-08, 2.12718569e-08, 2.05848959e-08,\r\n 1.97442396e-08, 1.89500516e-08, 1.80387402e-08, 1.68812309e-08,\r\n 1.56511034e-08, 1.57328849e-08, 1.62204191e-08, 1.90110345e-08,\r\n 2.21844353e-08]\r\n }\r\n }\r\n }\r\n },\r\n \"ADR4533\":{\r\n \"cmin\" : 1e-6,\r\n \"rf\" : 1150,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 22.57e-9,\r\n \"rOut\" : 19.03,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 100,\r\n \"poles\" : [\r\n 0.1372 //38.02\r\n ],\r\n \"zeros\" : [ \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : [4.62491031e-08, 4.33811804e-08, 3.97706798e-08, 3.70072341e-08,\r\n 3.35288462e-08, 3.21399426e-08, 3.03921563e-08, 2.93682625e-08,\r\n 2.80792580e-08, 2.72224113e-08, 2.61439607e-08, 2.54734921e-08,\r\n 2.46294313e-08, 2.42852360e-08, 2.38521811e-08, 2.34824640e-08,\r\n 2.30171438e-08, 2.28032185e-08, 2.25340641e-08, 2.25517007e-08,\r\n 2.25744672e-08, 2.23771467e-08, 2.21297390e-08, 2.20485153e-08,\r\n 2.19489479e-08, 2.17839523e-08, 2.15823874e-08, 2.16554517e-08,\r\n 2.17641051e-08, 2.16452188e-08, 2.15306082e-08, 2.10110698e-08,\r\n 2.04077779e-08, 1.97953873e-08, 1.90609954e-08, 1.87583107e-08,\r\n 1.82998534e-08, 1.79845432e-08, 1.69896450e-08, 1.74424095e-08,\r\n 1.70216422e-08]\r\n }\r\n }\r\n }\r\n },\r\n \"ADR4540\":{\r\n \"cmin\" : 1e-6,\r\n \"rf\" : 1548,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 23.49e-9,\r\n \"rOut\" : 22.43,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 100, //47.53\r\n \"poles\" : [\r\n 0.1309 // 63.1\r\n ],\r\n \"zeros\" : [ \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : [4.69821508e-08, 4.33287609e-08, 3.87294156e-08, 3.64886051e-08,\r\n 3.36687555e-08, 3.23231169e-08, 3.06296284e-08, 2.97138346e-08,\r\n 2.85609209e-08, 2.80855055e-08, 2.74873210e-08, 2.66096934e-08,\r\n 2.55048396e-08, 2.49166993e-08, 2.41765745e-08, 2.39768213e-08,\r\n 2.37256299e-08, 2.36272025e-08, 2.35035662e-08, 2.35027110e-08,\r\n 2.35024049e-08, 2.32616342e-08, 2.29601214e-08, 2.29220061e-08,\r\n 2.28784438e-08, 2.27461357e-08, 2.25896673e-08, 2.28651364e-08,\r\n 2.32410404e-08, 2.29450486e-08, 2.26210132e-08, 2.18355753e-08,\r\n 2.08918750e-08, 2.04457492e-08, 1.98988155e-08, 1.96402235e-08,\r\n 1.90404196e-08, 1.93944954e-08, 1.90909850e-08, 1.99601321e-08,\r\n 1.97413137e-08]\r\n }\r\n }\r\n }\r\n },\r\n \"ADR4550\":{\r\n \"cmin\" : 1e-6,\r\n \"rf\" : 2000,\r\n \"rg\" : 500,\r\n \"rs\" : 1e-20,\r\n \"cs\" : 0,\r\n \"flickerNoiseCorner\" : 2,\r\n \"alpha\" : 1,\r\n \"bandgapOutputNoise\" : 1e-9,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 20.59e-9,\r\n \"rOut\" : 28, //61.09\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 100,\r\n \"poles\" : [\r\n 0.362 //63.1\r\n ],\r\n \"zeros\" : [\r\n \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 1,\r\n \"yValues\" : [4.12972098e-08, 3.74085616e-08,\r\n 3.56281380e-08, 3.09804490e-08, 3.17539825e-08, 3.01220357e-08,\r\n 2.69713396e-08, 2.66840236e-08, 2.55799047e-08, 2.32006967e-08,\r\n 2.38225151e-08, 2.24735383e-08, 2.11323573e-08, 2.17551594e-08,\r\n 2.12991080e-08, 2.14054672e-08, 2.11235165e-08, 2.10359507e-08,\r\n 2.04205953e-08, 2.08726837e-08, 2.09630035e-08, 2.02026435e-08,\r\n 2.06055151e-08, 1.99021318e-08, 2.04498475e-08, 1.99553736e-08,\r\n 2.04836957e-08, 2.06011291e-08, 2.02889961e-08, 1.99367045e-08,\r\n 1.89466241e-08, 1.83047318e-08, 1.65636770e-08, 1.48744438e-08,\r\n 1.30448181e-08, 1.11967793e-08, 9.11452997e-09, 7.49418747e-09,\r\n 7.00502216e-09, 8.15257211e-09, 1.11204785e-08, 1.48539590e-08\r\n ]\r\n }\r\n }\r\n }\r\n }, \r\n\r\n \"LTZ1000\":{},\r\n\r\n // This is not a stand alone part - it's the 2.048V reference inside the ADAQ2387X family of uModules. \r\n // The \"voltageNoiseDensity\" data below has been bench measured on the uModule and therefore takes into account the 0.1uF output cap which is inside the uModule.\r\n \"ADAQ2387X_INT_REF\":{\r\n \"rf\" : 1e-3,\r\n \"rg\" : 1e9,\r\n \"rs\" : 1e-20,\r\n \"flickerNoiseCorner\" : 100,\r\n \"bandgapOutputNoise\" : 1e-12,\r\n \"opAmp\" : {\r\n \"iNoise\" : 0,\r\n \"vNoise\" : 1e-12,\r\n \"rOut\" : 15e3,\r\n \"tpcData\" : {\r\n \"openLoopGain\" : {\r\n \"dataFormat\": \"pole zero\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"Db, Degrees\",\r\n \"dcGain\" : 60,\r\n \"poles\" : [\r\n // Dominant pole calculated in model,\r\n ],\r\n \"zeros\" : [ \r\n ]\r\n },\r\n \"voltageNoiseDensity\" : {\r\n \"dataFormat\" : \"10 points per decade\",\r\n \"xUnits\" : \"Hz\",\r\n \"yUnits\" : \"V/rt(Hz)\",\r\n \"xAxisStart\" : 0.1,\r\n \"yValues\" : [\r\n 6.200E-06,\r\n 5.050E-06,\r\n 4.330E-06,\r\n 3.555E-06,\r\n 3.525E-06,\r\n 3.235E-06,\r\n 2.820E-06,\r\n 2.095E-06,\r\n 2.155E-06,\r\n 2.060E-06,\r\n 1.965E-06,\r\n 1.470E-06,\r\n 1.345E-06,\r\n 1.290E-06,\r\n 1.135E-06,\r\n 9.000E-07,\r\n 8.100E-07,\r\n 7.450E-07,\r\n 6.500E-07,\r\n 5.800E-07,\r\n 5.150E-07,\r\n 4.500E-07,\r\n 3.770E-07,\r\n 3.160E-07,\r\n 2.895E-07,\r\n 2.645E-07,\r\n 2.195E-07,\r\n 1.850E-07,\r\n 1.565E-07,\r\n 1.300E-07,\r\n 1.115E-07,\r\n 8.850E-08,\r\n 7.150E-08,\r\n 5.400E-08,\r\n 4.130E-08,\r\n 3.210E-08,\r\n 2.450E-08,\r\n 1.865E-08,\r\n 1.420E-08,\r\n 9.900E-09,\r\n 7.650E-09,\r\n 5.750E-09,\r\n 4.315E-09,\r\n 3.235E-09,\r\n 2.425E-09,\r\n 1.820E-09,\r\n 1.365E-09,\r\n 1.025E-09,\r\n 7.650E-10,\r\n 5.750E-10,\r\n 4.315E-10,\r\n 3.235E-10,\r\n 2.425E-10,\r\n 1.820E-10,\r\n 1.365E-10,\r\n 1.025E-10,\r\n 7.650E-11,\r\n 5.750E-11,\r\n 4.315E-11,\r\n 3.235E-11,\r\n 2.425E-11,\r\n 1.820E-11,\r\n 1.365E-11,\r\n 1.025E-11,\r\n 7.650E-12,\r\n 5.750E-12,\r\n 4.315E-12,\r\n 3.235E-12\r\n ]\r\n }\r\n }\r\n }\r\n },\r\n \r\n }\r\n}","import { INPUT_PROTECTION_TYPE } from \"../sim-constants\";\r\n\r\n//Contains custom data for our input protection diodes. This data replaces the diode capacitance data in basic-input-protection and adds configuration information.\r\nexport let data = {\r\n \"map\": {\r\n \"CG0603MLA\": \"CG0603MLA\", \r\n \"CDSOD323\" : \"CDSOD323\", \r\n \"GSD2004S\" : \"GSD2004S\",\r\n \"CG0603MLA-26KE\" : \"CG0603MLA-26KE\",\r\n \"CDSOD323-T36SC\" : \"CDSOD323-T36SC\",\r\n \"GSD2004S-E3-08\" : \"GSD2004S-E3-08\",\r\n \"CMSD6001S\" : \"CMSD6001S\",\r\n \"1SS362FV,L3F\" : \"1SS362FV,L3F\",\r\n },\r\n\r\n \"partData\": {\r\n \"CG0603MLA\": {\r\n diodeCapacitance: 100e-12,\r\n diodeType: INPUT_PROTECTION_TYPE.VARISTOR,\r\n reverseVoltage: 24,\r\n requiredPDBParameters: [],\r\n diodeLeakage: 1e-6,\r\n referenceTemp: 85, //Assuming 85C due to large leakage. 1/18/24: RJ\r\n },\r\n \"CDSOD323\" : {\r\n diodeCapacitance: 35e-12,\r\n diodeType: INPUT_PROTECTION_TYPE.BACK_TO_BACK,\r\n reverseVoltage: 36,\r\n requiredPDBParameters: [],\r\n diodeLeakage: 1e-6,\r\n referenceTemp: 25, //Added 1/18/24: RJ (Bourns Datasheet)\r\n },\r\n \"GSD2004S\" : {\r\n diodeCapacitance: 5e-12,\r\n diodeType : INPUT_PROTECTION_TYPE.STACKED,\r\n reverseVoltage: 240,\r\n requiredPDBParameters: [],\r\n diodeLeakage: 100e-9, //240V, 25°C ? RJ: 1/18/24\r\n referenceTemp: 25, //Added 1/18/24: RJ (Vishay Datasheet)\r\n },\r\n \"CG0603MLA-26KE\" : {\r\n diodeCapacitance: 100e-12,\r\n diodeType : INPUT_PROTECTION_TYPE.VARISTOR,\r\n reverseVoltage: 26,\r\n requiredPDBParameters: [], \r\n diodeLeakage: 1e-6,\r\n referenceTemp: 85, //Assuming 85C due to large leakage. 1/18/24: RJ\r\n },\r\n \"CDSOD323-T36SC\" : {\r\n diodeCapacitance: 35e-12,\r\n diodeType: INPUT_PROTECTION_TYPE.BACK_TO_BACK,\r\n reverseVoltage: 36,\r\n requiredPDBParameters: [], \r\n diodeLeakage: 1e-6, //Maximum Leakage Current @VWM, 25C?? 1/18/24: RJ\r\n referenceTemp: 25, //\r\n },\r\n \"GSD2004S-E3-08\" : {\r\n diodeCapacitance: 5e-12,\r\n diodeType : INPUT_PROTECTION_TYPE.STACKED,\r\n reverseVoltage: 240,\r\n requiredPDBParameters: [],\r\n diodeLeakage: 100e-9, //240V, 25°C ? RJ: 1/18/24\r\n referenceTemp: 25, //Added 1/18/24: RJ\r\n },\r\n \"CMSD6001S\" : {\r\n diodeCapacitance: 2e-12,\r\n diodeType : INPUT_PROTECTION_TYPE.STACKED,\r\n reverseVoltage: 75,\r\n requiredPDBParameters: [],\r\n diodeLeakage: 500e-12, //75V, 25°C ? RJ: 1/18/24\r\n referenceTemp: 25, //Added 1/18/24: RJ\r\n },\r\n \"1SS362FV,L3F\" : {\r\n diodeCapacitance: 0.9e-12,\r\n diodeType : INPUT_PROTECTION_TYPE.STACKED,\r\n reverseVoltage: 80,\r\n requiredPDBParameters: [],\r\n diodeLeakage: 500e-9, //50V, 100°C ? RJ: 1/18/24\r\n referenceTemp: 100, //Added 1/18/24: RJ\r\n },\r\n }\r\n}","import * as OpAmpTPCDatabase from './op-amp-tpc-database.json'; \r\nimport * as DifferentialAmpTPCDatabase from './differential-amp-tpc-database.json'; \r\nimport * as InAmpTPCDatabase from './in-amp-tpc-database.json';\r\nimport * as AdcTPCDatabase from './adc-tpc-database.json';\r\nimport * as AdcCustomDatabase from './adc-custom-database.js';\r\nimport * as InAmpCustomDatabase from './in-amp-custom-database.js';\r\nimport * as OpAmpCustomDatabase from './op-amp-custom-database.js';\r\nimport * as DifferentialAmpCustomDatabase from './differential-amp-custom-database.js';\r\nimport * as ReferenceCustomDatabase from './reference-custom-database.js';\r\nimport * as InputProtectionCustomDatabase from './input-protection-custom-database.js';\r\nimport * as RemovedParts from './removed-parts-database.js';\r\nimport { COMPONENT_NAMES } from '../sim-constants';\r\n\r\nlet OpAmpPDB = { data: null };\r\nlet DifferentialAmpPDB = { data: null };\r\nlet AdcPDB = { data: null };\r\nlet InAmpPDB = { data: null };\r\nlet ReferencePDB = { data: null };\r\n\r\nexport const PART_TYPES = {\r\n ADC: \"adc\",\r\n OP_AMP: \"opAmp\",\r\n TIA_OP_AMP: \"transimpedanceAmp\",\r\n DIFF_AMP: \"differentialAmp\",\r\n IN_AMP: \"inAmp\",\r\n REFERENCE: \"reference\",\r\n DIODE : \"diode\"\r\n}\r\n\r\n// setters\r\n/**\r\n * Initialize Op Amps with CDP data.\r\n * @param {Object[]} partData A list of parts that use the Simulation Library's expected format: parameter 0 is \"Part Number\", 4455 is \"cCm\", and so on.\r\n */\r\n export function setOpAmpData(partData) {\r\n // Converting the data is the responsibility of the calling application\r\n OpAmpPDB.data = partData;\r\n let filteredData = partData.filter(p=>isPartAllowed(p[\"Part Number\"], PART_TYPES.OP_AMP));\r\n OpAmpPDB.data = filteredData; \r\n}\r\n\r\n/**\r\n * Initialize Differential Amps with CDP data.\r\n * @param {Object[]} partData A list of Parts that use the Simulation Library's expected format: parameter 0 is \"Part Number\", 4101 is \"vNoise\", and so on.\r\n */\r\n export function setDifferentialAmpData(partData) {\r\n // Converting the data is the responsibility of the calling application\r\n DifferentialAmpPDB.data = partData;\r\n let filteredData = partData.filter(p=>isPartAllowed(p[\"Part Number\"], PART_TYPES.DIFF_AMP));\r\n DifferentialAmpPDB.data = filteredData; \r\n \r\n}\r\n\r\n/**\r\n * Initialize ADCs with CDP data.\r\n * @param {Object[]} partData A list of ADCs that use the Simulation Library's expected format: parameter 0 is \"Part Number\", 4907 is \"SNR\", and so on.\r\n */\r\n export function setAdcData(partData) {\r\n AdcPDB.data = partData;\r\n // Filter is no good right now: Of course the data is in the PDB, we just added it\r\n // let filteredData = AdcPDB.data.filter(p=>inAdcPDB(p[\"Part Number\"]))\r\n}\r\n\r\n/**\r\n * Initialize Instrumentation Amps with CDP data.\r\n * @param {Object[]} partData A list of Parts that use the Simulation Library's expected format: parameter 0 is \"Part Number\", 4455 is \"cCm\", and so on.\r\n */\r\n export function setInAmpData(partData) {\r\n // Converting the data is the responsibility of the calling application\r\n InAmpPDB.data = partData;\r\n let filteredData = partData.filter(p=>isPartAllowed(p[\"Part Number\"], PART_TYPES.IN_AMP));\r\n InAmpPDB.data = filteredData; \r\n}\r\n\r\n/**\r\n * Initialize References with CDP data.\r\n * @param {Object[]} partData A list of Parts that use the Simulation Library's expected format: parameter 0 is \"Part Number\", 4995 is \"vOut\", and so on.\r\n */\r\n export function setReferenceData(partData){\r\n ReferencePDB.data = partData;\r\n}\r\n/**\r\n * Get list of valid, accepted Op Amps\r\n * @returns {Object[string]} List of Op Amps stored from the PDB data that was received (invalid amps are filtered out)\r\n */\r\nexport function getOpAmpParts() {\r\n const opAmpParts = getParts(PART_TYPES.OP_AMP);\r\n return opAmpParts;\r\n}\r\n\r\n//Same as getOpAmpParts(), but universal\r\nexport function getParts(partType) {\r\n switch(partType) {\r\n case PART_TYPES.OP_AMP:\r\n return OpAmpPDB.data.map(p=>p[\"Part Number\"]).filter(p=>p!=='ADA4351-2'); //Better way to filter in the future?\r\n case PART_TYPES.TIA_OP_AMP:\r\n return OpAmpPDB.data.map(p=>p[\"Part Number\"]);\r\n case PART_TYPES.DIFF_AMP:\r\n return DifferentialAmpPDB.data.map(p=>p[\"Part Number\"]);\r\n case PART_TYPES.IN_AMP:\r\n return InAmpPDB.data.map(p=>p[\"Part Number\"]);\r\n case PART_TYPES.REFERENCE:\r\n return ReferencePDB.data.map(p=>p[\"Part Number\"]);\r\n case PART_TYPES.ADC:\r\n return AdcPDB.data.map(p=>p[\"Part Number\"]);\r\n default: \r\n return undefined; \r\n }\r\n}\r\n\r\n/****************************************************** Public Amp Functions *******************************************/\r\n\r\n/**\r\n * Return PDB and TPC data for an Op Amp\r\n * @param {string} partName Part name\r\n * @returns A part object with an extra tpcData property where TPC data is stored\r\n */\r\n//This code called by other modules in the simulation library, but not by Nimble\r\nexport function createOpAmpWithPDBAndTPCData(partName) {\r\n let opAmp = createPartWithPDBAndTPCData(partName, PART_TYPES.OP_AMP)\r\n return opAmp;\r\n}\r\n\r\n/**\r\n * Return PDB and TPC data for a Differential Amp\r\n * @param {string} partName Part name\r\n * @returns A part object with an extra tpcData property where TPC data is stored\r\n */\r\n//This code called by other modules in the simulation library, but not by Nimble\r\nexport function createDifferentialAmpWithPDBAndTPCData(partName) {\r\n let differentialAmp = getPDBParametersFor1Part(partName, PART_TYPES.DIFF_AMP);\r\n differentialAmp.tpcData = UniversalTPC.getPart(partName, PART_TYPES.DIFF_AMP);\r\n return differentialAmp;\r\n}\r\n\r\n//#region Universal part functions\r\n\r\nfunction getTPCDatabase(partType) {\r\n switch (partType) {\r\n case PART_TYPES.ADC: return AdcTPCDatabase;\r\n case PART_TYPES.DIFF_AMP: return DifferentialAmpTPCDatabase;\r\n case PART_TYPES.IN_AMP: return InAmpTPCDatabase;\r\n case PART_TYPES.OP_AMP: \r\n case PART_TYPES.TIA_OP_AMP: return OpAmpTPCDatabase;\r\n case PART_TYPES.REFERENCE: return ReferenceCustomDatabase; //This is redudant to provide a map for references\r\n default: return null;\r\n }\r\n}\r\n\r\nfunction getCustomDatabase(partType) {\r\n switch (partType) {\r\n case PART_TYPES.ADC: return AdcCustomDatabase;\r\n case PART_TYPES.DIFF_AMP: return DifferentialAmpCustomDatabase;\r\n case PART_TYPES.IN_AMP: return InAmpCustomDatabase;\r\n case PART_TYPES.OP_AMP: \r\n case PART_TYPES.TIA_OP_AMP: return OpAmpCustomDatabase;\r\n case PART_TYPES.REFERENCE: return ReferenceCustomDatabase;\r\n case PART_TYPES.DIODE : return InputProtectionCustomDatabase;\r\n default: return null;\r\n }\r\n}\r\n\r\nfunction hasCustomdata(partName, partType) {\r\n let customDatabase = getCustomDatabase(partType);\r\n if (!customDatabase) return false;\r\n return customDatabase.data.map[partName] !== undefined;\r\n}\r\n\r\n/**\r\n * Checks whether a part has TPC data.\r\n * In amps must have both standard and custom data to pass.\r\n * @param {string} partName The name of any part\r\n * @param {*} partType One of the PART_TYPES enumeration: ADC, OP_AMP, etc. \r\n * @returns {boolean} True if in database.\r\n */\r\n//Exporting for testing purposes - this is a private function\r\nexport function hasTPCdata(partName, partType) {\r\n let checkTPC = getTPCDatabase(partType);\r\n if (!checkTPC) return false;\r\n return checkTPC.data.map[partName] !== undefined;\r\n}\r\n\r\n\r\n/**\r\n * Is a particular part valid based on its partType?\r\n * @param {string} partName The name of any part\r\n * @param {*} partType One of the PART_TYPES enumeration: ADC, OP_AMP, etc. \r\n * @returns {boolean} True if part is valid\r\n */\r\nexport function isPartAllowed(partName, partType) {\r\n // first check if part has custom data that specifies which TPC parameters are required \r\n let tpcDataRequired = true;\r\n \r\n if (partType === PART_TYPES.ADC) {\r\n tpcDataRequired = false;\r\n \r\n //Only let ADCs with our standard device architectures through\r\n let deviceArchitecture = getDataFor1Part1Parameter(partName, partType, \"Device Architecture - (P4364)\");\r\n if(!([\"SAR\", \"Sigma Delta\", \"Sigma-Delta\", \"Simultaneous Sigma Delta\"].includes(deviceArchitecture))) {\r\n console.warn(`${partType} ${partName} has an invalid Device Architecture - (P4364) (${deviceArchitecture})`);\r\n return false;\r\n } \r\n \r\n // Check to make sure ADC has required custom data items:\r\n if (!hasCustomdata(partName, partType)) return false;\r\n \r\n let customData = UniversalCustom.getPart(partName, partType);\r\n let inputType = getDataFor1Part1Parameter(partName, partType, \"inputType\");\r\n\r\n // uModules do not need input range data since it's handled by the internal components\r\n let inputRangeDataRequired = [];\r\n if (!partName.includes('ADAQ')) {\r\n inputRangeDataRequired = inputType === 'Differential' ? ['inputRange.absolute', 'inputRange.commonMode'] : ['inputRange.absolute'];\r\n }\r\n\r\n let customDataRequired = [\r\n 'requiredSupplyPins', \r\n { numRequired: 1, possibleValues: ['supplyCurrent', 'supplyCurrentMap']},\r\n ...inputRangeDataRequired\r\n ];\r\n\r\n for (let parameter of customDataRequired) {\r\n if (!hasParameter(customData, parameter)) return false;\r\n }\r\n\r\n } else if (hasCustomdata(partName, partType)) {\r\n let customData = UniversalCustom.getPart(partName, partType);\r\n let requiredTPCParameters = customData?.requiredTPCParameters;\r\n if (Array.isArray(requiredTPCParameters) && requiredTPCParameters.length === 0) {\r\n tpcDataRequired = false;\r\n } else if (requiredTPCParameters) {\r\n // If custom data required - check that specified parameters are present in part's TPC data\r\n let tpcData = UniversalTPC.getPart(partName, partType);\r\n if (!tpcData) {\r\n return false;\r\n } \r\n let tpcDataElements = tpcData ? Object.keys(tpcData) : [];\r\n for (let param of requiredTPCParameters) {\r\n if (!tpcDataElements.includes(param)) {\r\n return false;\r\n }\r\n }\r\n }\r\n } else if ( partType === PART_TYPES.IN_AMP) {\r\n // in-amps always require custom data, so if it made it this far, it's an in-amp without custom data and is not allowed\r\n return false; \r\n }\r\n \r\n //Weed out most parts here\r\n if (tpcDataRequired && !hasTPCdata(partName, partType)) {\r\n return false;\r\n }\r\n\r\n //Removes parts with all neceesary data that we want to exclude for some other reason\r\n if (RemovedParts.data.includes(partName)) {\r\n return false;\r\n }\r\n\r\n return doesPartHaveRequiredPDBParameters(partName, partType)\r\n\r\n}\r\n\r\n/**\r\n * Create a part with PDB/TPC data based on its type and name\r\n * @param {string} partName The name of any part\r\n * @param {*} partType One of the PART_TYPES enumeration: ADC, OP_AMP, etc. \r\n * @returns Part object, with PDB data in the root, a tpcData property, and an optional customData property for irregular data that can't be stored in tpcData.\r\n */\r\nexport function createPartWithPDBAndTPCData(partName, partType) {\r\n // For now, references are handled differently since there are not yet any PDB or TPC databases\r\n //if (partType === PART_TYPES.REFERENCE) return createReferenceWithPDBAndTPCData(partName);\r\n let part = getPDBParametersFor1Part(partName, partType);\r\n \r\n part.tpcData = UniversalTPC.getPart(partName, partType);\r\n let customData = UniversalCustom.getPart(partName, partType);\r\n if (customData) part.customData = customData;\r\n \r\n return part;\r\n}\r\n\r\n/**\r\n * Determine the part type of partName by searching the part PDBs\r\n * @param {string} partName The name of any part\r\n * @param {array} possiblePartTypes (optional) Array of possible types to check partName against\r\n * @returns {string} The type of part it is, string should match PART_TYPES sim constants\r\n */\r\nexport function getPartType(\r\n partName, \r\n possiblePartTypes = \r\n [\r\n PART_TYPES.ADC,\r\n PART_TYPES.OP_AMP,\r\n PART_TYPES.TIA_OP_AMP,\r\n PART_TYPES.DIFF_AMP,\r\n PART_TYPES.IN_AMP,\r\n PART_TYPES.REFERENCE,\r\n PART_TYPES.DIODE,\r\n ]\r\n ) {\r\n\r\n let partType;\r\n for(let i = 0; i< possiblePartTypes.length; i++) {\r\n try{\r\n if(inPDB(partName, possiblePartTypes[i])) {\r\n partType = possiblePartTypes[i];\r\n }\r\n } catch {\r\n try{ //diodes are not in PDB but have a custom database\r\n if(hasCustomdata(partName, possiblePartTypes[i])){\r\n partType = possiblePartTypes[i];\r\n }\r\n } catch{\r\n continue;\r\n }\r\n }\r\n }\r\n return partType;\r\n}\r\n\r\n/*\r\n * Map a component name (i.e. opAmp, differentialAmp, refBuf etc., not the part name 'ADA4510-2') to the part type\r\n * \r\n */\r\nexport function mapComponentNameToPartType(componentName) {\r\n \r\n const PART_TYPE_MAP = {\r\n [COMPONENT_NAMES.OP_AMP] : PART_TYPES.OP_AMP,\r\n [COMPONENT_NAMES.IN_AMP] : PART_TYPES.IN_AMP,\r\n [COMPONENT_NAMES.DIFF_AMP] : PART_TYPES.DIFF_AMP,\r\n [COMPONENT_NAMES.ADC] : PART_TYPES.ADC,\r\n [COMPONENT_NAMES.REFERENCE] : PART_TYPES.REFERENCE,\r\n [COMPONENT_NAMES.REF_BUF] : PART_TYPES.OP_AMP,\r\n [COMPONENT_NAMES.DIODE] : PART_TYPES.DIODE,\r\n [COMPONENT_NAMES.DRIVER] : [PART_TYPES.OP_AMP, PART_TYPES.DIFF_AMP],\r\n }\r\n \r\n let partType;\r\n let componentBaseName = componentName.replace(/\\d+$/, \"\");\r\n try {\r\n partType = PART_TYPE_MAP[componentBaseName];\r\n } catch {\r\n return undefined;\r\n }\r\n\r\n return partType;\r\n}\r\n\r\n//#endregion Universal part\r\n\r\n/******************************* Public Reference Functions***************************** */\r\n\r\n/**\r\n * Return PDB and TPC data for References. \r\n * **Despite the name, this function doesn't populate anything from PDB or TPC's today, but we're set up for the future.**\r\n * @param {string} partName Part name\r\n * @returns A reference object with {partName, vOut}.\r\n */\r\n//Exporting for testing purposes - this is a private function\r\nexport function createReferenceWithPDBAndTPCData(partName) {\r\n //let part = getPDBParametersFor1Part(partName, \"bgRef\");\r\n let voltage;\r\n\r\n let LT6657Re = /(LT6657)+([a-zA-Z0-9]*)+(-)+[0-9.]*/;\r\n let isLT6657 = LT6657Re.test(partName);\r\n let LTC6655Re = /(LTC6655)+([a-zA-Z0-9]*)+(-)+[0-9.]*/;\r\n let isLTC6655 = LTC6655Re.test(partName);\r\n let LTC6655LNRe = /(LTC6655LN)+([a-zA-Z0-9]*)+(-)+[0-9.]*/;\r\n let isLTC6655LN = LTC6655LNRe.test(partName);\r\n\r\n let partNameReduced;\r\n if (isLT6657) partNameReduced = 'LT6657';\r\n else if (isLTC6655LN) partNameReduced = 'LTC6655LN';\r\n else if (isLTC6655) partNameReduced = 'LTC6655';\r\n else throw new Error(partName + \" is not a supported reference\");\r\n\r\n voltage = parseFloat(partName.split('-')[1]);\r\n partNameReduced = `${partNameReduced}-${voltage}`;\r\n \r\n return {\r\n partName: partNameReduced,\r\n vOut: voltage\r\n };\r\n}\r\n\r\n/******************************* Public ADC Functions***************************** */\r\n\r\n/**\r\n * Return PDB data for one ADC.\r\n * @param {string} partName Part name\r\n * @returns A part object with CDP data exclusively\r\n */\r\n//This code called by other modules in the simulation library, but not by Nimble\r\nexport function createAdcWithPDBData(partName) {\r\n let adc = getPDBParametersFor1Part(partName, PART_TYPES.ADC);\r\n return adc;\r\n}\r\n/****************************************************** Private PDB Functions *******************************************/\r\n\r\n//Check if part has data for each required PDB parameter\r\nfunction doesPartHaveRequiredPDBParameters(partName, partType) {\r\n let part = getPDBParametersFor1Part(partName, partType);\r\n let partCustomData = getPartFromCustomData(partName, partType);\r\n // If a part has custom data that specifies the required PDB parameters, only require those parameters.\r\n // Otherwise, get the required parameters from the standard list by partType\r\n let requiredParameters;\r\n if (partCustomData?.requiredPDBParameters) {\r\n requiredParameters = partCustomData?.requiredPDBParameters;\r\n } else {\r\n requiredParameters = getPDBParameterList(partName, partType, true, false);\r\n }\r\n\r\n let pdbGood = true;\r\n\r\n //Declare key and pdbParameter outside the loop so it's easy to debug when a part fails\r\n let key = \"\";\r\n for (let i=0; i 0) {\r\n return hasParameter(dataObj[topKey], subKeys.join('.'));\r\n }\r\n\r\n return !!dataObj?.[topKey];\r\n }\r\n\r\n if (typeof parameter === 'object') {\r\n const { numRequired, possibleValues } = parameter;\r\n let numFound = 0;\r\n for (let param of possibleValues) {\r\n numFound += hasParameter(dataObj, param) ? 1 : 0;\r\n if (numFound >= numRequired) return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Determine is a parameter contains any data\r\n * @param {*} parameter \r\n * @returns {boolean} if null, undefined\r\n */\r\nexport function parameterHasData(parameter) {\r\n if (parameter || parameter === 0) { // should we be allowing 'false' to also be data? unit tests break when I add false as data\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n/******************************************** Private Op Amp functions **************************************/\r\n\r\n\r\n//Use an IIFE plus closure to be able to store previously accessed parts so we can access them quickly rather than traversing the database each time \r\nfunction universalTPCIIFE(dataGetter) {\r\n //Object only containing the data of parts we've accessed before\r\n let smallData = {};\r\n return {\r\n getPart: function (partName, partType) {\r\n let key = partType + \"|\" + partName;\r\n if (smallData[key]) {\r\n return smallData[key];\r\n }\r\n else {\r\n let newPart = dataGetter(partName, partType);\r\n smallData[key] = newPart;\r\n return newPart;\r\n }\r\n }\r\n }\r\n}\r\n\r\nlet UniversalTPC = universalTPCIIFE(getPartFromRawTPCData);\r\nlet UniversalCustom = universalTPCIIFE(getPartFromCustomData);\r\n \r\nfunction getPartFromRawTPCData(partName, partType) {\r\n let tpcDatabase = getTPCDatabase(partType);\r\n let datasheet = tpcDatabase?.data.map[partName];\r\n let tpcData = tpcDatabase?.data.partData[datasheet];\r\n return tpcData;\r\n}\r\n\r\nfunction getPartFromCustomData(partName, partType) {\r\n // Custom data - manually entered custom data not directly from datasheet TPC curves\r\n let customDatabase = getCustomDatabase(partType);\r\n let customData;\r\n if (customDatabase !== null) {\r\n let datasheet = customDatabase.data.map[partName];\r\n customData = customDatabase.data.partData[datasheet];\r\n }\r\n return customData;\r\n}\r\n\r\n","import * as SimPartData from '@ebiz/aditools-simulation/src/part-data/sim-part-data';\r\nimport * as AditoolsSpiceParts from '@ebiz/aditools-spice/data/opamps.json';\r\n\r\nconst LOG_SKIPS = false;\r\nconst LOG_SYNTH = false;\r\nconst LOG_PARTS = false;\r\nconst ARBITRARILY_RESTRICTED_PARTS = [\r\n 'ADA4891-1',\r\n 'ADA4891-2',\r\n 'ADA4891-3',\r\n 'ADA4891-4',\r\n 'ADA4691-2',\r\n 'ADA4691-4',\r\n 'ADA4692-2',\r\n 'ADA4692-4',\r\n];\r\n\r\nexport const DataType = {\r\n t_pulldown: 'Pulldown',\r\n t_float: 'Floating Point',\r\n t_integer: 'Integer',\r\n t_string: 'String',\r\n t_none: 'N/A',\r\n};\r\nexport const CardinalityType = {\r\n c_single: 'single',\r\n c_multi: 'multi',\r\n c_none: 'N/A',\r\n};\r\n\r\nclass PartIndex {\r\n constructor() {\r\n this.data = {};\r\n }\r\n getIds() {\r\n return Object.keys(this.data);\r\n }\r\n addPart(id, type, value) {\r\n if (!(id in this.data)) {\r\n this.data[id] = {};\r\n }\r\n this.data[id][type] = value;\r\n }\r\n getMergedPart(id) {\r\n // merged part will have properties partId, the \"numeric\" properties, and\r\n // may also have polesZeroes or special for additional properties.\r\n let mergedPart = { partId: id };\r\n let part = this.data[id];\r\n let partIsLive = false;\r\n let proptest = /^[s0-9-][0-9]+$/;\r\n\r\n // Walk the properties of the part\r\n // Override order: pdb overrides static, but config overrides all\r\n if ('static' in part) {\r\n for (let propId in part['static']) {\r\n if (proptest.test(propId)) {\r\n mergedPart[propId] = part['static'][propId];\r\n }\r\n }\r\n partIsLive = true;\r\n }\r\n if ('pst' in part) {\r\n mergedPart['generic'] = part['pst']['0'].generic ? part['pst']['0'].generic : id.toLowerCase();\r\n for (let propId in part['pst']) {\r\n if (proptest.test(propId)) {\r\n let isok = true;\r\n if (propId in mergedPart) {\r\n // Don't overwrite a parameter that might be well-formed with one that isn't\r\n isok = parameterWellFormed(part['pst'][propId]);\r\n }\r\n if (isok) {\r\n mergedPart[propId] = part['pst'][propId];\r\n }\r\n }\r\n }\r\n partIsLive = true;\r\n }\r\n if ('config' in part) {\r\n for (let propId in part['config']) {\r\n if (proptest.test(propId)) {\r\n let isok = true;\r\n if (propId in mergedPart) {\r\n // Don't overwrite a parameter that might be well-formed with one that isn't.\r\n isok = parameterWellFormed(part['config'][propId]);\r\n }\r\n if (isok) {\r\n mergedPart[propId] = part['config'][propId];\r\n }\r\n }\r\n }\r\n partIsLive = true;\r\n }\r\n if (partIsLive && 'spiceModels' in part) {\r\n mergedPart['spiceModels'] = part['spiceModels'];\r\n }\r\n if (partIsLive && 'polesZeroes' in part) {\r\n mergedPart['polesZeroes'] = part['polesZeroes'];\r\n }\r\n if (partIsLive && 'spice' in part) {\r\n mergedPart['spice'] = part['spice'];\r\n }\r\n if (partIsLive && 'nonPick' in part) {\r\n mergedPart['nonPick'] = part['nonPick'];\r\n }\r\n return mergedPart;\r\n }\r\n}\r\n\r\nlet parameterWellFormed = function (parameter) {\r\n return (\r\n typeof parameter.value !== 'undefined' &&\r\n parameter.value !== null &&\r\n typeof parameter.value.length !== 'undefined' &&\r\n parameter.value.length !== 0 &&\r\n parameter.value[0] !== ''\r\n );\r\n};\r\n\r\nlet interpretParameter = function (parameter, datatype, datavalue) {\r\n if (\r\n typeof parameter.value === 'undefined' ||\r\n parameter.value === null ||\r\n typeof parameter.value.length === 'undefined'\r\n ) {\r\n return [null, 'INVALID'];\r\n }\r\n if (parameter.value.length === 0 || (parameter.value.length === 1 && parameter.value[0] === '')) {\r\n return [null, 'EMPTY'];\r\n }\r\n if (datatype === DataType.t_pulldown && datavalue === CardinalityType.c_multi) {\r\n return [parameter.value.join('; '), null];\r\n } else {\r\n return [parameter.value[0], null];\r\n }\r\n};\r\n\r\nlet convertPart = function (mergedPart, parameters, logging, requiresExternalSimulation) {\r\n let part = { partNumber: mergedPart.partId };\r\n let missingParms = [];\r\n let emptyParms = [];\r\n let invalidParms = [];\r\n\r\n // Fill in all the part's parameters based on the table and keep track of we couldn't use\r\n Object.values(parameters).forEach((parminfo) => {\r\n if (parminfo.id !== '0') {\r\n // Skip the name - we've already got it\r\n if (parminfo.id in mergedPart) {\r\n let [value, error] = interpretParameter(mergedPart[parminfo.id], parminfo.data, parminfo.value);\r\n if (error) {\r\n if (error === 'INVALID') {\r\n invalidParms.push(`${parminfo.name}(${parminfo.id})`);\r\n } else if (error === 'EMPTY' && !parminfo.optional && !('default' in parminfo)) {\r\n emptyParms.push(`${parminfo.name}(${parminfo.id})`);\r\n }\r\n } else {\r\n part[parminfo.name] = value;\r\n }\r\n } else {\r\n if (!parminfo.optional) {\r\n missingParms.push(`${parminfo.name}(${parminfo.id})`);\r\n }\r\n }\r\n }\r\n });\r\n\r\n // A second pass to fill in the defaults for the part's parameters based on other parameters\r\n Object.values(parameters).forEach((parminfo) => {\r\n if ('default' in parminfo) {\r\n if (!(parminfo.name in part)) {\r\n let value = parminfo.default(part);\r\n if (value === null && !parminfo.optional) {\r\n emptyParms.push(`${parminfo.name}(${parminfo.id})`);\r\n } else {\r\n part[parminfo.name] = value;\r\n }\r\n }\r\n }\r\n });\r\n\r\n let isAdequatelySimulatable = requiresExternalSimulation\r\n ? SimPartData.hasTPCdata(mergedPart.partId, SimPartData.PART_TYPES.OP_AMP) &&\r\n mergedPart['4455']?.displayValue &&\r\n mergedPart['4117']?.displayValue &&\r\n mergedPart['4124']?.displayValue &&\r\n !ARBITRARILY_RESTRICTED_PARTS.includes(mergedPart.partId)\r\n : true;\r\n\r\n // Record why we're not delivering a part\r\n if (missingParms.length > 0 || emptyParms.length > 0 || invalidParms.length > 0 || !isAdequatelySimulatable) {\r\n if (LOG_SKIPS) {\r\n let causes = [];\r\n if (invalidParms.length > 0) {\r\n causes.push(`invalid parms ${invalidParms.join(', ')}`);\r\n }\r\n if (emptyParms.length > 0) {\r\n causes.push(`empty parms ${emptyParms.join(', ')}`);\r\n }\r\n if (missingParms.length > 0) {\r\n causes.push(`missing parms ${missingParms.join(', ')}`);\r\n }\r\n if (!isAdequatelySimulatable) {\r\n causes.push(`doesn't support simulation`);\r\n }\r\n logging.info(`Skipping ${mergedPart.partId} due to ${causes.join('; ')} `);\r\n }\r\n return null;\r\n }\r\n\r\n // Tack on extra information\r\n if ('generic' in mergedPart) {\r\n part['generic'] = mergedPart['generic'];\r\n }\r\n if ('spiceModels' in mergedPart) {\r\n part['spiceModels'] = mergedPart['spiceModels'];\r\n }\r\n if ('polesZeroes' in mergedPart) {\r\n part['polesZeroes'] = mergedPart['polesZeroes'];\r\n } else if (mergedPart.partId.substring(0, 2) === 'LT') {\r\n let GBW = part['gbw'];\r\n if (LOG_SYNTH) {\r\n logging.info('Synthesizing polesZeroes for ' + mergedPart.partId);\r\n }\r\n part['polesZeroes'] = {\r\n gbw: GBW,\r\n domPole: 0.15 * GBW,\r\n p: [2.5 * GBW],\r\n z: [0.5 * GBW],\r\n rhpz: 1e14,\r\n };\r\n }\r\n if ('spice' in mergedPart) {\r\n part['spice'] = mergedPart['spice'];\r\n }\r\n if ('nonPick' in mergedPart) {\r\n part['nonPick'] = mergedPart['nonPick'];\r\n }\r\n return part;\r\n};\r\n\r\nlet interpretOpAmpIndex = function (index, parameters, logging, requiresExternalSimulation) {\r\n try {\r\n let opamps = [];\r\n index.getIds().forEach((partId) => {\r\n let convertedPart = convertPart(index.getMergedPart(partId), parameters, logging, requiresExternalSimulation);\r\n if (convertedPart) {\r\n opamps.push(convertedPart);\r\n }\r\n });\r\n return opamps;\r\n } catch (e) {\r\n logging.warn('Failure occurred interpreting opamp data:', e.message);\r\n return null;\r\n }\r\n};\r\n\r\nlet collectConfigData = function (adiLocale, staticParts, index, config) {\r\n if (config.cdpsource.useStaticPartsData && staticParts) {\r\n staticParts.data[adiLocale].forEach((part) => {\r\n index.addPart(part['0'].displayValue, 'static', part);\r\n });\r\n }\r\n if (config.cdpsource.useLocalPartsData && config.cdpsource.localParts) {\r\n config.cdpsource.localParts[adiLocale].forEach((part) => {\r\n index.addPart(part.partId, 'config', part);\r\n });\r\n }\r\n if (config.polesZeroes) {\r\n Object.keys(config.polesZeroes).forEach((id) => {\r\n index.addPart(id, 'polesZeroes', config.polesZeroes[id]);\r\n });\r\n }\r\n if (config.spiceModels) {\r\n Object.keys(config.spiceModels).forEach((id) => {\r\n index.addPart(id, 'spiceModels', config.spiceModels[id]);\r\n });\r\n }\r\n // Spice Parts are removed in configuration and we will now use\r\n // the spice parts in aditools-spice\r\n const spiceParts = AditoolsSpiceParts;\r\n if (spiceParts) {\r\n Object.keys(spiceParts).forEach((id) => {\r\n index.addPart(id, 'spice', spiceParts[id]);\r\n });\r\n }\r\n if (config.nonPicks) {\r\n Object.keys(config.nonPicks).forEach((id) => {\r\n index.addPart(id, 'nonPick', config.nonPicks[id].nonPick);\r\n });\r\n }\r\n};\r\n\r\nlet collectPstData = function (ignoreRX, parts, index) {\r\n let ignoreRegEx = ignoreRX ? new RegExp(ignoreRX) : null;\r\n parts.data.forEach((part) => {\r\n if (!ignoreRegEx || !ignoreRegEx.test(part['0'].displayValue)) {\r\n index.addPart(part['0'].displayValue, 'pst', part);\r\n }\r\n });\r\n};\r\n\r\nexport function collectMockOpAmps(url, logger) {\r\n logger.info(`Loading opamps from ${url} in browser`);\r\n return fetch(url).then((response) => {\r\n return response.json();\r\n });\r\n}\r\n\r\nexport function collectOpAmps(cdp, adiLocale, tool, staticParts, parameters, logging, requiresExternalSimulation) {\r\n let index = new PartIndex();\r\n index.pstMapping = cdp.getPstMapping();\r\n return cdp\r\n .getToolsConfig(tool)\r\n .then((config) => {\r\n if (!config) {\r\n throw 'No config data';\r\n }\r\n logging.time('opampsCfgTime');\r\n collectConfigData(adiLocale, staticParts, index, config);\r\n logging.timeEnd('opampsCfgTime');\r\n return config;\r\n })\r\n .then((config) => {\r\n index.pstView = cdp.getPstIndex(config.cdpsource.viewsource);\r\n return cdp.getPstData(config.cdpsource.datasource).then(async (parts) => {\r\n if (!parts) {\r\n throw 'No PST Parts Data';\r\n }\r\n logging.time('opampsPstTime');\r\n collectPstData(config.cdpsource.ignoreInPDB, parts, index);\r\n logging.timeEnd('opampsPstTime');\r\n let pst = parts;\r\n index.pstData = pst;\r\n return index;\r\n });\r\n })\r\n .then((index) => {\r\n logging.time('opampsInterpretTime');\r\n let opamps = interpretOpAmpIndex(index, parameters, logging, requiresExternalSimulation);\r\n logging.timeEnd('opampsInterpretTime');\r\n if (LOG_PARTS) {\r\n console.log('OpAmps:');\r\n console.log(opamps.map((item) => item.partNumber));\r\n }\r\n opamps.pstData = index.pstData;\r\n opamps.pstViewPromise = index.pstView;\r\n opamps.pstMappingPromise = index.pstMapping;\r\n return opamps;\r\n })\r\n .catch((error) => {\r\n logging.error('Error collecting opamp Data: ', error.message);\r\n return null;\r\n });\r\n}\r\n","import WhyNot from '../../models/component-selector/why-not';\r\nimport { isSOIC, isSOICEP, isMSOP, isMSOPEP, isSOT23 } from '../../utils/package-checker';\r\n\r\nexport function reasonsOpampPackagingMarginal(opAmp) {\r\n let reasons = [];\r\n let packageCode = typeof opAmp.packageCode === 'string' ? opAmp.packageCode.toUpperCase() : opAmp.packageCode;\r\n if (packageCode) {\r\n if (parseFloat(opAmp.numberChannels) > 2) {\r\n if (parseFloat(opAmp.numberChannels) === 4) {\r\n reasons.push(WhyNot.create({ messageId: 'opAmpSelection.status.quad-opamp' }));\r\n } else {\r\n reasons.push(WhyNot.create({ messageId: 'opAmpSelection.status.channel-support' }));\r\n }\r\n } else if (parseFloat(opAmp.numberChannels) === 2) {\r\n if (!isSOIC(packageCode) && !isSOICEP(packageCode) && !isMSOP(packageCode) && !isMSOPEP(packageCode)) {\r\n reasons.push(WhyNot.create({ messageId: 'opAmpSelection.status.package-incompatible' }));\r\n }\r\n } else if (parseFloat(opAmp.numberChannels) === 1) {\r\n if (!isSOIC(packageCode) && !isSOICEP(packageCode) && !isSOT23(packageCode)) {\r\n reasons.push(WhyNot.create({ messageId: 'opAmpSelection.status.package-incompatible' }));\r\n }\r\n }\r\n } else {\r\n // Log Errors Here\r\n }\r\n return reasons;\r\n}\r\n\r\nexport function applyAdditionalCriteria(opAmp) {\r\n const reasons = reasonsOpampPackagingMarginal(opAmp);\r\n return reasons.length > 0 ? 'allowed' : 'recommended';\r\n}\r\n\r\n// The following function flags opamps with poles that are too close to the frequency range of interest.\r\n// Poles near the operating region can result in strange response curves.\r\nexport function polesZeroesMarginal(limits, opAmp) {\r\n let result = false;\r\n const FUDGE_FACTOR = 10;\r\n if ('polesZeroes' in opAmp) {\r\n let minPole = opAmp.polesZeroes.p.find((value) => {\r\n return value > 10;\r\n });\r\n result = (opAmp.rOut * FUDGE_FACTOR) / minPole > limits.rOutOverGBW;\r\n }\r\n return result;\r\n}\r\n","import Service from '@ember/service';\r\nimport ENV from '../config/environment';\r\nimport { set } from '@ember/object';\r\nimport { inject as service } from '@ember/service';\r\nimport { saveDesignAnalytics, loadDesignAnalytics, loadDesignFailureAnalytics } from '../utils/analytics';\r\nimport { getResponseType, getResponseValue } from '../models/gestures/filter-response-gesture';\r\nimport IndexModel from '../models/index';\r\nimport SpecificationAdvisor from '../models/advisors/specification';\r\nimport ComponentsAdvisor from '../models/advisors/component-selection';\r\nimport TolerancesAdvisor from '../models/advisors/tolerance';\r\nimport FilterConstants from '../filter-constants';\r\nimport { parser, processResults, generateJsonString } from './persistence/tokenize';\r\nimport {\r\n dryVisitedTabs,\r\n dryFilter,\r\n drySpecifications,\r\n dryComponents,\r\n dryTolerances,\r\n buildCircuitComponents,\r\n} from './persistence/dryer';\r\nimport * as CommonUtils from '../utils/common';\r\nimport { dasherize, camelize } from '@ember/string';\r\n\r\nlet validNumber = function (value) {\r\n return typeof value !== 'undefined' && value !== null && !isNaN(value);\r\n};\r\n\r\nlet getInvalidOpAmps = function (stages, opamps) {\r\n // Build list of OpAmps from Stages\r\n let allOpAmps = [];\r\n stages.forEach((stage) => {\r\n if (!allOpAmps.includes(stage.opAmp)) {\r\n allOpAmps.push(stage.opAmp);\r\n }\r\n });\r\n\r\n // Return OpAmps that are not Existing in the list\r\n return allOpAmps.filter((opAmp) => {\r\n let result = opamps.getOpAmp(opAmp);\r\n return opAmp !== 'ideal' && (typeof result === 'undefined' || result === null);\r\n });\r\n};\r\n\r\nlet getOrdinal = function (n) {\r\n let s = ['th', 'st', 'nd', 'rd'],\r\n v = n % 100;\r\n return n + (s[(v - 20) % 10] || s[v] || s[0]);\r\n};\r\n\r\nlet compareDesignVersion = function (ver1, ver2) {\r\n let v1 = ver1.split('.');\r\n let v2 = ver2.split('.');\r\n const k = Math.min(v1.length, v2.length);\r\n for (let i = 0; i < k; ++i) {\r\n v1[i] = parseInt(v1[i], 10);\r\n v2[i] = parseInt(v2[i], 10);\r\n if (v1[i] > v2[i]) return 1;\r\n if (v1[i] < v2[i]) return -1;\r\n }\r\n return v1.length === v2.length ? 0 : v1.length < v2.length ? -1 : 1;\r\n};\r\n\r\n// Persistence Service: Service to handle application save and load.\r\n\r\nexport default class PersistenceService extends Service {\r\n @service('aditools-analytics') analytics;\r\n @service logger;\r\n @service opamps;\r\n version = null;\r\n\r\n _getStageImplementation(designData, index) {\r\n const name = 'stage' + (index + 1);\r\n return name in designData.stageImplementations ? designData.stageImplementations[name] : '';\r\n }\r\n _cleanLoadedImplementation(loadedImplementation, individualStage) {\r\n return individualStage.implementationSelection.selections.includes(loadedImplementation)\r\n ? loadedImplementation\r\n : individualStage.implementation;\r\n }\r\n\r\n getSaveData(visitedTabs, inputModel, componentsAdvisor) {\r\n let design = { visitedTabs: '', filterType: '', specifications: {}, components: {}, tolerances: {}, nextSteps: {} };\r\n let tabList = visitedTabs ? visitedTabs : ['filter-type'];\r\n let indexModel = new IndexModel(this.opamps);\r\n\r\n design.visitedTabs = tabList;\r\n\r\n tabList.forEach((tab) => {\r\n switch (tab) {\r\n case 'filter-type':\r\n indexModel.inputs.filterType = inputModel.filterType;\r\n design.filterType = inputModel.filterType ? inputModel.filterType : {};\r\n break;\r\n case 'specifications':\r\n indexModel.inputs.specifications = inputModel.specifications;\r\n design.specifications = this.createSpecificationsDesignData(inputModel.specifications);\r\n break;\r\n case 'components':\r\n indexModel.inputs.components = componentsAdvisor.restructure(inputModel.components);\r\n design.components = this.createComponentsDesignData(\r\n indexModel.inputs.components,\r\n indexModel.results.components.detailsOfStages,\r\n );\r\n break;\r\n case 'tolerances':\r\n indexModel.inputs.tolerances = inputModel.tolerances;\r\n design.tolerances = this.createTolerancesDesignData(inputModel.tolerances);\r\n break;\r\n case 'next-steps':\r\n if (inputModel.nextSteps) indexModel.inputs.nextSteps = inputModel.nextSteps;\r\n design.nextSteps = inputModel.nextSteps ? inputModel.nextSteps : {};\r\n break;\r\n }\r\n });\r\n return { design: design, model: indexModel };\r\n }\r\n createSpecificationsDesignData(data) {\r\n let designData = {};\r\n designData.gain = data.gain;\r\n designData.gainUnit = data.gainUnit;\r\n designData.passbandAttenuation = data.passbandAttenuation;\r\n designData.passbandFrequency = data.passbandFrequency;\r\n designData.stopbandAttenuation = data.stopbandAttenuation;\r\n designData.stopbandFrequency = data.stopbandFrequency;\r\n designData.filterResponseValue = data.filterResponseValue ? data.filterResponseValue : 0;\r\n designData.filterResponseSlider = data.filterResponseSlider;\r\n designData.centerFrequency = data.centerFrequency;\r\n return designData;\r\n }\r\n createComponentsDesignData(data, stageInfo) {\r\n let designData = {};\r\n designData.vsPlus = data.vsPlus;\r\n designData.vsMinus = data.vsMinus;\r\n designData.optimization = data.optimization;\r\n designData.optimizationPreference = data.optimizationPreference;\r\n designData.compensateForGbw = data.compensateForGbw;\r\n designData.preferredAlgorithms = data.preferredAlgorithms;\r\n\r\n // set component sizing slider, gain slider, and opAmp values\r\n let stages = [];\r\n for (const stage of data.individualStageInputs) {\r\n stages.push({\r\n stageLetter: stage.stageLetter,\r\n componentSizing: stage.componentSizing.value,\r\n gain: stage.gainRatio.value,\r\n gainEnabled: stage.gainRatio.enabled,\r\n implementation: stage.implementation,\r\n opAmps: stage.opAmp,\r\n });\r\n }\r\n designData.stages = stages;\r\n designData.recommendedAmps = [];\r\n\r\n // Sort Order for Pick for me must also be taken into consideration\r\n if (designData.optimizationPreference === FilterConstants.optimizationPreferenceOptions.nonSpecific) {\r\n let sortOrder = stageInfo.map((item) => {\r\n return item.actualStage.stageId - 1;\r\n });\r\n designData.sortOrder = sortOrder;\r\n } else {\r\n designData.sortOrder = data.sortOrder;\r\n }\r\n return designData;\r\n }\r\n createTolerancesDesignData(data) {\r\n let designData = {};\r\n designData.resistorTolerance = data.resistorTolerance;\r\n designData.capacitorTolerance = data.capacitorTolerance;\r\n designData.inductorTolerance = data.inductorTolerance;\r\n designData.opAmpGbwTolerance = data.opAmpGbwTolerance;\r\n designData.resistorPreferredSeries = data.resistorPreferredSeries;\r\n designData.capacitorPreferredSeries = data.capacitorPreferredSeries;\r\n designData.inductorPreferredSeries = data.inductorPreferredSeries;\r\n return designData;\r\n }\r\n getLoadData(visitedTabs, designData) {\r\n const indexModel = new IndexModel(this.opamps);\r\n let tabList = visitedTabs ? visitedTabs : ['filter-type'];\r\n\r\n if (this.version === 'old') {\r\n tabList = this.buildVisitedTabs(designData);\r\n }\r\n\r\n tabList.forEach((tab) => {\r\n switch (tab) {\r\n case 'filter-type':\r\n indexModel.inputs.filterType = designData.filterType\r\n ? designData.filterType\r\n : designData.type\r\n ? designData.type.filterType\r\n : null;\r\n break;\r\n case 'specifications':\r\n indexModel.inputs.specifications = this.populateSpecificationsModel(indexModel, designData.specifications);\r\n break;\r\n case 'components':\r\n indexModel.inputs.components = this.populateComponentsModel(\r\n indexModel,\r\n designData.components ? designData.components : designData.compSelect,\r\n );\r\n break;\r\n case 'tolerances':\r\n indexModel.inputs.tolerances = this.populateTolerancesModel(\r\n indexModel,\r\n designData.tolerances ? designData.tolerances : designData.compTolerance,\r\n );\r\n break;\r\n case 'next-steps':\r\n indexModel.inputs.nextSteps = null;\r\n break;\r\n }\r\n });\r\n const inputModel = indexModel.inputs;\r\n return { visitedTabs: tabList, inputModel: inputModel };\r\n }\r\n buildVisitedTabs(designData) {\r\n let tablist = [];\r\n for (let item of ['type', 'specifications', 'compSelect', 'compTolerance', 'finalResults']) {\r\n if (item in designData) {\r\n switch (item) {\r\n case 'type':\r\n if (designData.type && designData.type.filterType) {\r\n tablist.push('filter-type');\r\n }\r\n break;\r\n case 'specifications':\r\n if (tablist.includes('filter-type')) {\r\n tablist.push('specifications');\r\n }\r\n break;\r\n case 'compSelect':\r\n if (tablist.includes('specifications')) {\r\n tablist.push('components');\r\n }\r\n break;\r\n case 'compTolerance':\r\n if (tablist.includes('components')) {\r\n tablist.push('tolerances');\r\n }\r\n break;\r\n case 'finalResults':\r\n if (tablist.includes('tolerances')) {\r\n tablist.push('next-steps');\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return tablist;\r\n }\r\n populateSpecificationsModel(indexModel, designData) {\r\n let advisor = new SpecificationAdvisor(indexModel);\r\n let inputData = advisor.generate();\r\n set(inputData, 'gain', validNumber(designData.gain) ? parseFloat(designData.gain) : inputData.gain);\r\n let gainUnit = designData.gainUnit ? designData.gainUnit : designData.gainUnitsSetting; // old design uses gainUnitsSetting, newer designs use gainUnit\r\n gainUnit = gainUnit === FilterConstants.gainUnits.db || gainUnit === FilterConstants.gainUnits.vv ? gainUnit : null;\r\n set(inputData, 'gainUnit', gainUnit ? gainUnit : inputData.gainUnit);\r\n set(\r\n inputData,\r\n 'passbandAttenuation',\r\n validNumber(designData.passbandAttenuation)\r\n ? parseFloat(designData.passbandAttenuation)\r\n : inputData.passbandAttenuation,\r\n );\r\n set(\r\n inputData,\r\n 'passbandFrequency',\r\n validNumber(designData.passbandFrequency)\r\n ? parseFloat(designData.passbandFrequency)\r\n : inputData.passbandFrequency,\r\n );\r\n set(\r\n inputData,\r\n 'stopbandAttenuation',\r\n validNumber(designData.stopbandAttenuation)\r\n ? parseFloat(designData.stopbandAttenuation)\r\n : inputData.stopbandAttenuation,\r\n );\r\n set(\r\n inputData,\r\n 'stopbandFrequency',\r\n validNumber(designData.stopbandFrequency)\r\n ? parseFloat(designData.stopbandFrequency)\r\n : inputData.stopbandFrequency,\r\n );\r\n if (indexModel.inputs.filterType === FilterConstants.filterType.bandPass) {\r\n set(\r\n inputData,\r\n 'centerFrequency',\r\n validNumber(designData.centerFrequency) ? parseFloat(designData.centerFrequency) : inputData.centerFrequency,\r\n );\r\n }\r\n let filterResponseSlider =\r\n this.version === 'new' ? designData.filterResponseSlider : designData.filterResponseSliderValue; // old design uses filterResponseSliderValue, newer designs use filterResponseSlider\r\n set(\r\n inputData,\r\n 'filterResponseSlider',\r\n validNumber(filterResponseSlider) ? parseFloat(filterResponseSlider) : inputData.filterResponseSlider,\r\n );\r\n set(inputData, 'selectedResponseType', getResponseType(inputData.filterResponseSlider));\r\n set(\r\n inputData,\r\n 'filterResponseValue',\r\n getResponseValue(inputData.filterResponseSlider, inputData.passbandAttenuation),\r\n );\r\n return inputData;\r\n }\r\n populateComponentsModel(indexModel, designData) {\r\n let advisor = new ComponentsAdvisor(indexModel);\r\n let inputData = advisor.generate();\r\n set(inputData, 'preferredAlgorithms', designData.preferredAlgorithms);\r\n set(inputData, 'optimization', designData.optimization);\r\n set(inputData, 'optimizationPreference', designData.optimizationPreference);\r\n set(inputData, 'recommendedAmps', designData.recommendedAmps ? designData.recommendedAmps : []); // new design data is set to [] for now\r\n let individualStages = inputData.individualStageInputs;\r\n let sortOrder = [];\r\n // New versions are versions with 1 or greater, it is considered old when it has no version and is set to 0\r\n // We may change the if statements into case statements when newer versions introduce newer properties\r\n // Here is a list of the differences of the design file property names for new and old in components\r\n // 1. Positive Supply Voltage - vsPlus (new); plusVs (old)\r\n // 2. Negative Supply Voltage - vsMinus (new); minusVs (old)\r\n // 3. Compensate for GBW - compensateForGbw (new); compensateGBW (old)\r\n // 4. Stage Letter - stages[index]stageLetter (new); stage (old)\r\n // 5. Implementation - stages[index].implementation (new); stageImplementations[index] (old)\r\n // 6. Op Amp Part Name - stages[index].opAmps (new); opAmps[index].value (old)\r\n // For slider values, the new one is saved at stages[index].componentSizing and stages[index].gain, while the old ones\r\n // use rcSizing[index].value and gain[index].value. However, the old designs may have a rcSizing that has a rawVal property.\r\n // Also these component and gain values for old designs are stored into legacySizingSliderValue and legacyGainSliderValue\r\n if (this.version === 'new') {\r\n set(inputData, 'vsPlus', validNumber(designData.vsPlus) ? parseFloat(designData.vsPlus) : inputData.vsPlus);\r\n set(inputData, 'vsMinus', validNumber(designData.vsMinus) ? parseFloat(designData.vsMinus) : inputData.vsMinus);\r\n set(inputData, 'compensateForGbw', designData.compensateForGbw);\r\n for (let i = 0; i < designData.stages.length; i++) {\r\n set(\r\n individualStages[i],\r\n 'stageLetter',\r\n designData.stages[i].stageLetter ? designData.stages[i].stageLetter : individualStages[i].stageLetter,\r\n );\r\n set(\r\n individualStages[i],\r\n 'implementation',\r\n designData.stages[i].implementation\r\n ? designData.stages[i].implementation\r\n : individualStages[i].implementation,\r\n );\r\n set(individualStages[i].implementationSelection, 'selectedItem', individualStages[i].implementation);\r\n set(\r\n individualStages[i],\r\n 'opAmp',\r\n designData.stages[i].opAmps ? designData.stages[i].opAmps : individualStages[i].opAmp,\r\n );\r\n set(\r\n individualStages[i].componentSizing,\r\n 'value',\r\n typeof designData.stages[i].componentSizing !== 'undefined' &&\r\n designData.stages[i].componentSizing !== null &&\r\n !isNaN(designData.stages[i].componentSizing)\r\n ? designData.stages[i].componentSizing\r\n : individualStages[i].componentSizing.value,\r\n );\r\n set(individualStages[i].componentSizing, 'minimum', -1); // This will be properly set when the components advisor updates the main model\r\n set(individualStages[i].componentSizing, 'maximum', -1); // This will be properly set when the components advisor updates the main model\r\n set(\r\n individualStages[i].gainRatio,\r\n 'value',\r\n typeof designData.stages[i].gain !== 'undefined' &&\r\n designData.stages[i].gain !== null &&\r\n !isNaN(designData.stages[i].gain)\r\n ? designData.stages[i].gain\r\n : individualStages[i].gainRatio.value,\r\n );\r\n set(individualStages[i].gainRatio, 'minimum', -1); // This will be properly set when the components advisor updates the main model\r\n set(individualStages[i].gainRatio, 'maximum', -1); // This will be properly set when the components advisor updates the main model\r\n set(\r\n individualStages[i].gainRatio,\r\n 'enabled',\r\n designData.stages[i].gainEnabled ? designData.stages[i].gainEnabled : individualStages[i].gainRatio.enabled,\r\n );\r\n }\r\n sortOrder = designData.sortOrder;\r\n } else if (this.version === 'old') {\r\n set(inputData, 'vsPlus', validNumber(designData.plusVs) ? parseFloat(designData.plusVs) : inputData.vsPlus);\r\n set(inputData, 'vsMinus', validNumber(designData.minusVs) ? parseFloat(designData.minusVs) : inputData.vsMinus);\r\n set(inputData, 'compensateForGbw', designData.compensateGBW);\r\n for (let i = 0; i < designData.opAmps.length; i++) {\r\n set(\r\n individualStages[i],\r\n 'stageLetter',\r\n designData.opAmps[i].stage ? designData.opAmps[i].stage : individualStages[i].stageLetter,\r\n );\r\n set(\r\n individualStages[i],\r\n 'implementation',\r\n this._cleanLoadedImplementation(this._getStageImplementation(designData, i), individualStages[i]),\r\n );\r\n set(individualStages[i].implementationSelection, 'selectedItem', individualStages[i].implementation);\r\n set(\r\n individualStages[i],\r\n 'opAmp',\r\n designData.opAmps[i].value ? designData.opAmps[i].value : individualStages[i].opAmp,\r\n );\r\n set(individualStages[i].componentSizing, 'value', null);\r\n set(individualStages[i].componentSizing, 'minimum', -1); // This will be properly set when the components advisor updates the main model\r\n set(individualStages[i].componentSizing, 'maximum', -1); // This will be properly set when the components advisor updates the main model\r\n set(individualStages[i].gainRatio, 'value', null);\r\n set(individualStages[i].gainRatio, 'minimum', -1); // This will be properly set when the components advisor updates the main model\r\n set(individualStages[i].gainRatio, 'maximum', -1); // This will be properly set when the components advisor updates the main model\r\n set(individualStages[i].gainRatio, 'enabled', designData.gain[i] ? !designData.gain[i].disabled : null);\r\n set(\r\n individualStages[i],\r\n 'legacySizingSliderValue',\r\n designData.rcSizing[i]\r\n ? designData.rcSizing[i].rawVal\r\n ? designData.rcSizing[i].rawVal\r\n : designData.rcSizing[i].value\r\n : null,\r\n );\r\n set(\r\n individualStages[i],\r\n 'legacyGainSliderValue',\r\n designData.gain[i] ? (designData.gain[i].value ? designData.gain[i].value : null) : null,\r\n );\r\n }\r\n sortOrder = this.rebuildSortOrder(designData.sortOrder);\r\n }\r\n set(inputData, 'individualStageInputs', individualStages);\r\n set(inputData, 'sortOrder', sortOrder);\r\n return inputData;\r\n }\r\n populateTolerancesModel(indexModel, designData) {\r\n // New versions are versions with 1 or greater, it is considered old when it has no version and is set to 0\r\n // We may change the if statements into case statements when newer versions introduce newer properties\r\n // Here is a list of the differences of the design file property names for new and old in tolerances\r\n // 1. Resistor Tolerance - resistorTolerance (new); resistor (old)\r\n // 2. Capacitor Tolerance - capacitorTolerance (new); capacitor (old)\r\n // 3. Inductor Tolerance - inductorTolerance (new); inductor (old)\r\n // 4. Op Amp GBW Tolerance - opAmpGbwTolerance (new); gbw (old)\r\n // 5. Resistor Preferred Series - resistorPreferredSeries (new); prefResistors (old)\r\n // 6. Capacitor Preferred Series - capacitorPreferredSeries (new); prefCapacitors (old)\r\n // 7. Inductor Preferred Series - inductorPreferredSeries (new); prefInductors (old)\r\n let advisor = new TolerancesAdvisor(indexModel);\r\n let inputData = advisor.generate();\r\n let resistorTolerance = designData.resistorTolerance ? designData.resistorTolerance : designData.resistor;\r\n set(inputData, 'resistorTolerance', resistorTolerance ? resistorTolerance : inputData.resistorTolerance);\r\n let capacitorTolerance = designData.capacitorTolerance ? designData.capacitorTolerance : designData.capacitor;\r\n set(inputData, 'capacitorTolerance', capacitorTolerance ? capacitorTolerance : inputData.capacitorTolerance);\r\n let inductorTolerance = designData.inductorTolerance ? designData.inductorTolerance : designData.inductor;\r\n set(inputData, 'inductorTolerance', inductorTolerance ? inductorTolerance : inputData.inductorTolerance);\r\n let opAmpGbwTolerance = designData.opAmpGbwTolerance ? designData.opAmpGbwTolerance : designData.gbw;\r\n set(inputData, 'opAmpGbwTolerance', opAmpGbwTolerance ? opAmpGbwTolerance : inputData.opAmpGbwTolerance);\r\n let resistorPreferredSeries = designData.resistorPreferredSeries\r\n ? designData.resistorPreferredSeries\r\n : designData.prefResistors;\r\n set(\r\n inputData,\r\n 'resistorPreferredSeries',\r\n resistorPreferredSeries ? resistorPreferredSeries : inputData.resistorPreferredSeries,\r\n );\r\n let capacitorPreferredSeries = designData.capacitorPreferredSeries\r\n ? designData.capacitorPreferredSeries\r\n : designData.prefCapacitors;\r\n set(\r\n inputData,\r\n 'capacitorPreferredSeries',\r\n capacitorPreferredSeries ? capacitorPreferredSeries : inputData.capacitorPreferredSeries,\r\n );\r\n let inductorPreferredSeries = designData.inductorPreferredSeries\r\n ? designData.inductorPreferredSeries\r\n : designData.prefInductors;\r\n set(\r\n inputData,\r\n 'inductorPreferredSeries',\r\n inductorPreferredSeries ? inductorPreferredSeries : inputData.inductorPreferredSeries,\r\n );\r\n return inputData;\r\n }\r\n rebuildSortOrder(order) {\r\n let sortOrder = [];\r\n for (let i = 0; i < order.length; i++) {\r\n sortOrder.push(order[i] - 1);\r\n }\r\n return sortOrder;\r\n }\r\n save(name, desc, tabs, inputs, componentsAdvisor) {\r\n let design = this.getSaveData(tabs, inputs, componentsAdvisor).design;\r\n let now = new Date();\r\n let ticks = now.getTime();\r\n let fileName = (name.length > 0 ? name : 'SavedDesign' + ENV.toolname.toUpperCase() + ticks.toString()) + '.json';\r\n let saveDateStamp =\r\n now.getFullYear() +\r\n '-' +\r\n ('0' + (now.getMonth() + 1)).slice(-2) +\r\n '-' +\r\n ('0' + now.getDate()).slice(-2) +\r\n ' ' +\r\n ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\r\n ':' +\r\n ('0' + now.getMinutes()).slice(-2) +\r\n ':' +\r\n ('0' + now.getSeconds()).slice(-2) +\r\n ' ' +\r\n (now.getHours() >= 12 ? 'PM' : 'AM');\r\n let version = '1.2';\r\n let toolName = 'FW';\r\n\r\n let designData = {\r\n Name: name,\r\n Description: desc,\r\n Tool: toolName,\r\n Version: version,\r\n Design: design,\r\n CreatedDate: saveDateStamp,\r\n UpdatedDate: saveDateStamp,\r\n };\r\n let jsonStringData = JSON.stringify(designData, null, '\\t');\r\n\r\n let blob = new Blob([jsonStringData], { type: 'application/octet-stream; charset=UTF-8', encoding: 'UTF-8' });\r\n\r\n if (typeof window.navigator.msSaveBlob !== 'undefined') {\r\n window.navigator.msSaveBlob(blob, fileName);\r\n } else {\r\n let URL = window.URL || window.webkitURL;\r\n let downloadUrl = URL.createObjectURL(blob);\r\n\r\n if (fileName) {\r\n let a = document.createElement('a');\r\n if (typeof a.download === 'undefined') {\r\n window.location = downloadUrl;\r\n } else {\r\n a.href = downloadUrl;\r\n a.download = fileName;\r\n a.click();\r\n }\r\n } else {\r\n window.location = downloadUrl;\r\n }\r\n URL.revokeObjectURL(downloadUrl);\r\n }\r\n saveDesignAnalytics(name, desc, saveDateStamp, this.analytics);\r\n }\r\n load(jsonStringData) {\r\n let returnData = null;\r\n let inputs = null;\r\n let parseData = null;\r\n let errorCode = { code: FilterConstants.loadErrorCodes.noError, details: '' };\r\n\r\n try {\r\n if (this.opamps.getOpAmps() !== null) {\r\n parseData = JSON.parse(jsonStringData);\r\n let isValid = true;\r\n let version = parseData.Version ? 'new' : 'old';\r\n set(this, 'version', version);\r\n\r\n if (parseData.Name) isValid = isValid && parseData.Name.length > 0;\r\n if (parseData.Description) isValid = isValid && parseData.Description.length > 0;\r\n if (parseData.Tool) isValid = isValid && parseData.Tool === 'FW';\r\n if (parseData.CreatedDate) isValid = isValid && parseData.CreatedDate.length > 0;\r\n if (parseData.UpdatedDate) isValid = isValid && parseData.UpdatedDate.length > 0;\r\n\r\n let designData =\r\n typeof parseData.Design !== 'undefined' && parseData.Design !== null ? parseData.Design : parseData; // this is for cases in old designs where the tab data isn't consolidated into \"Design\" object\r\n if (isValid) {\r\n if (version === 'new') {\r\n isValid = isValid && designData.filterType !== null;\r\n isValid = isValid && designData.specifications !== null;\r\n isValid = isValid && designData.components !== null;\r\n isValid = isValid && designData.tolerances !== null;\r\n isValid = isValid && designData.nextSteps !== null;\r\n } else {\r\n isValid = isValid && designData.type !== null;\r\n if (!designData.specifications) designData.specifications = {};\r\n isValid = isValid && designData.compSelect !== null;\r\n isValid = isValid && designData.compTolerance !== null;\r\n isValid = isValid && designData.finalResults !== null;\r\n }\r\n }\r\n if (isValid) {\r\n // Build design date only when valid\r\n inputs = this.getLoadData(designData.visitedTabs, designData);\r\n\r\n // Check list of parts if they are existing in the product list (provided that your design data contains components section)\r\n if (\r\n inputs.inputModel.components &&\r\n inputs.inputModel.components.individualStageInputs &&\r\n inputs.inputModel.components.individualStageInputs.length > 0\r\n ) {\r\n let invalidOpAmps = getInvalidOpAmps(inputs.inputModel.components.individualStageInputs, this.opamps);\r\n if (invalidOpAmps.length > 0) {\r\n errorCode.code = FilterConstants.loadErrorCodes.invalidPartFound;\r\n errorCode.details = invalidOpAmps.join(', ');\r\n loadDesignFailureAnalytics(errorCode.details, this.analytics);\r\n }\r\n }\r\n } else {\r\n errorCode.code = FilterConstants.loadErrorCodes.generalError;\r\n }\r\n } else {\r\n errorCode.code = FilterConstants.loadErrorCodes.noOpAmps;\r\n }\r\n } catch (err) {\r\n errorCode.code = FilterConstants.loadErrorCodes.generalError;\r\n } finally {\r\n if (errorCode.code === FilterConstants.loadErrorCodes.noError) {\r\n loadDesignAnalytics(parseData, this.analytics);\r\n returnData = { errorCode: errorCode, visitedTabs: inputs.visitedTabs, inputModel: inputs.inputModel };\r\n } else {\r\n returnData = { errorCode: errorCode, visitedTabs: null, inputModel: null };\r\n }\r\n }\r\n\r\n return returnData;\r\n }\r\n soak(data) {\r\n let output = [];\r\n let decode = decodeURIComponent(data);\r\n let p = parser([...decode]);\r\n let res = p.next();\r\n while (!res.done) {\r\n output.push(res.value);\r\n res = p.next();\r\n }\r\n return generateJsonString(processResults(output));\r\n }\r\n\r\n dry(tabs, inputModel, specificationResults, componentsAdvisor) {\r\n // Design Name\r\n let filterType = dasherize(inputModel.filterType);\r\n filterType = filterType.charAt(0).toUpperCase() + filterType.slice(1);\r\n let designName = filterType + ' Filter Design';\r\n // Design Description\r\n let designDesc = getOrdinal(specificationResults.nthOrder) + ' order ' + specificationResults.responseType;\r\n designDesc += specificationResults.filterResponseValue\r\n ? ' ' +\r\n specificationResults.filterResponseValue.toString() +\r\n (specificationResults.responseType === 'Chebyshev' ? ' dB' : '')\r\n : '';\r\n // Toolname and version\r\n let version = '1.2';\r\n let toolName = 'FW';\r\n // TimeStamp\r\n let now = new Date();\r\n let saveDateStamp =\r\n now.getFullYear().toString() +\r\n ('0' + (now.getMonth() + 1)).slice(-2) +\r\n ('0' + now.getDate()).slice(-2) +\r\n ('0' + now.getHours()).slice(-2) +\r\n ('0' + now.getMinutes()).slice(-2) +\r\n ('0' + now.getSeconds()).slice(-2);\r\n // Design Data\r\n let result = this.getSaveData(tabs, inputModel, componentsAdvisor);\r\n let savedDesign = result.design;\r\n // Compressed Design\r\n let dried =\r\n 'N{name},D{desc},T{tool},V{version},C{cdate},U{udate},d[{tabs},{filter-type},{specifications},{components},{tolerances}]';\r\n dried = dried.replace('{name}', designName);\r\n dried = dried.replace('{desc}', designDesc);\r\n dried = dried.replace('{tool}', toolName);\r\n dried = dried.replace('{version}', version);\r\n dried = dried.replace('{cdate}', saveDateStamp);\r\n dried = dried.replace('{udate}', saveDateStamp);\r\n dried = dried.replace('{tabs}', dryVisitedTabs(savedDesign.visitedTabs));\r\n dried = dried.replace('{filter-type}', dryFilter(savedDesign.filterType));\r\n dried = dried.replace('{specifications}', drySpecifications(savedDesign.specifications));\r\n dried = dried.replace('{components}', dryComponents(savedDesign.components));\r\n dried = dried.replace('{tolerances}', dryTolerances(savedDesign.tolerances));\r\n // Circuit Components\r\n let components = buildCircuitComponents(\r\n result.model.results.nextSteps.detailsOfStages,\r\n result.model.results.nextSteps.detailsOfCircuits,\r\n );\r\n // Group Them all\r\n return {\r\n compact: dried,\r\n design: savedDesign,\r\n description: designDesc,\r\n components: components,\r\n };\r\n }\r\n\r\n hasOldAlgorithm(jsonStringData, inputModel) {\r\n const parseData = JSON.parse(jsonStringData);\r\n const version = parseData.Version;\r\n\r\n const filterType = version ? parseData.Design.filterType : (parseData.Design.type.filterType ?? '');\r\n // No filter type\r\n if (!filterType || filterType === '') return false;\r\n\r\n const specifications = parseData.Design.specifications;\r\n // No specifications\r\n if (!specifications || CommonUtils.isEmptyObject(specifications)) return false;\r\n\r\n const isWideBand =\r\n filterType === FilterConstants.filterType.bandPass &&\r\n 2.5 * parseFloat(specifications.centerFrequency) < parseFloat(specifications.passbandFrequency);\r\n\r\n if (version) {\r\n // For designs with version numbers\r\n const components = parseData.Design.components;\r\n if (components && !CommonUtils.isEmptyObject(components)) {\r\n if (compareDesignVersion(version, '1.1') > 0) {\r\n // For Designs later than version 1.1\r\n const preferredAlgorithms = components.preferredAlgorithms;\r\n if (preferredAlgorithms) {\r\n const value = preferredAlgorithms['sallenKey|lowPass'];\r\n return value === 'lowpass';\r\n }\r\n } else {\r\n // For Designs version 1.1 and earlier\r\n if (filterType === FilterConstants.filterType.lowPass || isWideBand) {\r\n const stages = components.stages;\r\n const stageCount = isWideBand ? stages.length / 2 : stages.length;\r\n // In wideband case, the first half of the filter circuit is assumed to be low pass\r\n for (let i = 0; i < stageCount; i++) {\r\n if (stages[i].implementation === FilterConstants.implementationType.sallenKey) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Older designs that have no design versions do not have complete info on implementation,\r\n // especially during pick for me conditions. So we need to instantiate a model for this case.\r\n if (inputModel.components) {\r\n let indexModel = new IndexModel(this.opamps);\r\n indexModel.inputs.filterType = inputModel.filterType;\r\n indexModel.inputs.specifications = inputModel.specifications;\r\n indexModel.inputs.components = inputModel.components;\r\n const stages = indexModel.results.components.detailsOfStages;\r\n for (let i = 0; i < stages.length; i++) {\r\n const stage = stages[i];\r\n const stageImplementation = stage.implementation.replace(/ /g, '');\r\n const stageType = camelize(stage.filterName.substring(10).replace(/_/g, '-'));\r\n if (\r\n stageType === FilterConstants.filterType.lowPass &&\r\n stageImplementation === FilterConstants.implementationType.sallenKey\r\n ) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n","import { camelize } from '@ember/string';\r\nimport { userEntryToNumber } from '@ebiz/pretty-num';\r\nimport FilterConstants from '../../filter-constants';\r\n\r\nconst VISITED_TABS_HEADER = 'v';\r\nconst VISITED_TABS = {\r\n 'filter-type': 'f',\r\n specifications: 's',\r\n components: 'c',\r\n tolerances: 't',\r\n 'next-steps': 'n',\r\n};\r\nconst FILTER_HEADER = 'f';\r\nconst FILTERS = {\r\n lowPass: 'l',\r\n highPass: 'h',\r\n bandPass: 'b',\r\n};\r\nconst SPECIFICATIONS_STRING = 's[{specifications}]';\r\nconst SPECIFICATIONS = {\r\n gain: 'g',\r\n gainUnit: 'u',\r\n passbandAttenuation: 'a',\r\n passbandFrequency: 'f',\r\n stopbandAttenuation: 'A',\r\n stopbandFrequency: 'F',\r\n filterResponseValue: 'r',\r\n filterResponseSlider: 'R',\r\n centerFrequency: 'c',\r\n};\r\nlet GAIN_UNITS = {\r\n dB: 'd',\r\n 'V/V': 'v',\r\n};\r\nconst COMPONENTS_STRING = 'c[{components}]';\r\nconst COMPONENTS = {\r\n vsPlus: 'p',\r\n vsMinus: 'm',\r\n optimization: 'o',\r\n optimizationPreference: 'O',\r\n compensateForGbw: 'c',\r\n stages: 's',\r\n sortOrder: 'S',\r\n preferredAlgorithms: 'a',\r\n};\r\nconst OPTIMIZATION = {\r\n Noise: 'n',\r\n VoltageRange: 'v',\r\n Power: 'p',\r\n RecommendedSpecificComponents: 'r',\r\n AllowedSpecificComponents: 'a',\r\n};\r\nconst OPTIMIZATION_PREFERENCE = {\r\n nonSpecific: 'n',\r\n specific: 's',\r\n};\r\nconst PREFERRED_ALGORITHMS = {\r\n // Convention is that small character is low pass, and capital letter is high pass\r\n // So low pass sallen key is s, and high pass sallen key is S\r\n // Band Pass Multiple Feedback is d (deliyannis friend) whild D for inductor\r\n 'sallenKey|lowPass': 's',\r\n};\r\nconst PREFERRED_ALGORITHMS_VALUES = {\r\n // This can be multiple characters as it is data rather than key and would work\r\n // with our parser.\r\n lowpass: 'L1',\r\n lowpassV2: 'L2',\r\n};\r\nconst STAGES = {\r\n stageLetter: 'L',\r\n componentSizing: 's',\r\n gain: 'g',\r\n gainEnabled: 'G',\r\n implementation: 'i',\r\n opAmps: 'o',\r\n};\r\nconst IMPLEMENTATION = {\r\n sallenKey: 's',\r\n multipleFeedback: 'm',\r\n inductor: 'i',\r\n deliyannisFriend: 'd',\r\n firstOrder: 'f',\r\n};\r\nconst TOLERANCES_STRING = 't[{tolerances}]';\r\nconst TOLERANCES = {\r\n resistorTolerance: 'r',\r\n capacitorTolerance: 'c',\r\n inductorTolerance: 'l',\r\n opAmpGbwTolerance: 'g',\r\n resistorPreferredSeries: 'R',\r\n capacitorPreferredSeries: 'C',\r\n inductorPreferredSeries: 'L',\r\n};\r\nconst TOLERANCE_VALUES = {\r\n '1%': 'O',\r\n '5%': 'F',\r\n '10%': 'T',\r\n '20%': 'W',\r\n ideal: 'i',\r\n '0.1%': 'o',\r\n '0.5%': 'f',\r\n};\r\n\r\nlet isEmpty = function (val) {\r\n return val === undefined || val === null || val.length === 0;\r\n};\r\n\r\nexport function dryVisitedTabs(tabs) {\r\n let result = VISITED_TABS_HEADER;\r\n for (let i = 0; i < tabs.length; i++) {\r\n if (VISITED_TABS[tabs[i]]) {\r\n result += VISITED_TABS[tabs[i]];\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport function dryFilter(type) {\r\n let result = FILTER_HEADER;\r\n if (FILTERS[type]) {\r\n result += FILTERS[type];\r\n }\r\n return result;\r\n}\r\n\r\nexport function drySpecifications(specificationsInput) {\r\n let result = SPECIFICATIONS_STRING;\r\n let specificationsString = '';\r\n Object.keys(specificationsInput).forEach((key) => {\r\n if (specificationsString.length > 0 && !(isEmpty(SPECIFICATIONS[key]) || isEmpty(specificationsInput[key])))\r\n specificationsString += ',';\r\n switch (key) {\r\n case 'gainUnit': {\r\n specificationsString += SPECIFICATIONS['gainUnit'] + GAIN_UNITS[specificationsInput.gainUnit];\r\n break;\r\n }\r\n default: {\r\n if (!(isEmpty(SPECIFICATIONS[key]) || isEmpty(specificationsInput[key]))) {\r\n specificationsString += SPECIFICATIONS[key] + specificationsInput[key].toString();\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n return result.replace('{specifications}', specificationsString);\r\n}\r\n\r\nexport function dryComponents(componentsInput) {\r\n let result = COMPONENTS_STRING;\r\n let componentsString = '';\r\n Object.keys(componentsInput).forEach((key) => {\r\n if (componentsString.length > 0 && !(isEmpty(COMPONENTS[key]) || isEmpty(componentsInput[key])))\r\n componentsString += ',';\r\n switch (key) {\r\n case 'compensateForGbw': {\r\n componentsString += COMPONENTS['compensateForGbw'] + (componentsInput.compensateForGbw ? '1' : '0');\r\n break;\r\n }\r\n case 'optimization': {\r\n componentsString += COMPONENTS['optimization'] + OPTIMIZATION[componentsInput.optimization];\r\n break;\r\n }\r\n case 'optimizationPreference': {\r\n componentsString +=\r\n COMPONENTS['optimizationPreference'] + OPTIMIZATION_PREFERENCE[componentsInput.optimizationPreference];\r\n break;\r\n }\r\n case 'sortOrder': {\r\n let sortString = '';\r\n if (componentsInput.sortOrder.length > 0) {\r\n for (let i = 0; i < componentsInput.sortOrder.length; i++) {\r\n if (sortString.length > 0 && !isEmpty(componentsInput.sortOrder[i])) sortString += ',';\r\n sortString += COMPONENTS['sortOrder'] + componentsInput.sortOrder[i].toString();\r\n }\r\n componentsString += sortString;\r\n }\r\n break;\r\n }\r\n case 'stages': {\r\n let stagesList = '';\r\n if (componentsInput.stages.length > 0) {\r\n for (let i = 0; i < componentsInput.stages.length; i++) {\r\n if (stagesList.length > 0 && !isEmpty(componentsInput.stages[i])) stagesList += ',';\r\n stagesList += dryStages(COMPONENTS['stages'], componentsInput.stages[i]);\r\n }\r\n componentsString += stagesList;\r\n }\r\n break;\r\n }\r\n case 'preferredAlgorithms': {\r\n let preferredAlgorithmsString = '';\r\n if (componentsInput.preferredAlgorithms) {\r\n Object.keys(componentsInput.preferredAlgorithms).forEach((key) => {\r\n if (\r\n !(\r\n isEmpty(PREFERRED_ALGORITHMS[key]) ||\r\n isEmpty(componentsInput.preferredAlgorithms[key]) ||\r\n isEmpty(PREFERRED_ALGORITHMS_VALUES[componentsInput.preferredAlgorithms[key]])\r\n )\r\n ) {\r\n if (preferredAlgorithmsString.length > 0) preferredAlgorithmsString += ',';\r\n preferredAlgorithmsString +=\r\n PREFERRED_ALGORITHMS[key] +\r\n PREFERRED_ALGORITHMS_VALUES[componentsInput.preferredAlgorithms[key]].toString();\r\n }\r\n });\r\n if (preferredAlgorithmsString.length > 0)\r\n componentsString += `${COMPONENTS['preferredAlgorithms']}[${preferredAlgorithmsString}]`;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (!(isEmpty(COMPONENTS[key]) || isEmpty(componentsInput[key]))) {\r\n componentsString += COMPONENTS[key] + componentsInput[key].toString();\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n return result.replace('{components}', componentsString);\r\n}\r\n\r\nexport function dryStages(stagesHeader, stageInput) {\r\n let stageString = '';\r\n Object.keys(stageInput).forEach((key) => {\r\n if (stageString.length > 0 && typeof stageInput[key] !== 'undefined' && stageInput[key] !== null)\r\n stageString += ',';\r\n switch (key) {\r\n case 'gainEnabled': {\r\n stageString += STAGES['gainEnabled'] + (stageInput.gainEnabled ? '1' : '0');\r\n break;\r\n }\r\n case 'implementation': {\r\n stageString += STAGES['implementation'] + IMPLEMENTATION[stageInput.implementation];\r\n break;\r\n }\r\n default: {\r\n if (!(isEmpty(STAGES[key]) || isEmpty(stageInput[key]))) {\r\n stageString += STAGES[key] + stageInput[key].toString();\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n return stagesHeader + '[' + stageString + ']';\r\n}\r\n\r\nexport function dryTolerances(toleranceInputs) {\r\n let result = TOLERANCES_STRING;\r\n let tolerancesString = '';\r\n Object.keys(toleranceInputs).forEach((key) => {\r\n if (tolerancesString.length > 0 && !(isEmpty(TOLERANCES[key]) || isEmpty(toleranceInputs[key])))\r\n tolerancesString += ',';\r\n switch (key) {\r\n case 'resistorTolerance':\r\n case 'capacitorTolerance':\r\n case 'inductorTolerance':\r\n case 'opAmpGbwTolerance': {\r\n tolerancesString += TOLERANCES[key] + TOLERANCE_VALUES[toleranceInputs[key]];\r\n break;\r\n }\r\n default: {\r\n if (!(isEmpty(TOLERANCES[key]) || isEmpty(toleranceInputs[key]))) {\r\n tolerancesString += TOLERANCES[key] + toleranceInputs[key].toString();\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n return result.replace('{tolerances}', tolerancesString);\r\n}\r\n\r\nexport function buildCircuitComponents(stages, circuits) {\r\n let components = {};\r\n for (let i = 0; i < stages.length; i++) {\r\n let stage = stages[i];\r\n let circuit = circuits[i];\r\n let stageImplementation = stage.implementation.replace(/ /g, '');\r\n let stageType = camelize(stage.filterName.substring(10).replace(/_/g, '-'));\r\n let stageLetter = stage.stageLetter;\r\n let stageObject = {};\r\n stageObject['type'] = stageType;\r\n stageObject['gain'] = userEntryToNumber(stage.gain.target);\r\n stageObject['fp'] = userEntryToNumber(stage.stageFp.target);\r\n stageObject['q'] = stage.stageQ.enabled ? userEntryToNumber(stage.stageQ.target) : 'N/A';\r\n switch (stageImplementation) {\r\n case FilterConstants.implementationType.gain: {\r\n stageObject['r3'] = circuit.r3.value;\r\n stageObject['r4'] = circuit.r4.value;\r\n break;\r\n }\r\n case FilterConstants.implementationType.firstOrder: {\r\n stageObject['r1'] = circuit.r1.value;\r\n if (circuit.r3.value !== FilterConstants.Limits.INFINITY) {\r\n stageObject['r3'] = circuit.r3.value;\r\n }\r\n if (circuit.r4.value > 0) {\r\n stageObject['r4'] = circuit.r4.value;\r\n }\r\n stageObject['c1'] = circuit.c1.value;\r\n break;\r\n }\r\n case FilterConstants.implementationType.sallenKey: {\r\n stageObject['r1'] = circuit.r1.value;\r\n stageObject['r2'] = circuit.r2.value;\r\n if (circuit.r3.value !== FilterConstants.Limits.INFINITY) {\r\n stageObject['r3'] = circuit.r3.value;\r\n }\r\n if (circuit.r4.value > 0) {\r\n stageObject['r4'] = circuit.r4.value;\r\n }\r\n stageObject['c1'] = circuit.c1.value;\r\n stageObject['c2'] = circuit.c2.value;\r\n break;\r\n }\r\n case FilterConstants.implementationType.inductor: {\r\n stageObject['r1'] = circuit.r1.value;\r\n if (circuit.r3.value !== FilterConstants.Limits.INFINITY) {\r\n stageObject['r3'] = circuit.r3.value;\r\n }\r\n if (circuit.r4.value > 0) {\r\n stageObject['r4'] = circuit.r4.value;\r\n }\r\n stageObject['c1'] = circuit.c1.value;\r\n stageObject['l1'] = circuit.l1.value;\r\n break;\r\n }\r\n case FilterConstants.implementationType.multipleFeedback: {\r\n if (stageType === FilterConstants.filterType.lowPass) {\r\n stageObject['r1'] = circuit.r1.value;\r\n stageObject['r2'] = circuit.r2.value;\r\n stageObject['r5'] = circuit.r5.value;\r\n stageObject['c1'] = circuit.c1.value;\r\n stageObject['c2'] = circuit.c2.value;\r\n } else {\r\n stageObject['r1'] = circuit.r1.value;\r\n stageObject['r2'] = circuit.r2.value;\r\n stageObject['c1'] = circuit.c1.value;\r\n stageObject['c2'] = circuit.c2.value;\r\n stageObject['c5'] = circuit.c5.value;\r\n }\r\n break;\r\n }\r\n case FilterConstants.implementationType.deliyannisFriend: {\r\n if (stageType === FilterConstants.filterType.bandPass) {\r\n stageObject['r1'] = circuit.r1.value;\r\n stageObject['r2'] = circuit.r2.value;\r\n if (circuit.r3.value > 0) {\r\n stageObject['r3'] = circuit.r3.value;\r\n }\r\n if (circuit.r4.value !== FilterConstants.Limits.INFINITY) {\r\n stageObject['r4'] = circuit.r4.value;\r\n }\r\n stageObject['r5'] = circuit.r5.value;\r\n stageObject['c1'] = circuit.c1.value;\r\n stageObject['c2'] = circuit.c2.value;\r\n } else if (stageType === FilterConstants.filterType.notch) {\r\n stageObject['r1'] = circuit.r1.value;\r\n stageObject['r2'] = circuit.r2.value;\r\n if (circuit.r3.value > 0) {\r\n stageObject['r3'] = circuit.r3.value;\r\n }\r\n if (circuit.r4.value !== FilterConstants.Limits.INFINITY) {\r\n stageObject['r4'] = circuit.r4.value;\r\n }\r\n stageObject['r5'] = circuit.r5.value;\r\n stageObject['r6'] = circuit.r5.value;\r\n stageObject['c1'] = circuit.c1.value;\r\n stageObject['c2'] = circuit.c2.value;\r\n }\r\n break;\r\n }\r\n }\r\n components[stageLetter] = stageObject;\r\n }\r\n return components;\r\n}\r\n","const /*CH_COMMA=0, CH_BACKSLASH=1, CH_OPENBRACE=2, CH_CLOSEBRACE=3, */ CH_ENDSTREAM = 4,\r\n CH_OTHER = 5;\r\nconst T_SUCCESS = 0,\r\n T_FAIL = 1,\r\n T_KEY = 2,\r\n T_VALUE = 3,\r\n T_START = 4,\r\n T_END = 5;\r\nlet transitionTable = {\r\n KEYSTART: [\r\n ['FAIL', ''],\r\n ['FAIL', ''],\r\n ['FAIL', ''],\r\n ['ENDVAL', 'Q'],\r\n ['FAIL', ''],\r\n ['KEYTEXT', 'K'],\r\n ],\r\n KEYTEXT: [\r\n ['FAIL', ''],\r\n ['LITERAL', ''],\r\n ['KEYSTART', 'S'],\r\n ['FAIL', ''],\r\n ['FAIL', ''],\r\n ['VALTEXT', 'A'],\r\n ],\r\n VALTEXT: [\r\n ['KEYSTART', 'V'],\r\n ['LITERAL', ''],\r\n ['FAIL', ''],\r\n ['ENDVAL', 'Q'],\r\n ['SUCCESS', 'V'],\r\n ['VALTEXT', 'A'],\r\n ],\r\n ENDVAL: [\r\n ['KEYSTART', ''],\r\n ['FAIL', ''],\r\n ['FAIL', ''],\r\n ['ENDVAL', 'E'],\r\n ['SUCCESS', ''],\r\n ['KEYTEXT', 'K'],\r\n ],\r\n LITERAL: [\r\n ['VALTEXT', 'A'],\r\n ['VALTEXT', 'A'],\r\n ['VALTEXT', 'A'],\r\n ['VALTEXT', 'A'],\r\n ['FAIL', ''],\r\n ['VALTEXT', 'A'],\r\n ],\r\n};\r\n\r\nexport function charClass(ch) {\r\n let charClass = ',\\\\[]'.indexOf(ch);\r\n if (charClass < 0) charClass = CH_OTHER;\r\n return charClass;\r\n}\r\n\r\nexport function* parser(data) {\r\n let context = '',\r\n key,\r\n value,\r\n group;\r\n for (let token of tokenizer(data)) {\r\n switch (token[0]) {\r\n case T_FAIL:\r\n throw 'Failed!';\r\n case T_START:\r\n context += key;\r\n key = '';\r\n break;\r\n case T_END:\r\n {\r\n let len = context.length;\r\n context = context.slice(0, len - 1);\r\n key = '';\r\n value = '';\r\n }\r\n break;\r\n case T_KEY:\r\n key = token[1];\r\n break;\r\n case T_VALUE:\r\n {\r\n value = token[1];\r\n let ck = context + key;\r\n group = key === 'L' && group !== value ? value : group;\r\n yield { ck, context, key, value, group };\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n\r\nexport function* tokenizer(chars) {\r\n let state = 'KEYSTART';\r\n let accumulator = '';\r\n for (let ch of chars) {\r\n let [nextstate, action] = transitionTable[state][charClass(ch)];\r\n switch (action) {\r\n case 'A':\r\n accumulator += ch;\r\n break;\r\n case 'K':\r\n yield [T_KEY, ch];\r\n break;\r\n case 'V':\r\n yield [T_VALUE, accumulator];\r\n accumulator = '';\r\n break;\r\n case 'S':\r\n yield [T_START];\r\n break;\r\n case 'E':\r\n yield [T_END];\r\n break;\r\n case 'Q':\r\n yield [T_VALUE, accumulator];\r\n accumulator = '';\r\n yield [T_END];\r\n break;\r\n }\r\n state = nextstate;\r\n if (state === 'FAIL') return [T_FAIL];\r\n }\r\n if (accumulator !== '') {\r\n yield [T_VALUE, accumulator];\r\n yield [T_END];\r\n }\r\n let [nextstate] = transitionTable[state][CH_ENDSTREAM];\r\n return nextstate === 'FAIL' ? [T_FAIL] : [T_SUCCESS];\r\n}\r\n\r\nexport function processResults(data) {\r\n let nameAndType = {\r\n N: { text: 'Name', datatype: 'string' },\r\n D: { text: 'Description', datatype: 'string' },\r\n T: { text: 'Tool', datatype: 'string' },\r\n V: { text: 'Version', datatype: 'string' },\r\n C: { text: 'CreatedDate', datatype: 'datetime' },\r\n U: { text: 'UpdatedDate', datatype: 'datetime' },\r\n // designData level\r\n d: { text: 'Design', datatype: 'object' },\r\n dv: { text: 'visitedTabs', datatype: 'visitedTabs' },\r\n df: { text: 'filterType', datatype: 'filterType' },\r\n // specifications\r\n ds: { text: 'specifications', datatype: 'object' },\r\n dsg: { text: 'gain', datatype: 'number' },\r\n dsu: { text: 'gainUnit', datatype: 'gainUnit' },\r\n dsa: { text: 'passbandAttenuation', datatype: 'number' },\r\n dsf: { text: 'passbandFrequency', datatype: 'number' },\r\n dsA: { text: 'stopbandAttenuation', datatype: 'number' },\r\n dsF: { text: 'stopbandFrequency', datatype: 'number' },\r\n dsc: { text: 'centerFrequency', datatype: 'number' },\r\n dsr: { text: 'filterResponseValue', datatype: 'number' },\r\n dsR: { text: 'filterResponseSlider', datatype: 'number' },\r\n // components\r\n dc: { text: 'components', datatype: 'object' },\r\n dcp: { text: 'vsPlus', datatype: 'number' },\r\n dcm: { text: 'vsMinus', datatype: 'number' },\r\n dco: { text: 'optimization', datatype: 'optimizationEnumeration' },\r\n dcO: { text: 'optimizationPreference', datatype: 'optimizationPreferenceEnumeration' },\r\n dcc: { text: 'compensateForGbw', datatype: 'boolean' },\r\n dcr: { text: 'recommendedAmp', datatype: 'string' },\r\n dcS: { text: 'sortOrder', datatype: 'sortOrder' },\r\n dca: { text: 'preferredAlgorithms', datatype: 'object' },\r\n dcas: { text: 'sallenKey|lowPass', datatype: 'preferredAlgorithmsEnumeration' },\r\n // stages\r\n dcs: { text: 'stage', datatype: 'object' },\r\n dcsL: { text: 'stageLetter', datatype: 'string' },\r\n dcss: { text: 'componentSizing', datatype: 'number' },\r\n dcsg: { text: 'gain', datatype: 'number' },\r\n dcsG: { text: 'gainEnabled', datatype: 'boolean' },\r\n dcsi: { text: 'implementation', datatype: 'implementationEnumeration' },\r\n dcso: { text: 'opAmps', datatype: 'string' },\r\n // tolerances\r\n dt: { text: 'tolerances', datatype: 'object' },\r\n dtr: { text: 'resistorTolerance', datatype: 'tolerances' },\r\n dtc: { text: 'capacitorTolerance', datatype: 'tolerances' },\r\n dtl: { text: 'inductorTolerance', datatype: 'tolerances' },\r\n dtg: { text: 'opAmpGbwTolerance', datatype: 'tolerances' },\r\n dtR: { text: 'resistorPreferredSeries', datatype: 'string' },\r\n dtC: { text: 'capacitorPreferredSeries', datatype: 'string' },\r\n dtL: { text: 'inductorPreferredSeries', datatype: 'string' },\r\n // next-steps\r\n dn: { text: 'nextSteps', datatype: 'object' },\r\n };\r\n let result = [],\r\n sortOrder = [],\r\n sortIndex = -1,\r\n sortContext = '',\r\n sortName = '';\r\n data.forEach((d, i) => {\r\n let n = nameAndType[d.context + d.key],\r\n name = n.text,\r\n value = d.value,\r\n type = n.datatype;\r\n if (name === 'sortOrder') {\r\n if (sortOrder.length === 0) {\r\n sortContext = d.context;\r\n sortName = name;\r\n sortIndex = i;\r\n }\r\n if (sortContext === d.context && sortName === name) sortOrder.push(parseInt(value));\r\n } else {\r\n result.push({ context: d.context, name: name, value: processValue(value, type), group: d.group });\r\n }\r\n });\r\n result.splice(sortIndex, 0, { context: sortContext, name: sortName, value: sortOrder, group: '' });\r\n return result;\r\n}\r\n\r\nexport function generateJsonString(data) {\r\n let result = [],\r\n designData = [],\r\n specifications = [],\r\n components = [],\r\n tolerances = [],\r\n nextSteps = [],\r\n stages = [];\r\n let group = [];\r\n let algopreferences = {};\r\n data.forEach((d) => {\r\n switch (d.context) {\r\n case 'd':\r\n designData[d.name] = d.value;\r\n break;\r\n case 'ds':\r\n specifications[d.name] = d.value;\r\n break;\r\n case 'dc':\r\n components[d.name] = d.value;\r\n break;\r\n case 'dt':\r\n tolerances[d.name] = d.value;\r\n break;\r\n case 'dn':\r\n nextSteps[d.name] = d.value;\r\n break;\r\n case 'dcs':\r\n if (!group.includes(d.group)) {\r\n group.push(d.group);\r\n }\r\n stages[`${d.group}.${d.name}`] = d.value;\r\n break;\r\n case 'dca':\r\n algopreferences[d.name] = d.value;\r\n break;\r\n case '':\r\n default:\r\n result[d.name] = d.value;\r\n break;\r\n }\r\n });\r\n designData['specifications'] = Object.assign({}, specifications);\r\n components['stages'] = processStages(stages, group);\r\n if (Object.keys(algopreferences).length !== 0 && algopreferences.constructor === Object) {\r\n // Never set anything here if it is empty\r\n components['preferredAlgorithms'] = algopreferences;\r\n }\r\n designData['components'] = Object.assign({}, components);\r\n designData['tolerances'] = Object.assign({}, tolerances);\r\n designData['nextSteps'] = Object.assign({}, nextSteps);\r\n result['Design'] = Object.assign({}, designData);\r\n return JSON.stringify(Object.assign({}, result), null, '\\t');\r\n}\r\n\r\n// INTERNAL FUNCTIONS\r\nconst VisitedTabsEnumeration = {\r\n f: 'filter-type',\r\n s: 'specifications',\r\n c: 'components',\r\n t: 'tolerances',\r\n n: 'next-steps',\r\n};\r\nconst FilterTypeEnumeration = { l: 'lowPass', h: 'highPass', b: 'bandPass' };\r\nconst GainUnitEnumeration = { v: 'V/V', d: 'dB' };\r\nconst OptimizationEnumeration = { p: 'Power', n: 'Noise', v: 'VoltageRange', r: 'RecommendedSpecificComponents' };\r\nconst OptimizationPreferenceEnumeration = { n: 'nonSpecific', s: 'specific' };\r\nconst ImplementationEnuemartion = {\r\n s: 'sallenKey',\r\n m: 'multipleFeedback',\r\n i: 'inductor',\r\n d: 'deliyannisFriend',\r\n f: 'firstOrder',\r\n};\r\nconst ToleranceEnumeration = { O: '1%', F: '5%', T: '10%', W: '20%', i: 'ideal', o: '0.1%', f: '0.5%' };\r\nconst PreferredAlgorithmsEnumeration = { L1: 'lowpass', L2: 'lowpassV2' };\r\n\r\nfunction processValue(value, type) {\r\n switch (type) {\r\n case 'string':\r\n return value;\r\n case 'boolean':\r\n return processBoolean(value);\r\n case 'number':\r\n return parseFloat(value);\r\n case 'datetime':\r\n return processDate(value);\r\n case 'visitedTabs':\r\n return processFieldSet(value, VisitedTabsEnumeration); // return processVisitedTabs(value);\r\n case 'sortOrder':\r\n return processSortOrder(value);\r\n case 'filterType':\r\n return processEnumeration(value, FilterTypeEnumeration); // processFilterType(value);\r\n case 'gainUnit':\r\n return processEnumeration(value, GainUnitEnumeration); // processGainUnit(value);\r\n case 'optimizationEnumeration':\r\n return processEnumeration(value, OptimizationEnumeration); // processOptimizationEnum(value);\r\n case 'optimizationPreferenceEnumeration':\r\n return processEnumeration(value, OptimizationPreferenceEnumeration); // processOptimizationPreferenceEnum(value);\r\n case 'implementationEnumeration':\r\n return processEnumeration(value, ImplementationEnuemartion); // processImplementationEnum(value);\r\n case 'preferredAlgorithmsEnumeration':\r\n return processEnumeration(value, PreferredAlgorithmsEnumeration);\r\n case 'tolerances':\r\n return processEnumeration(value, ToleranceEnumeration); // processTolerances(value);\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\nfunction processBoolean(value) {\r\n return parseInt(value) === 1 ? true : false;\r\n}\r\n\r\nfunction processDate(dtString) {\r\n let year = dtString.slice(0, 4),\r\n month = dtString.slice(4, 6),\r\n day = dtString.slice(6, 8),\r\n hour = dtString.slice(8, 10),\r\n minutes = dtString.slice(10, 12),\r\n seconds = dtString.slice(12),\r\n hour12 = parseInt(hour) >= 12 ? '0'.concat(parseInt(hour) - 12).slice(-2) : hour,\r\n period = parseInt(hour) >= 12 ? 'PM' : 'AM';\r\n return `${year}-${month}-${day} ${hour12}:${minutes}:${seconds} ${period}`;\r\n}\r\n\r\nfunction processSortOrder(value) {\r\n let result = [];\r\n [...value].forEach((d) => {\r\n result.push(parseInt(d));\r\n });\r\n return result;\r\n}\r\n\r\nfunction processStages(stages, group) {\r\n let result = [];\r\n group.forEach((g) => {\r\n let stage = [];\r\n for (let key in stages) {\r\n if (key.indexOf(`${g}.`) > -1) {\r\n stage[key.slice(2)] = stages[key];\r\n }\r\n }\r\n result.push(Object.assign({}, stage));\r\n });\r\n return result;\r\n}\r\n\r\nfunction processEnumeration(value, table) {\r\n return value in table ? table[value] : null;\r\n}\r\n\r\nfunction processFieldSet(value, table) {\r\n let anyMisfires = false;\r\n let result = [...value].map((item) => {\r\n if (!(item in table)) anyMisfires = true;\r\n return item in table ? table[item] : null;\r\n });\r\n return anyMisfires ? null : result;\r\n}\r\n","import Service from '@ember/service';\r\nimport { inject as service } from '@ember/service';\r\n\r\n///////////////////////////////////////////////////////////////////////////////\r\n// share - service for sharing designs //\r\n///////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class SharingService extends Service {\r\n @service('aditools-site') siteconfig;\r\n @service logger;\r\n\r\n shareDesign(name, sender, recipients, design) {\r\n let now = new Date();\r\n let ticks = now.getTime();\r\n let fileName = name.length > 0 ? name.replace(/[/\\\\?*:|\"<>]/g, '') : 'SharedDesign_FW' + ticks.toString();\r\n let saveDateStamp =\r\n now.getFullYear() +\r\n '-' +\r\n ('0' + (now.getMonth() + 1)).slice(-2) +\r\n '-' +\r\n ('0' + now.getDate()).slice(-2) +\r\n ' ' +\r\n ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\r\n ':' +\r\n ('0' + now.getMinutes()).slice(-2) +\r\n ':' +\r\n ('0' + now.getSeconds()).slice(-2) +\r\n ' ' +\r\n (now.getHours() >= 12 ? 'PM' : 'AM');\r\n let shareData = {\r\n ToolId: 1,\r\n Name: name,\r\n Description: name,\r\n FileName: fileName,\r\n DesignData: {\r\n Name: name,\r\n Description: name,\r\n Tool: 'FW',\r\n Version: '1.2',\r\n Design: design,\r\n CreatedDate: saveDateStamp,\r\n UpdatedDate: saveDateStamp,\r\n },\r\n EmailRecipients: recipients,\r\n SenderName: sender,\r\n };\r\n return fetch(`${this.siteconfig.ApiUrl}/share/${this.siteconfig.AdiLocale}`, {\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n method: 'POST',\r\n body: '\"' + encodeURIComponent(JSON.stringify(shareData)) + '\"',\r\n })\r\n .then((response) => {\r\n return response.json();\r\n })\r\n .catch((error) => {\r\n this.logger.error(`Share design failed: ${error}`);\r\n return { status: -1 };\r\n });\r\n }\r\n}\r\n","import Service from '@ember/service';\r\nimport type Html2ToCanvas from 'html2canvas';\r\nimport type LoggingService from './logger';\r\nimport { inject as service } from '@ember/service';\r\n\r\nconst generateStyleDefs = function (svgDomElement: Element, logger: LoggingService): void {\r\n // method for adding styles inline for the svg to png conversion, in progress\r\n let styleDefs = '';\r\n const sheets = document.styleSheets;\r\n for (const sheet of sheets) {\r\n try {\r\n const csshref = sheet.href;\r\n if (\r\n (csshref && csshref.includes(window.location.origin)) ||\r\n // The following line is a dreadfully fragile hack to use the ea-graph CSS and exclude all the anonymous CSS modules introduced by analytics\r\n (!csshref && sheet.cssRules.length > 1 && (sheet.cssRules[1] as CSSStyleRule).selectorText === '.titletext')\r\n ) {\r\n const rules = sheet.cssRules;\r\n for (let j = 0; j < rules.length; j++) {\r\n const rule = rules[j] as CSSStyleRule;\r\n if (rule.style) {\r\n const selectorText = rule.selectorText;\r\n try {\r\n const elems = selectorText.indexOf('::') === -1 ? svgDomElement.querySelectorAll(selectorText) : [];\r\n if (elems.length || selectorText === ':root') {\r\n styleDefs += selectorText + ' { ' + rule.style.cssText + ' }\\n';\r\n }\r\n } catch (error: unknown) {\r\n // We should never get here but this will keep failures within one rule from stopping processing\r\n const namedError = error as { message: string };\r\n logger.log(`Error on rule #${j} in ${csshref} with \"${selectorText}\":` + namedError.message.toString());\r\n }\r\n }\r\n }\r\n }\r\n } catch (error: unknown) {\r\n const namedError = error as { message: string };\r\n logger.log('Error:' + namedError.message.toString());\r\n }\r\n }\r\n const s = document.createElement('style');\r\n s.setAttribute('type', 'text/css');\r\n s.innerHTML = styleDefs;\r\n const defs = document.createElement('defs');\r\n defs.appendChild(s);\r\n svgDomElement.insertBefore(s, svgDomElement.firstChild);\r\n};\r\n\r\nexport default class SnapShotService extends Service {\r\n @service declare logger: LoggingService;\r\n\r\n convertSVGToImage(componentId: string): Promise {\r\n let imageData;\r\n const canvas = document.createElement('canvas');\r\n return new Promise((resolve, reject) => {\r\n const svgElem: Element | null = document.querySelector(componentId + ' svg');\r\n if (svgElem) {\r\n generateStyleDefs(svgElem, this.logger);\r\n canvas.width = (svgElem as SVGSVGElement).width.baseVal.value;\r\n canvas.height = (svgElem as SVGSVGElement).height.baseVal.value;\r\n }\r\n const svgString = new XMLSerializer().serializeToString(svgElem as Node);\r\n const ctx = canvas.getContext('2d');\r\n const DOMURL = window.URL || window.webkitURL;\r\n const img = new Image();\r\n const svg = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });\r\n const url = DOMURL.createObjectURL(svg);\r\n img.onload = () => {\r\n if (ctx) ctx.drawImage(img, 0, 0);\r\n imageData = canvas.toDataURL('image/png');\r\n DOMURL.revokeObjectURL(url);\r\n if (imageData !== null) {\r\n resolve({ data: imageData, width: img.width, height: img.height, format: 'PNG' });\r\n } else {\r\n reject({ data: null, width: 0, height: 0, format: 'PNG' });\r\n }\r\n };\r\n img.src = url;\r\n });\r\n }\r\n\r\n convertHTMLToImage(componentId: string, HtmlToCanvas: typeof Html2ToCanvas): Promise {\r\n let imageData;\r\n return new Promise((resolve, reject) => {\r\n const svgItemList = document.querySelectorAll(componentId + ' svg');\r\n for (const svgItem of svgItemList) {\r\n // If there are SVG Items into your HTML, try to get the styles into the SVG\r\n generateStyleDefs(svgItem, this.logger);\r\n }\r\n // Convert HTML into PNG Image\r\n const htmlItem: HTMLElement | null = document.querySelector(componentId);\r\n if (htmlItem) {\r\n HtmlToCanvas(htmlItem, { scrollX: 0, scrollY: 0 }).then((canvas: HTMLCanvasElement) => {\r\n imageData = canvas.toDataURL('image/png');\r\n if (imageData !== null) {\r\n resolve({ data: imageData, width: canvas.width, height: canvas.height, format: 'PNG' });\r\n } else {\r\n reject({ data: null, width: 0, height: 0, format: 'PNG' });\r\n }\r\n });\r\n } else {\r\n reject({ data: null, width: 0, height: 0, format: 'PNG' });\r\n }\r\n });\r\n }\r\n}\r\n\r\ndeclare module '@ember/service' {\r\n interface Registry {\r\n snapshot: SnapShotService;\r\n }\r\n}\r\n","import FilterConstants from '../filter-constants';\r\nimport * as Format from './format';\r\nimport { camelize } from '@ember/string';\r\nimport ENV from '../config/environment';\r\nimport * as Context from './context';\r\n\r\nlet exitTabEvents = {\r\n 'filter-type': 'filter type',\r\n specifications: 'specPageExit',\r\n components: 'compSelExit',\r\n tolerances: 'compTolExit',\r\n};\r\n\r\nlet getElapsedInformation = function (currTime, startTime) {\r\n let endDateTime = new Date(currTime),\r\n startDateTime = new Date(startTime),\r\n deltaLoadTime = currTime - startTime;\r\n\r\n return 'startDate: ' + startDateTime + ', endDate: ' + endDateTime + ', loadTime(ms): ' + deltaLoadTime;\r\n};\r\n\r\nlet getOpAmpsSorted = function (stages, order) {\r\n let result = [];\r\n for (let i = 0; i < order.length; i++) {\r\n for (let j = 0; j < stages.length; j++) {\r\n if (order[i] === j) {\r\n result.push(stages[j].opAmp);\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport function sendTabExitAnalytics(modelData, inputType, analytics /*, logger*/) {\r\n let eventName = null;\r\n let payloadText = null;\r\n if (inputType) {\r\n eventName = exitTabEvents[inputType];\r\n let inputData = modelData.inputs[camelize(inputType)];\r\n switch (camelize(inputType)) {\r\n case FilterConstants.tabs.filterType: {\r\n payloadText = inputData;\r\n break;\r\n }\r\n case FilterConstants.tabs.specifications: {\r\n let filterType = modelData.inputs[FilterConstants.tabs.filterType];\r\n let resultData = modelData.results.get(camelize(inputType));\r\n let passbandFreq = Format.formatFieldValue(\r\n inputData.passbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n );\r\n let nthOrder = resultData.nthOrder;\r\n let ordinal = nthOrder === 1 ? 'st' : nthOrder === 2 ? 'nd' : nthOrder === 3 ? 'rd' : 'th';\r\n let responseType = inputData.selectedResponseType;\r\n let responseValue = inputData.filterResponseValue > 0 ? inputData.filterResponseValue.toString() : '';\r\n let numStages = resultData.numberOfStages;\r\n payloadText =\r\n filterType +\r\n ' ' +\r\n passbandFreq +\r\n ' ' +\r\n nthOrder +\r\n ordinal +\r\n ' order ' +\r\n responseType +\r\n ' ' +\r\n responseValue +\r\n (responseValue ? ' (' : '(') +\r\n numStages +\r\n (numStages > 1 ? ' stages)' : ' stage)');\r\n break;\r\n }\r\n case FilterConstants.tabs.components: {\r\n payloadText =\r\n '+Vs=' +\r\n inputData.vsPlus +\r\n ' -Vs=' +\r\n inputData.vsMinus +\r\n ' ' +\r\n inputData.optimizationPreference +\r\n inputData.optimization;\r\n break;\r\n }\r\n case FilterConstants.tabs.tolerances: {\r\n payloadText =\r\n inputData.capacitorTolerance +\r\n ' ' +\r\n inputData.resistorTolerance +\r\n ' ' +\r\n inputData.inductorTolerance +\r\n ' ' +\r\n inputData.opAmpGbwTolerance +\r\n ' ' +\r\n inputData.capacitorPreferredSeries +\r\n ' ' +\r\n inputData.resistorPreferredSeries +\r\n ' ' +\r\n inputData.inductorPreferredSeries;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (typeof eventName !== 'undefined' && eventName !== null) {\r\n analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n //logger.log(\"Analytics. \\nEvent Name: '\" + eventName + \"'\\nPayload: '\" + payloadText + \"'\");\r\n }\r\n}\r\n\r\nexport function sendTabNavigationAnalytics(oldTab, newTab, trigger, analytics /*, logger*/) {\r\n if (oldTab && trigger) {\r\n let eventName = 'navigation';\r\n let payloadText = (trigger === 'TAB' ? 'Button Bar: ' : 'Button Individual: ') + oldTab + ' to ' + newTab;\r\n analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n //logger.log(\"Analytics. \\nEvent Name: '\" + eventName + \"'\\nPayload: '\" + payloadText + \"'\");\r\n }\r\n}\r\n\r\nexport function sendPartStageDataNextStepsAnalytics(model, analytics, intl) {\r\n let eventName = 'FinalResultsEnter';\r\n let stages = model.inputs.components.individualStageInputs;\r\n let order = model.inputs.components.sortOrder;\r\n let opAmpsList = getOpAmpsSorted(stages, order);\r\n let refStage = 'ref=' + model.results.components.needReferenceStage.toString();\r\n let payloadText =\r\n 'Amps=' +\r\n opAmpsList.join(', ') +\r\n '; ' +\r\n refStage +\r\n '; ' +\r\n Context.tolerancesSummary(model.results.tolerances, intl, 'en-us');\r\n analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function sendOpenCloseDialogAnalytics(control, status, model, analytics, intl) {\r\n let eventName = control + (status === 'O' ? ' first click' : status === 'S' ? ' second click' : ' cancel');\r\n let stages = model.inputs.components.individualStageInputs;\r\n let order = model.inputs.components.sortOrder;\r\n let opAmpsList = getOpAmpsSorted(stages, order);\r\n let refStage = 'ref=' + model.results.components.needReferenceStage.toString();\r\n let payloadText =\r\n 'Amps=' +\r\n opAmpsList.join(', ') +\r\n '; ' +\r\n refStage +\r\n '; ' +\r\n Context.tolerancesSummary(model.results.tolerances, intl, 'en-us');\r\n analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function sendLocaleChangeAnalytics(langFrom, langTo, analytics /*, logger*/) {\r\n let eventName = 'lang';\r\n let payloadText = langFrom + '_' + langTo;\r\n analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n //logger.log(\"Analytics. \\nEvent Name: '\" + eventName + \"'\\nPayload: '\" + payloadText + \"'\");\r\n}\r\n\r\nexport function saveDesignAnalytics(designName, designDescription, saveDate, analytics) {\r\n let eventName = 'save';\r\n let payload = {\r\n designName: designName,\r\n designDescription: designDescription,\r\n toolName: ENV.toolname,\r\n saveDate: saveDate,\r\n };\r\n analytics.setWebEvent(ENV.toolname, eventName, JSON.stringify(payload));\r\n}\r\n\r\nexport function loadDesignAnalytics(designData, analytics) {\r\n let eventName = 'load';\r\n let now = new Date();\r\n let loadDate =\r\n now.getFullYear() +\r\n '-' +\r\n ('0' + (now.getMonth() + 1)).slice(-2) +\r\n '-' +\r\n ('0' + now.getDate()).slice(-2) +\r\n ' ' +\r\n ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\r\n ':' +\r\n ('0' + now.getMinutes()).slice(-2) +\r\n ':' +\r\n ('0' + now.getSeconds()).slice(-2) +\r\n ' ' +\r\n (now.getHours() >= 12 ? 'PM' : 'AM');\r\n let payload = {\r\n designName: designData.Name,\r\n designDescription: designData.Description,\r\n toolName: ENV.toolname,\r\n loadDate: loadDate,\r\n };\r\n analytics.setWebEvent(ENV.toolname, eventName, JSON.stringify(payload));\r\n}\r\n\r\nexport function shareDesignAnalytics(description, sender, recipients, designData, analytics /*, logger*/) {\r\n let eventName = 'toolShare';\r\n let payload = {\r\n designDescription: description,\r\n senderName: sender,\r\n emailRecipients: recipients,\r\n projectData: designData,\r\n };\r\n analytics.setWebEvent(ENV.toolname, eventName, JSON.stringify(payload));\r\n //logger.log(\"Analytics. \\nEvent Name: '\" + eventName + \"'\\nPayload: '\" + JSON.stringify(payload) + \"'\");\r\n}\r\n\r\nexport function downloadDesignAnalytics(event, model, analytics, intl) {\r\n let eventName = event;\r\n let stages = model.inputs.components.individualStageInputs;\r\n let order = model.inputs.components.sortOrder;\r\n let opAmpsList = getOpAmpsSorted(stages, order);\r\n let refStage = 'ref=' + model.results.components.needReferenceStage.toString();\r\n let payloadText =\r\n 'Amps=' +\r\n opAmpsList.join(', ') +\r\n '; ' +\r\n refStage +\r\n '; ' +\r\n Context.tolerancesSummary(model.results.tolerances, intl, 'en-us');\r\n analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function loadTimeAnalytics(startDate, endDate, analytics) {\r\n let eventName = 'appLoad';\r\n let payloadText = getElapsedInformation(endDate, startDate);\r\n analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function loadDesignFailureAnalytics(errorDetails, analytics) {\r\n let eventName = 'Load Design Error';\r\n let payloadText = errorDetails + ' in design no longer supported';\r\n analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function toolbarLinkClickAnalytics(menuLink, activeTab, analytics) {\r\n let eventName = 'Toolbar Link';\r\n let payloadText = `${menuLink}; ${activeTab}`;\r\n analytics.setWebEvent(ENV.toolname, eventName, payloadText);\r\n}\r\n\r\nexport function loadCDPAnalytics(step, options, analytics) {\r\n let eventName = 'CDP Load ' + step;\r\n let payload = {};\r\n if (options.sId) {\r\n payload['sId'] = options.sId.substr(0, 8);\r\n }\r\n if (options.reqId) {\r\n payload['reqId'] = options.reqId.substr(0, 8);\r\n }\r\n if (options.name) {\r\n payload['name'] = options.name;\r\n }\r\n if (options.url) {\r\n payload['url'] = options.url;\r\n }\r\n if (options.status) {\r\n payload['status'] = options.status.code;\r\n payload['statusText'] = options.status.message;\r\n }\r\n if (options.timeStart) {\r\n if (options.timeEnd) {\r\n payload['time'] = options.timeEnd - options.timeStart;\r\n payload['stamp'] = options.timeEnd.toISOString();\r\n } else {\r\n payload['stamp'] = options.timeStart.toISOString();\r\n }\r\n }\r\n analytics.setWebEvent(ENV.toolname, eventName, JSON.stringify(payload));\r\n}\r\n","import { copy } from 'ember-copy';\r\nimport FilterConstants from '../filter-constants';\r\n\r\nexport function isNearInfinity(value) {\r\n let result = value > FilterConstants.Limits.INFINITY - 1e52 && value < FilterConstants.Limits.INFINITY + 1e52;\r\n return result;\r\n}\r\n\r\nexport function isNullOrUndefined(value) {\r\n return value === null || value === undefined;\r\n}\r\n\r\nexport function isEmptyObject(value) {\r\n return Object.keys(value).length === 0;\r\n}\r\n\r\n/**\r\n@function clone\r\n@param object\r\n@returns clone of object\r\n@description This function takes parameter as an object and returns its clone\r\n*/\r\nexport function clone(obj) {\r\n return copy(obj, true);\r\n}\r\n\r\nexport function computeCompensateLoop(compensateForGbw) {\r\n var result = 1;\r\n if (compensateForGbw) {\r\n result = 3;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n@function toOrdinal\r\n@param number\r\n@returns ordinal number\r\n@description This function takes parameter as a number and returns an ordinal number\r\n*/\r\nexport function toOrdinal(order) {\r\n var orderText = '',\r\n orderNumber = parseInt(order);\r\n\r\n switch (orderNumber) {\r\n case 1:\r\n orderText = 'first_order';\r\n break;\r\n case 2:\r\n orderText = 'second_order';\r\n break;\r\n case 3:\r\n orderText = 'third_order';\r\n break;\r\n case 4:\r\n orderText = 'fourth_order';\r\n break;\r\n case 5:\r\n orderText = 'fifth_order';\r\n break;\r\n case 6:\r\n orderText = 'sixth_order';\r\n break;\r\n case 7:\r\n orderText = 'seventh_order';\r\n break;\r\n case 8:\r\n orderText = 'eighth_order';\r\n break;\r\n case 9:\r\n orderText = 'nineth_order';\r\n break;\r\n case 10:\r\n orderText = 'tenth_order';\r\n break;\r\n }\r\n\r\n return orderText;\r\n}\r\n\r\nexport function displayStageType(type) {\r\n var typeName = type;\r\n switch (type) {\r\n case FilterConstants.filterType.lowPass:\r\n typeName = 'type_name_low_pass';\r\n break;\r\n case FilterConstants.filterType.highPass:\r\n typeName = 'type_name_high_pass';\r\n break;\r\n case FilterConstants.filterType.bandPass:\r\n typeName = 'type_name_band_pass';\r\n break;\r\n case FilterConstants.filterType.bandStop:\r\n typeName = 'type_name_band_stop';\r\n break;\r\n }\r\n\r\n return typeName;\r\n}\r\n\r\n/**\r\n@function parallel\r\n@param dynamtic args \r\n@description Calculates the parallel value.\r\n@returns {numeric}\r\n*/\r\nexport function parallel() {\r\n var summed = 0;\r\n\r\n for (var i = 0; i < arguments.length; i++) {\r\n summed = 1 / arguments[i] + summed;\r\n }\r\n\r\n var rtnValue = 1 / summed;\r\n\r\n return rtnValue;\r\n}\r\n","import FilterConstants from '../filter-constants';\r\nimport * as Format from './format';\r\n\r\nlet filterType = function (filterType, intl, overrideLocale) {\r\n return intl\r\n .t('panel.display-context.filter-type.' + filterType, { locale: overrideLocale ? overrideLocale : intl.locale })\r\n .toString();\r\n};\r\n\r\nlet specificationsChoices = function (input, intl, overrideLocale) {\r\n return intl.t('annotations.filterResponse.orders.order' + input.nthOrder, {\r\n responseType: intl.t('annotations.filterResponse.responseType.' + input.responseType, {\r\n locale: overrideLocale ? overrideLocale : intl.locale,\r\n }),\r\n locale: overrideLocale ? overrideLocale : intl.locale,\r\n });\r\n};\r\n\r\nlet signalFrequency = function (value, intl, signal, overrideLocale) {\r\n return intl.t('panel.display-context.frequency', {\r\n value: Format.formatFieldValue(value, FilterConstants.fieldTypes.Engineering, '3s'),\r\n signal: signal,\r\n locale: overrideLocale ? overrideLocale : intl.locale,\r\n });\r\n};\r\n\r\nlet filterResponse = function (input) {\r\n let isChebyshev = input.selectedResponseType === FilterConstants.responseType.chebyshev;\r\n return input.filterResponseValue\r\n ? ' ' + input.filterResponseValue + (isChebyshev ? FilterConstants.gainUnits.db : '')\r\n : '';\r\n};\r\n\r\nlet componentChoices = function (input, intl, overrideLocale) {\r\n const optimizationKeys = {\r\n Noise: 'panel.display-context.optimizations.noise',\r\n VoltageRange: 'panel.display-context.optimizations.voltage-range',\r\n Power: 'panel.display-context.optimizations.power',\r\n };\r\n let optimizationKey = optimizationKeys[input.optimization];\r\n if (FilterConstants.optimizationPreferenceOptions.specific === input.optimizationPreference) {\r\n optimizationKey = 'panel.display-context.optimizations.specific-components';\r\n }\r\n let componentChoices = intl\r\n .t('panel.display-context.components', {\r\n optimization: intl.t(optimizationKey, { locale: overrideLocale ? overrideLocale : intl.locale }),\r\n vplus: input.vsPlus,\r\n vminus: input.vsMinus,\r\n locale: overrideLocale ? overrideLocale : intl.locale,\r\n })\r\n .toString();\r\n return componentChoices;\r\n};\r\n\r\nlet compensateForGBW = function (input, intl, overrideLocale) {\r\n return input.compensateForGbw\r\n ? intl\r\n .t('panel.display-context.compensate-gbw', { locale: overrideLocale ? overrideLocale : intl.locale })\r\n .toString()\r\n : '';\r\n};\r\n\r\nlet toleranceChoices = function (input, intl, hasInductors, overrideLocale) {\r\n let toleranceChoices = intl\r\n .t('panel.display-context.tolerances', {\r\n rtolerance: input.resistorTolerance,\r\n ctolerance: input.capacitorTolerance,\r\n locale: overrideLocale ? overrideLocale : intl.locale,\r\n })\r\n .toString();\r\n return (\r\n toleranceChoices +\r\n (hasInductors\r\n ? '; ' +\r\n intl\r\n .t('panel.display-context.tolerances-inductor', {\r\n ltolerance: input.inductorTolerance,\r\n locale: overrideLocale ? overrideLocale : intl.locale,\r\n })\r\n .toString()\r\n : '')\r\n );\r\n};\r\n\r\nexport function filterSummary(model, intl, overrideLocale) {\r\n let result = '';\r\n if (model.name) {\r\n result = filterType(model.name, intl, overrideLocale);\r\n }\r\n return result;\r\n}\r\n\r\nexport function specificationsSummary(model, intl, overrideLocale) {\r\n let passbandFrequencyLabel = intl\r\n .t('panel.display-context.passband-frequency', { locale: overrideLocale ? overrideLocale : intl.locale })\r\n .toString();\r\n let centerFrequency = '';\r\n if (model.filter.name === FilterConstants.filterType.bandPass) {\r\n let centerFrequencyLabel = intl\r\n .t('panel.display-context.center-frequency', { locale: overrideLocale ? overrideLocale : intl.locale })\r\n .toString();\r\n centerFrequency =\r\n '; ' + signalFrequency(model.specificationsInput.centerFrequency, intl, centerFrequencyLabel, overrideLocale);\r\n }\r\n return (\r\n this.filterSummary(model.filter, intl, overrideLocale) +\r\n '; ' +\r\n specificationsChoices(model, intl, overrideLocale) +\r\n filterResponse(model.specificationsInput, overrideLocale) +\r\n '; ' +\r\n signalFrequency(model.specificationsInput.passbandFrequency, intl, passbandFrequencyLabel, overrideLocale) +\r\n centerFrequency\r\n );\r\n}\r\n\r\nexport function componentsSummary(model, intl, overrideLocale) {\r\n return (\r\n this.specificationsSummary(model.specifications, intl, overrideLocale) +\r\n '; ' +\r\n componentChoices(model.componentsInput, intl, overrideLocale) +\r\n compensateForGBW(model.componentsInput, intl, overrideLocale)\r\n );\r\n}\r\n\r\nexport function tolerancesSummary(model, intl, overrideLocale) {\r\n const hasInductors = model.components.actualStages.some((item) => {\r\n return item.selectedImplementation === FilterConstants.implementationType.inductor;\r\n });\r\n const componentsSummary = this.componentsSummary(model.components, intl, overrideLocale);\r\n const toleranceChoiceSummary = model.toleranceInput\r\n ? toleranceChoices(model.toleranceInput, intl, hasInductors, overrideLocale)\r\n : '';\r\n return componentsSummary + '; ' + toleranceChoiceSummary;\r\n}\r\n","import { getURL } from '../utils/resource';\r\nimport ENV from '../config/environment';\r\nimport FilterConstants from '../filter-constants';\r\nimport * as Format from '../utils/format';\r\nimport RSVP from 'rsvp';\r\n\r\nlet createCsvMultidimensionalData = function (headingsArray, dataArray, defaultValue) {\r\n let data = [];\r\n\r\n // Add the headings array as the first row.\r\n data.push(headingsArray);\r\n\r\n // Loop through each row in the each array (to the max length count).\r\n for (let i = 0; i < dataArray.length; i++) {\r\n let row = [];\r\n // Get the row data from the specified position in each array.\r\n let dataItem = dataArray[i];\r\n for (let j = 0; j < dataItem.length; j++) {\r\n // Add the value to the row if it's there, otherwise add an empty string or zero (defaultValue).\r\n row.push(dataItem[j] ? dataItem[j].toString() : defaultValue.toString());\r\n }\r\n // Add the row to the data.\r\n data.push(row);\r\n }\r\n return data;\r\n};\r\n\r\n///////////////////////////////////////////////////////////////////////////////\r\n// design-files - functionality to collect design data for download //\r\n///////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class DesignFilesUtility {\r\n persistence = null;\r\n cdp = null;\r\n logger = null;\r\n intl = null;\r\n fastboot = null;\r\n assets = null;\r\n pdfFonts = [];\r\n\r\n constructor(cdp, persistence, logger, intl, fastboot, assets) {\r\n this.cdp = cdp;\r\n this.persistence = persistence;\r\n this.logger = logger;\r\n this.intl = intl;\r\n this.fastboot = fastboot;\r\n this.assets = assets;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Download Main Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n buildSavedDesign(inputs, tabs, name, desc, componentsAdvisor) {\r\n let filesToUpload = [];\r\n let saveData = this.persistence.getSaveData(tabs, inputs, componentsAdvisor).design;\r\n let now = new Date();\r\n let saveDateStamp =\r\n now.getFullYear() +\r\n '-' +\r\n ('0' + (now.getMonth() + 1)).slice(-2) +\r\n '-' +\r\n ('0' + now.getDate()).slice(-2) +\r\n ' ' +\r\n ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\r\n ':' +\r\n ('0' + now.getMinutes()).slice(-2) +\r\n ':' +\r\n ('0' + now.getSeconds()).slice(-2) +\r\n ' ' +\r\n (now.getHours() >= 12 ? 'PM' : 'AM');\r\n let version = '1.2';\r\n let toolName = 'FW';\r\n let designName = name && name.trim().length > 0 ? name : 'Filter Wizard Design';\r\n let designDesc = desc && desc.trim().length > 0 ? desc : 'Filter Wizard Design';\r\n let designData = {\r\n Name: designName,\r\n Description: designDesc,\r\n Tool: toolName,\r\n Version: version,\r\n Design: saveData,\r\n CreatedDate: saveDateStamp,\r\n UpdatedDate: saveDateStamp,\r\n };\r\n filesToUpload.push({ name: 'design.json', value: designData, location: '', type: 'DESIGNJSON' });\r\n return filesToUpload;\r\n }\r\n buildPDFData(model, images, name, desc) {\r\n let filesToUpload = [];\r\n let now = new Date();\r\n let saveDateStamp =\r\n ('0' + (now.getMonth() + 1)).slice(-2) + '/' + ('0' + now.getDate()).slice(-2) + '/' + now.getFullYear();\r\n let designName = name && name.trim().length > 0 ? name : 'Filter Wizard Design';\r\n let designDesc = desc && desc.trim().length > 0 ? desc : 'Filter Wizard Design';\r\n let dbUnit = this.intl.t('units.db').toString();\r\n let hzUnit = this.intl.t('units.hz').toString();\r\n const optimizationKeys = {\r\n Noise: 'panel.display-context.optimizations.noise',\r\n VoltageRange: 'panel.display-context.optimizations.voltage-range',\r\n Power: 'panel.display-context.optimizations.power',\r\n };\r\n let optimizationKey = optimizationKeys[model.inputs.components.optimization];\r\n if (FilterConstants.optimizationPreferenceOptions.specific === model.inputs.components.optimizationPreference) {\r\n optimizationKey = 'panel.display-context.optimizations.specific-components';\r\n }\r\n let componentChoices = this.intl\r\n .t('panel.display-context.components', {\r\n optimization: this.intl.t(optimizationKey).toString(),\r\n vplus: Format.formatFieldValue(model.inputs.components.vsPlus, FilterConstants.fieldTypes.NumericDecimal, '3s'),\r\n vminus: Format.formatFieldValue(\r\n model.inputs.components.vsMinus,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n })\r\n .toString();\r\n let pdfData = {\r\n dictionary: [\r\n { name: 'designDescription', value: this._generatePDFTitlePageDescription(designName, '', saveDateStamp) },\r\n { name: 'ieImageMissing', value: this.intl.t('download.pdf-content.pdf-data-ie-image-missing').toString() },\r\n ],\r\n applicationDisplayName: this.intl.t('download.pdf-content.pdf-tool-name').toString(),\r\n userName: ' ',\r\n heading: this.intl.t('download.pdf-content.pdf-heading').toString(),\r\n subheading: this.intl\r\n .t('download.pdf-content.pdf-subheading', {\r\n filterType: this.intl.t('panel.display-context.filter-type.' + model.inputs.filterType).toString(),\r\n nthOrder: this.intl\r\n .t('download.pdf-content.pdf-orders.order' + model.results.specifications.nthOrder)\r\n .toString(),\r\n filterResponse: this.intl\r\n .t('annotations.filterResponse.responseType.' + model.results.specifications.responseType)\r\n .toString(),\r\n })\r\n .toString(),\r\n fields: [\r\n { name: this.intl.t('wizard.specifications').toString(), value: componentChoices },\r\n {\r\n name: this.intl.t('settings.specifications.gain').toString(),\r\n value:\r\n Format.formatFieldValue(model.inputs.specifications.gain, FilterConstants.fieldTypes.NumericDecimal, '3s') +\r\n ' ' +\r\n model.inputs.specifications.gainUnit,\r\n },\r\n {\r\n name: this.intl.t('settings.specifications.passband').toString(),\r\n value:\r\n Format.formatFieldValue(\r\n model.inputs.specifications.passbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ) +\r\n dbUnit +\r\n ' at ' +\r\n Format.formatFieldValue(\r\n model.inputs.specifications.passbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ) +\r\n hzUnit,\r\n },\r\n {\r\n name: this.intl.t('settings.specifications.stopband').toString(),\r\n value:\r\n Format.formatFieldValue(\r\n model.inputs.specifications.stopbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ) +\r\n dbUnit +\r\n ' at ' +\r\n Format.formatFieldValue(\r\n model.inputs.specifications.stopbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ) +\r\n hzUnit,\r\n },\r\n {\r\n name: this.intl.t('settings.tolerances.component-tolerances').toString(),\r\n value:\r\n this.intl.t('settings.tolerances.capacitor').toString() +\r\n ' = ' +\r\n model.inputs.tolerances.capacitorTolerance +\r\n '; ' +\r\n this.intl.t('settings.tolerances.resistor').toString() +\r\n ' = ' +\r\n model.inputs.tolerances.resistorTolerance +\r\n '; ' +\r\n this.intl.t('settings.tolerances.inductor').toString() +\r\n ' = ' +\r\n model.inputs.tolerances.inductorTolerance +\r\n '; ' +\r\n this.intl.t('settings.tolerances.op-amp-gbw').toString() +\r\n ' = ' +\r\n model.inputs.tolerances.opAmpGbwTolerance,\r\n },\r\n { name: 'BOM', value: 'refer to BOM.csv file' },\r\n ],\r\n images: [\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.magnitude-db').toString(),\r\n value: this._cleanImage(images[0].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.magnitude-vv').toString(),\r\n value: this._cleanImage(images[1].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.phase-degrees').toString(),\r\n value: this._cleanImage(images[2].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.phase-radians').toString(),\r\n value: this._cleanImage(images[3].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.group-delay').toString(),\r\n value: this._cleanImage(images[4].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.phase-delay').toString(),\r\n value: this._cleanImage(images[5].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.step-response').toString(),\r\n value: this._cleanImage(images[6].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.input-impedance-mag').toString(),\r\n value: this._cleanImage(images[7].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.input-impedance-phase').toString(),\r\n value: this._cleanImage(images[8].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.noise').toString(),\r\n value: this._cleanImage(images[9].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.stages').toString(),\r\n value: this._cleanImage(images[10].data),\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.circuit').toString(),\r\n value: this._cleanImage(images[11].data),\r\n },\r\n ],\r\n designInfo: { name: designName, description: designDesc, dataSheetUrl: null },\r\n date: saveDateStamp,\r\n };\r\n filesToUpload.push({ name: 'Design.pdf', value: pdfData, location: '', type: 'DESIGNPDF' });\r\n return filesToUpload;\r\n }\r\n buildPDFBinaryData(model, images, name, desc, designReport) {\r\n let filesToUpload = [];\r\n let now = new Date();\r\n let saveDateStamp =\r\n ('0' + (now.getMonth() + 1)).slice(-2) + '/' + ('0' + now.getDate()).slice(-2) + '/' + now.getFullYear();\r\n let designName = name && name.trim().length > 0 ? name : 'Filter Wizard Design';\r\n let designDesc = desc && desc.trim().length > 0 ? desc : '';\r\n let dbUnit = this.intl.t('units.db').toString();\r\n let hzUnit = this.intl.t('units.hz').toString();\r\n const optimizationKeys = {\r\n Noise: 'panel.display-context.optimizations.noise',\r\n VoltageRange: 'panel.display-context.optimizations.voltage-range',\r\n Power: 'panel.display-context.optimizations.power',\r\n };\r\n let optimizationKey = optimizationKeys[model.inputs.components.optimization];\r\n if (FilterConstants.optimizationPreferenceOptions.specific === model.inputs.components.optimizationPreference) {\r\n optimizationKey = 'panel.display-context.optimizations.specific-components';\r\n }\r\n let componentChoices = this.intl\r\n .t('panel.display-context.components', {\r\n optimization: this.intl.t(optimizationKey).toString(),\r\n vplus: Format.formatFieldValue(model.inputs.components.vsPlus, FilterConstants.fieldTypes.NumericDecimal, '3s'),\r\n vminus: Format.formatFieldValue(\r\n model.inputs.components.vsMinus,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ),\r\n })\r\n .toString();\r\n let fields = [\r\n { name: this.intl.t('wizard.specifications').toString(), value: componentChoices },\r\n {\r\n name: this.intl.t('settings.specifications.gain').toString(),\r\n value:\r\n Format.formatFieldValue(model.inputs.specifications.gain, FilterConstants.fieldTypes.NumericDecimal, '3s') +\r\n ' ' +\r\n model.inputs.specifications.gainUnit,\r\n },\r\n {\r\n name: this.intl.t('settings.specifications.passband').toString(),\r\n value:\r\n Format.formatFieldValue(\r\n model.inputs.specifications.passbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ) +\r\n dbUnit +\r\n ' at ' +\r\n Format.formatFieldValue(\r\n model.inputs.specifications.passbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ) +\r\n hzUnit,\r\n },\r\n {\r\n name: this.intl.t('settings.specifications.stopband').toString(),\r\n value:\r\n Format.formatFieldValue(\r\n model.inputs.specifications.stopbandAttenuation,\r\n FilterConstants.fieldTypes.NumericDecimal,\r\n '3s',\r\n ) +\r\n dbUnit +\r\n ' at ' +\r\n Format.formatFieldValue(\r\n model.inputs.specifications.stopbandFrequency,\r\n FilterConstants.fieldTypes.Engineering,\r\n '3s',\r\n ) +\r\n hzUnit,\r\n },\r\n {\r\n name: this.intl.t('settings.tolerances.component-tolerances').toString(),\r\n value:\r\n this.intl.t('settings.tolerances.capacitor').toString() +\r\n ' = ' +\r\n model.inputs.tolerances.capacitorTolerance +\r\n '; ' +\r\n this.intl.t('settings.tolerances.resistor').toString() +\r\n ' = ' +\r\n model.inputs.tolerances.resistorTolerance +\r\n '; ' +\r\n this.intl.t('settings.tolerances.inductor').toString() +\r\n ' = ' +\r\n model.inputs.tolerances.inductorTolerance +\r\n '; ' +\r\n this.intl.t('settings.tolerances.op-amp-gbw').toString() +\r\n ' = ' +\r\n model.inputs.tolerances.opAmpGbwTolerance,\r\n },\r\n { name: 'BOM', value: 'refer to BOM.csv file' },\r\n ];\r\n let imagesList = [\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.magnitude-db').toString(),\r\n value: atob(this._cleanImage(images[0].data)),\r\n width: images[0].width,\r\n height: images[0].height,\r\n format: images[0].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.magnitude-vv').toString(),\r\n value: atob(this._cleanImage(images[1].data)),\r\n width: images[1].width,\r\n height: images[1].height,\r\n format: images[1].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.phase-degrees').toString(),\r\n value: atob(this._cleanImage(images[2].data)),\r\n width: images[2].width,\r\n height: images[2].height,\r\n format: images[2].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.phase-radians').toString(),\r\n value: atob(this._cleanImage(images[3].data)),\r\n width: images[3].width,\r\n height: images[3].height,\r\n format: images[3].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.group-delay').toString(),\r\n value: atob(this._cleanImage(images[4].data)),\r\n width: images[4].width,\r\n height: images[4].height,\r\n format: images[4].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.phase-delay').toString(),\r\n value: atob(this._cleanImage(images[5].data)),\r\n width: images[5].width,\r\n height: images[5].height,\r\n format: images[5].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.step-response').toString(),\r\n value: atob(this._cleanImage(images[6].data)),\r\n width: images[6].width,\r\n height: images[6].height,\r\n format: images[6].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.input-impedance-mag').toString(),\r\n value: atob(this._cleanImage(images[7].data)),\r\n width: images[7].width,\r\n height: images[7].height,\r\n format: images[7].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.input-impedance-phase').toString(),\r\n value: atob(this._cleanImage(images[8].data)),\r\n width: images[8].width,\r\n height: images[8].height,\r\n format: images[8].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.noise').toString(),\r\n value: atob(this._cleanImage(images[9].data)),\r\n width: images[9].width,\r\n height: images[9].height,\r\n format: images[9].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.stages').toString(),\r\n value: atob(this._cleanImage(images[10].data)),\r\n width: images[10].width,\r\n height: images[9].height,\r\n format: images[10].format,\r\n },\r\n {\r\n name: this.intl.t('download.pdf-content.image-headers.circuit').toString(),\r\n value: atob(this._cleanImage(images[11].data)),\r\n width: images[11].width,\r\n height: images[9].height,\r\n format: images[11].format,\r\n },\r\n ];\r\n\r\n return new RSVP.Promise((resolve, reject) => {\r\n let coverImage = getURL(ENV.rootURL + FilterConstants.coverImageResource, this.fastboot, this.logger);\r\n return this.assets\r\n .getAsset(coverImage, 'BLOB')\r\n .then((content) => {\r\n // 1. Read the Cover Image that will be used in the PDF\r\n return new RSVP.Promise((resolve, reject) => {\r\n let reader = new FileReader();\r\n reader.readAsDataURL(content);\r\n reader.onloadend = function () {\r\n let coverImageData = reader.result;\r\n if (coverImageData !== null) {\r\n resolve(coverImageData);\r\n } else {\r\n reject(coverImageData);\r\n }\r\n };\r\n });\r\n })\r\n .then((coverImageData) => {\r\n // 2. Create new Design Report Object\r\n let pdfReport = new designReport(this.pdfFonts);\r\n\r\n // 3. Add Title Page\r\n pdfReport.addTitlePage(\r\n this.intl.t('download.pdf-content.pdf-tool-name').toString(),\r\n this._generatePDFTitlePageDescription(designName, designDesc, saveDateStamp),\r\n { data: atob(coverImageData.replace('data:image/jpeg;base64,', '')), format: 'JPEG' },\r\n );\r\n\r\n // 4. Add Data Page\r\n pdfReport.addDataPage(\r\n this.intl.t('download.pdf-content.pdf-heading').toString(),\r\n this.intl\r\n .t('download.pdf-content.pdf-subheading', {\r\n filterType: this.intl.t('panel.display-context.filter-type.' + model.inputs.filterType).toString(),\r\n nthOrder: this.intl\r\n .t('download.pdf-content.pdf-orders.order' + model.results.specifications.nthOrder)\r\n .toString(),\r\n filterResponse: this.intl\r\n .t('annotations.filterResponse.responseType.' + model.results.specifications.responseType)\r\n .toString(),\r\n })\r\n .toString(),\r\n fields,\r\n );\r\n\r\n // 5. Add Image Pages\r\n for (let i = 0; i < imagesList.length; i++) {\r\n pdfReport.addImagePage(imagesList[i]);\r\n }\r\n\r\n // Read Generated PDF File and convert to Base-64 String\r\n let reader = new FileReader();\r\n reader.readAsDataURL(pdfReport.toBlob());\r\n reader.onloadend = function () {\r\n let pdfData = reader.result;\r\n pdfData = pdfData.replace('data:application/pdf;base64,', '');\r\n if (pdfData !== null) {\r\n filesToUpload.push({ name: 'Design.pdf', value: pdfData, location: '', type: 'BINARY' });\r\n resolve(filesToUpload);\r\n } else {\r\n reject(filesToUpload);\r\n }\r\n };\r\n });\r\n });\r\n }\r\n buildBOMData(model) {\r\n let filesToUpload = [],\r\n bomDownloadData = [],\r\n bomData = model.billOfMaterials;\r\n for (let i = 0; i < bomData.length; i++) {\r\n let bomItem = Object.assign({}, bomData[i]);\r\n let value = '';\r\n if (bomItem.value !== '') {\r\n value = bomItem.value.replace('Ω', ' ohm'); // replace Ω with ohm\r\n }\r\n if (bomItem.package !== '') {\r\n let pkg = bomItem.package;\r\n // Change Package Details to Conform to Locale Strings on Extra Parts\r\n if (pkg.includes('{{header}}')) {\r\n pkg = pkg.replace('{{header}}', this.intl.t('figures.billOfMaterials.extra-components.header').toString());\r\n } else if (pkg.includes('{{socket}}')) {\r\n pkg = pkg.replace('{{socket}}', this.intl.t('figures.billOfMaterials.extra-components.socket').toString());\r\n } else if (pkg.includes('{{jumper}}')) {\r\n pkg = pkg.replace('{{jumper}}', this.intl.t('figures.billOfMaterials.extra-components.jumper').toString());\r\n } else if (pkg.includes('{{test-pin}}')) {\r\n pkg = pkg.replace(\r\n '{{test-pin}}',\r\n this.intl.t('figures.billOfMaterials.extra-components.test-pin').toString(),\r\n );\r\n } else if (pkg.includes('{{sma-jack}}')) {\r\n pkg = pkg.replace(\r\n '{{sma-jack}}',\r\n this.intl.t('figures.billOfMaterials.extra-components.sma-jack').toString(),\r\n );\r\n } else if (pkg.includes('{{sma-male}}')) {\r\n pkg = pkg.replace(\r\n '{{sma-male}}',\r\n this.intl.t('figures.billOfMaterials.extra-components.sma-male').toString(),\r\n );\r\n }\r\n value += ', ' + pkg;\r\n }\r\n if (bomItem.material !== '') {\r\n let material = bomItem.material;\r\n // Check for Materials if it needs translation\r\n if (material !== null) {\r\n if (material.includes('{{tantalum}}')) {\r\n material = material.replace(\r\n '{{tantalum}}',\r\n this.intl.t('figures.billOfMaterials.materials.tantalum').toString(),\r\n );\r\n }\r\n }\r\n value += ', ' + material;\r\n }\r\n if (bomItem.tolerance !== '') {\r\n value += ', ' + bomItem.tolerance;\r\n }\r\n bomDownloadData.push({ name: value, quantity: bomItem.count, identifier: bomItem.designators });\r\n }\r\n filesToUpload.push({ name: 'BOM.csv', value: bomDownloadData, location: '', type: 'BOM' });\r\n return filesToUpload;\r\n }\r\n buildGraphToCSVDataFiles(model) {\r\n let filesToUpload = [];\r\n let csvHeader = ['Frequency', 'Nominal', 'Min', 'Max'];\r\n\r\n // magnitudeDB\r\n filesToUpload.push({\r\n name: 'Magnitude(dB).csv',\r\n value: createCsvMultidimensionalData(csvHeader, model.nextSteps.magnitudeDb.data.slice(0), 0),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n // magnitudeVV\r\n filesToUpload.push({\r\n name: 'Magnitude(Volts per Volt).csv',\r\n value: createCsvMultidimensionalData(csvHeader, model.nextSteps.magnitudeVV.data.slice(0), 0),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n // inputImpedanceMag\r\n filesToUpload.push({\r\n name: 'Input Impedance Magnitude.csv',\r\n value: createCsvMultidimensionalData(csvHeader, model.nextSteps.inputImpedanceMagnitude.data.slice(0), 0),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n // inputImpedancePhase\r\n filesToUpload.push({\r\n name: 'Input Impedance Phase.csv',\r\n value: createCsvMultidimensionalData(csvHeader, model.nextSteps.inputImpedancePhase.data.slice(0), 0),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n // phaseRad\r\n filesToUpload.push({\r\n name: 'Phase(radians).csv',\r\n value: createCsvMultidimensionalData(csvHeader, model.nextSteps.phaseRadians.data.slice(0), 0),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n // phaseDegrees\r\n filesToUpload.push({\r\n name: 'Phase(degrees).csv',\r\n value: createCsvMultidimensionalData(csvHeader, model.nextSteps.phaseDegrees.data.slice(0), 0),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n // groupDelay\r\n filesToUpload.push({\r\n name: 'Group Delay.csv',\r\n value: createCsvMultidimensionalData(csvHeader, model.nextSteps.groupDelay.data.slice(0), 0),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n // phaseDelay\r\n filesToUpload.push({\r\n name: 'Phase Delay.csv',\r\n value: createCsvMultidimensionalData(csvHeader, model.nextSteps.phaseDelay.data.slice(0), 0),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n // stepResponse\r\n filesToUpload.push({\r\n name: 'Step Response.csv',\r\n value: createCsvMultidimensionalData(\r\n ['Time', ...csvHeader.slice(1)],\r\n model.nextSteps.stepResponse.data.slice(0),\r\n 0,\r\n ),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n //Noise\r\n filesToUpload.push({\r\n name: 'Noise.csv',\r\n value: createCsvMultidimensionalData(csvHeader, model.nextSteps.noise.graphData.data.slice(0), 0),\r\n location: 'Data Files',\r\n type: 'CSV',\r\n });\r\n\r\n return filesToUpload;\r\n }\r\n buildEvalBoardFiles(model, locale) {\r\n let filesToUpload = [];\r\n let evalBoardList = [];\r\n let evalBoardData = model.evalBoardData;\r\n for (let i = 0; i < evalBoardData.length; i++) {\r\n let evalBoardItem = Object.assign({}, evalBoardData[i]);\r\n if (evalBoardItem.evalBoardModelNumber !== null) {\r\n if (evalBoardList.length === 0 || evalBoardList.indexOf(evalBoardItem.evalBoardModelNumber) > -1 === false) {\r\n evalBoardList.push(evalBoardItem.evalBoardModelNumber);\r\n }\r\n }\r\n }\r\n // Add Eval Boards to the list of files to upload\r\n for (let j = 0; j < evalBoardList.length; j++) {\r\n let evalBoardURI = '/' + locale + '/designtools/filterwizard/EvalBoardFiles/' + evalBoardList[j] + '.zip';\r\n filesToUpload.push({\r\n name: evalBoardList[j] + '.zip',\r\n value: evalBoardURI,\r\n location: 'Eval Board Files',\r\n type: 'MEDIA',\r\n });\r\n }\r\n return filesToUpload;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Support Functions for building the PDF file //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n _generatePDFTitlePageDescription(designName, userNameString, pdfDate) {\r\n let titlePageText = '';\r\n if (this._isNullOrWhiteSpace(designName) && this._isNullOrWhiteSpace(userNameString)) {\r\n // Username and design missing.\r\n titlePageText = this.intl.t('download.pdf-content.pdf-desc-no-name-desc', { date: pdfDate }).toString();\r\n } else if (this._isNullOrWhiteSpace(designName) && !this._isNullOrWhiteSpace(userNameString)) {\r\n // Design name missing and username is present.\r\n titlePageText = this.intl\r\n .t('download.pdf-content.pdf-desc-no-design-name', { user: userNameString.trim(), date: pdfDate })\r\n .toString();\r\n } else if (this._isNullOrWhiteSpace(userNameString) && !this._isNullOrWhiteSpace(designName)) {\r\n // Username name missing and design name is present.\r\n titlePageText = this.intl\r\n .t('download.pdf-content.pdf-desc-no-user-name', { desc: designName.trim(), date: pdfDate })\r\n .toString();\r\n } else {\r\n // Username and design presnt.\r\n titlePageText = this.intl\r\n .t('download.pdf-content.pdf-desc', { desc: designName.trim(), user: userNameString.trim(), date: pdfDate })\r\n .toString();\r\n }\r\n return titlePageText;\r\n }\r\n _isNullOrWhiteSpace(str) {\r\n // Check if the string is undefined.\r\n if (str)\r\n // Check if the string is empty, null or white space.\r\n return str === null || str.match(/^ *$/) !== null;\r\n else return true;\r\n }\r\n _cleanImage(image) {\r\n let stringToRemove = 'data:image/png;base64,';\r\n let imageString = image.toString();\r\n imageString = imageString.replace(stringToRemove, '');\r\n return imageString;\r\n }\r\n}\r\n","export function downloadFile(contentType, fileName, fileData) {\r\n let success = false;\r\n if (fileData) {\r\n let blob = new Blob([fileData], { type: contentType });\r\n if (typeof window.navigator.msSaveBlob !== 'undefined') {\r\n window.navigator.msSaveBlob(blob, fileName);\r\n } else {\r\n let URL = window.URL || window.webkitURL;\r\n let downloadUrl = URL.createObjectURL(blob);\r\n\r\n if (fileName) {\r\n let a = document.createElement('a');\r\n if (typeof a.download === 'undefined') {\r\n window.location = downloadUrl;\r\n } else {\r\n a.href = downloadUrl;\r\n a.download = fileName;\r\n a.click();\r\n }\r\n } else {\r\n window.location = downloadUrl;\r\n }\r\n URL.revokeObjectURL(downloadUrl);\r\n }\r\n success = true;\r\n }\r\n\r\n return success;\r\n}\r\n","import { tracked } from '@glimmer/tracking';\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////////\r\n// error-tracker - utility class that stores and manages the errors in the input components //\r\n//////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport default class ErrorTracker {\r\n tabName = null;\r\n advisor = null;\r\n unparseableFields = [];\r\n unparseableValues = [];\r\n @tracked errorList = [];\r\n\r\n constructor(tabName, advisor) {\r\n this.tabName = tabName;\r\n this.advisor = advisor;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Utility Functions //\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Function that checks if the field has a parse error, value error or a cross-value error\r\n // Inputs: fieldName - the field to be checked in the errorList list\r\n // Returns: true if the fieldName is included in the list, otherwise false\r\n isInErrorList(fieldName) {\r\n return this.errorList.some((error) => {\r\n return error.fields.includes(fieldName);\r\n });\r\n }\r\n // Function that updates the unparseable list if the parameter status is valid or not\r\n // Inputs: param - field containing id, status and value\r\n updateUnparseableList(param) {\r\n if (param.status) {\r\n // Field good\r\n if (this.isUnparseable(param.fieldId)) {\r\n this.setUnparseable(param.fieldId, param.fieldValue, false);\r\n }\r\n } else {\r\n if (!this.isUnparseable(param.fieldId)) {\r\n this.setUnparseable(param.fieldId, param.fieldValue, true);\r\n } else {\r\n this.updateUnparsableValue(param.fieldId, param.fieldValue);\r\n }\r\n }\r\n }\r\n // Function that checks if the field has a parse error status\r\n // Inputs: fieldName - the field to be checked in the unparseableFields list\r\n // Returns: true if the fieldName is included in the list, otherwise false\r\n isUnparseable(fieldName) {\r\n return this.unparseableFields.includes(fieldName);\r\n }\r\n // Function that adds or removes a field from the unparseableFields list\r\n // Inputs: fieldName - the field to be checked if the parse status is valid\r\n // fieldValue - the field corresponding to the fieldName\r\n // failedParse - if true, the field is added to the unparseableFields list\r\n // - if false, the field is added to the unparseableFields list\r\n setUnparseable(fieldName, fieldValue, failedParse) {\r\n if (failedParse) {\r\n if (!this.unparseableFields.includes(fieldName)) {\r\n this.unparseableFields.push(fieldName);\r\n this.unparseableValues.push(fieldValue);\r\n }\r\n } else {\r\n if (this.unparseableFields.includes(fieldName)) {\r\n const index = this.unparseableFields.indexOf(fieldName);\r\n this.unparseableFields.splice(index, 1);\r\n this.unparseableValues.splice(index, 1);\r\n }\r\n }\r\n }\r\n // If the field is already in the list of unparseable fields, and the user has a different\r\n // error for that field, update the error in the unparseable values.\r\n updateUnparsableValue(fieldName, fieldValue) {\r\n const index = this.unparseableFields.indexOf(fieldName);\r\n this.unparseableValues.splice(index, 1, fieldValue);\r\n }\r\n // Returns true when the list of unparseable fields is not empty\r\n hasUnparsableFields() {\r\n return this.unparseableFields.length > 0;\r\n }\r\n // Function that gets the list of Field Parse Errors\r\n // Returns: fieldErrors - Array containing the list of errors that are sent to the controller\r\n getFieldErrors() {\r\n let fieldErrors = [];\r\n for (let i = 0; i < this.unparseableFields.length; i++) {\r\n let fieldId = this.unparseableFields[i];\r\n let fieldValue = this.unparseableValues[i];\r\n fieldErrors.push({\r\n tab: this.tabName,\r\n fields: [fieldId],\r\n id: fieldValue.length > 0 ? 'invalidField' : 'emptyField',\r\n parameters: { fieldId: fieldId, value: fieldValue },\r\n });\r\n }\r\n return fieldErrors;\r\n }\r\n // Function that does the following:\r\n // - Builds the List of all the field-parse errors for all fields in the component\r\n // - Calls the Value and Cross Value Validation Function for all Valid Fields\r\n // - Compiles all the list of errors for the component\r\n validate(workingModel) {\r\n // Include \"FIELD\" errors in the field error list and have them flag the field as unparseable\r\n // The errors can either be, Unparseable, or Empty\r\n let fieldErrors = this.getFieldErrors();\r\n\r\n // Call the Specifications Validation function to check parse-valid fields for value and cross value validation\r\n let valueErrors = this.advisor.validate(workingModel, this.unparseableFields);\r\n\r\n // Build the Error List\r\n let errors = fieldErrors.concat(valueErrors);\r\n this.errorList = errors;\r\n\r\n return errors;\r\n }\r\n}\r\n","import FilterConstants from '../filter-constants';\r\nimport { numberToUserDisplay, userEntryToNumber } from '@ebiz/pretty-num';\r\n\r\nexport function padLeft(strtopad, num, padchar) {\r\n // Pads Characters given the length num with character padchar\r\n return strtopad.length < num ? Array(num - String(strtopad).length + 1).join(padchar || '0') + strtopad : strtopad;\r\n}\r\n\r\nexport function truncateValue(numVal, significantDigits) {\r\n let stringVal = parseInt(numVal).toString();\r\n if (stringVal.length > significantDigits) {\r\n let stringArr = stringVal.split('');\r\n for (let i = significantDigits; i < stringArr.length; i++) {\r\n stringArr[i] = '0';\r\n }\r\n stringVal = stringArr.join('');\r\n }\r\n return parseFloat(stringVal);\r\n}\r\n\r\nexport function toFixedClean(value, precisionIn) {\r\n let precision = precisionIn || 0,\r\n power = Math.pow(10, precision),\r\n absValue = Math.abs(Math.round(value * power)),\r\n result = (value < 0 ? '-' : '') + String(Math.floor(absValue / power));\r\n\r\n if (precision > 0) {\r\n let fraction = String(absValue % power),\r\n padding = new Array(Math.max(precision - fraction.length, 0) + 1).join('0');\r\n result += '.' + padding + fraction;\r\n }\r\n return result;\r\n}\r\n\r\nexport function isEngineeringFormated(value) {\r\n return value !== null && value !== undefined && value.toString().match(/[afpnuµmkMGT]$/g);\r\n}\r\n\r\nexport function capitalizeFirstLetter(stringVal) {\r\n return stringVal.charAt(0).toUpperCase() + stringVal.slice(1);\r\n}\r\n\r\nexport function uncapitalizeFirstLetter(stringVal) {\r\n return stringVal.charAt(0).toLowerCase() + stringVal.slice(1);\r\n}\r\n\r\nexport function applyValueTolerance(rawVal, roundedVal) {\r\n let tolerance = 0.00000000000001;\r\n return Math.abs(rawVal - roundedVal) < tolerance ? roundedVal : rawVal;\r\n}\r\n\r\n// This function formats a raw number value into a display value depending upon type.\r\n// Input: value - value to be formatted\r\n// fieldType - type of field (from FilterConstants.fieldTypes)\r\n// param - extra parameters\r\n// Returns: result - formatted value\r\nexport function formatFieldValue(value, fieldType, param) {\r\n let result = '';\r\n switch (fieldType) {\r\n case FilterConstants.fieldTypes.AllChars:\r\n case FilterConstants.fieldTypes.Alphabet:\r\n case FilterConstants.fieldTypes.AlphaNumeric: {\r\n switch (param) {\r\n case FilterConstants.fieldCapitlization.UpperCase:\r\n result = value.toUpperCase();\r\n break;\r\n case FilterConstants.fieldCapitlization.LowerCase:\r\n result = value.toLowerCase();\r\n break;\r\n case FilterConstants.fieldCapitlization.FirstChar:\r\n result = this.capitalizeFirstLetter(value);\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n }\r\n case FilterConstants.fieldTypes.Numeric:\r\n result = Number(value).toString();\r\n break;\r\n case FilterConstants.fieldTypes.NumericDecimal: {\r\n let hasTrailingZeroes = param[param.length - 1] === 'z';\r\n let trimmedParam = param;\r\n if (hasTrailingZeroes) {\r\n trimmedParam = param.substring(0, param.length - 1);\r\n }\r\n let digitVal = Number(trimmedParam.substring(0, trimmedParam.length - 1));\r\n let digitType = trimmedParam.substring(trimmedParam.length - 1, trimmedParam.length);\r\n let rawValue = Number(value);\r\n result = numberToUserDisplay(rawValue, 'Standard', digitVal, {\r\n fixedDigits: digitType === 'd',\r\n showZeroes: hasTrailingZeroes,\r\n });\r\n break;\r\n }\r\n case FilterConstants.fieldTypes.Custom:\r\n break;\r\n case FilterConstants.fieldTypes.Engineering: {\r\n let patterninf = /^inf/i;\r\n let patternNeginf = /^-inf/i;\r\n let hasTrailingZeroes = param[param.length - 1] === 'z';\r\n let trimmedParam = param;\r\n if (hasTrailingZeroes) {\r\n trimmedParam = param.substring(0, param.length - 1);\r\n }\r\n let digitVal = Number(trimmedParam.substring(0, trimmedParam.length - 1));\r\n let digitType = trimmedParam.substring(trimmedParam.length - 1, trimmedParam.length);\r\n let rawValue = isEngineeringFormated(value) ? userEntryToNumber(value) : value;\r\n let engResult = numberToUserDisplay(rawValue, 'Engineering', digitVal, {\r\n fixedDigits: digitType === 'd',\r\n showZeroes: hasTrailingZeroes,\r\n });\r\n result = engResult.match(patterninf) || engResult.match(patternNeginf) ? value.toString() : engResult;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n return result;\r\n}\r\n\r\nexport function sigFigsDown(n, sig) {\r\n const mult = Math.pow(10, sig - Math.floor(Math.log10(n)) - 1);\r\n return Math.trunc(n * mult) / mult;\r\n}\r\n","import { camelize, dasherize } from '@ember/string';\r\nimport FilterConstants from '../filter-constants';\r\nimport * as Format from './format';\r\nimport { clone, isNearInfinity } from './common';\r\nimport RSVP from 'rsvp';\r\nimport { isSOIC, isSOICEP, isMSOP, isMSOPEP, isSOT23 } from './package-checker';\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////////\r\n// materials - utility functions returns actual components for BOM and Evaluation Boards //\r\n//////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport function getOpAmpReferenceDesignator(packageCode, channels) {\r\n let refDesignatorOpAmp = 'U1';\r\n // get the reference designator for opAmp\r\n switch (parseFloat(channels)) {\r\n case 1: {\r\n refDesignatorOpAmp = isSOIC(packageCode) || isSOICEP(packageCode) ? 'U1' : isSOT23(packageCode) ? 'U2' : 'U1';\r\n break;\r\n }\r\n case 2: {\r\n refDesignatorOpAmp =\r\n isSOIC(packageCode) || isSOICEP(packageCode)\r\n ? 'U1'\r\n : isMSOP(packageCode) || isMSOPEP(packageCode)\r\n ? 'U2'\r\n : 'U1';\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n return refDesignatorOpAmp;\r\n}\r\nexport function getCapacitorPackage(value, toleranceValue, isReferenceCircuit) {\r\n let result = _materialAndPackageForCapacitors(value, toleranceValue, isReferenceCircuit);\r\n return result.package;\r\n}\r\nexport function billOfMaterials(\r\n filterType,\r\n specificationsInput,\r\n vsMinus,\r\n stageDetails,\r\n circuitDetails,\r\n toleranceInput,\r\n needReferenceStage,\r\n opAmpSource,\r\n) {\r\n let billOfMaterialsFinal = new Array();\r\n let boolReferenceBoard = false;\r\n let billOfMaterialObj = [];\r\n let stageCount = stageDetails.length;\r\n\r\n // Loop through Stages\r\n for (let i = 0; i < stageCount; i++) {\r\n let circuitData = stageDetails[i].circuitResult.circuit;\r\n let supportedComponents = stageDetails[i].circuitResult.circuit.supportedComponents;\r\n let toleranceComponents = _getToleranceComponents(circuitData, supportedComponents);\r\n let validCapacitors, validResistors, validInductors;\r\n [validCapacitors, validResistors, validInductors] = _getValidCapacitorsAndResistors(\r\n stageDetails[i],\r\n circuitDetails[i],\r\n true,\r\n );\r\n\r\n // get the finishing touches for the current component\r\n let finishingTouchesCurrentComp = _finishingTouches(vsMinus);\r\n\r\n // get bill of materials of all the resistors in current component object\r\n billOfMaterialObj = billOfMaterialObj.concat(\r\n _getResistorBOM(stageDetails[i], validResistors, toleranceComponents, toleranceInput.resistorTolerance),\r\n );\r\n\r\n // get bill of materials for all the capacitors for the current component object\r\n billOfMaterialObj = billOfMaterialObj.concat(\r\n _getCapacitorBOM(\r\n stageDetails[i],\r\n validCapacitors,\r\n toleranceComponents,\r\n toleranceInput.capacitorTolerance,\r\n boolReferenceBoard,\r\n ),\r\n );\r\n\r\n // get bill of materials for all the inductors for the current component object\r\n billOfMaterialObj = billOfMaterialObj.concat(\r\n _getInductorBOM(\r\n stageDetails[i],\r\n validInductors,\r\n toleranceComponents,\r\n toleranceInput.inductorTolerance,\r\n specificationsInput,\r\n filterType,\r\n ),\r\n );\r\n\r\n // get the bill of materials for current component OpAmp\r\n billOfMaterialObj = billOfMaterialObj.concat(_getOpAmpBOM(stageDetails[i], opAmpSource));\r\n\r\n // get bill of materials for bypassCapacitors\r\n billOfMaterialObj = billOfMaterialObj.concat(\r\n _getBypassCapacitorsBOM(\r\n finishingTouchesCurrentComp.bypassCapacitors,\r\n stageDetails[i].stageLetter,\r\n boolReferenceBoard,\r\n ),\r\n );\r\n }\r\n\r\n // get bill of materials for referenceCircuit stage if any\r\n if (needReferenceStage) {\r\n let refCircuitArray = _getReferenceStage();\r\n\r\n // loop through the reference circuit Array and push the designators, values, materials, packages, and tolerances to the billOfMaterials\r\n for (let s = 0; s < refCircuitArray.length; s++) {\r\n let productURL = null;\r\n if (\r\n refCircuitArray[s].refDesignator &&\r\n refCircuitArray[s].refDesignator.length > 0 &&\r\n refCircuitArray[s].refDesignator[0] === 'U'\r\n )\r\n productURL = '{{homeURL}}' + '/' + refCircuitArray[s].value + '.html';\r\n billOfMaterialObj.push({\r\n refDesignator: refCircuitArray[s].refDesignator,\r\n value: refCircuitArray[s].value,\r\n prodURL: productURL,\r\n package: refCircuitArray[s].package,\r\n material: refCircuitArray[s].material,\r\n tolerance: refCircuitArray[s].tolerance,\r\n italicRow: false,\r\n });\r\n }\r\n }\r\n\r\n // get bill of materials for tantalum capacitors\r\n var tantalumCapacitor = _getTantalumCapacitors(vsMinus);\r\n\r\n // loop through the tantalum capacitors to get the bill of materials\r\n for (var q = 0; q < tantalumCapacitor.length; q++) {\r\n var tantalumCapMaterialsAndPackage = _materialAndPackageForCapacitors(\r\n tantalumCapacitor[q].value,\r\n tantalumCapacitor[q].tolerance,\r\n true,\r\n );\r\n billOfMaterialObj.push({\r\n refDesignator: tantalumCapacitor[q].designator,\r\n value: tantalumCapacitor[q].value,\r\n prodURL: null,\r\n package: tantalumCapMaterialsAndPackage.package,\r\n material: tantalumCapMaterialsAndPackage.material,\r\n tolerance: tantalumCapacitor[q].tolerance,\r\n italicRow: false,\r\n });\r\n }\r\n\r\n // separating the resistors, capacitors and opAmps from the billOfMaterials Object\r\n let billOfMaterialsResistorArray = new Array(),\r\n billOfMaterialsCapacitorArray = new Array(),\r\n billOfMaterialsOpAmpArray = new Array(),\r\n billOfMaterialsInductorArray = new Array();\r\n\r\n for (let a = 0; a < billOfMaterialObj.length; a++) {\r\n // excluding the resistors which has value zero or infinity since they are not used by the circuit\r\n if (billOfMaterialObj[a].refDesignator.charAt(0) === 'R' && !isNearInfinity(billOfMaterialObj[a].value)) {\r\n billOfMaterialsResistorArray.push(billOfMaterialObj[a]);\r\n }\r\n // excluding the capacitors which has value zero or infinity since they are not used by the circuit\r\n else if (billOfMaterialObj[a].refDesignator.charAt(0) === 'C' && !isNearInfinity(billOfMaterialObj[a].value)) {\r\n billOfMaterialsCapacitorArray.push(billOfMaterialObj[a]);\r\n } else if (billOfMaterialObj[a].refDesignator.charAt(0) === 'U') {\r\n billOfMaterialsOpAmpArray.push(billOfMaterialObj[a]);\r\n } else if (billOfMaterialObj[a].refDesignator.charAt(0) === 'L') {\r\n billOfMaterialsInductorArray.push(billOfMaterialObj[a]);\r\n }\r\n }\r\n\r\n // make call return an object containing a resistorsObjectArray and an otherArray\r\n let extraComponents = _getExtraComponentsBOM(\r\n stageDetails,\r\n _getExtraComponentsCount(stageDetails.length),\r\n needReferenceStage,\r\n );\r\n\r\n billOfMaterialsResistorArray = billOfMaterialsResistorArray.concat(extraComponents.resistorAdditions);\r\n\r\n // getting the bill Of Material grouping for resistor array table and adding the unit for resistors\r\n let resistorTable = _billOfMaterialsTable(billOfMaterialsResistorArray, true, 'Ω');\r\n\r\n // getting the bill of Material grouping for capacitor array table and adding the unit for capacitors\r\n let capacitorTable = _billOfMaterialsTable(billOfMaterialsCapacitorArray, true, 'F');\r\n\r\n // getting the bill of Material grouping for capacitor array table and adding the unit for capacitors\r\n let inductorTable = _billOfMaterialsTable(billOfMaterialsInductorArray, true, 'H');\r\n\r\n // getting the bill of material grouping for opAmp table\r\n let opAmpTable = _billOfMaterialsTable(billOfMaterialsOpAmpArray, false, null);\r\n\r\n billOfMaterialsFinal = resistorTable.concat(inductorTable.concat(capacitorTable.concat(opAmpTable)));\r\n billOfMaterialsFinal = billOfMaterialsFinal.concat(extraComponents.otherAdditions);\r\n return billOfMaterialsFinal;\r\n}\r\nexport function orderEvalBoard(vsMinus, stageDetails, circuitDetails, toleranceInput, needReferenceStage, opAmpSource) {\r\n let orderEvalBoardArray = new Array();\r\n\r\n // get the motherboard designators\r\n let motherboardDesignatorArray = _motherBoardDesignators(vsMinus, needReferenceStage);\r\n //looping through motherboardDesignator Array to get the required format\r\n let motherboardStrDesignator = '';\r\n for (let k = 0; k < motherboardDesignatorArray.length; k++) {\r\n if (motherboardStrDesignator.length > 0) motherboardStrDesignator += ',';\r\n motherboardStrDesignator += motherboardDesignatorArray[k];\r\n }\r\n //make call return an object containing a resistorsObjectArray and an otherArray\r\n let extraComponents = _getExtraComponentsBOM(\r\n stageDetails,\r\n _getExtraComponentsCount(stageDetails.length),\r\n needReferenceStage,\r\n );\r\n // add extras to motherboard Designator (4 or 5 in the case of 4 and 7/8 for the case of 8)\r\n switch (extraComponents.otherAdditions.length) {\r\n case 4:\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[0].designators;\r\n motherboardStrDesignator += ',' + extraComponents.resistorAdditions[0].refDesignator;\r\n motherboardStrDesignator += ',' + extraComponents.resistorAdditions[1].refDesignator;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[2].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[3].designators;\r\n break;\r\n case 5:\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[0].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[1].designators;\r\n motherboardStrDesignator += ',' + extraComponents.resistorAdditions[0].refDesignator;\r\n motherboardStrDesignator += ',' + extraComponents.resistorAdditions[1].refDesignator;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[3].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[4].designators;\r\n break;\r\n case 7:\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[0].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[1].designators;\r\n motherboardStrDesignator += ',' + extraComponents.resistorAdditions[0].refDesignator;\r\n motherboardStrDesignator += ',' + extraComponents.resistorAdditions[1].refDesignator;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[3].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[4].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[5].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[6].designators;\r\n break;\r\n case 8:\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[0].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[1].designators;\r\n motherboardStrDesignator += ',' + extraComponents.resistorAdditions[0].refDesignator;\r\n motherboardStrDesignator += ',' + extraComponents.resistorAdditions[1].refDesignator;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[3].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[4].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[5].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[6].designators;\r\n motherboardStrDesignator += ',' + extraComponents.otherAdditions[7].designators;\r\n break;\r\n }\r\n // add it to the eval board array\r\n let evalBoardMotherModelNum = FilterConstants.evalBoard.fileBase.replace(\r\n '{{type}}{{implementation}}{{channel}}',\r\n FilterConstants.evalBoard.mother,\r\n );\r\n orderEvalBoardArray.push({\r\n stage: '',\r\n stageType: 'none',\r\n stageImplementation: 'none',\r\n stageChannel: 'none',\r\n evalBoardModelNumber: evalBoardMotherModelNum,\r\n partsOnEvalBoard: motherboardStrDesignator,\r\n });\r\n\r\n // loop for each stage\r\n let stageCount = stageDetails.length;\r\n for (let i = 0; i < stageCount; i++) {\r\n let strDesignator = '';\r\n let validCapacitors, validResistors;\r\n [validCapacitors, validResistors] = _getValidCapacitorsAndResistors(stageDetails[i], circuitDetails[i], false);\r\n\r\n // get reference designator of all the resistors in current component object\r\n for (let j = 0; j < validResistors.length; j++) {\r\n // check for resistors for zero value and infinity values\r\n if (!isNearInfinity(validResistors[j].value)) {\r\n let refDesignatorResistor = _referenceDesignator(\r\n stageDetails[i],\r\n validResistors[j].name,\r\n validResistors[j].value,\r\n toleranceInput.resistorTolerance,\r\n );\r\n strDesignator += strDesignator.length > 0 ? ',' + refDesignatorResistor : refDesignatorResistor;\r\n }\r\n }\r\n // get reference designator for all the capacitors for the current component object\r\n for (var k = 0; k < validCapacitors.length; k++) {\r\n // check for capacitors for zero values and infinity values\r\n if (!isNearInfinity(validCapacitors[k].value)) {\r\n let refDesignatorCapacitor = _referenceDesignator(\r\n stageDetails[i],\r\n validCapacitors[k].name,\r\n validCapacitors[k].value,\r\n toleranceInput.capacitorTolerance,\r\n );\r\n strDesignator += strDesignator.length > 0 ? ',' + refDesignatorCapacitor : refDesignatorCapacitor;\r\n }\r\n }\r\n // get reference designator for current component OpAmp\r\n let opAmp = opAmpSource.getOpAmp(stageDetails[i].actualStage.opAmp);\r\n let refDesignatorOpAmp = _referenceDesignatorOpAmp(opAmp, stageDetails[i]);\r\n strDesignator += strDesignator.length > 0 ? ',' + refDesignatorOpAmp : refDesignatorOpAmp;\r\n\r\n // get the finishing touches for the current component\r\n let finishingTouchesCurrentComp = _finishingTouches(vsMinus);\r\n\r\n // loop through the byPass capacitors to get the reference designator\r\n for (let l = 0; l < finishingTouchesCurrentComp.bypassCapacitors.length; l++) {\r\n let bypassCapacitorDesignator = _referenceDesignatorBypassCapacitor(\r\n finishingTouchesCurrentComp.bypassCapacitors[l].name,\r\n stageDetails[i].stageLetter,\r\n );\r\n strDesignator += strDesignator.length > 0 ? ',' + bypassCapacitorDesignator : bypassCapacitorDesignator;\r\n }\r\n // referencing extraComponents from above (line 765), splitting string for J1A,J1B,J1C etc\r\n let j1LetterArray = extraComponents.otherAdditions[2].designators.split(',');\r\n\r\n // remove spacing, get stageLetter, add J1x to strDesignator\r\n for (let m = 0; m < j1LetterArray.length; m++) {\r\n let subString = j1LetterArray[m].trim();\r\n let stageLetter = subString.charAt([2]);\r\n // if stageLetter matches this components stageLetter add to strDesignator\r\n if (stageLetter === stageDetails[i].stageLetter) {\r\n strDesignator += strDesignator.length > 0 ? ',' + subString : subString;\r\n }\r\n }\r\n // get the evalboard model number and stage text for current component\r\n let getAvailableEvalBoard = _availableEvaluationBoard(opAmp, stageDetails[i]);\r\n orderEvalBoardArray.push({\r\n stage: stageDetails[i].stageLetter,\r\n stageType: getAvailableEvalBoard.stageType,\r\n stageImplementation: getAvailableEvalBoard.stageImplementation,\r\n stageChannel: getAvailableEvalBoard.stageChannel,\r\n evalBoardModelNumber: getAvailableEvalBoard.evalBoardModelNumber,\r\n partsOnEvalBoard: strDesignator,\r\n });\r\n }\r\n return orderEvalBoardArray;\r\n}\r\nexport function orderSamples(stageDetails, opAmpSource) {\r\n let opAmpList = [];\r\n let opAmpModelsArray = [];\r\n for (let i = 0; i < stageDetails.length; i++) {\r\n let opAmpName = stageDetails[i].actualStage.opAmp.toLowerCase();\r\n if (!opAmpList.includes(opAmpName)) {\r\n opAmpList.push(opAmpName);\r\n }\r\n }\r\n for (let i = 0; i < opAmpList.length; i++) {\r\n opAmpModelsArray.push(opAmpSource.getOpAmpModelsArray(opAmpList[i]));\r\n }\r\n let opAmpModelsResult = RSVP.Promise.all(opAmpModelsArray);\r\n return opAmpModelsResult.then((opAmpModels) => {\r\n console.log(opAmpModels);\r\n return opAmpModels.filter((a) => a !== null);\r\n });\r\n}\r\n\r\n////////////////////////////////////////////////////////////////////////////////\r\n// Internal Support Functions //\r\n////////////////////////////////////////////////////////////////////////////////\r\n\r\nfunction _materialAndPackageForResistors(toleranceValue) {\r\n let pkg = '',\r\n material = '';\r\n if (toleranceValue <= FilterConstants.resistorTolerance.fiveTenths) {\r\n pkg = '0603';\r\n material = 'Thin Film';\r\n } else {\r\n pkg = '0603';\r\n material = '';\r\n }\r\n return { package: pkg, material: material };\r\n}\r\nfunction _materialAndPackageForCapacitors(value, toleranceValue, boolReferenceBoard) {\r\n let pkg = '',\r\n material = '',\r\n tolerance;\r\n\r\n //check if the tolerance is ideal and get the integer value of the tolerance to compare\r\n if (toleranceValue !== FilterConstants.capacitorTolerance.ideal) {\r\n tolerance = parseFloat(toleranceValue);\r\n\r\n if (value <= 10 * 1e-9) {\r\n material = 'C0G';\r\n pkg = '0603';\r\n } else if (value > 10 * 1e-9 && value <= 100 * 1e-9 && tolerance <= 10) {\r\n material = 'C0G';\r\n pkg = '1206';\r\n } else if (value > 10 * 1e-9 && value <= 100 * 1e-9 && tolerance === 20) {\r\n material = 'X7R';\r\n pkg = '0603';\r\n } else if (value > 100 * 1e-9 && value < 10 * 1e-6) {\r\n material = 'X7R';\r\n pkg = '1206';\r\n } else if (value === 0.00001 && boolReferenceBoard === true) {\r\n material = '{{tantalum}}';\r\n pkg = '6032';\r\n }\r\n }\r\n return { package: pkg, material: material };\r\n}\r\nfunction _materialAndPackageForInductors(value, toleranceValue, filterSpecs, filterType) {\r\n let pkg = '',\r\n resonanceFrequency,\r\n material = '';\r\n\r\n if (value >= 330e-9) {\r\n pkg = '1210';\r\n } else {\r\n pkg = '0603';\r\n }\r\n switch (filterType) {\r\n case FilterConstants.filterType.lowPass:\r\n resonanceFrequency = 10 * Number(filterSpecs.passbandFrequency);\r\n break;\r\n case FilterConstants.filterType.highPass:\r\n resonanceFrequency = 10 * Number(filterSpecs.stopbandFrequency);\r\n break;\r\n case FilterConstants.filterType.bandPass:\r\n resonanceFrequency = 10 * Number(filterSpecs.centerFrequency);\r\n break;\r\n case FilterConstants.filterType.notch:\r\n resonanceFrequency = 10 * Number(filterSpecs.centerFrequency);\r\n break;\r\n }\r\n material =\r\n 'resonance > ' + Format.formatFieldValue(resonanceFrequency, FilterConstants.fieldTypes.Engineering, '3s') + 'Hz';\r\n return { package: pkg, material: material };\r\n}\r\nfunction _materialAndPackageForOpAmps(opAmp) {\r\n var pkg = '',\r\n material = '';\r\n if (isSOIC(opAmp.packageCode)) {\r\n pkg = 'SOIC';\r\n } else if (isSOICEP(opAmp.packageCode)) {\r\n pkg = 'SOIC EP';\r\n } else if (isMSOP(opAmp.packageCode)) {\r\n pkg = 'MSOP';\r\n } else if (isMSOPEP(opAmp.packageCode)) {\r\n pkg = 'MSOP EP';\r\n } else if (isSOT23(opAmp.packageCode)) {\r\n pkg = 'SOT-23';\r\n }\r\n return { package: pkg, material: material };\r\n}\r\nfunction _inArray(array, name) {\r\n for (let a = 0; a < array.length; a++) {\r\n if (array[a].name === name) {\r\n return [true, a]; // a returns the index at which the key is found\r\n }\r\n }\r\n return [false, -1];\r\n}\r\nfunction _getExtraComponentsCount(stageNum) {\r\n let quantity;\r\n\r\n //check stageNum set quantity\r\n switch (true) {\r\n case stageNum <= 4:\r\n quantity = 4;\r\n //J1 for each stage\r\n break;\r\n case stageNum >= 5 && stageNum <= 8:\r\n quantity = 8;\r\n break;\r\n case stageNum > 8:\r\n //this shouldn't happen (We will never support Please comment the code to this effect so future programmers don't attempt.)\r\n quantity = -1;\r\n break;\r\n }\r\n return quantity;\r\n}\r\nfunction _billOfMaterialsTable(array, formatValue, unit) {\r\n //if incoming array is empty, can immediately return empty array back\r\n if (array.length === 0) return [];\r\n\r\n let billOfMaterialDisplay = new Array();\r\n let arrayNew = new Array();\r\n let arrayCount = new Array();\r\n let dlist = '';\r\n let boolFound = false;\r\n let arrayClone = clone(array[0]);\r\n\r\n // clone and push the first element of the array\r\n arrayNew.push(arrayClone);\r\n arrayCount.push(1);\r\n\r\n for (let b = 1; b < array.length; b++) {\r\n dlist = array[b].refDesignator;\r\n boolFound = false;\r\n\r\n // compare each element of array with the elements of arrayNew created\r\n for (let i = 0; i < arrayNew.length; i++) {\r\n if (\r\n array[b].value === arrayNew[i].value &&\r\n array[b].tolerance === arrayNew[i].tolerance &&\r\n array[b].package === arrayNew[i].package &&\r\n array[b].material === arrayNew[i].material\r\n ) {\r\n arrayNew[i].refDesignator = arrayNew[i].refDesignator + ', ' + dlist;\r\n\r\n if (array[b].count > 1) {\r\n arrayCount[i]++;\r\n }\r\n arrayCount[i]++;\r\n boolFound = true;\r\n break;\r\n }\r\n }\r\n\r\n // if boolFound is true, continue with the loop\r\n if (boolFound) continue;\r\n\r\n // if any element in from the array doesnt match with elements of arrayNew, clone and push it to arrayNew\r\n let tempObj = clone(array[b]);\r\n arrayNew.push(tempObj);\r\n arrayCount.push(1);\r\n }\r\n\r\n for (var j = 0; j < arrayNew.length; j++) {\r\n if (formatValue) {\r\n arrayNew[j].value = Format.formatFieldValue(arrayNew[j].value, FilterConstants.fieldTypes.Engineering, '5s');\r\n arrayNew[j].value = arrayNew[j].value + unit;\r\n }\r\n\r\n // push the elements of arrayNew to billOfMaterialsDisplay\r\n billOfMaterialDisplay.push({\r\n count: arrayCount[j],\r\n designators: arrayNew[j].refDesignator,\r\n value: arrayNew[j].value,\r\n prodURL: arrayNew[j].prodURL,\r\n package: arrayNew[j].package,\r\n tolerance: arrayNew[j].tolerance,\r\n material: arrayNew[j].material,\r\n italicRow: arrayNew[j].italicRow,\r\n });\r\n }\r\n\r\n return billOfMaterialDisplay;\r\n}\r\nfunction _getToleranceComponents(circuitData, supportedComponents) {\r\n let components = [];\r\n for (let i = 0; i < supportedComponents.length; i++) {\r\n let componentName = supportedComponents[i];\r\n let componentValue = circuitData.get(componentName + '.value');\r\n let toleranceValue = circuitData.get(componentName + '.finalTolerance');\r\n if (componentValue !== 0 && !isNearInfinity(componentValue) && toleranceValue !== 'ideal')\r\n components.push({ name: componentName.toUpperCase(), tolerance: toleranceValue });\r\n }\r\n return components;\r\n}\r\nfunction _getValidCapacitorsAndResistors(stageData, circuitData, includeInductors) {\r\n let validResistors = [];\r\n let validCapacitors = [];\r\n let validInductors = [];\r\n let stageImplementation = stageData.implementation.replace(/ /g, '');\r\n let stageType = camelize(stageData.filterName.substring(10).replace(/_/g, '-'));\r\n\r\n // Add the appropriate resistors and capacitors to the temp arrays based on implementation.\r\n switch (stageImplementation) {\r\n case FilterConstants.implementationType.gain: {\r\n // Add resistors.\r\n validResistors.push({ name: FilterConstants.resistorNames.r3, value: circuitData.r3.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r4, value: circuitData.r4.value });\r\n break;\r\n }\r\n case FilterConstants.implementationType.firstOrder: {\r\n // Add resistors.\r\n validResistors.push({ name: FilterConstants.resistorNames.r1, value: circuitData.r1.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r3, value: circuitData.r3.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r4, value: circuitData.r4.value });\r\n // Add capacitors.\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c1, value: circuitData.c1.value });\r\n break;\r\n }\r\n case FilterConstants.implementationType.sallenKey: {\r\n // Add resistors.\r\n validResistors.push({ name: FilterConstants.resistorNames.r1, value: circuitData.r1.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r2, value: circuitData.r2.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r3, value: circuitData.r3.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r4, value: circuitData.r4.value });\r\n // Add capacitors.\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c1, value: circuitData.c1.value });\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c2, value: circuitData.c2.value });\r\n break;\r\n }\r\n case FilterConstants.implementationType.inductor: {\r\n // Add resistors.\r\n validResistors.push({ name: FilterConstants.resistorNames.r1, value: circuitData.r1.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r3, value: circuitData.r3.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r4, value: circuitData.r4.value });\r\n // Add capacitor\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c1, value: circuitData.c1.value });\r\n //Add inductor\r\n validInductors.push({ name: FilterConstants.inductorNames.l1, value: circuitData.l1.value });\r\n break;\r\n }\r\n case FilterConstants.implementationType.multipleFeedback: {\r\n if (stageType === FilterConstants.filterType.lowPass) {\r\n // Add resistors.\r\n validResistors.push({ name: FilterConstants.resistorNames.r1, value: circuitData.r1.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r2, value: circuitData.r2.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r5, value: circuitData.r5.value });\r\n // Add capacitors.\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c1, value: circuitData.c1.value });\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c2, value: circuitData.c2.value });\r\n } else {\r\n // Add resistors.\r\n validResistors.push({ name: FilterConstants.resistorNames.r1, value: circuitData.r1.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r2, value: circuitData.r2.value });\r\n // Add capacitors.\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c1, value: circuitData.c1.value });\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c2, value: circuitData.c2.value });\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c5, value: circuitData.c5.value });\r\n }\r\n break;\r\n }\r\n case FilterConstants.implementationType.deliyannisFriend: {\r\n if (stageType === FilterConstants.filterType.bandPass) {\r\n // Add resistors.\r\n validResistors.push({ name: FilterConstants.resistorNames.r1, value: circuitData.r1.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r2, value: circuitData.r2.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r3, value: circuitData.r3.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r4, value: circuitData.r4.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r5, value: circuitData.r5.value });\r\n // Add capacitors.\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c1, value: circuitData.c1.value });\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c2, value: circuitData.c2.value });\r\n } else if (stageType === FilterConstants.filterType.notch) {\r\n // Add resistors.\r\n validResistors.push({ name: FilterConstants.resistorNames.r1, value: circuitData.r1.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r2, value: circuitData.r2.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r3, value: circuitData.r3.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r4, value: circuitData.r4.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r5, value: circuitData.r5.value });\r\n validResistors.push({ name: FilterConstants.resistorNames.r6, value: circuitData.r6.value });\r\n // Add capacitors.\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c1, value: circuitData.c1.value });\r\n validCapacitors.push({ name: FilterConstants.capacitorNames.c2, value: circuitData.c2.value });\r\n }\r\n break;\r\n }\r\n }\r\n if (includeInductors) return [validCapacitors, validResistors, validInductors];\r\n else return [validCapacitors, validResistors];\r\n}\r\nfunction _getResistorBOM(stageDetail, validResistors, toleranceComponents, resistorTolerance) {\r\n let billOfMaterialObj = [];\r\n for (let j = 0; j < validResistors.length; j++) {\r\n let boolResistor = _inArray(toleranceComponents, validResistors[j].name);\r\n let toleranceValue = boolResistor[0] ? toleranceComponents[boolResistor[1]].tolerance : resistorTolerance;\r\n let refDesignatorResistor = _referenceDesignator(\r\n stageDetail,\r\n validResistors[j].name,\r\n validResistors[j].value,\r\n toleranceValue,\r\n );\r\n let materialAndPackageResistor = _materialAndPackageForResistors(toleranceValue);\r\n billOfMaterialObj.push({\r\n refDesignator: refDesignatorResistor,\r\n value: validResistors[j].value,\r\n prodURL: null,\r\n package: materialAndPackageResistor.package,\r\n material: validResistors[j].value === 0 ? '' : materialAndPackageResistor.material,\r\n tolerance: validResistors[j].value === 0 ? '' : toleranceValue,\r\n italicRow: validResistors[j].value === 0,\r\n });\r\n }\r\n return billOfMaterialObj;\r\n}\r\nfunction _getCapacitorBOM(stageDetail, validCapacitors, toleranceComponents, capacitorTolerance, boolReferenceBoard) {\r\n let billOfMaterialObj = [];\r\n for (let j = 0; j < validCapacitors.length; j++) {\r\n var boolCapacitor = _inArray(toleranceComponents, validCapacitors[j].name);\r\n let toleranceValue = boolCapacitor[0] ? toleranceComponents[boolCapacitor[1]].tolerance : capacitorTolerance;\r\n let refDesignatorCapacitor = _referenceDesignator(\r\n stageDetail,\r\n validCapacitors[j].name,\r\n validCapacitors[j].value,\r\n toleranceValue,\r\n );\r\n let materialAndPackageCapacitor = _materialAndPackageForCapacitors(\r\n validCapacitors[j].value,\r\n toleranceValue,\r\n boolReferenceBoard,\r\n );\r\n billOfMaterialObj.push({\r\n refDesignator: refDesignatorCapacitor,\r\n value: validCapacitors[j].value,\r\n prodURL: null,\r\n package: materialAndPackageCapacitor.package,\r\n material: materialAndPackageCapacitor.material,\r\n tolerance: toleranceValue,\r\n italicRow: false,\r\n });\r\n }\r\n return billOfMaterialObj;\r\n}\r\nfunction _getInductorBOM(\r\n stageDetail,\r\n validInductors,\r\n toleranceComponents,\r\n inductorTolerance,\r\n specificationsInput,\r\n filterType,\r\n) {\r\n let billOfMaterialObj = [];\r\n for (let j = 0; j < validInductors.length; j++) {\r\n let boolInductor = _inArray(toleranceComponents, validInductors[j].name);\r\n let toleranceValue = boolInductor[0] ? toleranceComponents[boolInductor[1]].tolerance : inductorTolerance;\r\n let refDesignatorInductor = _referenceDesignator(\r\n stageDetail,\r\n validInductors[j].name,\r\n validInductors[j].value,\r\n toleranceValue,\r\n );\r\n let materialAndPackageInductor = _materialAndPackageForInductors(\r\n validInductors[j].value,\r\n toleranceValue,\r\n specificationsInput,\r\n filterType,\r\n );\r\n billOfMaterialObj.push({\r\n refDesignator: refDesignatorInductor,\r\n value: validInductors[j].value,\r\n prodURL: null,\r\n package: materialAndPackageInductor.package,\r\n material: materialAndPackageInductor.material,\r\n tolerance: toleranceValue,\r\n italicRow: false,\r\n });\r\n }\r\n return billOfMaterialObj;\r\n}\r\nfunction _getOpAmpBOM(stageDetail, opAmpSource) {\r\n let billOfMaterialObj = [];\r\n let opAmp = opAmpSource.getOpAmp(stageDetail.actualStage.opAmp);\r\n let refDesignatorOpAmp = _referenceDesignatorOpAmp(opAmp, stageDetail);\r\n let packageAndMaterialsOpAmp = _materialAndPackageForOpAmps(opAmp);\r\n let prodURLString = '{{homeURL}}' + '/' + opAmp.generic.toUpperCase() + '.html';\r\n billOfMaterialObj.push({\r\n refDesignator: refDesignatorOpAmp,\r\n value: opAmp.partNumber,\r\n prodURL: prodURLString,\r\n package: packageAndMaterialsOpAmp.package,\r\n material: packageAndMaterialsOpAmp.material,\r\n tolerance: '',\r\n italicRow: false,\r\n });\r\n return billOfMaterialObj;\r\n}\r\nfunction _getBypassCapacitorsBOM(validBypassCapacitors, stageLetter, boolReferenceBoard) {\r\n let billOfMaterialObj = [];\r\n for (let l = 0; l < validBypassCapacitors.length; l++) {\r\n let bypassCapacitorDesignator = _referenceDesignatorBypassCapacitor(validBypassCapacitors[l].name, stageLetter);\r\n let byPassCapMaterialsAndPackage = _materialAndPackageForCapacitors(\r\n validBypassCapacitors[l].value,\r\n validBypassCapacitors[l].tolerance,\r\n boolReferenceBoard,\r\n );\r\n billOfMaterialObj.push({\r\n refDesignator: bypassCapacitorDesignator,\r\n value: validBypassCapacitors[l].value,\r\n prodURL: null,\r\n package: byPassCapMaterialsAndPackage.package,\r\n material: byPassCapMaterialsAndPackage.material,\r\n tolerance: validBypassCapacitors[l].tolerance,\r\n italicRow: false,\r\n });\r\n }\r\n return billOfMaterialObj;\r\n}\r\nfunction _referenceDesignator(stageDetails, name, value, toleranceValue) {\r\n let refDesignator = '';\r\n let stageImplementation = stageDetails.implementation.replace(/ /g, ''),\r\n stageType = camelize(stageDetails.filterName.substring(10).replace(/_/g, '-')),\r\n stageLetter = stageDetails.stageLetter,\r\n firstOrderLowPass =\r\n stageImplementation === FilterConstants.implementationType.firstOrder &&\r\n stageType === FilterConstants.filterType.lowPass,\r\n firstOrderHighPass =\r\n stageImplementation === FilterConstants.implementationType.firstOrder &&\r\n stageType === FilterConstants.filterType.highPass;\r\n\r\n switch (name) {\r\n case FilterConstants.resistorNames.r1: {\r\n //Major hack: we use R1 internally for first order low pass stage, but display as R2 so it works with eval boards\r\n refDesignator = firstOrderHighPass\r\n ? (refDesignator = FilterConstants.resistorNames.r2 + stageLetter)\r\n : (refDesignator = FilterConstants.resistorNames.r1 + stageLetter);\r\n break;\r\n }\r\n case FilterConstants.resistorNames.r2:\r\n case FilterConstants.resistorNames.r3:\r\n case FilterConstants.resistorNames.r4:\r\n case FilterConstants.resistorNames.r5:\r\n case FilterConstants.resistorNames.r6:\r\n case FilterConstants.inductorNames.l1: {\r\n refDesignator = name + stageLetter;\r\n break;\r\n }\r\n case FilterConstants.capacitorNames.c1: {\r\n let capacitorPackage = _materialAndPackageForCapacitors(value, toleranceValue);\r\n //Major hack: we use C1 internally for first order high pass stage, but display as C2 so it works with eval boards\r\n if (firstOrderLowPass) {\r\n if (capacitorPackage.package === '0603') {\r\n refDesignator = 'C2' + stageLetter;\r\n } else if (capacitorPackage.package === '1206') {\r\n refDesignator = 'C6' + stageLetter;\r\n }\r\n } else {\r\n if (capacitorPackage.package === '0603') {\r\n refDesignator = 'C1' + stageLetter;\r\n } else if (capacitorPackage.package === '1206') {\r\n refDesignator = 'C5' + stageLetter;\r\n }\r\n }\r\n break;\r\n }\r\n case FilterConstants.capacitorNames.c2: {\r\n let capacitorPackage = _materialAndPackageForCapacitors(value, toleranceValue);\r\n if (capacitorPackage.package === '0603') {\r\n refDesignator = 'C2' + stageLetter;\r\n } else if (capacitorPackage.package === '1206') {\r\n refDesignator = 'C6' + stageLetter;\r\n }\r\n break;\r\n }\r\n case FilterConstants.capacitorNames.c3: {\r\n let capacitorPackage = _materialAndPackageForCapacitors(value, toleranceValue);\r\n if (capacitorPackage.package === '0603') {\r\n refDesignator = 'C3' + stageLetter;\r\n } else if (capacitorPackage.package === '1206') {\r\n refDesignator = 'C7' + stageLetter;\r\n }\r\n break;\r\n }\r\n case FilterConstants.capacitorNames.c5: {\r\n // for Multiple Feedback only - c5 is used in all calculations, switch to C3/C7 on schematic/BOM\r\n let capacitorPackage = _materialAndPackageForCapacitors(value, toleranceValue);\r\n if (capacitorPackage.package === '0603') {\r\n refDesignator = 'C3' + stageLetter;\r\n } else if (capacitorPackage.package === '1206') {\r\n refDesignator = 'C7' + stageLetter;\r\n }\r\n break;\r\n }\r\n }\r\n return refDesignator;\r\n}\r\nfunction _referenceDesignatorOpAmp(opAmp, stageDetails) {\r\n // Call function to get Op Amp Reference Designator (U1 or U2)\r\n return getOpAmpReferenceDesignator(opAmp.packageCode, opAmp.numberChannels) + stageDetails.stageLetter;\r\n}\r\nfunction _referenceDesignatorBypassCapacitor(bypassCapacitorName, stageLetter) {\r\n let refDesignatorBypassCap;\r\n if (bypassCapacitorName !== null) {\r\n // get the reference designator for bypass Capacitor\r\n if (bypassCapacitorName === 'bypassGroundPlusVS') {\r\n refDesignatorBypassCap = FilterConstants.bypassCapacitorNames.c9 + stageLetter;\r\n } else if (bypassCapacitorName === 'bypassGroundMinusVS') {\r\n refDesignatorBypassCap = FilterConstants.bypassCapacitorNames.c0 + stageLetter;\r\n }\r\n }\r\n return refDesignatorBypassCap;\r\n}\r\nfunction _finishingTouches(vsMinus) {\r\n var bypassCapacitors = [],\r\n opAmpPin = {};\r\n // add byPass capacitors with tolerance 20% based on dual or single supply\r\n if (vsMinus !== 0) {\r\n // its a dual supply, hence add two tantalum, one connected to +vs and ground and other to -vs and ground\r\n bypassCapacitors.push({\r\n name: 'bypassGroundPlusVS',\r\n value: 0.0000001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n type: 'positive',\r\n });\r\n bypassCapacitors.push({\r\n name: 'bypassGroundMinusVS',\r\n value: 0.0000001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n type: 'negative',\r\n });\r\n } else {\r\n // its a single supply hence add just one tantalum capacitor\r\n bypassCapacitors.push({\r\n name: 'bypassGroundPlusVS',\r\n value: 0.0000001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n type: 'positive',\r\n });\r\n }\r\n return { opAmpPins: opAmpPin, bypassCapacitors: bypassCapacitors };\r\n}\r\nfunction _getReferenceStage() {\r\n let referenceResistors = new Array(),\r\n referenceCapacitors = new Array(),\r\n referenceObject = new Array();\r\n\r\n // we are setting the boolReferenceBoard to true\r\n let boolReferenceBoard = true;\r\n\r\n // get the resistor names, values and tolerance\r\n referenceResistors.push({\r\n designator: FilterConstants.resistorNames.r1 + 'M',\r\n value: 10000,\r\n tolerance: FilterConstants.resistorTolerance.one,\r\n });\r\n referenceResistors.push({\r\n designator: FilterConstants.resistorNames.r2 + 'M',\r\n value: 10000,\r\n tolerance: FilterConstants.resistorTolerance.one,\r\n });\r\n referenceResistors.push({\r\n designator: FilterConstants.resistorNames.r3 + 'M',\r\n value: 4990,\r\n tolerance: FilterConstants.resistorTolerance.one,\r\n });\r\n\r\n //get the capacitor names, values and tolerance\r\n referenceCapacitors.push({\r\n designator: FilterConstants.capacitorNames.c1 + 'M',\r\n value: 0.00001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n });\r\n referenceCapacitors.push({\r\n designator: FilterConstants.capacitorNames.c2 + 'M',\r\n value: 0.00001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n });\r\n referenceCapacitors.push({\r\n designator: FilterConstants.capacitorNames.c3 + 'M',\r\n value: 0.0000001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n });\r\n referenceCapacitors.push({\r\n designator: FilterConstants.capacitorNames.c4 + 'M',\r\n value: 0.0000001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n });\r\n\r\n // get the reference capacitor for the motherboard\r\n referenceCapacitors.push({\r\n designator: FilterConstants.bypassCapacitorNames.c9 + 'M',\r\n value: 0.0000001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n });\r\n\r\n // loop through the reference resistors and get the reference designator, value, package , material and tolerance\r\n for (let k = 0; k < referenceResistors.length; k++) {\r\n let materialAndPackageResistor = _materialAndPackageForResistors(referenceResistors[k].tolerance);\r\n referenceObject.push({\r\n refDesignator: referenceResistors[k].designator,\r\n value: referenceResistors[k].value,\r\n package: materialAndPackageResistor.package,\r\n material: materialAndPackageResistor.material,\r\n tolerance: referenceResistors[k].tolerance,\r\n });\r\n }\r\n // loop through the reference capacitors and get thereference designator, value, package , material and tolerance\r\n for (let m = 0; m < referenceCapacitors.length; m++) {\r\n let materialAndPackageCapacitors = _materialAndPackageForCapacitors(\r\n referenceCapacitors[m].value,\r\n referenceCapacitors[m].tolerance,\r\n boolReferenceBoard,\r\n );\r\n referenceObject.push({\r\n refDesignator: referenceCapacitors[m].designator,\r\n value: referenceCapacitors[m].value,\r\n package: materialAndPackageCapacitors.package,\r\n material: materialAndPackageCapacitors.material,\r\n tolerance: referenceCapacitors[m].tolerance,\r\n });\r\n }\r\n //reference designator, value, package , material and tolerance for the reference Circuit opAmp\r\n referenceObject.push({ refDesignator: 'U1M', value: 'AD8031', package: 'SOIC', material: '', tolerance: '' });\r\n\r\n return referenceObject;\r\n}\r\nfunction _getTantalumCapacitors(vsMinus) {\r\n var tantalumCapacitors = new Array();\r\n // add tantalum capacitors with tolerance 20% based on dual or single supply\r\n if (vsMinus !== 0) {\r\n // its a dual supply, hence add two tantalum, one connected to +vs and ground and other to -vs and ground\r\n tantalumCapacitors.push({\r\n designator: FilterConstants.tantalumCapacitorNames.c101m,\r\n value: 0.00001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n type: 'positive',\r\n });\r\n tantalumCapacitors.push({\r\n designator: FilterConstants.tantalumCapacitorNames.c100m,\r\n value: 0.00001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n type: 'negative',\r\n });\r\n } else {\r\n // its a single supply hence add just one tantalum capacitor\r\n tantalumCapacitors.push({\r\n designator: FilterConstants.tantalumCapacitorNames.c101m,\r\n value: 0.00001,\r\n tolerance: FilterConstants.capacitorTolerance.twenty,\r\n type: 'positive',\r\n });\r\n }\r\n return tantalumCapacitors;\r\n}\r\nfunction _getExtraComponentsBOM(stageDetails, quantity, referenceStageUsed) {\r\n let stageNum = stageDetails.length,\r\n j1String = '',\r\n jMString = '',\r\n stageCounter = stageNum,\r\n originalQuantity = quantity,\r\n adjustedQuantity = quantity;\r\n let resistorAdditions = [],\r\n otherAdditions = [];\r\n\r\n if (quantity > 4 && quantity <= 8) {\r\n stageCounter = stageNum - 4;\r\n adjustedQuantity = 4;\r\n }\r\n\r\n for (let i = 0; i < stageNum; i++) {\r\n j1String += ' J1' + stageDetails[i].stageLetter + ',';\r\n }\r\n\r\n // remove trailing commas\r\n if (j1String.charAt(j1String.length - 1) === ',') {\r\n j1String = j1String.slice(0, -1);\r\n }\r\n\r\n if (originalQuantity <= 4) {\r\n otherAdditions.push({\r\n designators: 'J1M, J2M, J3M, J4M',\r\n value: '67996-206HLF',\r\n package: '2x3 0.1\" ' + '{{header}}',\r\n material: '',\r\n tolerance: '',\r\n count: 4,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n } else {\r\n otherAdditions.push({\r\n designators: '2 x J1M, 2 x J2M, 2 x J3M, 2 x J4M',\r\n value: '67996-206HLF',\r\n package: '2x3 0.1\" ' + '{{header}}',\r\n material: '',\r\n tolerance: '',\r\n count: 8,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n }\r\n\r\n // 4 or 8 - number of stages if this is 0 we don't push any JxM strings\r\n if (stageNum !== originalQuantity) {\r\n while (stageCounter < adjustedQuantity) {\r\n jMString += ' J' + (stageCounter + 1) + 'M,';\r\n stageCounter++;\r\n }\r\n if (jMString.charAt(jMString.length - 1) === ',') {\r\n jMString = jMString.slice(0, -1);\r\n }\r\n otherAdditions.push({\r\n designators: jMString.trim(),\r\n value: '65474-010LF',\r\n package: '0.1\" ' + '{{jumper}}',\r\n material: '',\r\n tolerance: '',\r\n count: originalQuantity - stageNum,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n }\r\n otherAdditions.push({\r\n designators: j1String.trim(),\r\n value: 'BCS-103-L-D-TE',\r\n package: '2x3 0.1\" ' + '{{socket}}',\r\n material: '',\r\n tolerance: '',\r\n count: stageNum,\r\n italicRow: true,\r\n prodURL: null,\r\n }); //check\r\n\r\n // R5M, J5/J6, +VS,-VS,GND\r\n if (stageNum <= 4) {\r\n resistorAdditions.push({\r\n refDesignator: 'R5M',\r\n value: 0,\r\n package: '0603',\r\n material: '',\r\n tolerance: '',\r\n count: 1,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n otherAdditions.push({\r\n designators: 'J5M, J6M',\r\n value: '142-0701-851',\r\n package: '{{sma-jack}}',\r\n material: '',\r\n tolerance: '',\r\n count: 2,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n otherAdditions.push({\r\n designators: '+VS, -VS, GND',\r\n value: '68000-101HLF',\r\n package: '{{test-pin}}',\r\n material: '',\r\n tolerance: '',\r\n count: 3,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n }\r\n // R5M, J5/J6, +VS,-VS,GND, 2 x C3M, IN to Out, REF to REF\r\n else if (stageNum > 4 && stageNum <= 8) {\r\n resistorAdditions.push({\r\n refDesignator: '2 x R5M',\r\n value: 0,\r\n package: '0603',\r\n material: '',\r\n tolerance: '',\r\n count: 2,\r\n prodURL: null,\r\n });\r\n otherAdditions.push({\r\n designators: '2 x J5M, 2 x J6M',\r\n value: '142-0701-851',\r\n package: '{{sma-jack}}',\r\n material: '',\r\n tolerance: '',\r\n count: 4,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n otherAdditions.push({\r\n designators: '2 x +VS, 2 x -VS, 2 x GND',\r\n value: '68000-101HLF',\r\n package: '{{test-pin}}',\r\n material: '',\r\n tolerance: '',\r\n count: 6,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n otherAdditions.push({\r\n designators: '2 x C3M',\r\n value: '100nF',\r\n package: '0603',\r\n material: 'X7R',\r\n tolerance: '20%',\r\n count: 2,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n otherAdditions.push({\r\n designators: 'IN to OUT',\r\n value: '501-1253-ND',\r\n package: '{{sma-male}}',\r\n material: '',\r\n tolerance: '',\r\n count: 1,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n otherAdditions.push({\r\n designators: 'REF to REF',\r\n value: 'wire',\r\n package: '',\r\n material: '',\r\n tolerance: '',\r\n count: 1,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n }\r\n\r\n // JP1/JP2 (adjustedQuantity 1)\r\n if (referenceStageUsed) {\r\n resistorAdditions.push({\r\n refDesignator: 'JP1',\r\n value: 0,\r\n package: '0603',\r\n material: '',\r\n tolerance: '',\r\n count: 1,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n } else {\r\n resistorAdditions.push({\r\n refDesignator: 'JP2',\r\n value: 0,\r\n package: '0603',\r\n material: '',\r\n tolerance: '',\r\n count: 1,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n }\r\n\r\n for (let i = 0; i < stageNum; i++) {\r\n let stageImplementation = stageDetails[i].implementation.replace(/ /g, '');\r\n let stageType = camelize(stageDetails[i].filterName.substring(10).replace(/_/g, '-'));\r\n let stageLetter = stageDetails[i].stageLetter;\r\n if (stageImplementation === FilterConstants.implementationType.firstOrder) {\r\n if (stageType === FilterConstants.filterType.lowPass) {\r\n resistorAdditions.push({\r\n refDesignator: 'R2' + stageLetter,\r\n value: 0,\r\n package: '0603',\r\n material: '',\r\n tolerance: '',\r\n count: 1,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n }\r\n if (stageType === FilterConstants.filterType.highPass) {\r\n resistorAdditions.push({\r\n refDesignator: 'C2' + stageLetter,\r\n value: 0,\r\n package: '0603',\r\n material: '',\r\n tolerance: '',\r\n count: 1,\r\n italicRow: true,\r\n prodURL: null,\r\n });\r\n }\r\n }\r\n }\r\n return { resistorAdditions: resistorAdditions, otherAdditions: otherAdditions };\r\n}\r\nfunction _motherBoardDesignators(vsMinus, needReferenceStage) {\r\n var motherBoardDesignatorArray = new Array(),\r\n refCircuitArray;\r\n\r\n // get the designators for the reference Circuit if any\r\n if (needReferenceStage) {\r\n refCircuitArray = _getReferenceStage();\r\n //loop through the reference circuit Array and push the designators, values, materials, packages, and tolerances to the billOfMaterials\r\n for (let s = 0; s < refCircuitArray.length; s++) {\r\n motherBoardDesignatorArray.push(refCircuitArray[s].refDesignator);\r\n }\r\n }\r\n // get the designators for tantalum capacitor\r\n let motherBoardTantalum = _getTantalumCapacitors(vsMinus);\r\n //loop through the motherboard tantalum capacitors to get the designators\r\n for (var q = 0; q < motherBoardTantalum.length; q++) {\r\n motherBoardDesignatorArray.push(motherBoardTantalum[q].designator);\r\n }\r\n return motherBoardDesignatorArray;\r\n}\r\nfunction _availableEvaluationBoard(opAmp, stageDetail) {\r\n let stageImplementation = stageDetail.implementation.replace(/ /g, '');\r\n let stageType = camelize(stageDetail.filterName.substring(10).replace(/_/g, '-'));\r\n let evalBoardModelNumber = null;\r\n let ebsType = '';\r\n let stageTypeText = '';\r\n switch (stageType) {\r\n case FilterConstants.filterType.lowPass:\r\n ebsType = FilterConstants.evalBoard.type.lowPass;\r\n stageTypeText = dasherize(FilterConstants.filterType.lowPass);\r\n break;\r\n case FilterConstants.filterType.highPass:\r\n ebsType = FilterConstants.evalBoard.type.highPass;\r\n stageTypeText = dasherize(FilterConstants.filterType.highPass);\r\n break;\r\n case FilterConstants.filterType.bandPass:\r\n ebsType = FilterConstants.evalBoard.type.bandPass;\r\n stageTypeText = dasherize(FilterConstants.filterType.bandPass);\r\n break;\r\n case FilterConstants.filterType.bandStop:\r\n ebsType = FilterConstants.evalBoard.type.bandStop;\r\n stageTypeText = dasherize(FilterConstants.filterType.bandStop);\r\n break;\r\n case FilterConstants.filterType.notch:\r\n ebsType = FilterConstants.evalBoard.type.notch;\r\n stageTypeText = dasherize(FilterConstants.filterType.notch);\r\n break;\r\n case FilterConstants.filterType.gain:\r\n ebsType = FilterConstants.evalBoard.type.gain;\r\n stageTypeText = dasherize(FilterConstants.filterType.gain);\r\n break;\r\n default:\r\n ebsType = '';\r\n stageImplementationText = 'none';\r\n break;\r\n }\r\n let ebsImplementation = '';\r\n let stageImplementationText = '';\r\n switch (stageImplementation) {\r\n case FilterConstants.implementationType.firstOrder:\r\n ebsImplementation = FilterConstants.evalBoard.implementation.firstOrder;\r\n // First Order will always be Buffered RC when displayed\r\n stageImplementationText = 'buffered-rc';\r\n break;\r\n case FilterConstants.implementationType.sallenKey:\r\n ebsImplementation = FilterConstants.evalBoard.implementation.sallenKey;\r\n stageImplementationText = dasherize(FilterConstants.implementationType.sallenKey);\r\n break;\r\n case FilterConstants.implementationType.inductor:\r\n ebsImplementation = FilterConstants.evalBoard.implementation.inductor;\r\n stageImplementationText = dasherize(FilterConstants.implementationType.inductor);\r\n break;\r\n case FilterConstants.implementationType.multipleFeedback:\r\n ebsImplementation = FilterConstants.evalBoard.implementation.multipleFeedback;\r\n stageImplementationText = dasherize(FilterConstants.implementationType.multipleFeedback);\r\n break;\r\n case FilterConstants.implementationType.deliyannisFriend:\r\n ebsImplementation = FilterConstants.evalBoard.implementation.deliyannisFriend;\r\n // Note the text conversion here to \"Multiple Feedback\" to display to customer,\r\n // even though internally we denote this stage type as Deliyannis Friend\r\n stageImplementationText = dasherize(FilterConstants.implementationType.multipleFeedback);\r\n break;\r\n case FilterConstants.implementationType.gain:\r\n ebsImplementation = FilterConstants.evalBoard.implementation.gain;\r\n // If the stage type is already gain, the stageImplementation will be blank to\r\n // avoid redundancy as the stage text is type + implementation like Low Pass Sallen Key\r\n // as to avoid something like 'Gain Gain'\r\n stageImplementationText =\r\n stageTypeText !== dasherize(FilterConstants.filterType.gain)\r\n ? dasherize(FilterConstants.implementationType.gain)\r\n : 'none';\r\n break;\r\n default:\r\n ebsImplementation = '';\r\n stageImplementationText = 'none';\r\n break;\r\n }\r\n let ebsOpAmpChannel = '';\r\n let stageChannel = '';\r\n switch (opAmp.numberChannels.toString()) {\r\n case '1':\r\n if (isSOIC(opAmp.packageCode) || isSOICEP(opAmp.packageCode) || isSOT23(opAmp.packageCode)) {\r\n ebsOpAmpChannel = FilterConstants.evalBoard.channel.one;\r\n stageChannel = 'single';\r\n } else {\r\n ebsOpAmpChannel = FilterConstants.evalBoard.channel.other;\r\n stageChannel = 'none';\r\n }\r\n break;\r\n case '2':\r\n if (\r\n isSOIC(opAmp.packageCode) ||\r\n isSOICEP(opAmp.packageCode) ||\r\n isMSOP(opAmp.packageCode) ||\r\n isMSOPEP(opAmp.packageCode)\r\n ) {\r\n ebsOpAmpChannel = FilterConstants.evalBoard.channel.two;\r\n stageChannel = 'dual';\r\n } else {\r\n ebsOpAmpChannel = FilterConstants.evalBoard.channel.other;\r\n stageChannel = 'none';\r\n }\r\n break;\r\n default:\r\n ebsOpAmpChannel = FilterConstants.evalBoard.channel.other;\r\n stageChannel = 'none';\r\n break;\r\n }\r\n\r\n // Build Evaluation Board Model\r\n if (ebsType !== '' && ebsImplementation !== '' && ebsOpAmpChannel !== '') {\r\n evalBoardModelNumber = FilterConstants.evalBoard.fileBase\r\n .replace('{{type}}', ebsType)\r\n .replace('{{implementation}}', ebsImplementation)\r\n .replace('{{channel}}', ebsOpAmpChannel);\r\n }\r\n\r\n return {\r\n evalBoardModelNumber: evalBoardModelNumber,\r\n stageType: stageTypeText,\r\n stageImplementation: stageImplementationText,\r\n stageChannel: stageChannel,\r\n };\r\n}\r\n","const codesFor8PinSOIC = [\r\n 'R-8', //standard SOIC\r\n '05-08-1610', //LTC SOIC\r\n];\r\nconst codesFor8PinSOICEP = [\r\n 'RD-8-1', //SOIC with exposed pad\r\n 'RD-8-2', //SOIC with exposed pad\r\n '05-08-1857', //LTC SOIC with exposed pad\r\n];\r\nconst codesFor8PinMSOP = [\r\n 'RM-8', //standard MSOP\r\n '05-08-1660', //LTC MSOP\r\n];\r\nconst codesFor8PinMSOPEP = [\r\n 'RH-8-1', //MSOP with exposed pad\r\n 'RH-8-3', //MSOP with exposed pad\r\n 'RH-8-4', //MSOP with exposed pad\r\n '05-08-1662', //LTC MSOP with exposed pad\r\n];\r\nconst codesForSOT23 = [\r\n 'RJ-5', //5 pin SOT-23\r\n 'RJ-6', //6 pin SOT-23\r\n '05-08-1635', //LTC 5 pin SOT-23\r\n '05-08-1636', //LTC 6 pin SOT-23\r\n];\r\n\r\nexport function isSOIC(packagecode) {\r\n return packageChecker(packagecode, codesFor8PinSOIC);\r\n}\r\nexport function isSOICEP(packagecode) {\r\n return packageChecker(packagecode, codesFor8PinSOICEP);\r\n}\r\nexport function isMSOP(packagecode) {\r\n return packageChecker(packagecode, codesFor8PinMSOP);\r\n}\r\nexport function isMSOPEP(packagecode) {\r\n return packageChecker(packagecode, codesFor8PinMSOPEP);\r\n}\r\nexport function isSOT23(packagecode) {\r\n return packageChecker(packagecode, codesForSOT23);\r\n}\r\n\r\n// Returns true if package matches an item in the package code list.\r\nexport function packageChecker(codeToCheck, codeListToCheckAgainst) {\r\n return codeListToCheckAgainst.some((item) => {\r\n /* some means at least one returns true */\r\n return codeToCheck.indexOf(item) > -1; /* true if codeToCheck has the item buried in it somewhere */\r\n });\r\n}\r\n","export function getURL(url, fastboot, logger) {\r\n if (fastboot.isFastBoot) {\r\n // You're on the server - no default host\r\n if (url[0] === '/') {\r\n let protocol = fastboot.request.protocol;\r\n if (!protocol) {\r\n protocol = 'http:';\r\n }\r\n let host = '---';\r\n try {\r\n host = fastboot.request.host;\r\n } catch (e) {\r\n logger.error(`Error getting FastBoot host: ${e}`);\r\n throw e;\r\n }\r\n return `${protocol}//${host}${url}`;\r\n } else {\r\n return url;\r\n }\r\n } else {\r\n // in browser\r\n return url;\r\n }\r\n}\r\n\r\nexport function getURLLocale(defaultLocale, fastboot, logger) {\r\n let path;\r\n if (fastboot.isFastBoot) {\r\n // You're on the server - no default host\r\n try {\r\n path = fastboot.request.path;\r\n } catch (e) {\r\n logger.error(`Error getting FastBoot path: ${e}`);\r\n throw e;\r\n }\r\n } else {\r\n path = window.location.pathname;\r\n }\r\n\r\n let pos = path.indexOf('/designtools/');\r\n if (pos !== -1) {\r\n let start = pos + '/designtools/'.length;\r\n let end = start + 2;\r\n return path.substring(start, end);\r\n } else {\r\n return defaultLocale;\r\n }\r\n}\r\n","import { /*userEntryToNumber, */ numberToUserDisplay } from '@ebiz/pretty-num';\n\nconst sweepType = {\n decade: 'DEC',\n linear: 'LIN',\n octave: 'OCT',\n};\n\nconst orderedPulseParams = [\n 'lowValue',\n 'highValue',\n 'delayTime',\n 'riseTime',\n 'fallTime',\n 'pulseWidth',\n 'period',\n 'cycles',\n];\nconst orderedSineParams = ['offset', 'peakAmplitude', 'frequency', 'delayTime', 'dampingFactor', 'phase', 'cycles'];\nconst orderedSweepParams = ['sweepType', 'points', 'startFrequency', 'stopFrequency'];\nconst orderedTransientParams = ['step', 'stopTime', 'startTime', 'maxDelayTime'];\n\nconst DefaultPorts = {\n R: { name: 'resistor', portCount: 2 },\n C: { name: 'capacitor', portCount: 2 },\n L: { name: 'inductor', portCount: 2 },\n D: { name: 'diode', portCount: 2 },\n V: { name: 'voltage', portCount: 2 },\n I: { name: 'current', portCount: 2 },\n};\n\nexport class SpiceNetList {\n constructor(netListTemplate, digits) {\n this._netList = netListTemplate.replace(/\\r?\\n/g, '\\r\\n');\n this._digits = digits ? digits : 3;\n }\n\n get netlist() {\n return this._netList;\n }\n\n getElementValue(name) {\n let lines = this._makeLines(this._netList);\n let portCount = DefaultPorts[name.toUpperCase()[0]].portCount;\n let line = lines[this._findIndex(lines, name)][0];\n let pieces = line.split(' ');\n let newData = pieces.slice(portCount + 1);\n return newData.join(' ');\n }\n\n getElementPortCount(name) {\n let lines = this._makeLines(this._netList);\n let length = lines[this._findIndex(lines, name)][0].trim().split(/\\s+/).length - 2;\n return length ? length : DefaultPorts[name[0]].portCount;\n }\n\n getSubcircuitPortCount(name) {\n let lines = this._makeLines(this._netList);\n return lines[this._findIndex(lines, name)][0].trim().split(/\\s+/).length - 2;\n }\n\n getSubcircuitName() {\n let lines = this._makeLines(this._netList);\n let startLine = lines[this._findIndex(lines, '.subckt')];\n return startLine[0].split(/\\s+/)[1];\n }\n\n getSubcircuitNetList(name) {\n let lines = this._makeLines(this._netList);\n let startLine = lines[this._findSubcircuitIndex(lines, '.subckt', name) + 1];\n let endLine = lines[this._findSubcircuitIndex(lines, '.ends', name) - 1];\n let subcircuit = this._netList.substring(startLine[1], endLine[1] + endLine[0].length);\n return new SpiceNetList(subcircuit);\n }\n\n /* Exported Functions */\n updateTitle(newTitle) {\n let lines = this._makeLines(this._netList);\n let line = lines[0];\n let title = newTitle ? newTitle : '*';\n let value = title.substring(0, 1) == '*' ? title : '*' + title;\n let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n this._netList = result;\n return this;\n }\n\n updateSubcircuitName(oldName, newName) {\n let lines = this._makeLines(this._netList);\n let result = '';\n let startLine = lines[this._findSubcircuitIndex(lines, '.subckt', oldName)];\n let endLine = lines[this._findSubcircuitIndex(lines, '.ends', oldName)];\n result = this._netList.replace(startLine[0], startLine[0].replace(oldName, newName));\n result = result.replace(endLine[0], endLine[0].replace(oldName, newName));\n this._netList = result;\n return this;\n }\n\n updateSubcircuitNetList(name, netlist) {\n let lines = this._makeLines(this._netList);\n let startLine = lines[this._findSubcircuitIndex(lines, '.subckt', name) + 1];\n let endLine = lines[this._findSubcircuitIndex(lines, '.ends', name) - 1];\n let subcircuit = this._netList.substring(startLine[1], endLine[1] + endLine[0].length);\n let result = this._netList.replace(subcircuit, netlist.netlist);\n this._netList = result;\n return this;\n }\n\n updateElementValue(name, value, ports) {\n let lines = this._makeLines(this._netList);\n let oldLine = lines[this._findIndex(lines, name)][0];\n let newLine = this._updateElementValue(name, value, ports);\n let result = this._netList.replace(oldLine, newLine);\n this._netList = result;\n return this;\n }\n\n updateElementValues(valuesList) {\n let lines = this._makeLines(this._netList);\n let result = '';\n valuesList.forEach((value) => {\n let oldLine = lines[this._findIndex(lines, value.name)][0];\n let newLine = this._updateElementValue(value.name, value.value, value.ports);\n result = this._netList.replace(oldLine, newLine);\n this._netList = result;\n });\n return this;\n }\n\n updateACAnalysis(parameters) {\n let lines = this._makeLines(this._netList);\n let line = lines[this._findIndex(lines, '.AC')];\n let pieces = line[0].split(/\\s/);\n if (pieces[0].toLowerCase() !== '.ac') {\n throw new Error(`Invalid simulation type in template; expecting .AC, received ${pieces[0]}`);\n }\n let values = pieces.slice(1);\n let sweepTypes = ['DEC', 'LIN', 'OCT'];\n if (values.length - 1 >= this._getMaxIndex(orderedSweepParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedSweepParams, sweepTypes);\n let value = `.AC ${newValues.join(' ')}`;\n let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n this._netList = result;\n return this;\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n\n updateNoiseAnalysis(parameters) {\n let lines = this._makeLines(this._netList);\n let line = lines[this._findIndex(lines, '.NOISE')];\n let pieces = line[0].split(/\\s/);\n if (pieces[0].toLowerCase() !== '.noise') {\n throw new Error(`Invalid simulation type in template; expecting .NOISE, received ${pieces[0]}`);\n }\n let values = pieces.slice(3);\n let sweepTypes = ['DEC', 'LIN', 'OCT'];\n if (values.length - 1 >= this._getMaxIndex(orderedSweepParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedSweepParams, sweepTypes);\n let value = `.NOISE V(OUT) VNOISE ${newValues.join(' ')}`;\n let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n this._netList = result;\n return this;\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n\n updateTransientAnalysis(parameters) {\n let lines = this._makeLines(this._netList);\n let line = lines[this._findIndex(lines, '.TRAN')];\n let pieces = line[0].split(/\\s/);\n if (pieces[0].toLowerCase() !== '.tran') {\n throw new Error(`Invalid simulation type in template; expecting .TRAN, received ${pieces[0]}`);\n }\n let values = pieces.slice(1);\n if (values.length - 1 >= this._getMaxIndex(orderedTransientParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedTransientParams);\n let value = `.TRAN ${newValues.join(' ')}`;\n let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n this._netList = result;\n return this;\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n\n /* Exported Voltage Source Functions */\n updateDCVoltageSource(name, voltage) {\n let result = this._updateDCSource(name, voltage);\n this._netList = result;\n return this;\n }\n\n updateACVoltageSource(name, voltage, delay) {\n let result = this._updateACSource(name, voltage, delay);\n this._netList = result;\n return this;\n }\n\n updateSineVoltageSource(name, parameters) {\n let result = this._updateSineSource(name, parameters);\n this._netList = result;\n return this;\n }\n\n updatePulseVoltageSource(name, parameters) {\n let result = this._updatePulseSource(name, parameters);\n this._netList = result;\n return this;\n }\n\n /* Exported Current Source Functions */\n updateDCCurrentSource(name, current) {\n let result = this._updateDCSource(name, current);\n this._netList = result;\n return this;\n }\n\n updateACCurrentSource(name, current, delay) {\n let result = this._updateACSource(name, current, delay);\n this._netList = result;\n return this;\n }\n\n updateSineCurrentSource(name, parameters) {\n let result = this._updateSineSource(name, parameters);\n this._netList = result;\n return this;\n }\n\n updatePulseCurrentSource(name, parameters) {\n let result = this._updatePulseSource(name, parameters);\n this._netList = result;\n return this;\n }\n\n /* Internal Functions */\n _makeLines() {\n let index = 0;\n const lines = [];\n const linePattern = /([^\\r\\n]*)\\r?\\n/g;\n const termBuffer = this._netList[this._netList.length - 1] === '\\n' ? this._netList : this._netList + '\\n';\n let line = null;\n while ((line = linePattern.exec(termBuffer)) !== null) {\n lines.push([line[1], index]);\n index = linePattern.lastIndex;\n }\n return lines;\n }\n\n _findIndex(lines, value) {\n let result = lines.findIndex((line) => {\n let pieces = line[0].trim().split(/\\s/);\n return pieces[0].toLowerCase() == value.toLowerCase();\n });\n return result;\n }\n\n _findSubcircuitIndex(lines, keyword, name) {\n let result = lines.findIndex((line) => {\n let pieces = line[0].trim().split(/\\s/);\n return pieces[0].toLowerCase() == keyword.toLowerCase() && pieces[1].toLowerCase() == name.toLowerCase();\n });\n return result;\n }\n\n _updateElementValue(name, value, ports) {\n let lines = this._makeLines(this._netList);\n let line = lines[this._findIndex(lines, name)];\n let subCircuitKeys = ['.subckt', '.ends'];\n let pieces = line[0].split(/\\s/);\n let result = '';\n if (subCircuitKeys.includes(pieces[0].toLowerCase())) {\n result = line[0].replace(pieces[1], value);\n } else {\n result = ports\n ? line[0].replace(\n pieces[ports + 1],\n isNaN(value) ? value : numberToUserDisplay(value, 'Spice', 3, { showZeroes: false })\n )\n : line[0].replace(\n pieces[pieces.length - 1],\n isNaN(value) ? value : numberToUserDisplay(value, 'Spice', 3, { showZeroes: false })\n );\n }\n return result;\n }\n\n _updateDCSource(name, value) {\n let lines = this._makeLines(this._netList);\n let line = lines[this._findIndex(lines, name)];\n let pieces = line[0].split(/\\s/);\n let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n pieces[pieces.length - 1] = newValue;\n let _value = pieces.join(' ');\n let result = this._netList.substring(0, line[1]) + _value + this._netList.substring(line[1] + line[0].length);\n this._netList = result;\n return result;\n }\n\n _updateACSource(name, value, delay) {\n let lines = this._makeLines(this._netList);\n let line = lines[this._findIndex(lines, name)];\n let pieces = line[0].split(/\\s/);\n\n let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n let _pieces = `${newValue}`;\n if (typeof delay !== 'undefined') {\n let newDelay = numberToUserDisplay(delay, 'Spice', this._digits, { showZeroes: false });\n _pieces = `${newValue} ${newDelay}`;\n }\n pieces[pieces.length - 1] = _pieces;\n let _value = pieces.join(' ');\n let result = this._netList.substring(0, line[1]) + _value + this._netList.substring(line[1] + line[0].length);\n this._netList = result;\n return result;\n }\n\n _updateSineSource(name, parameters) {\n let lines = this._makeLines(this._netList);\n let line = lines[this._findIndex(lines, name)];\n let indexOf = line[0].toLowerCase().indexOf('sine');\n if (indexOf == -1) {\n throw new Error(`Template value not containing SINE keyword`);\n }\n let values = line[0].substring(line[0].indexOf('(') + 1, line[0].indexOf(')')).split(' ');\n if (values.length - 1 >= this._getMaxIndex(orderedSineParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedSineParams);\n let value = `${line[0].substring(0, indexOf)}SINE(${newValues.join(' ')})`;\n let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n this._netList = result;\n return result;\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n\n _updatePulseSource(name, parameters) {\n let lines = this._makeLines(this._netList);\n let line = lines[this._findIndex(lines, name)];\n let indexOf = line[0].toLowerCase().indexOf('pulse');\n if (indexOf == -1) {\n throw new Error(`Template value not containing PULSE keyword`);\n }\n let values = line[0].substring(line[0].indexOf('(') + 1, line[0].indexOf(')')).split(' ');\n if (values.length - 1 >= this._getMaxIndex(orderedPulseParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedPulseParams);\n let value = `${line[0].substring(0, indexOf)}PULSE(${newValues.join(' ')})`;\n let result = this._netList.substring(0, line[1]) + value + this._netList.substring(line[1] + line[0].length);\n this._netList = result;\n return result;\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n\n _getMaxIndex(list, parameters) {\n let maxIndex = -1;\n for (let param in parameters) {\n maxIndex = Math.max(\n maxIndex,\n list.findIndex((item) => item == param)\n );\n }\n return maxIndex;\n }\n\n _getUpdatedValues(values, parameters, orderedList, sweepTypes) {\n let result = values.map((value, index) => {\n let isValid = parameters[orderedList[index]] !== null && typeof parameters[orderedList[index]] !== 'undefined';\n if (orderedList[index] == 'sweepType') {\n return isValid && sweepTypes.includes(sweepType[parameters[orderedList[index]]])\n ? sweepType[parameters[orderedList[index]]]\n : value.toUpperCase();\n } else {\n return isValid\n ? numberToUserDisplay(parameters[orderedList[index]], 'Spice', this._digits, { showZeroes: false })\n : value;\n }\n });\n return result;\n }\n}\n","import { numberToUserDisplay } from '@ebiz/pretty-num';\r\nimport { camelize } from '@ember/string';\r\nimport { isNearInfinity } from '../utils/common';\r\nimport { getURL } from '../utils/resource';\r\nimport FilterConstants from '../filter-constants';\r\nimport { capitalizeFirstLetter } from '../utils/format';\r\n\r\nimport * as AditoolsSpice from '@ebiz/aditools-spice/netlists';\r\nimport type IndexModel from '../models/index';\r\nimport type StageDetailResults from '../models/results/sub-results/stage-details';\r\nimport type CircuitDetailResults from '../models/results/sub-results/circuit-details';\r\nimport type CdpService from '../services/cdp';\r\nimport type AssetsService from '../services/assets';\r\nimport type LoggerService from '../services/logger';\r\nimport FastBoot from 'ember-cli-fastboot/services/fastboot';\r\n\r\ninterface CmsData {\r\n Product: {\r\n id: string;\r\n creationDate: string;\r\n lastUpdateDate: string;\r\n launchDate: string;\r\n product: string;\r\n status: string;\r\n url: string;\r\n shortDesc: string;\r\n longDesc: string;\r\n category: string;\r\n categoryID: string;\r\n subCategory: string;\r\n subCategoryID: string;\r\n Videos: Record[] | null;\r\n Webcasts: Record[] | null;\r\n cftls: Record[] | null;\r\n diagrams: Record[] | null;\r\n evalBoards: Record[] | null;\r\n pressReleases: Record[] | null;\r\n AlternativeParts: Record[] | null;\r\n CompanionProduct: Record[] | null;\r\n ProductDocs: [ProductDocs];\r\n };\r\n menuItems: Record[];\r\n}\r\n\r\ninterface ProductDocs {\r\n Features: string;\r\n PstMap: Record;\r\n Specifications: Record[] | null;\r\n Documentation: Record[] | null;\r\n DeviceDrivers: Record[] | null;\r\n Hardware: Record[] | null;\r\n SimulationModels: [SimulationModel];\r\n}\r\n\r\ninterface SimulationModel {\r\n id: string;\r\n dataSheetRevisionNumber: string;\r\n fileSize: string;\r\n fileURL: string;\r\n languageCode: string;\r\n UID: string;\r\n nodename: string;\r\n optionalDesc: string;\r\n publishDate: string;\r\n lastUpdatedDate: string;\r\n releaseDate: string;\r\n title: string;\r\n titlePlain: string;\r\n}\r\n\r\nconst netlistFileList: Record = {\r\n AC: 'ACAnalysis',\r\n NOISE: 'NoiseAnalysis',\r\n TRAN: 'TransientAnalysis',\r\n};\r\n\r\nexport async function getSpiceNetListFiles(\r\n pathURL: string,\r\n mediaURL: string,\r\n locale: string,\r\n opamps: string[],\r\n downloadType: string,\r\n modelFiles: Record,\r\n model: IndexModel,\r\n assetService: AssetsService,\r\n loggerService: LoggerService,\r\n fastbootService: FastBoot,\r\n): Promise<{ downloadFiles: Array; netListParts: Array<{ partName: string; type: string }> }> {\r\n const downloadFiles: Array = [];\r\n const listOfParts = [];\r\n if (checkModelFiles(modelFiles)) {\r\n const modelFile = getModelFile(getMacroModelInfo([...new Set(opamps)], modelFiles));\r\n [...new Set(opamps)].map((item) => {\r\n listOfParts.push({ partName: item, type: 'Netlist' });\r\n });\r\n for (const cir in netlistFileList) {\r\n if (Object.prototype.hasOwnProperty.call(netlistFileList, cir)) {\r\n const netlist = new AditoolsSpice.SpiceNetList(\r\n await getTemplateFile(\r\n getURL(pathURL + netlistFileList[cir] + '.txt', fastbootService, loggerService),\r\n assetService,\r\n ),\r\n );\r\n\r\n // Replace Title\r\n netlist.updateTitle(buildNetListTitle(model, opamps, cir));\r\n\r\n // Replace Input Signal\r\n let minInput = 0,\r\n maxInput = 0,\r\n inputFrequency = 0;\r\n const voltageRangeObject = model.results.components.voltageRange.detailsOfVoltageRange;\r\n if (voltageRangeObject !== null && voltageRangeObject.length > 0) {\r\n minInput = voltageRangeObject[0].nominalVoltageDisplay.maxSignals.inputRange.minimum;\r\n maxInput = voltageRangeObject[0].nominalVoltageDisplay.maxSignals.inputRange.maximum;\r\n inputFrequency = voltageRangeObject[0].nominalVoltageDisplay.maxSignals.inputRange.frequency;\r\n }\r\n const inputSignalExtraParams = getCirInputSignal(netlist, cir, minInput, maxInput, inputFrequency);\r\n\r\n // Replace Voltages\r\n netlist.updateElementValue(\r\n 'VP',\r\n numberToUserDisplay(model.inputs.components.vsPlus, 'Spice', 3, { showZeroes: false }),\r\n );\r\n netlist.updateElementValue(\r\n 'VM',\r\n numberToUserDisplay(model.inputs.components.vsMinus, 'Spice', 3, { showZeroes: false }),\r\n );\r\n\r\n // Replace Simulation Directives\r\n netlist.updateACAnalysis({\r\n sweepType: 'decade',\r\n points: 100,\r\n startFrequency: model.results.specifications.filterFrequencyRange.startFrequency,\r\n stopFrequency: model.results.specifications.filterFrequencyRange.stopFrequency,\r\n });\r\n netlist.updateNoiseAnalysis({\r\n sweepType: 'decade',\r\n points: 100,\r\n startFrequency: model.results.specifications.filterFrequencyRange.startFrequency,\r\n stopFrequency: model.results.specifications.filterFrequencyRange.stopFrequency,\r\n });\r\n netlist.updateTransientAnalysis({\r\n step: 0.000000001,\r\n stopTime: Math.max(...model.results.specifications.timeAxis),\r\n });\r\n\r\n // Build Stages Here\r\n const detailsOfStages: StageDetailResults[] = model.results.components.detailsOfStages;\r\n const detailsOfCircuits: CircuitDetailResults[] = model.results.tolerances.detailsOfCircuits;\r\n let stagesTemplate = '';\r\n for (let i = 0; i < detailsOfStages.length; i++) {\r\n const stageDetail = detailsOfStages[i];\r\n const circuitDetail = detailsOfCircuits[i];\r\n const currentStageLetter = stageDetail ? stageDetail.stageLetter : '';\r\n const stageImplementation = stageDetail ? stageDetail.implementation.replace(/ /g, '') : '';\r\n const stageType = stageDetail ? camelize(stageDetail.filterName.substring(10).replace(/_/g, '-')) : '';\r\n const stageGain = circuitDetail ? (isGainCircuit(circuitDetail) ? 'GainStage' : 'Stage') : '';\r\n const templateStageName = stageImplementation + capitalizeFirstLetter(stageType) + stageGain;\r\n const stageName = stageImplementation + stageType + stageGain;\r\n let templateFile = await getTemplateFile(pathURL + templateStageName + '.txt', assetService);\r\n if (model.results.components.needReferenceStage) {\r\n templateFile = replaceAll(templateFile, 'GND', 'REF');\r\n }\r\n const stageNetlist = new AditoolsSpice.SpiceNetList(templateFile);\r\n stageNetlist.updateSubcircuitName(stageName, stageName + currentStageLetter);\r\n const schematicValues = circuitDetail ? getSchematicValues(circuitDetail, modelFiles) : {};\r\n // Update the values for the component elements and stages\r\n for (const item in schematicValues) {\r\n if (Object.prototype.hasOwnProperty.call(schematicValues, item)) {\r\n let itemValue = schematicValues[item];\r\n if (itemValue) {\r\n if (itemValue === FilterConstants.Limits.NEARLY_INFINITY) {\r\n itemValue = FilterConstants.Limits.INFINITY;\r\n }\r\n stageNetlist.updateElementValue(\r\n item,\r\n typeof itemValue === 'number'\r\n ? numberToUserDisplay(itemValue, 'Spice', 3, { showZeroes: false })\r\n : itemValue,\r\n );\r\n }\r\n }\r\n }\r\n stagesTemplate += stageNetlist.netlist + '\\n\\n';\r\n }\r\n // Update the CirStages Section\r\n let netlistTemplate = netlist.netlist.replace(\r\n '{CirStages}',\r\n getCirStages(detailsOfStages, detailsOfCircuits, model.results.components.needReferenceStage),\r\n );\r\n // Update Reference Voltage, if any\r\n const voltageSupplies = model.results.components.needReferenceStage\r\n ? `VR VREF 0 ${numberToUserDisplay(model.inputs.components.vsPlus / 2, 'Spice', 3, { showZeroes: false })}\\n`\r\n : '';\r\n netlistTemplate = netlistTemplate.replace('{RefVoltage}', voltageSupplies);\r\n // Update extra input signal parameters\r\n netlistTemplate = netlistTemplate\r\n .replace('{dcVoltage}', inputSignalExtraParams.dcVoltage)\r\n .replace('{vNoise}', inputSignalExtraParams.vNoise);\r\n // Comment out unused input signal and simulation directives\r\n switch (cir) {\r\n case 'AC':\r\n netlistTemplate = netlistTemplate.replace('.TRAN', '*.TRAN').replace('.NOISE', '*.NOISE');\r\n break;\r\n case 'NOISE':\r\n netlistTemplate = netlistTemplate.replace('.TRAN', '*.TRAN').replace('.AC', '*.AC').replace('VIN', '* VIN');\r\n break;\r\n case 'TRAN':\r\n netlistTemplate = netlistTemplate.replace('.AC', '*.AC').replace('.NOISE', '*.NOISE');\r\n break;\r\n default:\r\n break;\r\n }\r\n downloadFiles.push({\r\n name: netlistFileList[cir] + '.cir',\r\n value: netlistTemplate + stagesTemplate + modelFile,\r\n location: downloadType === 'all' ? 'SPICE Files\\\\Netlists' : 'Netlists',\r\n type: 'LTSPICE',\r\n });\r\n }\r\n }\r\n } else {\r\n for (const name in modelFiles) {\r\n if (modelFiles[name] !== '') listOfParts.push({ partName: name, type: 'Netlist' });\r\n }\r\n }\r\n if (downloadFiles.length > 0) {\r\n const readmeLocale = locale === 'ru' ? 'en' : locale;\r\n const netlistReadme = await assetService.getAsset(\r\n getURL(`${mediaURL}/${readmeLocale}/designtools/filterwizard/spice/README.txt`, fastbootService, loggerService),\r\n 'TEXT',\r\n );\r\n if (netlistReadme !== null) {\r\n downloadFiles.push({\r\n name: 'README.txt',\r\n value: netlistReadme,\r\n location: downloadType === 'all' ? 'SPICE Files\\\\Netlists' : 'Netlists',\r\n type: 'LTSPICE',\r\n });\r\n }\r\n }\r\n return { downloadFiles: downloadFiles, netListParts: listOfParts };\r\n}\r\n\r\nexport function getModelFiles(opamps: string[], cdp: CdpService): PromiseHash {\r\n const fileHash: PromiseHash = {};\r\n for (let i = 0; i < opamps.length; i++) {\r\n const opamp = opamps[i];\r\n if (opamp) fileHash[opamp] = getModelFileForGeneric(opamp, cdp);\r\n }\r\n return fileHash;\r\n}\r\n\r\nfunction getSchematicValues(\r\n circuit: CircuitDetailResults,\r\n modelFiles: Record,\r\n): Record {\r\n const schematicValues: Record = {};\r\n if (circuit.c1 && circuit.c1.value !== null) {\r\n schematicValues['C1'] = circuit.c1.value ?? '';\r\n }\r\n if (circuit.c2 && circuit.c2.value !== null) {\r\n schematicValues['C2'] = circuit.c2.value ?? '';\r\n }\r\n if (circuit.c5 && circuit.c5.value !== null) {\r\n schematicValues['C5'] = circuit.c5.value ?? '';\r\n }\r\n if (circuit.r1 && circuit.r1.value !== null) {\r\n schematicValues['R1'] = circuit.r1.value ?? '';\r\n }\r\n if (circuit.r2 && circuit.r2.value !== null && !isNearInfinity(circuit.r2.value)) {\r\n schematicValues['R2'] = circuit.r2.value ?? '';\r\n }\r\n if (circuit.r3 && circuit.r3.value !== null && circuit.r4 && circuit.r4.value !== null && isGainCircuit(circuit)) {\r\n schematicValues['R3'] = circuit.r3.value ?? '';\r\n schematicValues['R4'] = circuit.r4.value ?? '';\r\n }\r\n if (circuit.r5 && circuit.r5.value !== null) {\r\n schematicValues['R5'] = circuit.r5.value ?? '';\r\n }\r\n if (circuit.l1 && circuit.l1.value !== null) {\r\n schematicValues['L1'] = circuit.l1.value ?? '';\r\n }\r\n if (circuit.opAmp && circuit.opAmp.name) {\r\n const opampName = circuit.opAmp.name;\r\n if (opampName) {\r\n const modelFile = modelFiles[opampName];\r\n if (modelFile) {\r\n const netlist = new AditoolsSpice.SpiceNetList(modelFile);\r\n const x1 = buildXString(netlist, 0);\r\n schematicValues['X1'] = x1.xString;\r\n }\r\n }\r\n }\r\n return schematicValues;\r\n}\r\n\r\nfunction isGainCircuit(circuit: CircuitDetailResults): boolean {\r\n if (circuit.r3.value !== null && circuit.r4.value !== null) {\r\n if (circuit.implementation === FilterConstants.implementationType.multipleFeedback) {\r\n return false;\r\n } else if (circuit.implementation === FilterConstants.implementationType.deliyannisFriend) {\r\n return !(circuit.r3.value === 0 && isNearInfinity(circuit.r4.value));\r\n } else {\r\n return !(isNearInfinity(circuit.r3.value) && circuit.r4.value === 0);\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction getModelFileForGeneric(partNumber: string, cdp: CdpService): Promise {\r\n return cdp.getCmsData(partNumber.toLowerCase()).then((data: CmsData | null) => {\r\n if (!data) return '';\r\n const json: SimulationModel = data['Product']['ProductDocs'][0]['SimulationModels'][0];\r\n let fileName = '';\r\n if (typeof json !== 'undefined' && json) {\r\n fileName = json['fileURL'];\r\n fileName = fileName.substring(fileName.indexOf('=') + 1);\r\n fileName = _proxyIfLocal(fileName);\r\n const url = `${fileName}?modeltype=spice-models`;\r\n return fetch(url)\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n throw `HTTP Request Failed fetching ${url}: ${response.status} ${response.statusText}`;\r\n }\r\n return response.text();\r\n })\r\n .then((text) => {\r\n if (text.indexOf(`Page Not Found`) !== -1) {\r\n console.log('Unexpected: 200 response status with embedded \"Page Not Found\" for CIR file - url: ', url);\r\n throw `HTTP Request Succeeded but contained Page Not Found - url: ${url}`;\r\n }\r\n return text;\r\n })\r\n .catch(() => {\r\n return '';\r\n });\r\n } else {\r\n console.log(`SPICE model doesn't exist for ${partNumber}`);\r\n return '';\r\n }\r\n });\r\n}\r\n\r\nfunction getMacroModelInfo(\r\n opamps: string[],\r\n modelFiles: Record,\r\n): Record> {\r\n const result: Record> = {};\r\n opamps.forEach((opamp) => {\r\n const modelFile = modelFiles[opamp];\r\n if (modelFile) {\r\n const netlist = new AditoolsSpice.SpiceNetList(modelFile);\r\n const subcktName = modelFile !== '' ? netlist.getSubcircuitName() : opamp;\r\n result[opamp] = { subcktName: subcktName, data: modelFile };\r\n }\r\n });\r\n return result;\r\n}\r\n\r\nfunction getModelFile(macroModelInfo: Record>): string {\r\n let result = '';\r\n const modelFiles: Record = {};\r\n for (const opamp in macroModelInfo) {\r\n if (Object.prototype.hasOwnProperty.call(macroModelInfo, opamp)) {\r\n const infoItem = macroModelInfo[opamp];\r\n if (infoItem && infoItem['subcktName'] && infoItem['data']) {\r\n modelFiles[infoItem['subcktName']] = infoItem['data'];\r\n }\r\n }\r\n }\r\n for (const name in modelFiles) {\r\n if (Object.prototype.hasOwnProperty.call(modelFiles, name)) {\r\n result += modelFiles[name];\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction _proxyIfLocal(url: string): string {\r\n return window.location.hostname === 'localhost' ? url.substring(url.search(/[^/][/][^/]/) + 1) : url;\r\n}\r\n\r\nfunction checkModelFiles(modelFiles: Record): boolean {\r\n const isValid = true;\r\n for (const name in modelFiles) {\r\n if (modelFiles[name] === '') return false;\r\n }\r\n return isValid;\r\n}\r\n\r\nfunction getTemplateFile(templateFileName: string, assetService: AssetsService): Promise {\r\n return assetService.getAsset(templateFileName, 'TEXT').then((content: string) => {\r\n return content;\r\n });\r\n}\r\n\r\nfunction getCirInputSignal(\r\n netlist: AditoolsSpice.SpiceNetList,\r\n cir: string,\r\n MaxInputSignalLow: number,\r\n MaxInputSignalHigh: number,\r\n MaxInputSignalFrequency: number,\r\n): { dcVoltage: string; vNoise: string } {\r\n // calculate average\r\n const iSignalMid = (MaxInputSignalLow + MaxInputSignalHigh) / 2;\r\n const iSignalMidFormatted = numberToUserDisplay(iSignalMid, 'Spice', 3, { showZeroes: false });\r\n\r\n // calculate amplitude\r\n const iSignalAmplitude = (MaxInputSignalHigh - MaxInputSignalLow) / 2;\r\n\r\n let vNoise = '';\r\n let dcVoltage = '';\r\n\r\n switch (cir) {\r\n case 'AC':\r\n netlist.updateSineVoltageSource('VIN', {\r\n offupdate: iSignalMid,\r\n peakAmplitude: iSignalAmplitude,\r\n frequency: MaxInputSignalFrequency,\r\n });\r\n dcVoltage = iSignalMidFormatted;\r\n vNoise = '* VNOISE IN 0 AC 0 DC ' + iSignalMidFormatted;\r\n break;\r\n case 'TRAN':\r\n netlist.updatePulseVoltageSource('VIN', {\r\n lowValue: iSignalMid,\r\n highValue: MaxInputSignalHigh,\r\n delayTime: 0,\r\n riseTime: 0.000000001,\r\n fallTime: 0.000000001,\r\n pulseWidth: 1,\r\n period: 2,\r\n });\r\n dcVoltage = iSignalMidFormatted;\r\n vNoise = '* VNOISE IN 0 AC 0 DC ' + iSignalMidFormatted;\r\n break;\r\n case 'NOISE':\r\n netlist.updateSineVoltageSource('VIN', {\r\n offupdate: iSignalMid,\r\n peakAmplitude: iSignalAmplitude,\r\n frequency: MaxInputSignalFrequency,\r\n });\r\n vNoise = 'VNOISE IN 0 AC 0 DC ' + iSignalMidFormatted;\r\n break;\r\n }\r\n return { dcVoltage: dcVoltage, vNoise: vNoise };\r\n}\r\n\r\nfunction getCirStages(\r\n detailsOfStages: StageDetailResults[],\r\n detailsOfCircuits: CircuitDetailResults[],\r\n refExistsFlag: boolean,\r\n): string {\r\n let cirStages = '';\r\n const refValue = refExistsFlag === true ? 'VREF' : '0';\r\n const stageCount = detailsOfStages.length;\r\n let prevStageLetter = '';\r\n\r\n for (let i = 0; i < stageCount; i++) {\r\n const stageDetail = detailsOfStages[i];\r\n const circuitDetail = detailsOfCircuits[i];\r\n const currentStageLetter = stageDetail ? stageDetail.stageLetter : '';\r\n const stageImplementation = stageDetail ? stageDetail.implementation.replace(/ /g, '') : '';\r\n const stageType = stageDetail ? camelize(stageDetail.filterName.substring(10).replace(/_/g, '-')) : '';\r\n const stageGain = circuitDetail ? (isGainCircuit(circuitDetail) ? 'GainStage' : 'Stage') : '';\r\n const stageImplementationText = stageImplementation + stageType + stageGain;\r\n let oneCirStage = '';\r\n if (stageCount === 1) {\r\n oneCirStage = `X${currentStageLetter} IN OUT VCCG VEEG ${refValue} ${stageImplementationText}${currentStageLetter}`;\r\n } else {\r\n if (i === 0) {\r\n // XA IN OUTA VCCG VEEG 0 {StageTypeAVar}{StageLetterAVar}\r\n oneCirStage = `X${currentStageLetter} IN OUT${currentStageLetter} VCCG VEEG ${refValue} ${stageImplementationText}${currentStageLetter}`;\r\n } else if (i === stageCount - 1) {\r\n // XC OUTB OUT VCCG VEEG 0 {StageTypeCVar}{StageLetterCVar}\r\n oneCirStage = `\\nX${currentStageLetter} OUT${prevStageLetter} OUT VCCG VEEG ${refValue} ${stageImplementationText}${currentStageLetter}`;\r\n } else {\r\n // XB OUTA OUTB VCCG VEEG 0 {StageTypeBVar}{StageLetterBVar}\r\n oneCirStage = `\\nX${currentStageLetter} OUT${prevStageLetter} OUT${currentStageLetter} VCCG VEEG ${refValue} ${stageImplementationText}${currentStageLetter}`;\r\n }\r\n }\r\n prevStageLetter = currentStageLetter;\r\n cirStages += oneCirStage;\r\n }\r\n return cirStages;\r\n}\r\n\r\nfunction buildXString(\r\n netlist: AditoolsSpice.SpiceNetList,\r\n lastFloatIndex: number,\r\n): { xString: string; lastFloatIndex: number } {\r\n const DEFAULT_PIN_COUNT = 5;\r\n const extraPins = netlist.getSubcircuitPortCount('.subckt') - DEFAULT_PIN_COUNT;\r\n const x1Items = [];\r\n let floatIndex = lastFloatIndex;\r\n for (let i = 0; i < extraPins; i++) {\r\n x1Items.push('PDFloat' + (++floatIndex).toString());\r\n }\r\n x1Items.push(netlist.getSubcircuitName());\r\n return { xString: x1Items.join(' '), lastFloatIndex: floatIndex };\r\n}\r\n\r\nfunction replaceAll(str: string, find: string, replace: string): string {\r\n return str.replace(new RegExp(find, 'g'), replace);\r\n}\r\n\r\nfunction buildNetListTitle(model: IndexModel, opAmpList: string[], choice: string): string {\r\n // Set Filter Response + Number of Stages\r\n const responseText =\r\n getOrdinal(model.results.specifications.nthOrder) + ' order ' + model.results.specifications.responseType;\r\n const responseValue = model.results.specifications.filterResponseValue\r\n ? ' ' +\r\n model.results.specifications.filterResponseValue.toString() +\r\n (model.results.specifications.responseType === 'Chebyshev' ? ' dB' : '')\r\n : '';\r\n const stageText =\r\n model.results.specifications.numberOfStages +\r\n (model.results.specifications.numberOfStages > 1 ? ' stages' : ' stage');\r\n\r\n // Set Passband Frequency Text\r\n const passFreq = numberToUserDisplay(model.inputs.specifications.passbandFrequency, 'Spice', 3, {\r\n showZeroes: false,\r\n });\r\n\r\n const netlistType = choice === 'AC' ? 'AC' : choice === 'NOISE' ? 'Noise' : 'Transient';\r\n\r\n return `* ${netlistType} Analysis, ${passFreq} ${\r\n model.inputs.filterType\r\n }, ${responseText}${responseValue}, ${stageText} using ${[...new Set(opAmpList)].join(', ')}`;\r\n}\r\n\r\nfunction getOrdinal(n: number): string {\r\n const s = ['th', 'st', 'nd', 'rd'],\r\n v = n % 100;\r\n return n.toString() + (s[(v - 20) % 10] || s[v] || s[0]);\r\n}\r\n","import { userEntryToNumber, numberToUserDisplay } from '@ebiz/pretty-num';\n\nconst sweepType = {\n linear: 'LIN',\n decade: 'DEC',\n octave: 'OCT',\n};\nconst orderedPulseParams = [\n 'lowValue',\n 'highValue',\n 'delayTime',\n 'riseTime',\n 'fallTime',\n 'pulseWidth',\n 'period',\n 'cycles',\n];\nconst orderedSineParams = ['offset', 'peakAmplitude', 'frequency', 'delayTime', 'dampingFactor', 'phase', 'cycles'];\nconst orderedSweepParams = ['sweepType', 'points', 'startFrequency', 'stopFrequency'];\nconst orderedTransientParams = ['step', 'stopTime', 'startTime', 'maxDelayTime'];\nconst orderedTransientParams2 = ['stopTime'];\nconst directives = ['!.AC', '!.NOISE', '!.TRAN', '!.DC', '!.OP'];\nconst transientRegExp = /^[.+-\\d].*/;\nconst symbolPattern = /(\\S+\\s+)(\\S+)(\\s+)([+-\\d]+)(\\s+)([+-\\d]+)(\\s+)(\\S+)(.*)/;\n\nexport class SpiceSchematic {\n constructor(partsData, schematicTemplate, digits, templateParts) {\n this._partsData = partsData;\n this._schematic = schematicTemplate.replace(/\\r?\\n/g, '\\r\\n');\n this._digits = digits ? digits : 3;\n this._templateParts = templateParts ?? partsData;\n }\n\n get schematic() {\n return this._schematic;\n }\n\n /* Exported Functions */\n getSymbolValue(name) {\n const symbolRange = this._findSymbolByInstanceName(name);\n if (!symbolRange) {\n throw new Error(`Couldn't find ${name} in schematic schematic`);\n }\n const attributeLine = this._findSymbolAttributeByName(symbolRange, 'Value');\n if (!attributeLine) {\n throw new Error(`Couldn't find ${name} Value in schematic`);\n }\n const attributeValue = attributeLine[0].split('Value ')[1];\n return attributeValue;\n }\n\n getSymbolAttribute(name, attribute) {\n const symbolRange = this._findSymbolByInstanceName(name);\n if (!symbolRange) {\n throw new Error(`Couldn't find ${name} in schematic schematic`);\n }\n const attributeLine = this._findSymbolAttributeByName(symbolRange, attribute);\n if (!attributeLine) {\n throw new Error(`Couldn't find ${name} ${attribute} in schematic schematic`);\n }\n const attributeValue = attributeLine[0].split(attribute + ' ')[1];\n return attributeValue;\n }\n\n removeFlagElements(name) {\n if (typeof name == 'undefined' || name == null || name == '') {\n throw new Error(`Target Flag name is required.`);\n }\n const lines = this._makeLines();\n let result = '';\n for (let i = lines.length - 1; i > -1; i--) {\n let line = lines[i];\n if (line[0].toLowerCase().startsWith('flag')) {\n if (!line[0].endsWith(name)) {\n result = line[0] + '\\n' + result;\n }\n } else {\n result = line[0] + '\\n' + result;\n }\n }\n this._schematic = result;\n return this;\n }\n\n selectAnalysisType(analysisType) {\n const lines = this._makeLines();\n let result = '';\n for (let i = lines.length - 1; i > -1; i--) {\n let line = lines[i];\n if (line[0].toLowerCase().startsWith('text') && this._isDirectiveLine(line[0])) {\n if (line[0].toLowerCase().indexOf(`!.${analysisType.toLowerCase()}`) > -1) {\n result = line[0] + '\\r\\n' + result;\n }\n } else {\n result = line[0] + '\\r\\n' + result;\n }\n }\n this._schematic = result;\n return this;\n }\n\n updateFlagName(name, replacementName) {\n if (typeof name == 'undefined' || name == null || name == '') {\n throw new Error(`Target flag name is required.`);\n }\n if (typeof replacementName == 'undefined' || replacementName == null || replacementName == '') {\n throw new Error(`Replacement name for targeted flags is required.`);\n }\n const lines = this._makeLines();\n let result = '';\n for (let i = lines.length - 1; i > -1; i--) {\n let line = lines[i];\n if (line[0].toLowerCase().startsWith('flag')) {\n result = (line[0].endsWith(name) ? line[0].replace(name, replacementName) : line[0]) + '\\n' + result;\n } else {\n result = line[0] + '\\n' + result;\n }\n }\n this._schematic = result;\n return this;\n }\n\n updateSymbol(name, genericPartNumber, deleteIfNotFound, rails) {\n if (rails) {\n this._untiePinsFromRails(name, rails);\n const deleteNotFound = this._replaceSymbol(name, genericPartNumber, rails, deleteIfNotFound);\n if (!deleteNotFound) {\n this._tiePinsToRails(name, genericPartNumber, rails);\n }\n } else {\n this._replaceSymbol(name, genericPartNumber, rails, deleteIfNotFound);\n }\n\n return this;\n }\n\n updateSymbolValue(name, value) {\n const symbolRange = this._findSymbolByInstanceName(name);\n if (!symbolRange) {\n throw new Error(`No symbol found with reference designator ${name}`);\n }\n const attributeLine = this._findSymbolAttributeByName(symbolRange, 'Value');\n if (!attributeLine) {\n throw new Error(`Attribute Value not found for reference designator ${name}`);\n }\n const attributePattern = /(\\S+\\s+\\S+\\s+)(.*)/;\n const pieces = attributePattern.exec(attributeLine[0]);\n if (!pieces) {\n throw new Error(`Attribute Value for ${name} doesn't have expected structure`);\n }\n let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n const newSymattr = attributeLine[0].replace(attributePattern, `$1${newValue}`);\n let result =\n this._schematic.substring(0, attributeLine[1]) +\n newSymattr +\n this._schematic.substring(attributeLine[1] + attributeLine[0].length);\n this._schematic = result;\n return this;\n }\n\n updateSymbolAttribute(name, attribute, value) {\n this._schematic = this._updateSymbolAttribute(name, attribute, value);\n return this;\n }\n\n updateSubcircuitSymbol(name, symbolName) {\n const symbolRange = this._findSymbolByInstanceName(name);\n const symbolPieces = symbolPattern.exec(symbolRange[0][0]);\n if (!symbolPieces) {\n throw new Error(`The SYMBOL row for the specified reference designator doesn't have the expected format.`);\n }\n let part = {\n name: symbolPieces[2],\n x: parseInt(symbolPieces[4]),\n y: parseInt(symbolPieces[6]),\n transform: symbolPieces[8],\n };\n\n const newSymbol = symbolRange[0][0].replace(\n symbolPattern,\n `$1${symbolName}$3${part.x}$5${part.y}$7${part.transform}$9`\n );\n let result =\n this._schematic.substring(0, symbolRange[0][1]) +\n newSymbol +\n this._schematic.substring(symbolRange[0][1] + symbolRange[0][0].length);\n this._schematic = result;\n return this;\n }\n\n updateTextContent(placeholderText, replacementText) {\n const lines = this._makeLines();\n let textLines = lines.filter((line) => line[0].toLowerCase().startsWith('text') && line[0].indexOf(' !') == -1);\n let result = '';\n textLines.forEach((line) => {\n let segments = line[0].match(/[\\w'\\w;]+(?:[^\\w\\n]+[\\w'\\w;]+){0,4}/g);\n if (placeholderText == '') {\n result = this._schematic.replace(line[0], `${segments[0]} ${replacementText}`);\n this._schematic = result;\n } else {\n if (segments[1].includes(placeholderText)) {\n let newTextContent = segments[1].replace(placeholderText, replacementText);\n result = this._schematic.replace(line[0], `${segments[0]} ${newTextContent}`);\n this._schematic = result;\n }\n }\n });\n return this;\n }\n\n /* Exported Voltage Source Functions */\n updateDCVoltageSource(name, voltage) {\n let result = this._updateDCSource(name, voltage);\n this._schematic = result;\n return this;\n }\n\n updateACVoltageSource(name, voltage, phase) {\n let result = this._updateACSource(name, voltage, phase);\n this._schematic = result;\n return this;\n }\n\n updateSineVoltageSource(name, parameters) {\n let result = this._updateSineSource(name, parameters);\n this._schematic = result;\n return this;\n }\n\n updatePulseVoltageSource(name, parameters) {\n let result = this._updatePulseSource(name, parameters);\n this._schematic = result;\n return this;\n }\n\n /* Exported Current Source Functions */\n updateDCCurrentSource(name, current) {\n let result = this._updateDCSource(name, current);\n this._schematic = result;\n return this;\n }\n\n updateACCurrentSource(name, current, phase) {\n let result = this._updateACSource(name, current, phase);\n this._schematic = result;\n return this;\n }\n\n updateSineCurrentSource(name, parameters) {\n let result = this._updateSineSource(name, parameters);\n this._schematic = result;\n return this;\n }\n\n updatePulseCurrentSource(name, parameters) {\n let result = this._updatePulseSource(name, parameters);\n this._schematic = result;\n return this;\n }\n\n /* Exported Simulation Directive Functions */\n updateTransientAnalysis(parameters) {\n let line = this._findSimulationTypeCommand('tran');\n if (!line) {\n throw new Error(`No transient simulation directive found in schematic`);\n }\n let segments = line[0].split(' !.');\n let pieces = segments[segments.length - 1].split(' ');\n let values = pieces.slice(1);\n let orderedParams = this._useSecondTransientSyntax(values) ? orderedTransientParams2 : orderedTransientParams;\n if (this._checkParameters(parameters, orderedParams)) {\n if (values.length - 1 >= this._getMaxIndex(orderedParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedParams);\n let value = `TRAN ${newValues.join(' ')}`;\n let result = this._updateSimulationType(value);\n this._schematic = result;\n return this;\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n throw new Error(`One of the parameters provided is not valid for the directive used in the template`);\n }\n\n updateACAnalysis(parameters) {\n let line = this._findSimulationTypeCommand('ac');\n if (!line) {\n throw new Error(`No ac simulation directive found in schematic`);\n }\n let segments = line[0].split(' !.');\n let pieces = segments[segments.length - 1].split(' ');\n let values = pieces.slice(1);\n let sweepTypes = ['DEC', 'LIN', 'OCT'];\n if (values.length - 1 >= this._getMaxIndex(orderedSweepParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedSweepParams, sweepTypes);\n let value = `AC ${newValues.join(' ')}`;\n let result = this._updateSimulationType(value);\n this._schematic = result;\n return this;\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n\n updateNoiseAnalysis(parameters) {\n let line = this._findSimulationTypeCommand('noise');\n if (!line) {\n throw new Error(`No noise simulation directive found in schematic`);\n }\n let segments = line[0].split(' !.');\n let pieces = segments[segments.length - 1].split(' ');\n let values = pieces.slice(3);\n let sweepTypes = ['DEC', 'LIN', 'OCT'];\n if (values.length - 1 >= this._getMaxIndex(orderedSweepParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedSweepParams, sweepTypes);\n let value = `NOISE ${pieces[1]} ${pieces[2]} ${newValues.join(' ')}`;\n let result = this._updateSimulationType(value);\n this._schematic = result;\n return this;\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n\n getComponentValue(name) {\n const valueAsString = this.getSymbolAttribute(name, 'Value');\n return userEntryToNumber(valueAsString);\n }\n\n setComponentValue(name, value) {\n const displayValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n let result = this._updateSymbolAttribute(name, 'Value', displayValue);\n this._schematic = result;\n return this;\n }\n\n /* Internal Functions */\n _getOffset(newPartValue, oldPartValue) {\n return newPartValue - oldPartValue;\n }\n\n _findSymbolByInstanceName(name) {\n const lines = this._makeLines();\n let startBlock = -1;\n let endBlock = -1;\n let match = false;\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index];\n const pieces = line[0].split(/\\s/);\n if (pieces.length < 1) {\n continue;\n }\n switch (pieces[0].toLowerCase()) {\n case 'symbol':\n if (match) {\n endBlock = index;\n } else {\n startBlock = index;\n }\n break;\n case 'symattr':\n if (\n pieces.length > 2 &&\n pieces[1].toLowerCase() === 'instname' &&\n pieces[2].toLowerCase() === name.toLowerCase()\n ) {\n match = true;\n }\n break;\n case 'window':\n case 'pinattr':\n break;\n default:\n if (match) {\n endBlock = index;\n }\n }\n if (match && startBlock >= 0 && endBlock >= 0) {\n return lines.slice(startBlock, endBlock);\n }\n }\n if (match && startBlock >= 0) {\n return lines.slice(startBlock, lines.length);\n }\n return;\n }\n\n _findSymbolAttributeByName(schematicLines, name) {\n const line = schematicLines.find((line) => {\n const pieces = line[0].split(/\\s/);\n if (pieces.length < 1) {\n return false;\n }\n return pieces[0].toLowerCase() === 'symattr' && pieces[1].toLowerCase() === name.toLowerCase();\n });\n return line;\n }\n\n _findSimulationTypeCommand(type) {\n const SIMCMDS = ['!.ac', '!.dc', '!.noise', '!.op', '!.tf', '!.tran'];\n const lines = this._makeLines();\n const line = lines.find((value) => {\n const pieces = value[0].split(/\\s/);\n return (\n pieces.length > 6 &&\n pieces[0].toLowerCase() === 'text' &&\n SIMCMDS.includes(pieces[5].toLowerCase()) &&\n pieces[5].toLowerCase() === '!.' + type.toLowerCase()\n );\n });\n return line;\n }\n\n _makeLines() {\n let index = 0;\n const lines = [];\n const linePattern = /([^\\r\\n]*)\\r?\\n/g;\n const schematicTerm =\n this._schematic[this._schematic.length - 1] === '\\n' ? this._schematic : this._schematic + '\\n';\n let line = null;\n while ((line = linePattern.exec(schematicTerm)) !== null) {\n lines.push([line[1], index]);\n index = linePattern.lastIndex;\n }\n return lines;\n }\n\n _findIndex(lines, value) {\n let result = lines.findIndex((line) => {\n let pieces = line[0].split(/\\s/);\n return pieces[0].toLowerCase() == value.toLowerCase();\n });\n return result;\n }\n\n _updateSymbolAttribute(name, attribute, value) {\n const symbolRange = this._findSymbolByInstanceName(name);\n if (!symbolRange) {\n throw new Error(`No symbol found with reference designator ${name}`);\n }\n const attributeLine = this._findSymbolAttributeByName(symbolRange, attribute);\n if (!attributeLine) {\n throw new Error(`Attribute ${attribute} not found for reference designator ${name}`);\n }\n const attributePattern = /(\\S+\\s+\\S+\\s+)(.*)/;\n const pieces = attributePattern.exec(attributeLine[0]);\n if (!pieces) {\n throw new Error(`Attribute ${attribute} for ${name} doesn't have expected structure`);\n }\n const newSymattr = attributeLine[0].replace(attributePattern, `$1${value}`);\n let result =\n this._schematic.substring(0, attributeLine[1]) +\n newSymattr +\n this._schematic.substring(attributeLine[1] + attributeLine[0].length);\n return result;\n }\n\n _updateSimulationType(type) {\n const SIMCMDS = ['ac', 'dc', 'noise', 'op', 'tf', 'tran'];\n const bits = type.toLowerCase().split(/\\s+/);\n if (bits.length > 0 && SIMCMDS.includes(bits[0])) {\n const command = this._findSimulationTypeCommand(bits[0]);\n if (!command) {\n throw new Error(`Couldn't find a simulation type command in the schematic`);\n }\n const simulationPattern = /(\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+)(.*)/;\n const pieces = simulationPattern.exec(command[0]);\n if (!pieces) {\n throw new Error(`Simulation type command doesn't have expected structure`);\n }\n const newCommand = command[0].replace(simulationPattern, `$1${'!.' + type}`);\n let result =\n this._schematic.substring(0, command[1]) +\n newCommand +\n this._schematic.substring(command[1] + command[0].length);\n return result;\n }\n throw new Error(`Invalid or missing command in '${type}'`);\n }\n\n _updateDCSource(name, value) {\n let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n return this._updateSymbolAttribute(name, 'Value', newValue);\n }\n\n _updateACSource(name, value, phase) {\n let newValue = numberToUserDisplay(value, 'Spice', this._digits, { showZeroes: false });\n let _value = `${newValue}`;\n if (typeof phase !== 'undefined') {\n let newPhase = numberToUserDisplay(phase, 'Spice', this._digits, { showZeroes: false });\n _value = `${newValue} ${newPhase}`;\n }\n return this._updateSymbolAttribute(name, 'Value', _value);\n }\n\n _updateSineSource(name, parameters) {\n let templateValue = this.getSymbolAttribute(name, 'Value');\n if (!templateValue.toLowerCase().startsWith('sine')) {\n throw new Error(`Template value not starting with SINE keyword`);\n }\n let values = templateValue.substring(templateValue.indexOf('(') + 1, templateValue.indexOf(')')).split(' ');\n if (values.length - 1 >= this._getMaxIndex(orderedSineParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedSineParams);\n let value = `SINE(${newValues.join(' ')})`;\n return this._updateSymbolAttribute(name, 'Value', value);\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n\n _updatePulseSource(name, parameters) {\n let templateValue = this.getSymbolAttribute(name, 'Value');\n if (!templateValue.toLowerCase().startsWith('pulse')) {\n throw new Error(`Template value not starting with PULSE keyword`);\n }\n let values = templateValue.substring(templateValue.indexOf('(') + 1, templateValue.indexOf(')')).split(' ');\n if (values.length - 1 >= this._getMaxIndex(orderedPulseParams, parameters)) {\n let newValues = this._getUpdatedValues(values, parameters, orderedPulseParams);\n let value = `PULSE(${newValues.join(' ')})`;\n return this._updateSymbolAttribute(name, 'Value', value);\n }\n throw new Error(`One of the parameters provided is not contained in the sequence of values in the template`);\n }\n\n _validateSymbolPath(templateSymbolPath, targetSymbolPath) {\n let result = true;\n let templatePath = templateSymbolPath.substring(0, templateSymbolPath.lastIndexOf('\\\\'));\n let targetPath = targetSymbolPath.substring(0, targetSymbolPath.lastIndexOf('\\\\'));\n result = targetPath.toLowerCase() == templatePath.toLowerCase() ? true : false;\n return result;\n }\n\n _isDirectiveLine(line) {\n let result = false;\n for (let i = 0; i < directives.length; i++) {\n result = line.toLowerCase().indexOf(directives[i].toLowerCase()) > -1;\n if (result === true) return result;\n }\n return result;\n }\n\n _getMaxIndex(list, parameters) {\n let maxIndex = -1;\n for (let param in parameters) {\n maxIndex = Math.max(\n maxIndex,\n list.findIndex((item) => item == param)\n );\n }\n return maxIndex;\n }\n\n _getUpdatedValues(values, parameters, orderedList, sweepTypes) {\n let result = values.map((value, index) => {\n let isValid = parameters[orderedList[index]] !== null && typeof parameters[orderedList[index]] !== 'undefined';\n if (orderedList[index] == 'sweepType') {\n return isValid && sweepTypes.includes(sweepType[parameters[orderedList[index]]])\n ? sweepType[parameters[orderedList[index]]]\n : value.toUpperCase();\n } else {\n return isValid\n ? numberToUserDisplay(parameters[orderedList[index]], 'Spice', this._digits, { showZeroes: false })\n : value;\n }\n });\n return result;\n }\n\n _useSecondTransientSyntax(values) {\n let result = false;\n result = values.length == 1 || (values.length > 1 && !transientRegExp.test(values[1]));\n return result;\n }\n\n _checkParameters(parameters, orderedParams) {\n let result = true;\n for (let param in parameters) {\n result = orderedParams.indexOf(param) > -1 ? true : false;\n if (!result) return result;\n }\n return result;\n }\n\n _untiePinsFromRails(referenceDesignator, rails) {\n const part = this._getPartPieces(referenceDesignator);\n const templateSpiceNum = this._getTemplateSpiceNum(part);\n // If we couldn't find the part number in spice-parts, bail.\n if (!templateSpiceNum) {\n throw new Error(\n `Unable to find symbol path \"${part.name}\", referenced in template, in spiceParts collection. All parts in template to be updated must appear in the collection.`\n );\n }\n\n let result = this._schematic;\n const spicePart = templateSpiceNum[1];\n if (spicePart && spicePart.pins) {\n const applicablePins = this._getApplicablePins(spicePart, rails);\n for (const pin of applicablePins) {\n if (pin.x && pin.y) {\n const pinOffset = this._determineSymbolPinAdjustment(\n spicePart.offsetX,\n spicePart.offsetY,\n pin.x,\n pin.y,\n part.transform\n );\n const pinEnd = { x: pinOffset.x + part.x, y: pinOffset.y + part.y };\n const wireEnd = this._getStubWireEnd(part.transform, pin.orientation ?? '', pinEnd.x, pinEnd.y, 25);\n result = this._removeWireStubAt(result, pinEnd.x, pinEnd.y, wireEnd.x, wireEnd.y);\n result = this._removeFlagAt(result, wireEnd.x, wireEnd.y);\n }\n }\n }\n\n this._schematic = result;\n }\n\n _replaceSymbol(referenceDesignator, newPartNumber, rails, deleteIfNotFound) {\n const symbolRange = this._findSymbolByInstanceName(referenceDesignator);\n if (!symbolRange) {\n throw new Error('Reference designator ' + referenceDesignator + ' not found.');\n }\n let part = this._getPartPieces(referenceDesignator);\n const sourcePart = Object.assign({}, part);\n const templateSpiceNum = this._getTemplateSpiceNum(part);\n // If we couldn't find the part number in spice-parts, bail.\n if (!templateSpiceNum) {\n throw new Error(\n `Unable to find symbol path \"${sourcePart.name}\", referenced in template, in spiceParts collection. All parts in template to be updated must appear in the collection.`\n );\n }\n\n let result = '';\n const sourcePartDetails = templateSpiceNum[1];\n const targetPartDetails = this._partsData[newPartNumber];\n // Adjust (x,y) based on difference between parts (x,y)\n if (targetPartDetails) {\n part.name = targetPartDetails.symbolPath;\n if (rails) {\n const positionAdjustment = this._determineSymbolPinAdjustment(\n sourcePartDetails.offsetX,\n sourcePartDetails.offsetY,\n targetPartDetails.offsetX,\n targetPartDetails.offsetY,\n part.transform\n );\n part.x = sourcePart.x + positionAdjustment.x;\n part.y = sourcePart.y + positionAdjustment.y;\n } else {\n part.x = sourcePart.x + this._getOffset(targetPartDetails.offsetX, sourcePartDetails.offsetX);\n part.y = sourcePart.y + this._getOffset(targetPartDetails.offsetY, sourcePartDetails.offsetY);\n }\n\n const newSymbol = symbolRange[0][0].replace(\n symbolPattern,\n `$1${part.name}$3${part.x}$5${part.y}$7${part.transform}$9`\n );\n\n result =\n this._schematic.substring(0, symbolRange[0][1]) +\n newSymbol +\n this._schematic.substring(symbolRange[0][1] + symbolRange[0][0].length);\n\n deleteIfNotFound = false;\n } else {\n if (deleteIfNotFound === true) {\n // Since targetPartDetails is undefined, we use the x and y values of the template part to place the text.\n const newTextLine = `TEXT ${sourcePart.x} ${sourcePart.y} Left 2 ;Schematic generator \\\\ncould not find ${\n newPartNumber ? newPartNumber : `blank part`\n } \\\\nin LTspice parts library`;\n const newSymbol = symbolRange[0][0].replace(symbolPattern, newTextLine);\n result =\n this._schematic.substring(0, symbolRange[0][1]) +\n newSymbol +\n this._schematic.substring(\n symbolRange[symbolRange.length - 1][1] + symbolRange[symbolRange.length - 1][0].length\n );\n } else {\n throw new Error(\n `Unable to find ${newPartNumber ? newPartNumber : 'blank'} target partNumber in spiceParts collection`\n );\n }\n }\n\n this._schematic = result;\n return deleteIfNotFound;\n }\n\n _tiePinsToRails(referenceDesignator, newPartNumber, rails) {\n const part = this._getPartPieces(referenceDesignator);\n const templateSpiceNum = this._getTemplateSpiceNum(part);\n // If we couldn't find the part number in spice-parts, bail.\n if (!templateSpiceNum) {\n throw new Error(\n `Unable to find symbol path \"${part.name}\", referenced in template, in spiceParts collection. All parts in template to be updated must appear in the collection.`\n );\n }\n\n let result = this._schematic;\n const spicePart = this._partsData[newPartNumber];\n if (spicePart && spicePart.pins) {\n const applicablePins = this._getApplicablePins(spicePart, rails);\n for (const pin of applicablePins) {\n if (pin.x && pin.y && pin.connection) {\n const pinOffset = this._determineSymbolPinAdjustment(\n spicePart.offsetX,\n spicePart.offsetY,\n pin.x,\n pin.y,\n part.transform\n );\n const pinEnd = { x: pinOffset.x + part.x, y: pinOffset.y + part.y };\n const wireEnd = this._getStubWireEnd(part.transform, pin.orientation ?? '', pinEnd.x, pinEnd.y, 25);\n result = this._addWireStubAt(result, pinEnd.x, pinEnd.y, wireEnd.x, wireEnd.y);\n result = this._addFlagAt(result, wireEnd.x, wireEnd.y, rails[pin.connection]);\n }\n }\n }\n\n this._schematic = result;\n }\n\n _getApplicablePins(partDetails, rails) {\n const railKeys = Object.keys(rails);\n const applicablePins = partDetails.pins.filter((value) => {\n return value.connection && railKeys.includes(value.connection);\n });\n\n return applicablePins;\n }\n\n _getPartPieces(referenceDesignator) {\n const symbolRange = this._findSymbolByInstanceName(referenceDesignator);\n if (!symbolRange) {\n throw new Error('Reference designator ' + referenceDesignator + ' not found.');\n }\n const pieces = symbolPattern.exec(symbolRange[0][0]);\n if (!pieces) {\n throw new Error(\"The SYMBOL row for the specified reference designator doesn't have the expected format.\");\n }\n\n const part = {\n name: pieces[2],\n x: parseInt(pieces[4]),\n y: parseInt(pieces[6]),\n transform: pieces[8],\n };\n\n return part;\n }\n\n _getTemplateSpiceNum(part) {\n let templateSpiceNum = Object.entries(this._templateParts).find((partData) => {\n return partData[1].symbolPath === part.name;\n });\n if (!templateSpiceNum) {\n if (this._templateParts === this._partsData) {\n throw new Error(\n `Unable to find symbol path \"${part.name}\", referenced in template, in spiceParts collection. All parts in template to be updated must appear in this collection unless a separate templateParts collection is supplied.`\n );\n } else {\n templateSpiceNum = Object.entries(this._partsData).find((partData) => {\n return partData[1].symbolPath === part.name;\n });\n if (!templateSpiceNum) {\n throw new Error(\n `Unable to find symbol path \"${part.name}\", referenced in template, in either templateParts collection or partsData collection.`\n );\n }\n }\n }\n return templateSpiceNum;\n }\n\n _determineSymbolPinAdjustment(partX, partY, pinX, pinY, orientation) {\n const xyRotationTable = {\n R0: { x: 1, y: 1 },\n R90: { x: -1, y: 1 },\n R180: { x: -1, y: -1 },\n R270: { x: 1, y: -1 },\n M0: { x: -1, y: 1 },\n M90: { x: 1, y: 1 },\n M180: { x: 1, y: -1 },\n M270: { x: -1, y: -1 },\n };\n //The orientation we read from the file has to be checked against our list at some point.\n //Here is as good as any.\n //see: https://dev.to/kingdaro/indexing-objects-in-typescript-1cgi\n function _hasKey(obj, key) {\n return key in obj;\n }\n // Adjust (x,y) based on difference between parts (x,y)\n const xDiff = pinX - partX;\n const yDiff = pinY - partY;\n let adjustment = { x: NaN, y: NaN };\n if (_hasKey(xyRotationTable, orientation)) {\n adjustment.x = xDiff * xyRotationTable[orientation].x;\n adjustment.y = yDiff * xyRotationTable[orientation].y;\n } else {\n throw new Error(\n 'Orientation read from file is ' + orientation + '. This is not an orientation we know how to parse'\n );\n }\n return adjustment;\n }\n\n _getStubWireEnd(partDirection, pinDirection, xin, yin, length) {\n const xyRotationTable = {\n R0: { x: 1, y: 1 },\n R90: { x: -1, y: 1 },\n R180: { x: -1, y: -1 },\n R270: { x: 1, y: -1 },\n M0: { x: -1, y: 1 },\n M90: { x: 1, y: 1 },\n M180: { x: 1, y: -1 },\n M270: { x: -1, y: -1 },\n };\n const rotation = xyRotationTable[partDirection];\n const relativeEnd =\n pinDirection === 'top'\n ? { x: 0, y: -length }\n : pinDirection === 'bottom'\n ? { x: 0, y: length }\n : pinDirection === 'left'\n ? { x: -length, y: 0 }\n : pinDirection === 'right'\n ? { x: length, y: 0 }\n : { x: 0, y: 0 };\n\n return {\n x: xin + relativeEnd.x * rotation.x,\n y: yin + relativeEnd.y * rotation.y,\n };\n }\n\n _removeWireStubAt(schematic, x1, y1, x2, y2) {\n const regex = /wire\\s+(-?\\d+(.\\d+)?)\\s+(-?\\d+(.\\d+)?)\\s+(-?\\d+(.\\d+)?)\\s+(-?\\d+(.\\d+)?)/gi;\n let matched;\n while ((matched = regex.exec(schematic))) {\n const offset = schematic[regex.lastIndex] === '\\r' ? 2 : 1;\n if (\n Math.round(parseFloat(matched[1])) === Math.round(x1) &&\n Math.round(parseFloat(matched[3])) === Math.round(y1) &&\n Math.round(parseFloat(matched[5])) === Math.round(x2) &&\n Math.round(parseFloat(matched[7])) === Math.round(y2)\n ) {\n return schematic.substring(0, matched.index) + schematic.substring(regex.lastIndex + offset);\n }\n }\n return schematic;\n }\n\n _addWireStubAt(schematic, x1, y1, x2, y2) {\n const pos = schematic.toLowerCase().indexOf('\\nsymbol');\n if (pos > 0) {\n const separator = schematic[pos - 1] !== '\\r' ? '\\n' : '\\r\\n';\n return (\n schematic.substring(0, pos + 1) + `WIRE ${x1} ${y1} ${x2} ${y2}${separator}` + schematic.substring(pos + 1)\n );\n }\n return schematic;\n }\n\n _removeFlagAt(schematic, x, y) {\n const regex = /flag\\s+(-?\\d+(.\\d+)?)\\s+(-?\\d+(.\\d+)?)\\s+[\\w\\d_-]+/gi;\n let matched;\n while ((matched = regex.exec(schematic))) {\n const offset = schematic[regex.lastIndex] === '\\r' ? 2 : 1;\n if (\n Math.round(parseFloat(matched[1])) === Math.round(x) &&\n Math.round(parseFloat(matched[3])) === Math.round(y)\n ) {\n return schematic.substring(0, matched.index) + schematic.substring(regex.lastIndex + offset);\n }\n }\n return schematic;\n }\n\n _addFlagAt(schematic, x, y, flagName) {\n const pos = schematic.toLowerCase().indexOf('\\nsymbol');\n if (pos > 0) {\n const separator = schematic[pos - 1] !== '\\r' ? '\\n' : '\\r\\n';\n return schematic.substring(0, pos + 1) + `FLAG ${x} ${y} ${flagName}${separator}` + schematic.substring(pos + 1);\n }\n return schematic;\n }\n}\n","import ENV from '../config/environment';\r\nimport { numberToUserDisplay } from '@ebiz/pretty-num';\r\nimport { camelize } from '@ember/string';\r\nimport { isNearInfinity } from '../utils/common';\r\nimport { getURL } from '../utils/resource';\r\nimport { capitalizeFirstLetter, uncapitalizeFirstLetter } from '../utils/format';\r\nimport FilterConstants from '../filter-constants';\r\nimport type IntlService from 'ember-intl/services/intl';\r\nimport * as AditoolsSpice from '@ebiz/aditools-spice/schematics';\r\nimport type IndexModel from '../models/index';\r\nimport type IndividualStageInput from '../models/inputs/component-selection/individual-stage';\r\nimport type StageDetailResults from '../models/results/sub-results/stage-details';\r\nimport type CircuitDetailResults from '../models/results/sub-results/circuit-details';\r\nimport type AssetsService from '../services/assets';\r\nimport type LoggerService from '../services/logger';\r\nimport type FastBoot from 'ember-cli-fastboot/services/fastboot';\r\nimport * as AditoolsSpiceParts from '@ebiz/aditools-spice/data/opamps.json';\r\n\r\ntype SchematicFileList = Record;\r\n\r\ntype SchematicFileInfo = {\r\n stage: number;\r\n type: string;\r\n name: string;\r\n data: SchematicContent;\r\n};\r\n\r\ntype SchematicContent = {\r\n flag: boolean;\r\n content: string | null;\r\n};\r\n\r\ntype SpicePartsDownloadType = {\r\n partName: string;\r\n type: string;\r\n};\r\n\r\ntype SpiceSchematicObjectList = Record;\r\n\r\nconst mergePartsArray = function (\r\n partArray1: Array,\r\n partArray2: Array,\r\n mergeKey1: string,\r\n mergeKey2: string,\r\n) {\r\n // Build list of Parts that contain Netlist, LTspice, or both\r\n let listOfParts: Array = [];\r\n listOfParts = listOfParts.concat(partArray1);\r\n for (let i = 0; i < partArray2.length; i++) {\r\n const item = partArray2[i];\r\n let bFound = false;\r\n for (let j = 0; j < listOfParts.length; j++) {\r\n if (item?.partName === listOfParts[j]?.partName) {\r\n bFound = true;\r\n const part = listOfParts[j];\r\n if (part && part.type && part.type.indexOf(mergeKey1) >= 0) {\r\n part.type = mergeKey1 + '/' + mergeKey2;\r\n listOfParts[j] = part;\r\n }\r\n break;\r\n }\r\n }\r\n if (!bFound && item) {\r\n listOfParts.push(item);\r\n }\r\n }\r\n return listOfParts;\r\n};\r\n\r\nexport async function getSpiceSchematicFiles(\r\n pathURL: string,\r\n downloadType: string,\r\n model: IndexModel,\r\n assetService: AssetsService,\r\n loggerService: LoggerService,\r\n fastbootService: FastBoot,\r\n intlService: IntlService,\r\n netlistParts: Array,\r\n): Promise> {\r\n let downloadFiles: Array = [];\r\n const schematicParts: Array = [];\r\n const spiceParts: Record = AditoolsSpiceParts;\r\n if (spiceParts) {\r\n let generateSchematic = true;\r\n const opAmpsList = [\r\n ...new Set(\r\n model.inputs.components.individualStageInputs.map((item: IndividualStageInput) => {\r\n return item.opAmp;\r\n }),\r\n ),\r\n ] as Array;\r\n for (let i = 0; i < opAmpsList.length; i++) {\r\n const opAmp: string = opAmpsList[i] as string;\r\n if (spiceParts && typeof spiceParts[opAmp] !== 'undefined') {\r\n schematicParts.push({ partName: opAmp, type: 'LTspice' }); // This part has a spice resource\r\n } else {\r\n generateSchematic = false;\r\n }\r\n }\r\n if (generateSchematic) {\r\n const schematicFileList = getSchematicTemplates(\r\n schematicParts,\r\n spiceParts,\r\n model,\r\n loggerService,\r\n fastbootService,\r\n assetService,\r\n );\r\n downloadFiles = populateSchematicFiles(await schematicFileList, spiceParts, model, downloadType);\r\n }\r\n downloadFiles = downloadFiles.concat(\r\n generateReadMeFile(\r\n opAmpsList,\r\n netlistParts,\r\n schematicParts,\r\n downloadFiles !== null && downloadFiles.length > 0,\r\n downloadType,\r\n intlService,\r\n ),\r\n );\r\n } else {\r\n throw 'Tool Config Data is Unavailable.';\r\n }\r\n return downloadFiles;\r\n}\r\n\r\nasync function getSchematicTemplates(\r\n listOfParts: Array<{ partName: string; type: string }>,\r\n spiceParts: Record,\r\n model: IndexModel,\r\n loggerService: LoggerService,\r\n fastbootService: FastBoot,\r\n assetService: AssetsService,\r\n): Promise {\r\n const schematicFileList: SchematicFileList = {},\r\n contentPath = getURL(ENV.rootURL + FilterConstants.spiceCircuitPath, fastbootService, loggerService),\r\n detailsOfStages = model.results.components.detailsOfStages,\r\n detailsOfCircuits = model.results.tolerances.detailsOfCircuits,\r\n count = detailsOfStages.length;\r\n let content: string | null;\r\n\r\n // Get ASC Templates for AC, Noise and Transient Analysis\r\n content = await assetService.getAsset(`${contentPath}acAnalysis${count}Stage.txt`, 'TEXT');\r\n schematicFileList[FilterConstants.schematicKey.acKey] = {\r\n stage: 0,\r\n type: 'asc',\r\n name: 'ACAnalysis.asc',\r\n data: { flag: content !== null && content.length > 0, content: content },\r\n };\r\n content = await assetService.getAsset(`${contentPath}noiseAnalysis${count}Stage.txt`, 'TEXT');\r\n schematicFileList[FilterConstants.schematicKey.noiseKey] = {\r\n stage: 0,\r\n type: 'asc',\r\n name: 'NoiseAnalysis.asc',\r\n data: { flag: content !== null && content.length > 0, content: content },\r\n };\r\n content = await assetService.getAsset(`${contentPath}transientAnalysis${count}Stage.txt`, 'TEXT');\r\n schematicFileList[FilterConstants.schematicKey.transientKey] = {\r\n stage: 0,\r\n type: 'asc',\r\n name: 'TransientAnalysis.asc',\r\n data: { flag: content !== null && content.length > 0, content: content },\r\n };\r\n\r\n // Build asc and asy files per part\r\n for (let i = 0; i < count; i++) {\r\n const stageData = detailsOfStages[i],\r\n cirData = detailsOfCircuits[i],\r\n opAmpName: string = stageData.actualStage.opAmp,\r\n stageImplementation = stageData.implementation.replace(/ /g, ''),\r\n stageType = camelize(stageData.filterName.substring(10).replace(/_/g, '-')),\r\n stageLetter = stageData.stageLetter,\r\n hasGain = stageData.gain.target > 1,\r\n stage = i + 1;\r\n let name =\r\n 'Stage' + stageLetter + '_' + capitalizeFirstLetter(stageType) + capitalizeFirstLetter(stageImplementation),\r\n path = contentPath + 'subckts/' + uncapitalizeFirstLetter(stageType) + capitalizeFirstLetter(stageImplementation); //Yes, this matters\r\n\r\n if (stageImplementation === FilterConstants.implementationType.deliyannisFriend) {\r\n if (cirData.r3.value === 0 && isNearInfinity(cirData.r4.value)) {\r\n path += 'NoPosFB';\r\n name += 'NoPosFB';\r\n } else if (isNearInfinity(cirData.r2.value)) {\r\n path += 'PosFBnoR2';\r\n name += 'PosFBnoR2';\r\n } else {\r\n path += 'PosFB';\r\n name += 'PosFB';\r\n }\r\n } else {\r\n if (!(stageImplementation === FilterConstants.implementationType.multipleFeedback)) {\r\n const gainString = hasGain ? 'Gain' : '';\r\n path += gainString;\r\n name += gainString;\r\n }\r\n }\r\n\r\n // Append the file type to the path\r\n path += '.txt';\r\n\r\n // Append the part# to the name\r\n name += '_' + (spiceParts && spiceParts[opAmpName] ? spiceParts[opAmpName]?.spicePartNumber : '');\r\n\r\n content = await assetService.getAsset(path, 'TEXT');\r\n schematicFileList['asc' + stage] = {\r\n stage: stage,\r\n type: 'asc',\r\n name: name + '.asc',\r\n data: { flag: content !== null && content.length > 0, content: content },\r\n };\r\n content = await assetService.getAsset(`${contentPath}subckts/asyTemplate.txt`, 'TEXT');\r\n schematicFileList['asy' + stage] = {\r\n stage: stage,\r\n type: 'asy',\r\n name: name + '.asy',\r\n data: { flag: content !== null && content.length > 0, content: content },\r\n };\r\n }\r\n return schematicFileList;\r\n}\r\n\r\nfunction populateSchematicFiles(\r\n schematicFileList: SchematicFileList,\r\n spiceParts: Record,\r\n model: IndexModel,\r\n downloadType: string,\r\n): Array {\r\n const result: Array = [];\r\n const spiceSchematicObjectList: SpiceSchematicObjectList = {};\r\n let status = true;\r\n\r\n Object.keys(schematicFileList).forEach((key) => {\r\n const schematicFileInfo: SchematicFileInfo = schematicFileList[key] as SchematicFileInfo;\r\n status = status && schematicFileInfo.data !== null && schematicFileInfo.data.flag;\r\n const template =\r\n schematicFileInfo.data !== null && schematicFileInfo.data.content !== null ? schematicFileInfo.data.content : '';\r\n spiceSchematicObjectList[key] = new AditoolsSpice.SpiceSchematic(spiceParts, template);\r\n });\r\n\r\n if (status) {\r\n // Begin putting together spice schematics data.\r\n // Input Signal\r\n updateInputSignal(spiceSchematicObjectList, model);\r\n\r\n // Replace Simulation Directives\r\n updateSimulationDirectives(spiceSchematicObjectList, model);\r\n\r\n // Voltage Suppplies\r\n updateVoltageSupplies(spiceSchematicObjectList, model, spiceParts);\r\n\r\n const detailsOfStages = model.results.components.detailsOfStages,\r\n detailsOfCircuits = model.results.tolerances.detailsOfCircuits;\r\n\r\n for (const item in schematicFileList) {\r\n if (Object.prototype.hasOwnProperty.call(schematicFileList, item)) {\r\n const schematicFile = schematicFileList[item];\r\n const schematicObject = spiceSchematicObjectList[item];\r\n if (schematicFile && schematicFile.stage > 0) {\r\n // All subsckts.\r\n const stageDetail = detailsOfStages[schematicFile.stage - 1],\r\n circuitDetail = detailsOfCircuits[schematicFile.stage - 1],\r\n opAmpName = stageDetail.actualStage.opAmp,\r\n stageImplementation = stageDetail.implementation.replace(/ /g, ''),\r\n stageType = camelize(stageDetail.filterName.substring(10).replace(/_/g, '-')),\r\n spicePart = spiceParts[opAmpName];\r\n\r\n if (schematicFile.type !== 'asy') {\r\n const schematicValues = circuitDetail ? getSchematicValues(circuitDetail) : {};\r\n // Update the values for the component elements and stages\r\n for (const item in schematicValues) {\r\n if (Object.prototype.hasOwnProperty.call(schematicValues, item)) {\r\n const itemValue = schematicValues[item];\r\n if (itemValue) {\r\n schematicObject?.updateSymbolAttribute(\r\n item,\r\n 'Value',\r\n typeof itemValue === 'number'\r\n ? numberToUserDisplay(itemValue, 'Spice', 3, { showZeroes: false })\r\n : itemValue,\r\n );\r\n }\r\n }\r\n }\r\n // Update OpAmp\r\n if (spicePart) {\r\n const rails = { '+Rail': 'Vp', '-Rail': 'Vn' };\r\n schematicObject?.updateSymbol('U1', opAmpName, true, rails);\r\n }\r\n } else {\r\n const spicePart = spiceParts[opAmpName];\r\n if (schematicObject && spicePart) {\r\n spiceSchematicObjectList[item] = updateStageInfo(\r\n schematicObject.schematic,\r\n spicePart.spicePartNumber,\r\n stageType,\r\n stageImplementation,\r\n spiceParts,\r\n );\r\n }\r\n }\r\n } else {\r\n // Set the subckt for acKey, noiseKey, or transientKey\r\n if (schematicObject) {\r\n spiceSchematicObjectList[item] = updateSubCircuitInfo(\r\n schematicObject.schematic,\r\n detailsOfStages,\r\n detailsOfCircuits,\r\n spiceParts,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Build list of Files to Download\r\n Object.keys(spiceSchematicObjectList).forEach((key) => {\r\n const schematicFileInfo: SchematicFileInfo = schematicFileList[key] as SchematicFileInfo;\r\n result.push({\r\n name: schematicFileInfo.name,\r\n value: spiceSchematicObjectList[key]?.schematic,\r\n location: downloadType === 'all' ? 'SPICE Files\\\\LTspice' : 'LTspice',\r\n type: 'LTSPICE',\r\n });\r\n });\r\n }\r\n return result;\r\n}\r\n\r\nfunction updateSimulationDirectives(spiceSchematicObjectList: SpiceSchematicObjectList, model: IndexModel): void {\r\n spiceSchematicObjectList[FilterConstants.schematicKey.acKey]?.updateACAnalysis({\r\n sweepType: 'decade',\r\n points: 100,\r\n startFrequency: model.results.specifications.filterFrequencyRange.startFrequency,\r\n stopFrequency: model.results.specifications.filterFrequencyRange.stopFrequency,\r\n });\r\n spiceSchematicObjectList[FilterConstants.schematicKey.noiseKey]?.updateNoiseAnalysis({\r\n sweepType: 'decade',\r\n points: 100,\r\n startFrequency: model.results.specifications.filterFrequencyRange.startFrequency,\r\n stopFrequency: model.results.specifications.filterFrequencyRange.stopFrequency,\r\n });\r\n spiceSchematicObjectList[FilterConstants.schematicKey.transientKey]?.updateTransientAnalysis({\r\n stopTime: Math.max(...model.results.specifications.timeAxis),\r\n });\r\n}\r\n\r\nfunction updateInputSignal(spiceSchematicObjectList: SpiceSchematicObjectList, model: IndexModel): void {\r\n const voltageRangeObject = model.results.components.voltageRange.detailsOfVoltageRange;\r\n if (voltageRangeObject !== null && voltageRangeObject.length > 0) {\r\n const minInput = voltageRangeObject[0].nominalVoltageDisplay.maxSignals.inputRange.minimum;\r\n const maxInput = voltageRangeObject[0].nominalVoltageDisplay.maxSignals.inputRange.maximum;\r\n const maxFreq = voltageRangeObject[0].nominalVoltageDisplay.maxSignals.inputRange.frequency;\r\n\r\n // calculate average\r\n const iSignalMid = (minInput + maxInput) / 2;\r\n\r\n // calculate amplitude\r\n const iSignalAmplitude = (maxInput - minInput) / 2;\r\n\r\n spiceSchematicObjectList[FilterConstants.schematicKey.acKey]?.updateSineVoltageSource('VIN', {\r\n offset: iSignalMid,\r\n peakAmplitude: iSignalAmplitude,\r\n frequency: maxFreq,\r\n });\r\n spiceSchematicObjectList[FilterConstants.schematicKey.noiseKey]?.updateSineVoltageSource('VNOISE', {\r\n offset: iSignalMid,\r\n peakAmplitude: iSignalAmplitude,\r\n frequency: maxFreq,\r\n });\r\n spiceSchematicObjectList[FilterConstants.schematicKey.transientKey]?.updatePulseVoltageSource('VIN', {\r\n lowValue: iSignalMid,\r\n highValue: maxInput,\r\n delayTime: 0,\r\n riseTime: 0.000000001,\r\n fallTime: 0.000000001,\r\n pulseWidth: 1,\r\n period: 2,\r\n });\r\n }\r\n}\r\n\r\nfunction updateVoltageSupplies(\r\n spiceSchematicObjectList: SpiceSchematicObjectList,\r\n model: IndexModel,\r\n spiceParts: Record,\r\n): void {\r\n [\r\n FilterConstants.schematicKey.acKey,\r\n FilterConstants.schematicKey.noiseKey,\r\n FilterConstants.schematicKey.transientKey,\r\n ].forEach((key) => {\r\n let schematicContent = spiceSchematicObjectList[key]?.schematic;\r\n if (schematicContent) {\r\n schematicContent = schematicContent.replace('{Vp}', model.inputs.components.vsPlus.toString());\r\n schematicContent = schematicContent.replace('{Vn}', model.inputs.components.vsMinus.toString());\r\n schematicContent = schematicContent.replace(\r\n '{Vref}',\r\n (model.results.components.needReferenceStage ? model.inputs.components.vsPlus / 2 : 0).toString(),\r\n );\r\n spiceSchematicObjectList[key] = new AditoolsSpice.SpiceSchematic(spiceParts, schematicContent);\r\n }\r\n });\r\n}\r\n\r\nfunction updateStageInfo(\r\n schematicContentIn: string,\r\n partNumber: string,\r\n stageType: string,\r\n implementation: string,\r\n spiceParts: Record,\r\n): AditoolsSpice.SpiceSchematic {\r\n let schematicContent = schematicContentIn;\r\n schematicContent = schematicContent.replace('{partNumber}', partNumber);\r\n schematicContent = schematicContent.replace('{stageType}', capitalizeFirstLetter(stageType));\r\n schematicContent = schematicContent.replace('{implementation}', capitalizeFirstLetter(implementation));\r\n return new AditoolsSpice.SpiceSchematic(spiceParts, schematicContent);\r\n}\r\n\r\nfunction updateSubCircuitInfo(\r\n schematicContentIn: string,\r\n detailsOfStages: Array,\r\n detailsOfCircuits: Array,\r\n spiceParts: Record,\r\n): AditoolsSpice.SpiceSchematic {\r\n let schematicContent = schematicContentIn;\r\n const count = detailsOfStages.length;\r\n for (let i = 0; i < count; i++) {\r\n const stageData = detailsOfStages[i],\r\n cirData = detailsOfCircuits[i],\r\n opAmpName = cirData?.opAmp.name,\r\n stageImplementation = stageData?.implementation.replace(/ /g, ''),\r\n stageType = camelize(stageData?.filterName.substring(10).replace(/_/g, '-')),\r\n stageLetter = stageData?.stageLetter;\r\n let name =\r\n 'Stage' + stageLetter + '_' + capitalizeFirstLetter(stageType) + capitalizeFirstLetter(stageImplementation);\r\n\r\n if (stageImplementation === FilterConstants.implementationType.deliyannisFriend) {\r\n if (cirData) {\r\n if (cirData.r3.value === 0 && isNearInfinity(cirData.r4.value)) name += 'NoPosFB';\r\n else if (isNearInfinity(cirData.r2.value)) name += 'PosFBnoR2';\r\n else name += 'PosFB';\r\n }\r\n } else {\r\n if (!(stageImplementation === FilterConstants.implementationType.multipleFeedback))\r\n name += stageData?.gain.target > 1 ? 'Gain' : '';\r\n }\r\n const spicePart = spiceParts[opAmpName];\r\n if (spicePart) {\r\n name += '_' + spicePart.symbolPath.slice(8);\r\n schematicContent = schematicContent.replace('subckt_stage' + (i + 1) + '_stageType_deviceNumber', name);\r\n }\r\n }\r\n return new AditoolsSpice.SpiceSchematic(spiceParts, schematicContent);\r\n}\r\n\r\nfunction getSchematicValues(circuit: CircuitDetailResults): Record {\r\n const schematicValues: Record = {};\r\n if (circuit.c1 && circuit.c1.value !== null) {\r\n schematicValues['C1'] = circuit.c1.value ?? '';\r\n }\r\n if (circuit.c2 && circuit.c2.value !== null) {\r\n schematicValues['C2'] = circuit.c2.value ?? '';\r\n }\r\n if (circuit.c5 && circuit.c5.value !== null) {\r\n schematicValues['C5'] = circuit.c5.value ?? '';\r\n }\r\n if (circuit.r1 && circuit.r1.value !== null) {\r\n schematicValues['R1'] = circuit.r1.value ?? '';\r\n }\r\n if (circuit.r2 && circuit.r2.value !== null && !isNearInfinity(circuit.r2.value)) {\r\n schematicValues['R2'] = circuit.r2.value ?? '';\r\n }\r\n if (circuit.r3 && circuit.r3.value !== null && circuit.r4 && circuit.r4.value !== null && isGainCircuit(circuit)) {\r\n schematicValues['R3'] = circuit.r3.value ?? '';\r\n schematicValues['R4'] = circuit.r4.value ?? '';\r\n }\r\n if (circuit.r5 && circuit.r5.value !== null) {\r\n schematicValues['R5'] = circuit.r5.value ?? '';\r\n }\r\n if (circuit.l1 && circuit.l1.value !== null) {\r\n schematicValues['L1'] = circuit.l1.value ?? '';\r\n }\r\n return schematicValues;\r\n}\r\n\r\nfunction isGainCircuit(circuit: CircuitDetailResults): boolean {\r\n if (circuit.r3.value !== null && circuit.r4.value !== null) {\r\n if (circuit.implementation === FilterConstants.implementationType.multipleFeedback) {\r\n return false;\r\n } else if (circuit.implementation === FilterConstants.implementationType.deliyannisFriend) {\r\n return !(circuit.r3.value === 0 && isNearInfinity(circuit.r4.value));\r\n } else {\r\n return !(isNearInfinity(circuit.r3.value) && circuit.r4.value === 0);\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction generateReadMeFile(\r\n opAmpsList: Array,\r\n netlistParts: Array,\r\n schematicParts: Array,\r\n hasLTspice: boolean,\r\n downloadType: string,\r\n intlService: IntlService,\r\n): Array {\r\n const result: Array = [];\r\n\r\n const listOfParts = mergePartsArray(netlistParts, schematicParts, 'Netlist', 'LTspice');\r\n const opAmpNoSpice = opAmpsList.filter((opAmpName) => {\r\n const searchpart = listOfParts.find(function (item) {\r\n return item.partName === opAmpName;\r\n });\r\n return typeof searchpart === 'undefined' || searchpart === null;\r\n });\r\n const noSpiceFiles = opAmpNoSpice.length > 0;\r\n const opAmpsNoNetlist = listOfParts.find(function (item) {\r\n return !item.type.includes('Netlist');\r\n });\r\n const hasNetList = opAmpsNoNetlist === undefined;\r\n if (noSpiceFiles) {\r\n // No netlist or spice schematics generated because one or more parts never supported both (Scenario C)\r\n const fileMessageName = 'Why no spice files.txt';\r\n let fileMessageContent = intlService.t('download.file-content.part-no-spice-info').toString();\r\n\r\n // Add list of Non-Supported Parts\r\n for (let k = 0; k < opAmpNoSpice.length; k++) {\r\n fileMessageContent += '\\r\\n' + opAmpNoSpice[k];\r\n }\r\n // Add Message File\r\n result.push({ name: fileMessageName, value: fileMessageContent, location: '', type: 'LTSPICE' });\r\n } else {\r\n if (!hasLTspice) {\r\n // No spice or netlist files because the combination of parts could not build either of them. (Scenario B)\r\n // Or design or only contains Netlist files (Scenario A)\r\n const fileMessageName = hasNetList ? 'Why no LTspice.txt' : 'readme.txt';\r\n let fileMessageContent = hasNetList\r\n ? intlService.t('download.file-content.no-schematic').toString()\r\n : intlService.t('download.file-content.no-schematic-no-netlist').toString();\r\n\r\n // Add list of Supported Parts\r\n for (let k = 0; k < listOfParts.length; k++) {\r\n fileMessageContent += '\\r\\n' + listOfParts[k]?.partName + ': ' + listOfParts[k]?.type;\r\n }\r\n // Add Message File\r\n result.push({\r\n name: fileMessageName,\r\n value: fileMessageContent,\r\n location: downloadType === 'all' ? 'SPICE Files' : '',\r\n type: 'LTSPICE',\r\n });\r\n }\r\n }\r\n return result;\r\n}\r\n","export function executeWithTime(method, name) {\r\n console.time(name); //eslint-disable-line no-console\r\n let result = method();\r\n console.timeEnd(name); //eslint-disable-line no-console\r\n return result;\r\n}\r\n","import FilterConstants from '../filter-constants';\r\n\r\n////////////////////////////////////////////////////////////////////////////////////\r\n// validation - functions for character and field validation vvvvvvvvvvvvvvvv //\r\n////////////////////////////////////////////////////////////////////////////////////\r\n\r\n// Function for Character Validation\r\n// Inputs: value - value to be validated\r\n// type - value field type\r\n// scope - used for custom validation, usually contains a Regular Expression, otherwise null\r\n// Returns: result - true when valid\r\nexport function validateCharacterInput(value: string, type: string, scope?: RegExp): boolean {\r\n return validateFieldInput(value, type, scope);\r\n}\r\n\r\n// Function for Field Validation\r\n// Inputs: value - value to be validated\r\n// type - value field type\r\n// scope - used for custom validation, usually contains a Regular Expression, otherwise null\r\n// Returns: result - true when valid\r\nexport function validateFieldInput(value: string, type: string, scope?: RegExp): boolean {\r\n let result = true;\r\n let pattern = /^/;\r\n switch (type) {\r\n case FilterConstants.fieldTypes.AlphaNumeric:\r\n pattern = /^[0-9a-zA-Z]+$/;\r\n result = pattern.test(value.toString());\r\n break;\r\n case FilterConstants.fieldTypes.Alphabet:\r\n pattern = /^[a-zA-Z]+$/;\r\n result = pattern.test(value.toString());\r\n break;\r\n case FilterConstants.fieldTypes.Numeric:\r\n pattern = /^[0-9-]+$/;\r\n result = pattern.test(value.toString());\r\n if (result) {\r\n result = !isNaN(Number(value));\r\n }\r\n break;\r\n case FilterConstants.fieldTypes.NumericDecimal:\r\n pattern = /^[+-]?\\d+(\\.\\d+)?$/;\r\n result = pattern.test(value.toString());\r\n if (result) {\r\n result = !isNaN(Number(value));\r\n }\r\n break;\r\n case FilterConstants.fieldTypes.Engineering: {\r\n const suffixes = ['a', 'f', 'p', 'n', 'u', 'µ', 'm', 'k', 'M', 'G', 'T', 'P'];\r\n const input = value.toString();\r\n if (input.length > 1) {\r\n let isSuffixFound = false;\r\n const suffix = input.substring(input.length - 1, input.length);\r\n for (let i = 0; i < suffixes.length; i++) {\r\n if (suffixes[i] === suffix) {\r\n isSuffixFound = true;\r\n }\r\n }\r\n if (!isSuffixFound) {\r\n if (isNaN(Number(suffix))) {\r\n result = false;\r\n } else {\r\n if (isNaN(Number(input))) {\r\n result = false;\r\n }\r\n }\r\n }\r\n if (isSuffixFound) {\r\n if (isNaN(Number(input.substring(0, input.length - 1)))) {\r\n result = false;\r\n }\r\n }\r\n } else {\r\n if (isNaN(Number(input))) {\r\n result = false;\r\n }\r\n }\r\n if (value.replace(/\\s/g, '') === '') {\r\n result = false;\r\n }\r\n break;\r\n }\r\n case FilterConstants.fieldTypes.Custom:\r\n if (scope) {\r\n pattern = scope;\r\n result = pattern.test(value.toString());\r\n }\r\n break;\r\n case FilterConstants.fieldTypes.AllChars:\r\n default:\r\n break;\r\n }\r\n\r\n return result;\r\n}\r\n","export default function collapseProto(target) {\n // We must collapse the superclass prototype to make sure that the `actions`\n // object will exist. Since collapsing doesn't generally happen until a class is\n // instantiated, we have to do it manually.\n if (typeof target.constructor.proto === 'function') {\n target.constructor.proto();\n }\n}\n","import { assert } from '@ember/debug';\n\nimport { isDescriptor } from './-private/class-field-descriptor';\n\n/**\n * A macro that takes a decorator function and allows it to optionally\n * receive parameters\n *\n * ```js\n * let foo = decoratorWithParams((target, desc, key, params) => {\n * console.log(params);\n * });\n *\n * class {\n * @foo bar; // undefined\n * @foo('bar') baz; // ['bar']\n * }\n * ```\n *\n * @param {Function} fn - decorator function\n */\nexport function decoratorWithParams(fn) {\n return function(...params) {\n // determine if user called as @computed('blah', 'blah') or @computed\n if (isDescriptor(params)) {\n return fn(...params);\n } else {\n return (...desc) => fn(...desc, params);\n }\n };\n}\n\n/**\n * A macro that takes a decorator function and requires it to receive\n * parameters:\n *\n * ```js\n * let foo = decoratorWithRequiredParams((target, desc, key, params) => {\n * console.log(params);\n * });\n *\n * class {\n * @foo('bar') baz; // ['bar']\n * @foo bar; // Error\n * }\n * ```\n *\n * @param {Function} fn - decorator function\n */\nexport function decoratorWithRequiredParams(fn, name) {\n return function(...params) {\n assert(\n `The @${name || fn.name} decorator requires parameters`,\n !isDescriptor(params) && params.length > 0\n );\n\n return (...desc) => fn(...desc, params);\n };\n}\n","function isClassDescriptor(possibleDesc) {\n let [target] = possibleDesc;\n\n return (\n possibleDesc.length === 1 &&\n typeof target === 'function' &&\n 'prototype' in target &&\n !target.__isComputedDecorator\n );\n}\n\nexport function isFieldDescriptor(possibleDesc) {\n let [target, key, desc] = possibleDesc;\n\n return (\n possibleDesc.length === 3 &&\n typeof target === 'object' &&\n target !== null &&\n typeof key === 'string' &&\n ((typeof desc === 'object' &&\n desc !== null &&\n 'enumerable' in desc &&\n 'configurable' in desc) ||\n desc === undefined) // TS compatibility\n );\n}\n\nexport function isDescriptor(possibleDesc) {\n return isFieldDescriptor(possibleDesc) || isClassDescriptor(possibleDesc);\n}\n","import { assert } from '@ember/debug';\n\nimport collapseProto from '@ember-decorators/utils/collapse-proto';\nimport {\n decoratorWithParams,\n decoratorWithRequiredParams,\n} from '@ember-decorators/utils/decorator';\n\n/**\n Decorator which indicates that the field or computed should be bound\n to an attribute value on the component. This replaces `attributeBindings`\n by directly allowing you to specify which properties should be bound.\n ```js\n export default class AttributeDemoComponent extends Component {\n @attribute role = 'button';\n // With provided attribute name\n @attribute('data-foo') foo = 'lol';\n @attribute\n @computed\n get id() {\n // return generated id\n }\n }\n ```\n @function\n @param {string} name? - The name of the attribute to bind the value to if it is truthy\n*/\nexport const attribute = decoratorWithParams((target, key, desc, params = []) => {\n assert(\n `The @attribute decorator may take up to one parameter, the bound attribute name. Received: ${\n params.length\n }`,\n params.length <= 1\n );\n assert(\n `The @attribute decorator may only receive strings as parameters. Received: ${params}`,\n params.every(s => typeof s === 'string')\n );\n\n collapseProto(target);\n\n if (!target.hasOwnProperty('attributeBindings')) {\n let parentValue = target.attributeBindings;\n target.attributeBindings = Array.isArray(parentValue) ? parentValue.slice() : [];\n }\n\n let binding = params[0] ? `${key}:${params[0]}` : key;\n\n target.attributeBindings.push(binding);\n\n if (desc) {\n // Decorated fields are currently not configurable in Babel for some reason, so ensure\n // that the field becomes configurable (else it messes with things)\n desc.configurable = true;\n }\n\n return desc;\n});\n\n/**\n Decorator which indicates that the field or computed should be bound to\n the component class names. This replaces `classNameBindings` by directly\n allowing you to specify which properties should be bound.\n ```js\n export default class ClassNameDemoComponent extends Component {\n @className boundField = 'default-class';\n // With provided true/false class names\n @className('active', 'inactive') isActive = true;\n @className\n @computed\n get boundComputed() {\n // return generated class\n }\n }\n ```\n @function\n @param {string} truthyName? - The class to be applied if the value the field\n is truthy, defaults to the name of the field.\n @param {string} falsyName? - The class to be applied if the value of the field\n is falsy.\n*/\nexport const className = decoratorWithParams((target, key, desc, params = []) => {\n assert(\n `The @className decorator may take up to two parameters, the truthy class and falsy class for the class binding. Received: ${\n params.length\n }`,\n params.length <= 2\n );\n assert(\n `The @className decorator may only receive strings as parameters. Received: ${params}`,\n params.every(s => typeof s === 'string')\n );\n\n collapseProto(target);\n\n if (!target.hasOwnProperty('classNameBindings')) {\n let parentValue = target.classNameBindings;\n target.classNameBindings = Array.isArray(parentValue) ? parentValue.slice() : [];\n }\n\n let binding = params.length > 0 ? `${key}:${params.join(':')}` : key;\n\n target.classNameBindings.push(binding);\n\n if (desc) {\n // Decorated fields are currently not configurable in Babel for some reason, so ensure\n // that the field becomes configurable (else it messes with things)\n desc.configurable = true;\n }\n\n return desc;\n});\n\nfunction concattedPropDecorator(propName) {\n return decoratorWithRequiredParams((target, propValues) => {\n assert(\n `The @${propName} decorator must be provided strings, received: ${propValues}`,\n propValues.reduce((allStrings, name) => allStrings && typeof name === 'string', true)\n );\n\n collapseProto(target.prototype);\n\n if (propName in target.prototype) {\n let parentValues = target.prototype[propName];\n propValues.unshift(...parentValues);\n }\n\n target.prototype[propName] = propValues;\n\n return target;\n }, propName);\n}\n\n/**\n Class decorator which specifies the class names to be applied to a component.\n This replaces the `classNames` property on components in the traditional Ember\n object model.\n ```js\n @classNames('a-static-class', 'another-static-class')\n export default class ClassNamesDemoComponent extends Component {}\n ```\n @function\n @param {...string} classNames - The list of classes to be applied to the component\n*/\nexport const classNames = concattedPropDecorator('classNames');\n\n/**\n Class decorator which specifies the class name bindings to be applied to a\n component. This replaces the `classNameBindings` property on components in the\n traditional Ember object model.\n ```js\n @classNameBindings('aDynamicProperty:truthy-class-name:falsy-class-name')\n export default class ClassNamesDemoComponent extends Component {}\n ```\n @function\n @param {...string} classNameBindings - The list of class name bindings to be applied to the component\n*/\nexport const classNameBindings = concattedPropDecorator('classNameBindings');\n\n/**\n Class decorator which specifies the attribute bindings to be applied to a\n component. This replaces the `attributeBindings` property on components in the\n traditional Ember object model.\n ```js\n @attributeBindings('role', 'aProperty:a-different-attribute')\n export default class ClassNamesDemoComponent extends Component {}\n ```\n @function\n @param {...string} attributeBindings - The list of attribute bindings to be applied to the component\n*/\nexport const attributeBindings = concattedPropDecorator('attributeBindings');\n\n/**\n Class decorator which specifies the tag name of the component. This replaces\n the `tagName` property on components in the traditional Ember object model.\n ```js\n @tagName('button')\n export default class TagNameDemoComponent extends Component {}\n ```\n @function\n @param {string} tagName - The HTML tag to be used for the component\n*/\nexport const tagName = decoratorWithRequiredParams((target, params) => {\n let [tagName] = params;\n\n assert(\n `The @tagName decorator must be provided exactly one argument, received: ${tagName}`,\n params.length === 1\n );\n assert(\n `The @tagName decorator must be provided a string, received: ${tagName}`,\n typeof tagName === 'string'\n );\n\n target.prototype.tagName = tagName;\n\n return target;\n}, 'tagName');\n\n/**\n Class decorator which specifies the layout for the component. This replaces\n the `layout` property on components in the traditional Ember object model.\n ```js\n import template from '../templates/components/x-foo';\n @layout(template)\n export default class TagNameDemoComponent extends Component {}\n ```\n ```js\n import hbs from 'htmlbars-inline-precompile';\n @layout(hbs`

Hello {{ name }}

`)\n export default class TagNameDemoComponent extends Component {\n constructor() {\n super(...arguments);\n this.set('name', 'Tomster');\n }\n }\n ```\n @function\n @param {TemplateFactory} template - The compiled template to be used for the component\n*/\nexport const layout = (...params) => target => {\n let [template] = params;\n\n assert(\n `The @layout decorator must be provided exactly one argument, received: ${params.length}`,\n params.length === 1\n );\n assert(\n `The @layout decorator must be provided a template, received: ${template}. If you want to compile strings to templates, be sure to use 'htmlbars-inline-precompile'`,\n typeof template !== 'string'\n );\n assert(\n `The @layout decorator must be provided a template, received: ${template}`,\n typeof template === 'function' ||\n (typeof template === 'object' && typeof template.indexOf === 'undefined')\n );\n\n target.prototype.layout = template;\n return target;\n};\n","import { setModifierManager, capabilities } from '@ember/modifier';\nimport { macroCondition, dependencySatisfies } from '@embroider/macros';\n\n/**\n The `{{did-insert}}` element modifier is activated when an element is\n inserted into the DOM.\n\n In this example, the `fadeIn` function receives the `div` DOM element as its\n first argument and is executed after the element is inserted into the DOM.\n\n ```handlebars\n
\n {{yield}}\n
\n ```\n\n ```js\n export default Component.extend({\n fadeIn(element) {\n element.classList.add('fade-in');\n }\n });\n ```\n\n By default, the executed function will be unbound. If you would like to access\n the component context in your function, use the `action` decorator as follows:\n\n ```handlebars\n
first
\n
second
\n\n

{{this.count}} elements were rendered

\n ```\n\n ```js\n export default Component.extend({\n count: tracked({ value: 0 }),\n\n incrementCount: action(function() {\n this.count++;\n })\n });\n ```\n\n @method did-insert\n @public\n*/\nexport default setModifierManager(() => ({\n capabilities: capabilities(macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-beta.1')) ? '3.22' : '3.13', {\n disableAutoTracking: true\n }),\n createModifier() {},\n installModifier(_state, element, {\n positional: [fn, ...args],\n named\n }) {\n fn(element, args, named);\n },\n updateModifier() {},\n destroyModifier() {}\n}), class DidInsertModifier {});","import { setModifierManager, capabilities } from '@ember/modifier';\nimport { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\nconst untrack = function () {\n if (macroCondition(dependencySatisfies('ember-source', '> 3.27.0-beta.1'))) {\n // ember-source@3.27 shipped \"real modules\" by default, so we can just use\n // importSync to get @glimmer/validator directly\n return importSync('@glimmer/validator').untrack;\n } else if (macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1'))) {\n // we can access `window.Ember` here because it wasn't deprecated until at least 3.27\n // eslint-disable-next-line no-undef\n return Ember.__loader.require('@glimmer/validator').untrack;\n } else {\n // nothing needed here, we do not call `untrack` in this case\n }\n}();\n\n/**\n The `{{did-update}}` element modifier is activated when any of its arguments\n are updated. It does not run on initial render.\n\n In this example, the `resize` function receives the `textarea` DOM element as its\n first argument and is executed anytime the `@text` argument changes.\n\n ```handlebars\n \n ```\n\n ```js\n export default Component.extend({\n resize(element) {\n element.style.height = `${element.scrollHeight}px`;\n }\n });\n ```\n\n In addition to the `element`, both named and positional arguments are passed to the\n executed function:\n\n ```handlebars\n
\n ```\n\n ```js\n export default Component.extend({\n logArguments(element, [first, second], { third }) {\n console.log('element', element);\n console.log('positional args', first, second);\n console.log('names args', third);\n }\n });\n ```\n\n By default, the executed function will be unbound. If you would like to access\n the component context in your function, use the `action` decorator as follows:\n\n ```handlebars\n
\n ```\n\n ```js\n export default Component.extend({\n someFunction: action(function(element, [someArg]) {\n // the `this` context will be the component instance\n })\n });\n ```\n\n @method did-update\n @public\n*/\nexport default setModifierManager(() => ({\n capabilities: macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1')) ? capabilities('3.22', {\n disableAutoTracking: false\n }) : capabilities('3.13', {\n disableAutoTracking: true\n }),\n createModifier() {\n return {\n element: null\n };\n },\n installModifier(state, element, args) {\n // save element into state bucket\n state.element = element;\n if (macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1'))) {\n // Consume individual properties to entangle tracking.\n // https://github.com/emberjs/ember.js/issues/19277\n // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n args.positional.forEach(() => {});\n args.named && Object.values(args.named);\n }\n },\n updateModifier({\n element\n }, args) {\n let [fn, ...positional] = args.positional;\n if (macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-alpha.1'))) {\n // Consume individual properties to entangle tracking.\n // https://github.com/emberjs/ember.js/issues/19277\n // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n args.positional.forEach(() => {});\n args.named && Object.values(args.named);\n untrack(() => {\n fn(element, positional, args.named);\n });\n } else {\n fn(element, positional, args.named);\n }\n },\n destroyModifier() {}\n}), class DidUpdateModifier {});","import { setModifierManager, capabilities } from '@ember/modifier';\nimport { macroCondition, dependencySatisfies } from '@embroider/macros';\n\n/**\n The `{{will-destroy}}` element modifier is activated immediately before the element\n is removed from the DOM.\n\n ```handlebars\n
\n {{yield}}\n
\n ```\n\n ```js\n export default Component.extend({\n teardownPlugin(element) {\n // teardown logic here\n }\n });\n ```\n\n By default, the executed function will be unbound. If you would like to access\n the component context in your function, use the `action` decorator as follows:\n\n ```handlebars\n
\n {{yield}}\n
\n ```\n\n ```js\n export default Component.extend({\n teardownPlugin: action(function(element) {\n // the `this` context will be the component instance\n })\n });\n ```\n\n @method will-destroy\n @public\n*/\nexport default setModifierManager(() => ({\n capabilities: capabilities(macroCondition(dependencySatisfies('ember-source', '>= 3.22.0-beta.1')) ? '3.22' : '3.13', {\n disableAutoTracking: true\n }),\n createModifier() {\n return {\n element: null\n };\n },\n installModifier(state, element) {\n state.element = element;\n },\n updateModifier() {},\n destroyModifier({\n element\n }, args) {\n let [fn, ...positional] = args.positional;\n fn(element, positional, args.named);\n }\n}), class WillDestroyModifier {});","export default class Cache {\n size = 0;\n misses = 0;\n hits = 0;\n\n constructor(limit, func, store) {\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.store = store || new Map();\n }\n\n get(key) {\n let value = this.store.get(key);\n\n if (this.store.has(key)) {\n this.hits++;\n return this.store.get(key);\n } else {\n this.misses++;\n value = this.set(key, this.func(key));\n }\n\n return value;\n }\n\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n\n return value;\n }\n\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n\n}","/* eslint-disable no-useless-escape */\n\n/**\n @module @ember/string\n */\nimport Cache from './cache';\n// STATE within a module is frowned upon, this exists\n// to support Ember.STRINGS but shield ember internals from this legacy global\n// API.\nlet STRINGS = {};\nexport function setStrings(strings) {\n STRINGS = strings;\n}\nexport function getStrings() {\n return STRINGS;\n}\nexport function getString(name) {\n return STRINGS[name];\n}\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DASHERIZE_CACHE = new Cache(1000, key => decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-'));\nconst STRING_CAMELIZE_REGEXP_1 = /(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CAMELIZE_REGEXP_2 = /(^|\\/)([A-Z])/g;\nconst CAMELIZE_CACHE = new Cache(1000, key => key.replace(STRING_CAMELIZE_REGEXP_1, (_match, _separator, chr) => chr ? chr.toUpperCase() : '').replace(STRING_CAMELIZE_REGEXP_2, (match\n/*, separator, chr */\n) => match.toLowerCase()));\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\nconst CLASSIFY_CACHE = new Cache(1000, str => {\n const replace1 = (_match, _separator, chr) => chr ? `_${chr.toUpperCase()}` : '';\n\n const replace2 = (_match, initialChar, _separator, chr) => initialChar + (chr ? chr.toUpperCase() : '');\n\n const parts = str.split('/');\n\n for (let i = 0; i < parts.length; i++) {\n parts[i] = parts[i].replace(STRING_CLASSIFY_REGEXP_1, replace1).replace(STRING_CLASSIFY_REGEXP_2, replace2);\n }\n\n return parts.join('/').replace(STRING_CLASSIFY_REGEXP_3, (match\n /*, separator, chr */\n ) => match.toUpperCase());\n});\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new Cache(1000, str => str.replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2').replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase());\nconst STRING_CAPITALIZE_REGEXP = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\nconst CAPITALIZE_CACHE = new Cache(1000, str => str.replace(STRING_CAPITALIZE_REGEXP, (match\n/*, separator, chr */\n) => match.toUpperCase()));\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\nconst DECAMELIZE_CACHE = new Cache(1000, str => str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase());\n/**\n Splits a string into separate units separated by spaces, eliminating any\n empty strings in the process. This is a convenience method for split that\n is mostly useful when applied to the `String.prototype`.\n\n ```javascript\n import { w } from '@ember/string';\n\n w(\"alpha beta gamma\").forEach(function(key) {\n console.log(key);\n });\n\n // > alpha\n // > beta\n // > gamma\n ```\n\n @method w\n @param {String} str The string to split\n @return {Array} array containing the split strings\n @public\n*/\n\nexport function w(str) {\n return str.split(/\\s+/);\n}\n/**\n Converts a camelized string into all lower case separated by underscores.\n\n ```javascript\n import { decamelize } from '@ember/string';\n\n decamelize('innerHTML'); // 'inner_html'\n decamelize('action_name'); // 'action_name'\n decamelize('css-class-name'); // 'css-class-name'\n decamelize('my favorite items'); // 'my favorite items'\n ```\n\n @method decamelize\n @param {String} str The string to decamelize.\n @return {String} the decamelized string.\n @public\n*/\n\nexport function decamelize(str) {\n return DECAMELIZE_CACHE.get(str);\n}\n/**\n Replaces underscores, spaces, or camelCase with dashes.\n\n ```javascript\n import { dasherize } from '@ember/string';\n\n dasherize('innerHTML'); // 'inner-html'\n dasherize('action_name'); // 'action-name'\n dasherize('css-class-name'); // 'css-class-name'\n dasherize('my favorite items'); // 'my-favorite-items'\n dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'\n ```\n\n @method dasherize\n @param {String} str The string to dasherize.\n @return {String} the dasherized string.\n @public\n*/\n\nexport function dasherize(str) {\n return STRING_DASHERIZE_CACHE.get(str);\n}\n/**\n Returns the lowerCamelCase form of a string.\n\n ```javascript\n import { camelize } from '@ember/string';\n\n camelize('innerHTML'); // 'innerHTML'\n camelize('action_name'); // 'actionName'\n camelize('css-class-name'); // 'cssClassName'\n camelize('my favorite items'); // 'myFavoriteItems'\n camelize('My Favorite Items'); // 'myFavoriteItems'\n camelize('private-docs/owner-invoice'); // 'privateDocs/ownerInvoice'\n ```\n\n @method camelize\n @param {String} str The string to camelize.\n @return {String} the camelized string.\n @public\n*/\n\nexport function camelize(str) {\n return CAMELIZE_CACHE.get(str);\n}\n/**\n Returns the UpperCamelCase form of a string.\n\n ```javascript\n import { classify } from '@ember/string';\n\n classify('innerHTML'); // 'InnerHTML'\n classify('action_name'); // 'ActionName'\n classify('css-class-name'); // 'CssClassName'\n classify('my favorite items'); // 'MyFavoriteItems'\n classify('private-docs/owner-invoice'); // 'PrivateDocs/OwnerInvoice'\n ```\n\n @method classify\n @param {String} str the string to classify\n @return {String} the classified string\n @public\n*/\n\nexport function classify(str) {\n return CLASSIFY_CACHE.get(str);\n}\n/**\n More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n form of a string.\n\n ```javascript\n import { underscore } from '@ember/string';\n\n underscore('innerHTML'); // 'inner_html'\n underscore('action_name'); // 'action_name'\n underscore('css-class-name'); // 'css_class_name'\n underscore('my favorite items'); // 'my_favorite_items'\n underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'\n ```\n\n @method underscore\n @param {String} str The string to underscore.\n @return {String} the underscored string.\n @public\n*/\n\nexport function underscore(str) {\n return UNDERSCORE_CACHE.get(str);\n}\n/**\n Returns the Capitalized form of a string\n\n ```javascript\n import { capitalize } from '@ember/string';\n\n capitalize('innerHTML') // 'InnerHTML'\n capitalize('action_name') // 'Action_name'\n capitalize('css-class-name') // 'Css-class-name'\n capitalize('my favorite items') // 'My favorite items'\n capitalize('privateDocs/ownerInvoice'); // 'PrivateDocs/ownerInvoice'\n ```\n\n @method capitalize\n @param {String} str The string to capitalize.\n @return {String} The capitalized string.\n @public\n*/\n\nexport function capitalize(str) {\n return CAPITALIZE_CACHE.get(str);\n}\n/*\n The following are implemented here to give users adding `@ember/string` to\n their projects a useful error message. The `ember-source` implementation of\n `@ember/string` is clobbered by adding this addon, and so the deprecation of\n the import path is not triggered. This error message is intended to help\n users discover what they need to change.\n*/\n\nexport function htmlSafe(str) {\n throw new Error('htmlSafe is not implemented in the `@ember/string` package. Please import from `@ember/template` instead.');\n}\nexport function isHTMLSafe(str) {\n throw new Error('isHTMLSafe is not implemented in the `@ember/string` package. Please import from `@ember/template` instead.');\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Service from '@ember/service';\nimport { getOwner } from '@ember/application';\nexport default class EnsureRegisteredService extends Service {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"classNonces\", new WeakMap());\n _defineProperty(this, \"nonceCounter\", 0);\n }\n register(klass, owner = getOwner(this)) {\n let nonce = this.classNonces.get(klass);\n if (nonce == null) {\n nonce = `-ensure${this.nonceCounter++}`;\n this.classNonces.set(klass, nonce);\n owner.register(`component:${nonce}`, klass);\n }\n return nonce;\n }\n}","import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\nlet runtime;\nif (macroCondition(dependencySatisfies('ember-source', '>=3.27.0-canary || >=3.27.0-beta'))) {\n // new enough ember has a real module we can import\n runtime = importSync('@glimmer/runtime');\n} else {\n // older ember has its own internal loader\n runtime = window.Ember.__loader.require('@glimmer/runtime');\n}\nlet {\n isCurriedComponentDefinition,\n CurriedComponentDefinition,\n curry,\n CurriedValue\n} = runtime;\n\n// older embers have isCurriedComponentDefinition, new ones have CurriedValue\n// and instanceof CurriedValue seems good enough.\nif (!isCurriedComponentDefinition) {\n isCurriedComponentDefinition = function (value) {\n return value instanceof CurriedValue;\n };\n}\nexport { isCurriedComponentDefinition };\nfunction runtimeResolver(owner) {\n let resolver = owner.lookup('renderer:-dom')._runtimeResolver;\n if (resolver) {\n return resolver;\n }\n let entry = Object.entries(owner.__container__.cache).find(e => e[0].startsWith('template-compiler:main-'));\n if (entry) {\n return entry[1].resolver.resolver;\n }\n throw new Error(`@embroider/util couldn't locate the runtime resolver on this ember version`);\n}\nexport function lookupCurriedComponentDefinition(name, owner) {\n let resolver = runtimeResolver(owner);\n if (typeof resolver.lookupComponentHandle === 'function') {\n let handle = resolver.lookupComponentHandle(name, contextForLookup(owner));\n if (handle != null) {\n return new CurriedComponentDefinition(resolver.resolve(handle), null);\n }\n }\n\n // here we're doing the same thing the internal currying does, in order to\n // generate a sane error message (even though we don't actually use\n // resolvedDefinition as part of our return value).\n let resolvedDefinition = resolver.lookupComponent(name, owner);\n if (!resolvedDefinition) {\n throw new Error(`Attempted to resolve \\`${name}\\` via ensureSafeComponent, but nothing was found.`);\n }\n return curry(0, name, owner, {\n named: {},\n positional: []\n });\n}\nfunction contextForLookup(owner) {\n if (macroCondition(dependencySatisfies('ember-source', '>=3.24.0-canary || >=3.24.0-beta'))) {\n return owner;\n } else {\n return {\n owner\n };\n }\n}","import { assert, deprecate } from '@ember/debug';\nimport { getOwner } from '@ember/application';\nimport { dependencySatisfies, macroCondition } from '@embroider/macros';\nimport { isCurriedComponentDefinition, lookupCurriedComponentDefinition } from './ember-private-api';\nimport Helper from '@ember/component/helper';\nexport function ensureSafeComponent(value, thingWithOwner) {\n if (typeof value === 'string') {\n return handleString(value, thingWithOwner);\n } else if (isCurriedComponentDefinition(value)) {\n return value;\n } else if (value == null) {\n return value;\n } else {\n return handleClass(value, thingWithOwner);\n }\n}\nexport class EnsureSafeComponentHelper extends Helper {\n compute([value]) {\n return ensureSafeComponent(value, this);\n }\n}\nfunction handleString(name, thingWithOwner) {\n deprecate(`You're trying to invoke the component \"${name}\" by passing its name as a string. This won't work under Embroider.`, false, {\n id: 'ensure-safe-component.string',\n url: 'https://github.com/embroider-build/embroider/blob/main/docs/replacing-component-helper.md#when-youre-passing-a-component-to-someone-else',\n until: 'embroider',\n for: '@embroider/util',\n since: '0.27.0'\n });\n let owner = getOwner(thingWithOwner);\n return lookupCurriedComponentDefinition(name, owner);\n}\nfunction ensureRegistered(klass, owner) {\n let service = owner.lookup('service:-ensure-registered');\n assert('Could not lookup private -ensure-registered service', service);\n return service.register(klass, owner);\n}\nfunction handleClass(klass, thingWithOwner) {\n if (macroCondition(dependencySatisfies('ember-source', '>=3.25.0-beta'))) {\n return klass;\n } else {\n let owner = getOwner(thingWithOwner);\n let nonce = ensureRegistered(klass, owner);\n return lookupCurriedComponentDefinition(nonce, owner);\n }\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { setOwner } from './owner';\nimport { isDestroying, isDestroyed } from './destroyables';\n\n// This provides a type-safe `WeakMap`: the getter and setter link the key to a\n// specific value. This is how `WeakMap`s actually behave, but the TS type\n// system does not (yet!) have a good way to capture that for types like\n// `WeakMap` where the type is generic over another generic type (here, `Args`).\n\n// SAFETY: this only holds because we *only* acces this when `DEBUG` is `true`.\n// There is not a great way to connect that data in TS at present.\nexport let ARGS_SET;\nif (DEBUG) {\n ARGS_SET = new WeakMap();\n}\n\n// --- Type utilities for component signatures --- //\n// Type-only \"symbol\" to use with `EmptyObject` below, so that it is *not*\n// equivalent to an empty interface.\n\n/**\n * This provides us a way to have a \"fallback\" which represents an empty object,\n * without the downsides of how TS treats `{}`. Specifically: this will\n * correctly leverage \"excess property checking\" so that, given a component\n * which has no named args, if someone invokes it with any named args, they will\n * get a type error.\n *\n * @internal This is exported so declaration emit works (if it were not emitted,\n * declarations which fall back to it would not work). It is *not* intended for\n * public usage, and the specific mechanics it uses may change at any time.\n * The location of this export *is* part of the public API, because moving it\n * will break existing declarations, but is not legal for end users to import\n * themselves, so ***DO NOT RELY ON IT***.\n */\n\n/** Given a signature `S`, get back the `Args` type. */\n\n/**\n * Given any allowed shorthand form of a signature, desugars it to its full\n * expanded type.\n *\n * @internal This is only exported so we can avoid duplicating it in\n * [Glint](https://github.com/typed-ember/glint) or other such tooling. It is\n * *not* intended for public usage, and the specific mechanics it uses may\n * change at any time. Although the signature produced by is part of Glimmer's\n * public API the existence and mechanics of this specific symbol are *not*,\n * so ***DO NOT RELY ON IT***.\n */\n// The conditional type here is because TS applies conditional types\n// distributively. This means that for union types, checks like `keyof T` get\n// all the keys from all elements of the union, instead of ending up as `never`\n// and then always falling into the `Signature` path instead of falling back to\n// the legacy args handling path.\n\n/**\n * @internal we use this type for convenience internally; inference means users\n * should not normally need to name it\n */\n\n/**\n * The `Component` class defines an encapsulated UI element that is rendered to\n * the DOM. A component is made up of a template and, optionally, this component\n * object.\n *\n * ## Defining a Component\n *\n * To define a component, subclass `Component` and add your own properties,\n * methods and lifecycle hooks:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * }\n * ```\n *\n * ## Lifecycle Hooks\n *\n * Lifecycle hooks allow you to respond to changes to a component, such as when\n * it gets created, rendered, updated or destroyed. To add a lifecycle hook to a\n * component, implement the hook as a method on your component subclass.\n *\n * For example, to be notified when Glimmer has rendered your component so you\n * can attach a legacy jQuery plugin, implement the `didInsertElement()` method:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * didInsertElement() {\n * $(this.element).pickadate();\n * }\n * }\n * ```\n *\n * ## Data for Templates\n *\n * `Component`s have two different kinds of data, or state, that can be\n * displayed in templates:\n *\n * 1. Arguments\n * 2. Properties\n *\n * Arguments are data that is passed in to a component from its parent\n * component. For example, if I have a `UserGreeting` component, I can pass it\n * a name and greeting to use:\n *\n * ```hbs\n * \n * ```\n *\n * Inside my `UserGreeting` template, I can access the `@name` and `@greeting`\n * arguments that I've been given:\n *\n * ```hbs\n * {{@greeting}}, {{@name}}!\n * ```\n *\n * Arguments are also available inside my component:\n *\n * ```ts\n * console.log(this.args.greeting); // prints \"Olá\"\n * ```\n *\n * Properties, on the other hand, are internal to the component and declared in\n * the class. You can use properties to store data that you want to show in the\n * template, or pass to another component as an argument.\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * user = {\n * name: 'Robbie'\n * }\n * }\n * ```\n *\n * In the above example, we've defined a component with a `user` property that\n * contains an object with its own `name` property.\n *\n * We can render that property in our template:\n *\n * ```hbs\n * Hello, {{user.name}}!\n * ```\n *\n * We can also take that property and pass it as an argument to the\n * `UserGreeting` component we defined above:\n *\n * ```hbs\n * \n * ```\n *\n * ## Arguments vs. Properties\n *\n * Remember, arguments are data that was given to your component by its parent\n * component, and properties are data your component has defined for itself.\n *\n * You can tell the difference between arguments and properties in templates\n * because arguments always start with an `@` sign (think \"A is for arguments\"):\n *\n * ```hbs\n * {{@firstName}}\n * ```\n *\n * We know that `@firstName` came from the parent component, not the current\n * component, because it starts with `@` and is therefore an argument.\n *\n * On the other hand, if we see:\n *\n * ```hbs\n * {{name}}\n * ```\n *\n * We know that `name` is a property on the component. If we want to know where\n * the data is coming from, we can go look at our component class to find out.\n *\n * Inside the component itself, arguments always show up inside the component's\n * `args` property. For example, if `{{@firstName}}` is `Tom` in the template,\n * inside the component `this.args.firstName` would also be `Tom`.\n */\nexport default class BaseComponent {\n /**\n * Constructs a new component and assigns itself the passed properties. You\n * should not construct new components yourself. Instead, Glimmer will\n * instantiate new components automatically as it renders.\n *\n * @param owner\n * @param args\n */\n constructor(owner, args) {\n /**\n * Named arguments passed to the component from its parent component.\n * They can be accessed in JavaScript via `this.args.argumentName` and in the template via `@argumentName`.\n *\n * Say you have the following component, which will have two `args`, `firstName` and `lastName`:\n *\n * ```hbs\n * \n * ```\n *\n * If you needed to calculate `fullName` by combining both of them, you would do:\n *\n * ```ts\n * didInsertElement() {\n * console.log(`Hi, my full name is ${this.args.firstName} ${this.args.lastName}`);\n * }\n * ```\n *\n * While in the template you could do:\n *\n * ```hbs\n *

Welcome, {{@firstName}} {{@lastName}}!

\n * ```\n */\n _defineProperty(this, \"args\", void 0);\n if (DEBUG && !(owner !== null && typeof owner === 'object' && ARGS_SET.has(args))) {\n throw new Error(`You must pass both the owner and args to super() in your component: ${this.constructor.name}. You can pass them directly, or use ...arguments to pass all arguments through.`);\n }\n this.args = args;\n setOwner(this, owner);\n }\n get isDestroying() {\n return isDestroying(this);\n }\n get isDestroyed() {\n return isDestroyed(this);\n }\n\n /**\n * Called before the component has been removed from the DOM.\n */\n willDestroy() {}\n}","import Ember from 'ember';\nexport const isDestroying = Ember._isDestroying;\nexport const isDestroyed = Ember._isDestroyed;","import { DEBUG } from '@glimmer/env';\nimport Ember from 'ember';\nimport { set } from '@ember/object';\nimport { getOwner, setOwner } from '@ember/application';\nimport { capabilities } from '@ember/component';\nimport { schedule } from '@ember/runloop';\nimport BaseComponentManager from './base-component-manager';\nimport * as destroyables from './destroyables';\nconst {\n setDestroyed,\n setDestroying\n} = destroyables;\nconst CAPABILITIES = true // @ts-ignore\n// @ts-ignore\n? capabilities('3.13', {\n destructor: true,\n asyncLifecycleCallbacks: false,\n updateHook: false\n}) : capabilities('3.4', {\n destructor: true,\n asyncLifecycleCallbacks: false\n});\nconst scheduledDestroyComponent = true ? undefined : (component, meta) => {\n if (component.isDestroyed) {\n return;\n }\n Ember.destroy(component);\n meta.setSourceDestroyed();\n setDestroyed(component);\n};\nconst destroy = true ? Ember.destroy : component => {\n if (component.isDestroying) {\n return;\n }\n let meta = Ember.meta(component);\n meta.setSourceDestroying();\n setDestroying(component);\n schedule('actions', component, component.willDestroy);\n schedule('destroy', this, scheduledDestroyComponent, component, meta);\n};\nconst registerDestructor = true ? Ember._registerDestructor : true ? Ember.__loader.require('@glimmer/runtime').registerDestructor : undefined;\n\n/**\n * This component manager runs in Ember.js environments and extends the base component manager to:\n *\n * 1. Properly destroy the component's associated `meta` data structure\n * 2. Schedule destruction using Ember's runloop\n */\nclass EmberGlimmerComponentManager extends BaseComponentManager(setOwner, getOwner, CAPABILITIES) {\n createComponent(ComponentClass, args) {\n const component = super.createComponent(ComponentClass, args);\n if (true) {\n registerDestructor(component, () => {\n component.willDestroy();\n });\n }\n return component;\n }\n destroyComponent(component) {\n destroy(component);\n }\n}\n// In Ember 3.12 and earlier, the updateComponent hook was mandatory.\n// As of Ember 3.13, the `args` object is stable and each property of the\n// object participates in the autotrack stack on its own. This means we do not\n// need to set the `args` property on the component instance to invalidate\n// tracked getters that rely on `args`, and therefore don't require the `updateComponent`\n// hook at all.\nif (!true) {\n EmberGlimmerComponentManager.prototype.updateComponent = function updateComponent(component, args) {\n let argSnapshot = args.named;\n if (DEBUG) {\n argSnapshot = Object.freeze(argSnapshot);\n }\n set(component, 'args', argSnapshot);\n };\n}\nexport default EmberGlimmerComponentManager;","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { ARGS_SET } from './component';\n/**\n * This factory function returns a component manager class with common behavior\n * that can be extend to add Glimmer.js- or Ember.js-specific functionality. As\n * these environments converge, the need for two component manager\n * implementations (and thus this factory) should go away.\n */\nexport default function BaseComponentManager(setOwner, getOwner, capabilities) {\n return class {\n static create(attrs) {\n let owner = getOwner(attrs);\n return new this(owner);\n }\n constructor(owner) {\n _defineProperty(this, \"capabilities\", capabilities);\n setOwner(this, owner);\n }\n createComponent(ComponentClass, args) {\n if (DEBUG) {\n ARGS_SET.set(args.named, true);\n }\n return new ComponentClass(getOwner(this), args.named);\n }\n getContext(component) {\n return component;\n }\n };\n}","import { DEBUG } from '@glimmer/env';\nimport { setComponentManager } from '@ember/component';\n\n// Hax because the old version of `@types/ember__component` the `1.x` branch\n// uses does not provide any types for `setComponentManager` *and* because we\n// are using a very old version of `setComponentManager` for versions before\n// Ember 3.8.\n\nimport GlimmerComponentManager from './-private/ember-component-manager';\nimport GlimmerComponentBase from './-private/component';\nlet GlimmerComponent = GlimmerComponentBase;\nif (DEBUG) {\n // Add assertions against using Glimmer.js only APIs\n\n // TODO: Add GlimmerComponent API docs link to these messages once API docs are live\n function throwMethodUseError(methodName) {\n throw new Error(`You attempted to define the '${methodName}' method on a Glimmer Component, but that lifecycle hook does not exist in Ember.js applications, it only exists in Glimmer.js apps. You can rename this method, and you can trigger it using a modifier such as {{did-insert}} from '@ember/render-modifiers': https://github.com/emberjs/ember-render-modifiers.`);\n }\n function throwPropertyUseError(propertyName) {\n throw new Error(`You attempted to access the '${propertyName}' property on a Glimmer Component, but that property does not exist in Ember.js applications, it only exists in Glimmer.js apps. You define a class field with the same name on your component class and it will overwrite this error message, but it will not be used by the framework.`);\n }\n GlimmerComponent = class GlimmerDebugComponent extends GlimmerComponent {\n constructor(owner, args) {\n super(owner, args);\n if (typeof this['didInsertElement'] === 'function') {\n throwMethodUseError('didInsertElement');\n }\n if (typeof this['didUpdate'] === 'function') {\n throwMethodUseError('didUpdate');\n }\n }\n };\n let proto = GlimmerComponent.prototype;\n function defineErrorProp(proto, key, getterMethod) {\n Object.defineProperty(proto, key, {\n get: () => getterMethod(key),\n set(value) {\n Object.defineProperty(this, key, {\n value\n });\n }\n });\n }\n\n // Methods should still throw whenever they are accessed\n defineErrorProp(proto, 'bounds', throwPropertyUseError);\n defineErrorProp(proto, 'element', throwPropertyUseError);\n defineErrorProp(proto, 'debugName', throwPropertyUseError);\n}\nif (true) {\n setComponentManager(owner => {\n return new GlimmerComponentManager(owner);\n }, GlimmerComponent);\n} else {\n setComponentManager('glimmer', GlimmerComponent);\n}\nexport default GlimmerComponent;","import * as metal from \"@ember/-internals/metal\";\n const { cached, tracked } = metal;\n export { cached, tracked };","export const versionRegExp = /\\d+[.]\\d+[.]\\d+/; // Match any number of 3 sections of digits separated by .\nexport const versionExtendedRegExp = /\\d+[.]\\d+[.]\\d+-[a-z]*([.]\\d+)?/; // Match the above but also hyphen followed by any number of lowercase letters, then optionally period and digits\nexport const shaRegExp = /[a-z\\d]{8}$/; // Match 8 lowercase letters and digits, at the end of the string only (to avoid matching with version extended part)\n","import { helper } from '@ember/component/helper';\nimport config from '../config/environment';\nimport {\n shaRegExp,\n versionRegExp,\n versionExtendedRegExp,\n} from 'ember-cli-app-version/utils/regexp';\n\nexport function appVersion(_, hash = {}) {\n const version = config.APP.version;\n // e.g. 1.0.0-alpha.1+4jds75hf\n\n // Allow use of 'hideSha' and 'hideVersion' For backwards compatibility\n let versionOnly = hash.versionOnly || hash.hideSha;\n let shaOnly = hash.shaOnly || hash.hideVersion;\n\n let match = null;\n\n if (versionOnly) {\n if (hash.showExtended) {\n match = version.match(versionExtendedRegExp); // 1.0.0-alpha.1\n }\n // Fallback to just version\n if (!match) {\n match = version.match(versionRegExp); // 1.0.0\n }\n }\n\n if (shaOnly) {\n match = version.match(shaRegExp); // 4jds75hf\n }\n\n return match ? match[0] : version;\n}\n\nexport default helper(appVersion);\n","import initializerFactory from 'ember-cli-app-version/initializer-factory';\nimport config from '../config/environment';\n\nlet name, version;\nif (config.APP) {\n name = config.APP.name;\n version = config.APP.version;\n}\n\nexport default {\n name: 'App Version',\n initialize: initializerFactory(name, version),\n};\n","import { libraries } from '@ember/-internals/metal';\n\nexport default function initializerFactory(name, version) {\n let registered = false;\n\n return function () {\n if (!registered && name && version) {\n libraries.register(name, version);\n registered = true;\n }\n };\n}\n","/* eslint-disable prettier/prettier */\n// When using `ember serve` when fastboot addon is installed the application\n// output will already be rendered to the DOM when the actual JavaScript\n// loads. Ember does not automatically clear its `rootElement` so this\n// leads to the \"double\" applications being visible at once (only the\n// \"bottom\" one is running via JS and is interactive).\n//\n// This removes any pre-rendered ember-view elements, so that the booting\n// application will replace the pre-rendered output\nexport function clearHtml() {\n let current = document.getElementById('fastboot-body-start');\n let endMarker = document.getElementById('fastboot-body-end');\n\n if (current && endMarker) {\n let shoeboxNodes = document.querySelectorAll('[type=\"fastboot/shoebox\"]');\n let shoeboxNodesArray = []; // Note that IE11 doesn't support more concise options like Array.from, so we have to do something like this\n for(let i=0; i < shoeboxNodes.length; i++){\n shoeboxNodesArray.push(shoeboxNodes[i]);\n }\n let parent = current.parentElement;\n let nextNode;\n do {\n nextNode = current.nextSibling;\n parent.removeChild(current);\n current = nextNode;\n } while (nextNode && nextNode !== endMarker && shoeboxNodesArray.indexOf(nextNode) < 0);\n endMarker.parentElement.removeChild(endMarker);\n }\n}\nexport default {\n name: \"clear-double-boot\",\n\n initialize(instance) {\n if (typeof FastBoot === 'undefined') {\n var originalDidCreateRootView = instance.didCreateRootView;\n\n instance.didCreateRootView = function() {\n clearHtml();\n originalDidCreateRootView.apply(instance, arguments);\n };\n }\n }\n}\n","/* eslint-disable ember/no-classic-classes, ember/no-get, ember/require-computed-property-dependencies, prettier/prettier */\nimport { computed, get } from '@ember/object';\nimport { bool, readOnly } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application'\nimport NoneLocation from '@ember/routing/none-location'\n\nconst TEMPORARY_REDIRECT_CODE = 307;\n\nexport default NoneLocation.extend({\n implementation: 'fastboot',\n fastboot: service(),\n\n _config: computed(function () {\n return getOwner(this).resolveRegistration('config:environment');\n }),\n\n _fastbootHeadersEnabled: bool('_config.fastboot.fastbootHeaders'),\n\n _redirectCode: computed(function () {\n return get(this, '_config.fastboot.redirectCode') || TEMPORARY_REDIRECT_CODE;\n }),\n\n _response: readOnly('fastboot.response'),\n _request: readOnly('fastboot.request'),\n\n setURL(path) {\n if (get(this, 'fastboot.isFastBoot')) {\n let response = get(this, '_response');\n let currentPath = get(this, 'path');\n let isInitialPath = !currentPath || currentPath.length === 0;\n\n if (!isInitialPath) {\n path = this.formatURL(path);\n let isTransitioning = currentPath !== path;\n\n if (isTransitioning) {\n let host = get(this, '_request.host');\n let redirectURL = `//${host}${path}`;\n\n response.statusCode = this.get('_redirectCode');\n response.headers.set('location', redirectURL);\n }\n }\n\n // for testing and debugging\n if (get(this, '_fastbootHeadersEnabled')) {\n response.headers.set('x-fastboot-path', path);\n }\n }\n\n this._super(...arguments);\n }\n});\n","/* eslint-disable ember/no-classic-classes, ember/no-get, ember/require-computed-property-dependencies, ember/require-return-from-computed, prettier/prettier */\n/* global FastBoot */\nimport { getOwner } from '@ember/application';\nimport { computed, get } from '@ember/object';\nimport { readOnly } from '@ember/object/computed';\nimport { assert } from '@ember/debug';\nimport EObject from '@ember/object';\nimport Service from '@ember/service';\n\nconst RequestObject = EObject.extend({\n init() {\n this._super(...arguments);\n\n let request = this.request;\n delete this.request;\n\n this.method = request.method;\n this.body = request.body;\n this.cookies = request.cookies;\n this.headers = request.headers;\n this.queryParams = request.queryParams;\n this.path = request.path;\n this.protocol = request.protocol;\n this._host = function() {\n return request.host();\n };\n },\n\n host: computed(function() {\n return this._host();\n })\n});\n\nconst Shoebox = EObject.extend({\n put(key, value) {\n assert('shoebox.put is only invoked from the FastBoot rendered application', this.get('fastboot.isFastBoot'));\n assert('the provided key is a string', typeof key === 'string');\n\n let fastbootInfo = this.get('fastboot._fastbootInfo');\n if (!fastbootInfo.shoebox) { fastbootInfo.shoebox = {}; }\n\n fastbootInfo.shoebox[key] = value;\n },\n\n retrieve(key) {\n if (this.get('fastboot.isFastBoot')) {\n let shoebox = this.get('fastboot._fastbootInfo.shoebox');\n if (!shoebox) { return; }\n\n return shoebox[key];\n }\n\n let shoeboxItem = this.get(key);\n if (shoeboxItem) { return shoeboxItem; }\n\n let el = document.querySelector(`#shoebox-${key}`);\n if (!el) { return; }\n let valueString = el.textContent;\n if (!valueString) { return; }\n\n shoeboxItem = JSON.parse(valueString);\n this.set(key, shoeboxItem);\n\n return shoeboxItem;\n }\n});\n\nconst FastBootService = Service.extend({\n isFastBoot: typeof FastBoot !== 'undefined',\n\n isFastboot: computed(function() {\n assert(\n 'The fastboot service does not have an `isFastboot` property. This is likely a typo. Please use `isFastBoot` instead.',\n false\n );\n }),\n\n init() {\n this._super(...arguments);\n\n let shoebox = Shoebox.create({ fastboot: this });\n this.set('shoebox', shoebox);\n },\n\n response: readOnly('_fastbootInfo.response'),\n metadata: readOnly('_fastbootInfo.metadata'),\n\n request: computed(function() {\n if (!this.isFastBoot) return null;\n return RequestObject.create({ request: get(this, '_fastbootInfo.request') });\n }),\n\n // this getter/setter pair is to avoid deprecation from [RFC - 680](https://github.com/emberjs/rfcs/pull/680)\n _fastbootInfo: computed({\n get() {\n if (this.__fastbootInfo) {\n return this.__fastbootInfo;\n }\n\n return getOwner(this).lookup('info:-fastboot');\n },\n set(_key, value) {\n this.__fastbootInfo = value;\n return value;\n }\n }),\n\n deferRendering(promise) {\n assert('deferRendering requires a promise or thennable object', typeof promise.then === 'function');\n this._fastbootInfo.deferRendering(promise);\n }\n});\n\nexport default FastBootService;\n","import { inject as service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport layout from '../templates/head';\nimport { setComponentTemplate } from '@ember/component';\n\nexport default class HeadContent extends Component {\n @service('head-data') model;\n}\n\nsetComponentTemplate(layout, HeadContent);\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#in-element this.headElement insertBefore=null}}\\n {{! template-lint-disable no-forbidden-elements }}\\n \\n{{/in-element}}\\n\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-cli-head.d8f9ed82/node_modules/ember-cli-head/components/head-layout.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './head-layout.hbs'; */\nvar _dec, _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nlet HeadLayout = (_dec = service('-document'), _class = class HeadLayout extends Component {\n constructor() {\n super(...arguments);\n _initializerDefineProperty(this, \"document\", _descriptor, this);\n /**\n * If true, this will tear down any existing head on init of this component.\n * This is useful if there is a head built with fastboot - it will then be torn down when this is initialized in the browser.\n * If you do not want this behavior, you can set this to false.\n * @public\n */\n _defineProperty(this, \"shouldTearDownOnInit\", true);\n /**\n * The element to render into. Defaults to in `init`, overridable for our own tests only.\n * @private\n */\n _defineProperty(this, \"headElement\", this.args.headElement || this.document.head);\n if (this.shouldTearDownOnInit) {\n this._tearDownHead();\n }\n }\n\n /**\n * Tear down any previous head, if there was one.\n * @private\n */\n _tearDownHead() {\n if (this._isFastboot()) {\n return;\n }\n\n // clear fast booted head (if any)\n let document = this.document;\n let startMeta = document.querySelector('meta[name=\"ember-cli-head-start\"]');\n let endMeta = document.querySelector('meta[name=\"ember-cli-head-end\"]');\n if (startMeta && endMeta) {\n let el = startMeta.nextSibling;\n while (el && el !== endMeta) {\n document.head.removeChild(el);\n el = startMeta.nextSibling;\n }\n document.head.removeChild(startMeta);\n document.head.removeChild(endMeta);\n }\n }\n _isFastboot() {\n return typeof FastBoot !== 'undefined';\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"document\", [_dec], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { HeadLayout as default };","export default {\n name: 'head-browser',\n initialize() {\n // do nothing!\n // this functionality has been moved into addon/components/head-layout.js\n // This is only here in order to not break existing addons relying on this, e.g. ember-page-title.\n },\n};\n","import Service from '@ember/service';\nexport default class HeadData extends Service {}","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @shouldAnimate}}\\n\\n {{#this.liquidif @isOpen use=\\'crossFade\\'}}\\n
\\n {{yield}}\\n
\\n {{/this.liquidif}}\\n\\n{{else}}\\n\\n {{#if @isOpen}}\\n
\\n {{yield}}\\n
\\n {{/if}}\\n\\n{{/if}}\\n\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panel-body/template.hbs\" })","/* eslint-disable ember/no-classic-classes, ember/no-classic-components, ember/require-tagless-components, prettier/prettier */\nimport { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';\nimport { ensureSafeComponent } from '@embroider/util';\nimport Component from '@ember/component';\nimport { computed } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport layout from './template';\nlet LiquidIf, hasRealLiquidIf;\nif (macroCondition(dependencySatisfies('liquid-fire', '*'))) {\n LiquidIf = importSync('liquid-fire/components/liquid-if').default;\n hasRealLiquidIf = true;\n} else {\n hasRealLiquidIf = false;\n}\nexport default Component.extend({\n layout,\n classNames: ['cp-Panel-body'],\n classNameBindings: ['isOpen:cp-is-open'],\n // ideally we'd use a getter here, but that requires Ember 3.16+\n 'liquidif': computed(function () {\n assert('ember-collapsible-panel\\'s cp-panel-body component requires liquid-fire to be present if `shouldAnimate` is used', hasRealLiquidIf);\n return ensureSafeComponent(LiquidIf, this);\n })\n});","/* eslint-disable ember/no-classic-classes, ember/no-classic-components, ember/no-get, ember/require-tagless-components, prettier/prettier */\nimport Component from '@ember/component';\nimport { computed, get } from \"@ember/object\";\nexport default Component.extend({\n tagName: 'a',\n classNames: ['cp-Panel-toggle'],\n classNameBindings: ['isOpen:cp-is-open'],\n // So taps register in iOS\n attributeBindings: ['href', 'ariaExpanded:aria-expanded'],\n href: '#',\n ariaExpanded: computed('isOpen', function () {\n return get(this, 'isOpen') ? 'true' : 'false';\n }),\n click(e) {\n e.preventDefault();\n this.get('on-click')();\n }\n});","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-action }}\\n{{yield (hash\\n toggle=(component \\'cp-panel-toggle\\' on-click=(action \\'toggleIsOpen\\') isOpen=this.isOpen)\\n body=(component \\'cp-panel-body\\' shouldAnimate=this.shouldAnimate isOpen=this.isOpen)\\n name=this.name\\n isOpen=this.isOpen\\n)}}\\n\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panel/template.hbs\" })","/* eslint-disable ember/no-actions-hash, ember/no-classic-classes, ember/no-classic-components, ember/no-component-lifecycle-hooks, ember/no-get, ember/no-incorrect-calls-with-inline-anonymous-functions, ember/require-tagless-components, prettier/prettier */\nimport { scheduleOnce } from '@ember/runloop';\nimport { computed } from '@ember/object';\nimport { and, oneWay, readOnly, not } from '@ember/object/computed';\nimport { macroCondition, dependencySatisfies } from '@embroider/macros';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\nimport layout from './template';\nlet hasLiquidFireDep;\nif (macroCondition(dependencySatisfies('liquid-fire', '*'))) {\n hasLiquidFireDep = true;\n} else {\n hasLiquidFireDep = false;\n}\nexport default Component.extend({\n layout,\n panelActions: service(),\n shouldAnimate: and('hasLiquidFireDep', 'animate'),\n disabled: false,\n hasLiquidFireDep,\n group: null,\n // passed in if rendered as part of a {{cp-panels}} group\n\n classNames: ['cp-Panel'],\n classNameBindings: ['isOpen:cp-is-open:cp-is-closed', 'disabled:cp-is-disabled'],\n // Caller can overwrite\n name: oneWay('elementId'),\n panelState: computed('name', function () {\n const name = this.get('name');\n return this.get(`panelActions.state.${name}`);\n }),\n isOpen: readOnly('panelState.isOpen'),\n isClosed: not('isOpen'),\n panelsWrapper: null,\n animate: true,\n didReceiveAttrs() {\n this._super(...arguments);\n\n // If caller passes in open=, use it\n if (this.get('open') !== undefined) {\n this.set('panelState.boundOpenState', this.get('open'));\n }\n },\n // Register with parent panels component\n didInsertElement() {\n this._super(...arguments);\n scheduleOnce('afterRender', () => {\n let group = this.get('group');\n if (group) {\n this.get('panelState').set('group', group);\n }\n });\n },\n // Custom action called when toggling that can be provided by caller\n didToggle() {},\n actions: {\n toggleIsOpen() {\n if (this.get(\"disabled\")) {\n return;\n }\n let name = this.get('name');\n this.get('panelActions').toggle(name);\n this.didToggle(name);\n }\n }\n});","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{yield (hash\\n panel=(component \\'cp-panel\\' group=this)\\n name=@name\\n)}}\\n\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-collapsible-panel.a558cf03/node_modules/ember-collapsible-panel/components/cp-panels/template.hbs\" })","/* eslint-disable ember/no-classic-classes, ember/no-classic-components, ember/require-tagless-components, prettier/prettier */\nimport { oneWay } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport layout from './template';\nexport default Component.extend({\n layout,\n classNames: 'cp-Panels',\n accordion: false,\n animate: true,\n _cpPanels: true,\n name: oneWay('elementId')\n});","/* eslint-disable ember/no-assignment-of-untracked-properties-used-in-tracking-contexts, ember/no-classic-classes, ember/no-get, prettier/prettier */\nimport { readOnly } from '@ember/object/computed';\nimport { A } from '@ember/array';\nimport Service from '@ember/service';\nimport EmberObject, { computed } from '@ember/object';\nconst State = EmberObject.extend({\n name: null,\n boundOpenState: false,\n apiOpenState: false,\n apiWasUsed: false,\n isOpen: computed('boundOpenState', 'apiOpenState', 'apiWasUsed', function () {\n if (this.get('apiWasUsed')) {\n return this.get('apiOpenState');\n } else {\n return this.get('boundOpenState');\n }\n }),\n animate: true,\n group: null\n});\nconst Registry = EmberObject.extend({\n init() {\n this._super(...arguments);\n this.keys = A([]);\n },\n unknownProperty(name) {\n if (name === 'setUnknownProperty') {\n // For failing ember-default testing scenario\n // https://travis-ci.org/adopted-ember-addons/ember-collapsible-panel/builds/626881977\n return;\n }\n const state = State.create();\n this.get('keys').addObject(name);\n this.set(name, state); // eslint-disable-line ember/no-side-effects\n\n return state;\n },\n // probably not too safe, should only be used in tests\n reset() {\n this.get('keys').slice() // copy, so we dont mess with binding/loops\n .forEach(key => {\n delete this[key];\n });\n this.get('keys').clear();\n }\n});\nexport default Service.extend({\n init() {\n this._super(...arguments);\n this._registry = Registry.create();\n },\n state: readOnly('_registry'),\n _panelFor(name) {\n return this.get(`state.${name}`);\n },\n _panels: computed('state.keys.[]', function () {\n const keys = this.get('state.keys'),\n state = this.get('state');\n return keys.reduce((result, key) => {\n return result.addObject(state.get(key));\n }, A([]));\n }),\n _panelsInGroup(name) {\n return this.get('_panels').filterBy('group.name', name);\n },\n open(name) {\n const panel = this._panelFor(name),\n group = panel.get('group');\n if (group && group.get('accordion')) {\n // if this is part of an accordion close\n // everything else\n this.closeAll(group.get('name'));\n }\n panel.set('apiOpenState', true);\n panel.set('apiWasUsed', true);\n },\n close(name) {\n this._panelFor(name).set('apiOpenState', false);\n this._panelFor(name).set('apiWasUsed', true);\n },\n toggle(name) {\n let panel = this._panelFor(name);\n return panel.get('isOpen') ? this.close(name) : this.open(name);\n },\n openAll(group) {\n this._panelsInGroup(group).forEach(panel => {\n panel.set('apiOpenState', true);\n panel.set('apiWasUsed', true);\n });\n },\n closeAll(group) {\n this._panelsInGroup(group).forEach(panel => {\n panel.set('apiOpenState', false);\n panel.set('apiWasUsed', true);\n });\n }\n});","\nimport Mixin from '@ember/object/mixin';\n\n/**\n Implements some standard methods for copying an object. Add this mixin to\n any object you create that can create a copy of itself. This mixin is\n added automatically to the built-in array.\n\n You should generally implement the `copy()` method to return a copy of the\n receiver.\n\n @class Copyable\n*/\n// eslint-disable-next-line ember/no-new-mixins\nexport default Mixin.create({\n /**\n __Required.__ You must implement this method to apply this mixin.\n\n Override to return a copy of the receiver. Default implementation raises\n an exception.\n\n @method copy\n @param {Boolean} deep if `true`, a deep copy of the object should be made\n @return {Object} copy of receiver\n */\n copy: null\n});\n","import { assert } from '@ember/debug';\nimport EmberObject from '@ember/object';\nimport Copyable from './copyable';\n\nfunction _copy(obj, deep, seen, copies) {\n // primitive data types are immutable, just return them.\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n\n let ret, loc;\n\n // avoid cyclical loops\n if (deep && (loc = seen.indexOf(obj)) >= 0) {\n return copies[loc];\n }\n\n if (deep) {\n seen.push(obj);\n }\n\n // IMPORTANT: this specific test will detect a native array only. Any other\n // object will need to implement Copyable.\n if (Array.isArray(obj)) {\n ret = obj.slice();\n\n if (deep) {\n copies.push(ret);\n loc = ret.length;\n\n while (--loc >= 0) {\n ret[loc] = _copy(ret[loc], deep, seen, copies);\n }\n }\n } else if (Copyable.detect(obj)) {\n ret = obj.copy(deep, seen, copies);\n if (deep) {\n copies.push(ret);\n }\n } else if (obj instanceof Date) {\n ret = new Date(obj.getTime());\n if (deep) {\n copies.push(ret);\n }\n } else {\n assert(\n 'Cannot clone an EmberObject that does not implement Copyable',\n !(obj instanceof EmberObject) || Copyable.detect(obj)\n );\n\n ret = {};\n if (deep) {\n copies.push(ret);\n }\n\n let key;\n for (key in obj) {\n // support Null prototype\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n continue;\n }\n\n // Prevents browsers that don't respect non-enumerability from\n // copying internal Ember properties\n if (key.substring(0, 2) === '__') {\n continue;\n }\n\n ret[key] = deep ? _copy(obj[key], deep, seen, copies) : obj[key];\n }\n }\n\n return ret;\n}\n\n/**\n Creates a shallow copy of the passed object. A deep copy of the object is\n returned if the optional `deep` argument is `true`.\n\n If the passed object implements the `Copyable` interface, then this\n function will delegate to the object's `copy()` method and return the\n result. See `Copyable` for further details.\n\n For primitive values (which are immutable in JavaScript), the passed object\n is simply returned.\n\n @function copy\n @param {Object} obj The object to clone\n @param {Boolean} [deep=false] If true, a deep copy of the object is made.\n @return {Object} The copied object\n*/\nexport default function copy(obj, deep) {\n // fast paths\n if ('object' !== typeof obj || obj === null) {\n return obj; // can't copy primitives\n }\n\n if (!Array.isArray(obj) && Copyable.detect(obj)) {\n return obj.copy(deep);\n }\n\n return _copy(obj, deep, deep ? [] : null, deep ? [] : null);\n}\n","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet FormatDateHelper = (_class = class FormatDateHelper extends Helper {\n constructor() {\n // eslint-disable-next-line prefer-rest-params\n super(...arguments);\n\n // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n _initializerDefineProperty(this, \"intl\", _descriptor, this);\n _defineProperty(this, \"allowEmpty\", true);\n this.intl.onLocaleChanged(this.recompute, this);\n }\n compute([value, positionalOptions], namedOptions) {\n const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n if (isEmpty(value)) {\n if (options?.allowEmpty ?? this.allowEmpty) {\n return '';\n }\n\n /*\n TODO: {{format-date}} is the only helper that always allows\n an undefined value. That is, it can never throw an error.\n For ember-intl@v7, unify the options of all helpers.\n */\n // if (typeof value === 'undefined') {\n // throw new Error('{{format-date}} helper requires a value.');\n // }\n }\n return this.intl.formatDate(value, options);\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { FormatDateHelper as default };","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet FormatListHelper = (_class = class FormatListHelper extends Helper {\n constructor() {\n // eslint-disable-next-line prefer-rest-params\n super(...arguments);\n\n // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n _initializerDefineProperty(this, \"intl\", _descriptor, this);\n _defineProperty(this, \"allowEmpty\", false);\n this.intl.onLocaleChanged(this.recompute, this);\n }\n compute([value, positionalOptions], namedOptions) {\n const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n if (isEmpty(value)) {\n if (options?.allowEmpty ?? this.allowEmpty) {\n return '';\n }\n if (typeof value === 'undefined') {\n throw new Error('{{format-list}} helper requires a value.');\n }\n }\n return this.intl.formatList(value, options);\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { FormatListHelper as default };","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet FormatMessageHelper = (_class = class FormatMessageHelper extends Helper {\n constructor() {\n // eslint-disable-next-line prefer-rest-params\n super(...arguments);\n\n // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n _initializerDefineProperty(this, \"intl\", _descriptor, this);\n _defineProperty(this, \"allowEmpty\", false);\n this.intl.onLocaleChanged(this.recompute, this);\n }\n compute([value, positionalOptions], namedOptions) {\n const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n if (isEmpty(value)) {\n if (options?.allowEmpty ?? this.allowEmpty) {\n return '';\n }\n if (typeof value === 'undefined') {\n throw new Error('{{format-message}} helper requires a value.');\n }\n }\n return this.intl.formatMessage(value, options);\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { FormatMessageHelper as default };","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet FormatNumberHelper = (_class = class FormatNumberHelper extends Helper {\n constructor() {\n // eslint-disable-next-line prefer-rest-params\n super(...arguments);\n\n // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n _initializerDefineProperty(this, \"intl\", _descriptor, this);\n _defineProperty(this, \"allowEmpty\", false);\n this.intl.onLocaleChanged(this.recompute, this);\n }\n compute([value, positionalOptions], namedOptions) {\n const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n if (isEmpty(value)) {\n if (options?.allowEmpty ?? this.allowEmpty) {\n return '';\n }\n if (typeof value === 'undefined') {\n throw new Error('{{format-number}} helper requires a value.');\n }\n }\n return this.intl.formatNumber(value, options);\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { FormatNumberHelper as default };","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet FormatRelativeHelper = (_class = class FormatRelativeHelper extends Helper {\n constructor() {\n // eslint-disable-next-line prefer-rest-params\n super(...arguments);\n\n // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n _initializerDefineProperty(this, \"intl\", _descriptor, this);\n _defineProperty(this, \"allowEmpty\", false);\n this.intl.onLocaleChanged(this.recompute, this);\n }\n compute([value, positionalOptions], namedOptions) {\n const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n if (isEmpty(value)) {\n if (options?.allowEmpty ?? this.allowEmpty) {\n return '';\n }\n if (typeof value === 'undefined') {\n throw new Error('{{format-relative}} helper requires a value.');\n }\n }\n return this.intl.formatRelative(value, options);\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { FormatRelativeHelper as default };","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet FormatTimeHelper = (_class = class FormatTimeHelper extends Helper {\n constructor() {\n // eslint-disable-next-line prefer-rest-params\n super(...arguments);\n\n // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n _initializerDefineProperty(this, \"intl\", _descriptor, this);\n _defineProperty(this, \"allowEmpty\", false);\n this.intl.onLocaleChanged(this.recompute, this);\n }\n compute([value, positionalOptions], namedOptions) {\n const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n if (isEmpty(value)) {\n if (options?.allowEmpty ?? this.allowEmpty) {\n return '';\n }\n if (typeof value === 'undefined') {\n throw new Error('{{format-time}} helper requires a value.');\n }\n }\n return this.intl.formatTime(value, options);\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { FormatTimeHelper as default };","var _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nlet THelper = (_class = class THelper extends Helper {\n constructor() {\n // eslint-disable-next-line prefer-rest-params\n super(...arguments);\n\n // @ts-expect-error: Property 'onLocaleChanged' is private and only accessible within class 'IntlService'.\n _initializerDefineProperty(this, \"intl\", _descriptor, this);\n _defineProperty(this, \"allowEmpty\", false);\n this.intl.onLocaleChanged(this.recompute, this);\n }\n compute([value, positionalOptions], namedOptions) {\n const options = positionalOptions ? Object.assign({}, positionalOptions, namedOptions) : namedOptions;\n if (isEmpty(value)) {\n if (options?.allowEmpty ?? this.allowEmpty) {\n return '';\n }\n if (typeof value === 'undefined') {\n throw new Error('{{t}} helper requires a value.');\n }\n }\n return this.intl.t(value, options);\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"intl\", [service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class);\nexport { THelper as default };","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * @private\n * @hide\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport default class FormatterBase {\n get options() {\n return [];\n }\n}\n_defineProperty(FormatterBase, \"type\", void 0);","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n/**\n * @private\n * @hide\n */\nexport default class FormatDate extends Formatter {\n format(intl, ...[value, opts]) {\n return intl.formatDate(value, opts);\n }\n}\n_defineProperty(FormatDate, \"type\", 'date');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n\n/**\n * @private\n * @hide\n */\nexport default class FormatList extends Formatter {\n format(intl, ...[value, opts]) {\n return intl.formatList(value, opts);\n }\n}\n_defineProperty(FormatList, \"type\", 'list');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { htmlSafe, isHTMLSafe } from '@ember/template';\nimport Formatter from './-base';\nconst escaped = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\nconst needToEscape = /[&<>\"'`=]/;\nconst badCharacters = /[&<>\"'`=]/g;\n\n// https://github.com/emberjs/ember.js/blob/v5.6.0/packages/%40ember/-internals/glimmer/lib/utils/string.ts#L103-L118\nfunction escapeExpression(value) {\n if (!needToEscape.test(value)) {\n return value;\n }\n return value.replace(badCharacters, character => {\n return escaped[character];\n });\n}\nfunction escapeOptions(object) {\n if (typeof object !== 'object') {\n return;\n }\n const escapedOpts = {};\n Object.keys(object).forEach(key => {\n const value = object[key];\n if (isHTMLSafe(value)) {\n // If the option is an instance of Ember SafeString,\n // we don't want to pass it into the formatter, since the\n // formatter won't know what to do with it. Instead, we cast\n // the SafeString to a regular string using `toHTML`.\n // Since it was already marked as safe we should *not* escape it.\n // @ts-ignore: see comment above\n escapedOpts[key] = value.toHTML();\n } else if (typeof value === 'string') {\n // @ts-ignore: see comment above\n escapedOpts[key] = escapeExpression(value);\n } else {\n // @ts-ignore: see comment above\n escapedOpts[key] = value; // copy as-is\n }\n });\n return escapedOpts;\n}\n/**\n * @private\n * @hide\n */\nexport default class FormatMessage extends Formatter {\n // ! Function overloads are not passed through generic types for reasons that\n // evade my knowledge. ¯\\_(ツ)_/¯\n // For this reason these types need to be manually copied over to the\n // `IntlService#formatMessage`.\n\n format(intl, stringOrDesc, options) {\n const isHTMLSafe = options && options.htmlSafe;\n const escapedOptions = isHTMLSafe ? escapeOptions(options) : options;\n const desc = stringOrDesc && typeof stringOrDesc === 'object' ? stringOrDesc : {\n id: stringOrDesc,\n defaultMessage: stringOrDesc\n };\n const result = intl.formatMessage(desc, escapedOptions, {\n ignoreTag: true\n });\n return isHTMLSafe ? htmlSafe(result) : result;\n }\n}\n_defineProperty(FormatMessage, \"type\", 'message');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n\n/**\n * @private\n * @hide\n */\nexport default class FormatNumber extends Formatter {\n format(intl, ...[value, opts]) {\n return intl.formatNumber(value, opts);\n }\n}\n_defineProperty(FormatNumber, \"type\", 'number');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { assert } from '@ember/debug';\nimport Formatter from './-base';\n\n/**\n * An object with some or all of properties of `options` parameter\n * of `Intl.RelativeTimeFormat` constructor.\n *\n * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters).\n *\n * [Specification](https://tc39.es/ecma402/#sec-InitializeRelativeTimeFormat).\n */\n\n/**\n * @private\n * @hide\n */\nexport default class FormatRelative extends Formatter {\n format(intl, value, formatOptions) {\n assert(`[ember-intl] FormatRelative: Missing option`, formatOptions);\n const {\n format\n } = formatOptions;\n let unit = formatOptions.unit;\n let opts = formatOptions;\n if (!unit && format && intl.formats.relative && (opts = intl.formats.relative[format])) {\n unit = opts.unit;\n }\n assert(`[ember-intl] FormatRelative: 'formatOptions' are missing a 'unit'. ${JSON.stringify(formatOptions)}`, unit);\n return intl.formatRelativeTime(value, unit, opts);\n }\n}\n_defineProperty(FormatRelative, \"type\", 'relative');","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Formatter from './-base';\n\n/**\n * @private\n * @hide\n */\nexport default class FormatTime extends Formatter {\n format(intl, ...[value, opts]) {\n return intl.formatTime(value, opts);\n }\n}\n_defineProperty(FormatTime, \"type\", 'time');","export var ErrorKind;\n(function (ErrorKind) {\n /** Argument is unclosed (e.g. `{0`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n /** Argument is empty (e.g. `{}`). */\n ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n /** Argument is malformed (e.g. `{foo!}``) */\n ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n /** Expect an argument type (e.g. `{foo,}`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n /** Unsupported argument type (e.g. `{foo,foo}`) */\n ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n /** Expect an argument style (e.g. `{foo, number, }`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n /** The number skeleton is invalid. */\n ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n /** The date time skeleton is invalid. */\n ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n /** Missing select argument options (e.g. `{foo, select}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n /**\n * Expecting a message fragment after the `plural` or `selectordinal` selector\n * (e.g. `{foo, plural, one}`)\n */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n /**\n * Duplicate selectors in `plural` or `selectordinal` argument.\n * (e.g. {foo, plural, one {#} one {#}})\n */\n ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n /** Duplicate selectors in `select` argument.\n * (e.g. {foo, select, apple {apple} apple {apple}})\n */\n ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n /** Plural or select argument option must have `other` clause. */\n ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n /** The tag is malformed. (e.g. `foo) */\n ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n /** The tag name is invalid. (e.g. `<123>foo`) */\n ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n /** The closing tag does not match the opening tag. (e.g. `foo`) */\n ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n /** The opening tag has unmatched closing tag. (e.g. `foo`) */\n ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n /**\n * Raw text\n */\n TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n /**\n * Variable w/o any format, e.g `var` in `this is a {var}`\n */\n TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n /**\n * Variable w/ number format\n */\n TYPE[TYPE[\"number\"] = 2] = \"number\";\n /**\n * Variable w/ date format\n */\n TYPE[TYPE[\"date\"] = 3] = \"date\";\n /**\n * Variable w/ time format\n */\n TYPE[TYPE[\"time\"] = 4] = \"time\";\n /**\n * Variable w/ select format\n */\n TYPE[TYPE[\"select\"] = 5] = \"select\";\n /**\n * Variable w/ plural format\n */\n TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n /**\n * Only possible within plural argument.\n * This is the `#` symbol that will be substituted with the count.\n */\n TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n /**\n * XML-like tag\n */\n TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n return {\n type: TYPE.literal,\n value: value,\n };\n}\nexport function createNumberElement(value, style) {\n return {\n type: TYPE.number,\n value: value,\n style: style,\n };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n var result = {};\n skeleton.replace(DATE_TIME_REGEX, function (match) {\n var len = match.length;\n switch (match[0]) {\n // Era\n case 'G':\n result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n // Year\n case 'y':\n result.year = len === 2 ? '2-digit' : 'numeric';\n break;\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n // Quarter\n case 'q':\n case 'Q':\n throw new RangeError('`q/Q` (quarter) patterns are not supported');\n // Month\n case 'M':\n case 'L':\n result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n break;\n // Week\n case 'w':\n case 'W':\n throw new RangeError('`w/W` (week) patterns are not supported');\n case 'd':\n result.day = ['numeric', '2-digit'][len - 1];\n break;\n case 'D':\n case 'F':\n case 'g':\n throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n // Weekday\n case 'E':\n result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n case 'e':\n if (len < 4) {\n throw new RangeError('`e..eee` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n case 'c':\n if (len < 4) {\n throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n // Period\n case 'a': // AM, PM\n result.hour12 = true;\n break;\n case 'b': // am, pm, noon, midnight\n case 'B': // flexible day periods\n throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n // Hour\n case 'h':\n result.hourCycle = 'h12';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'H':\n result.hourCycle = 'h23';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'K':\n result.hourCycle = 'h11';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'k':\n result.hourCycle = 'h24';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'j':\n case 'J':\n case 'C':\n throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n // Minute\n case 'm':\n result.minute = ['numeric', '2-digit'][len - 1];\n break;\n // Second\n case 's':\n result.second = ['numeric', '2-digit'][len - 1];\n break;\n case 'S':\n case 'A':\n throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n // Zone\n case 'z': // 1..3, 4: specific non-location format\n result.timeZoneName = len < 4 ? 'short' : 'long';\n break;\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: milliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n }\n return '';\n });\n return result;\n}\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n if (skeleton.length === 0) {\n throw new Error('Number skeleton cannot be empty');\n }\n // Parse the skeleton\n var stringTokens = skeleton\n .split(WHITE_SPACE_REGEX)\n .filter(function (x) { return x.length > 0; });\n var tokens = [];\n for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n var stringToken = stringTokens_1[_i];\n var stemAndOptions = stringToken.split('/');\n if (stemAndOptions.length === 0) {\n throw new Error('Invalid number skeleton');\n }\n var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n var option = options_1[_a];\n if (option.length === 0) {\n throw new Error('Invalid number skeleton');\n }\n }\n tokens.push({ stem: stem, options: options });\n }\n return tokens;\n}\nfunction icuUnitToEcma(unit) {\n return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n var result = {};\n if (str[str.length - 1] === 'r') {\n result.roundingPriority = 'morePrecision';\n }\n else if (str[str.length - 1] === 's') {\n result.roundingPriority = 'lessPrecision';\n }\n str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n // @@@ case\n if (typeof g2 !== 'string') {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length;\n }\n // @@@+ case\n else if (g2 === '+') {\n result.minimumSignificantDigits = g1.length;\n }\n // .### case\n else if (g1[0] === '#') {\n result.maximumSignificantDigits = g1.length;\n }\n // .@@## or .@@@ case\n else {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits =\n g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n return '';\n });\n return result;\n}\nfunction parseSign(str) {\n switch (str) {\n case 'sign-auto':\n return {\n signDisplay: 'auto',\n };\n case 'sign-accounting':\n case '()':\n return {\n currencySign: 'accounting',\n };\n case 'sign-always':\n case '+!':\n return {\n signDisplay: 'always',\n };\n case 'sign-accounting-always':\n case '()!':\n return {\n signDisplay: 'always',\n currencySign: 'accounting',\n };\n case 'sign-except-zero':\n case '+?':\n return {\n signDisplay: 'exceptZero',\n };\n case 'sign-accounting-except-zero':\n case '()?':\n return {\n signDisplay: 'exceptZero',\n currencySign: 'accounting',\n };\n case 'sign-never':\n case '+_':\n return {\n signDisplay: 'never',\n };\n }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n // Engineering\n var result;\n if (stem[0] === 'E' && stem[1] === 'E') {\n result = {\n notation: 'engineering',\n };\n stem = stem.slice(2);\n }\n else if (stem[0] === 'E') {\n result = {\n notation: 'scientific',\n };\n stem = stem.slice(1);\n }\n if (result) {\n var signDisplay = stem.slice(0, 2);\n if (signDisplay === '+!') {\n result.signDisplay = 'always';\n stem = stem.slice(2);\n }\n else if (signDisplay === '+?') {\n result.signDisplay = 'exceptZero';\n stem = stem.slice(2);\n }\n if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n throw new Error('Malformed concise eng/scientific notation');\n }\n result.minimumIntegerDigits = stem.length;\n }\n return result;\n}\nfunction parseNotationOptions(opt) {\n var result = {};\n var signOpts = parseSign(opt);\n if (signOpts) {\n return signOpts;\n }\n return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n var result = {};\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n switch (token.stem) {\n case 'percent':\n case '%':\n result.style = 'percent';\n continue;\n case '%x100':\n result.style = 'percent';\n result.scale = 100;\n continue;\n case 'currency':\n result.style = 'currency';\n result.currency = token.options[0];\n continue;\n case 'group-off':\n case ',_':\n result.useGrouping = false;\n continue;\n case 'precision-integer':\n case '.':\n result.maximumFractionDigits = 0;\n continue;\n case 'measure-unit':\n case 'unit':\n result.style = 'unit';\n result.unit = icuUnitToEcma(token.options[0]);\n continue;\n case 'compact-short':\n case 'K':\n result.notation = 'compact';\n result.compactDisplay = 'short';\n continue;\n case 'compact-long':\n case 'KK':\n result.notation = 'compact';\n result.compactDisplay = 'long';\n continue;\n case 'scientific':\n result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'engineering':\n result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'notation-simple':\n result.notation = 'standard';\n continue;\n // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n case 'unit-width-narrow':\n result.currencyDisplay = 'narrowSymbol';\n result.unitDisplay = 'narrow';\n continue;\n case 'unit-width-short':\n result.currencyDisplay = 'code';\n result.unitDisplay = 'short';\n continue;\n case 'unit-width-full-name':\n result.currencyDisplay = 'name';\n result.unitDisplay = 'long';\n continue;\n case 'unit-width-iso-code':\n result.currencyDisplay = 'symbol';\n continue;\n case 'scale':\n result.scale = parseFloat(token.options[0]);\n continue;\n case 'rounding-mode-floor':\n result.roundingMode = 'floor';\n continue;\n case 'rounding-mode-ceiling':\n result.roundingMode = 'ceil';\n continue;\n case 'rounding-mode-down':\n result.roundingMode = 'trunc';\n continue;\n case 'rounding-mode-up':\n result.roundingMode = 'expand';\n continue;\n case 'rounding-mode-half-even':\n result.roundingMode = 'halfEven';\n continue;\n case 'rounding-mode-half-down':\n result.roundingMode = 'halfTrunc';\n continue;\n case 'rounding-mode-half-up':\n result.roundingMode = 'halfExpand';\n continue;\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n case 'integer-width':\n if (token.options.length > 1) {\n throw new RangeError('integer-width stems only accept a single optional option');\n }\n token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n if (g1) {\n result.minimumIntegerDigits = g2.length;\n }\n else if (g3 && g4) {\n throw new Error('We currently do not support maximum integer digits');\n }\n else if (g5) {\n throw new Error('We currently do not support exact integer digits');\n }\n return '';\n });\n continue;\n }\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n result.minimumIntegerDigits = token.stem.length;\n continue;\n }\n if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n // Precision\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n // precision-integer case\n if (token.options.length > 1) {\n throw new RangeError('Fraction-precision stems only accept a single optional option');\n }\n token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n // .000* case (before ICU67 it was .000+)\n if (g2 === '*') {\n result.minimumFractionDigits = g1.length;\n }\n // .### case\n else if (g3 && g3[0] === '#') {\n result.maximumFractionDigits = g3.length;\n }\n // .00## case\n else if (g4 && g5) {\n result.minimumFractionDigits = g4.length;\n result.maximumFractionDigits = g4.length + g5.length;\n }\n else {\n result.minimumFractionDigits = g1.length;\n result.maximumFractionDigits = g1.length;\n }\n return '';\n });\n var opt = token.options[0];\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n if (opt === 'w') {\n result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n }\n else if (opt) {\n result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n }\n continue;\n }\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n continue;\n }\n var signOpts = parseSign(token.stem);\n if (signOpts) {\n result = __assign(__assign({}, result), signOpts);\n }\n var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n if (conciseScientificAndEngineeringOpts) {\n result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n }\n }\n return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore \nexport var timeData = {\n \"001\": [\n \"H\",\n \"h\"\n ],\n \"AC\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"AD\": [\n \"H\",\n \"hB\"\n ],\n \"AE\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"AF\": [\n \"H\",\n \"hb\",\n \"hB\",\n \"h\"\n ],\n \"AG\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"AI\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"AL\": [\n \"h\",\n \"H\",\n \"hB\"\n ],\n \"AM\": [\n \"H\",\n \"hB\"\n ],\n \"AO\": [\n \"H\",\n \"hB\"\n ],\n \"AR\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"AS\": [\n \"h\",\n \"H\"\n ],\n \"AT\": [\n \"H\",\n \"hB\"\n ],\n \"AU\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"AW\": [\n \"H\",\n \"hB\"\n ],\n \"AX\": [\n \"H\"\n ],\n \"AZ\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"BA\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"BB\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BD\": [\n \"h\",\n \"hB\",\n \"H\"\n ],\n \"BE\": [\n \"H\",\n \"hB\"\n ],\n \"BF\": [\n \"H\",\n \"hB\"\n ],\n \"BG\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"BH\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"BI\": [\n \"H\",\n \"h\"\n ],\n \"BJ\": [\n \"H\",\n \"hB\"\n ],\n \"BL\": [\n \"H\",\n \"hB\"\n ],\n \"BM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BN\": [\n \"hb\",\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"BO\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"BQ\": [\n \"H\"\n ],\n \"BR\": [\n \"H\",\n \"hB\"\n ],\n \"BS\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"BT\": [\n \"h\",\n \"H\"\n ],\n \"BW\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"BY\": [\n \"H\",\n \"h\"\n ],\n \"BZ\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CA\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"CC\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CD\": [\n \"hB\",\n \"H\"\n ],\n \"CF\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"CG\": [\n \"H\",\n \"hB\"\n ],\n \"CH\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"CI\": [\n \"H\",\n \"hB\"\n ],\n \"CK\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CL\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"CM\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"CN\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"CO\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"CP\": [\n \"H\"\n ],\n \"CR\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"CU\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"CV\": [\n \"H\",\n \"hB\"\n ],\n \"CW\": [\n \"H\",\n \"hB\"\n ],\n \"CX\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"CY\": [\n \"h\",\n \"H\",\n \"hb\",\n \"hB\"\n ],\n \"CZ\": [\n \"H\"\n ],\n \"DE\": [\n \"H\",\n \"hB\"\n ],\n \"DG\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"DJ\": [\n \"h\",\n \"H\"\n ],\n \"DK\": [\n \"H\"\n ],\n \"DM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"DO\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"DZ\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"EA\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"EC\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"EE\": [\n \"H\",\n \"hB\"\n ],\n \"EG\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"EH\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"ER\": [\n \"h\",\n \"H\"\n ],\n \"ES\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"ET\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"FI\": [\n \"H\"\n ],\n \"FJ\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"FK\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"FM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"FO\": [\n \"H\",\n \"h\"\n ],\n \"FR\": [\n \"H\",\n \"hB\"\n ],\n \"GA\": [\n \"H\",\n \"hB\"\n ],\n \"GB\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"GD\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GE\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"GF\": [\n \"H\",\n \"hB\"\n ],\n \"GG\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"GH\": [\n \"h\",\n \"H\"\n ],\n \"GI\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"GL\": [\n \"H\",\n \"h\"\n ],\n \"GM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GN\": [\n \"H\",\n \"hB\"\n ],\n \"GP\": [\n \"H\",\n \"hB\"\n ],\n \"GQ\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"GR\": [\n \"h\",\n \"H\",\n \"hb\",\n \"hB\"\n ],\n \"GT\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"GU\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"GW\": [\n \"H\",\n \"hB\"\n ],\n \"GY\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"HK\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"HN\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"HR\": [\n \"H\",\n \"hB\"\n ],\n \"HU\": [\n \"H\",\n \"h\"\n ],\n \"IC\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"ID\": [\n \"H\"\n ],\n \"IE\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"IL\": [\n \"H\",\n \"hB\"\n ],\n \"IM\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"IN\": [\n \"h\",\n \"H\"\n ],\n \"IO\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"IQ\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"IR\": [\n \"hB\",\n \"H\"\n ],\n \"IS\": [\n \"H\"\n ],\n \"IT\": [\n \"H\",\n \"hB\"\n ],\n \"JE\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"JM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"JO\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"JP\": [\n \"H\",\n \"K\",\n \"h\"\n ],\n \"KE\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"KG\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"KH\": [\n \"hB\",\n \"h\",\n \"H\",\n \"hb\"\n ],\n \"KI\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"KM\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"KN\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"KP\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"KR\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"KW\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"KY\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"KZ\": [\n \"H\",\n \"hB\"\n ],\n \"LA\": [\n \"H\",\n \"hb\",\n \"hB\",\n \"h\"\n ],\n \"LB\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"LC\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"LI\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"LK\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"LR\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"LS\": [\n \"h\",\n \"H\"\n ],\n \"LT\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"LU\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"LV\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"LY\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"MA\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"MC\": [\n \"H\",\n \"hB\"\n ],\n \"MD\": [\n \"H\",\n \"hB\"\n ],\n \"ME\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"MF\": [\n \"H\",\n \"hB\"\n ],\n \"MG\": [\n \"H\",\n \"h\"\n ],\n \"MH\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"MK\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"ML\": [\n \"H\"\n ],\n \"MM\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"MN\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"MO\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"MP\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"MQ\": [\n \"H\",\n \"hB\"\n ],\n \"MR\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"MS\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"MT\": [\n \"H\",\n \"h\"\n ],\n \"MU\": [\n \"H\",\n \"h\"\n ],\n \"MV\": [\n \"H\",\n \"h\"\n ],\n \"MW\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"MX\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"MY\": [\n \"hb\",\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"MZ\": [\n \"H\",\n \"hB\"\n ],\n \"NA\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"NC\": [\n \"H\",\n \"hB\"\n ],\n \"NE\": [\n \"H\"\n ],\n \"NF\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NG\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NI\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"NL\": [\n \"H\",\n \"hB\"\n ],\n \"NO\": [\n \"H\",\n \"h\"\n ],\n \"NP\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"NR\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NU\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"NZ\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"OM\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"PA\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"PE\": [\n \"H\",\n \"hB\",\n \"h\",\n \"hb\"\n ],\n \"PF\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"PG\": [\n \"h\",\n \"H\"\n ],\n \"PH\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"PK\": [\n \"h\",\n \"hB\",\n \"H\"\n ],\n \"PL\": [\n \"H\",\n \"h\"\n ],\n \"PM\": [\n \"H\",\n \"hB\"\n ],\n \"PN\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"PR\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"PS\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"PT\": [\n \"H\",\n \"hB\"\n ],\n \"PW\": [\n \"h\",\n \"H\"\n ],\n \"PY\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"QA\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"RE\": [\n \"H\",\n \"hB\"\n ],\n \"RO\": [\n \"H\",\n \"hB\"\n ],\n \"RS\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"RU\": [\n \"H\"\n ],\n \"RW\": [\n \"H\",\n \"h\"\n ],\n \"SA\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"SB\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SC\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"SD\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"SE\": [\n \"H\"\n ],\n \"SG\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SH\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"SI\": [\n \"H\",\n \"hB\"\n ],\n \"SJ\": [\n \"H\"\n ],\n \"SK\": [\n \"H\"\n ],\n \"SL\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"SM\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"SN\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"SO\": [\n \"h\",\n \"H\"\n ],\n \"SR\": [\n \"H\",\n \"hB\"\n ],\n \"SS\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"ST\": [\n \"H\",\n \"hB\"\n ],\n \"SV\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"SX\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"SY\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"SZ\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"TA\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"TC\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"TD\": [\n \"h\",\n \"H\",\n \"hB\"\n ],\n \"TF\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"TG\": [\n \"H\",\n \"hB\"\n ],\n \"TH\": [\n \"H\",\n \"h\"\n ],\n \"TJ\": [\n \"H\",\n \"h\"\n ],\n \"TL\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ],\n \"TM\": [\n \"H\",\n \"h\"\n ],\n \"TN\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"TO\": [\n \"h\",\n \"H\"\n ],\n \"TR\": [\n \"H\",\n \"hB\"\n ],\n \"TT\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"TW\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"TZ\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"UA\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"UG\": [\n \"hB\",\n \"hb\",\n \"H\",\n \"h\"\n ],\n \"UM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"US\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"UY\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"UZ\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"VA\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"VC\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"VE\": [\n \"h\",\n \"H\",\n \"hB\",\n \"hb\"\n ],\n \"VG\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"VI\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"VN\": [\n \"H\",\n \"h\"\n ],\n \"VU\": [\n \"h\",\n \"H\"\n ],\n \"WF\": [\n \"H\",\n \"hB\"\n ],\n \"WS\": [\n \"h\",\n \"H\"\n ],\n \"XK\": [\n \"H\",\n \"hB\",\n \"h\"\n ],\n \"YE\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"YT\": [\n \"H\",\n \"hB\"\n ],\n \"ZA\": [\n \"H\",\n \"h\",\n \"hb\",\n \"hB\"\n ],\n \"ZM\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"ZW\": [\n \"H\",\n \"h\"\n ],\n \"af-ZA\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"ar-001\": [\n \"h\",\n \"hB\",\n \"hb\",\n \"H\"\n ],\n \"ca-ES\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"en-001\": [\n \"h\",\n \"hb\",\n \"H\",\n \"hB\"\n ],\n \"es-BO\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-BR\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-EC\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-ES\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-GQ\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"es-PE\": [\n \"H\",\n \"h\",\n \"hB\",\n \"hb\"\n ],\n \"fr-CA\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"gl-ES\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"gu-IN\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"hi-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"it-CH\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"it-IT\": [\n \"H\",\n \"h\",\n \"hB\"\n ],\n \"kn-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"ml-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"mr-IN\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"pa-IN\": [\n \"hB\",\n \"hb\",\n \"h\",\n \"H\"\n ],\n \"ta-IN\": [\n \"hB\",\n \"h\",\n \"hb\",\n \"H\"\n ],\n \"te-IN\": [\n \"hB\",\n \"h\",\n \"H\"\n ],\n \"zu-ZA\": [\n \"H\",\n \"hB\",\n \"hb\",\n \"h\"\n ]\n};\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1);\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n ? Number.isSafeInteger\n : function (n) {\n return (typeof n === 'number' &&\n isFinite(n) &&\n Math.floor(n) === n &&\n Math.abs(n) <= 0x1fffffffffffff);\n };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n /**\n * legacy Edge or Xbox One browser\n * Unicode flag support: supported\n * Pattern_Syntax support: not supported\n * See https://github.com/formatjs/formatjs/issues/2822\n */\n REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n ? // Native\n function startsWith(s, search, position) {\n return s.startsWith(search, position);\n }\n : // For IE11\n function startsWith(s, search, position) {\n return s.slice(position, position + search.length) === search;\n };\nvar fromCodePoint = hasNativeFromCodePoint\n ? String.fromCodePoint\n : // IE11\n function fromCodePoint() {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n var elements = '';\n var length = codePoints.length;\n var i = 0;\n var code;\n while (length > i) {\n code = codePoints[i++];\n if (code > 0x10ffff)\n throw RangeError(code + ' is not a valid code point');\n elements +=\n code < 0x10000\n ? String.fromCharCode(code)\n : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n }\n return elements;\n };\nvar fromEntries = \n// native\nhasNativeFromEntries\n ? Object.fromEntries\n : // Ponyfill\n function fromEntries(entries) {\n var obj = {};\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var _a = entries_1[_i], k = _a[0], v = _a[1];\n obj[k] = v;\n }\n return obj;\n };\nvar codePointAt = hasNativeCodePointAt\n ? // Native\n function codePointAt(s, index) {\n return s.codePointAt(index);\n }\n : // IE 11\n function codePointAt(s, index) {\n var size = s.length;\n if (index < 0 || index >= size) {\n return undefined;\n }\n var first = s.charCodeAt(index);\n var second;\n return first < 0xd800 ||\n first > 0xdbff ||\n index + 1 === size ||\n (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n second > 0xdfff\n ? first\n : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n };\nvar trimStart = hasTrimStart\n ? // Native\n function trimStart(s) {\n return s.trimStart();\n }\n : // Ponyfill\n function trimStart(s) {\n return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n };\nvar trimEnd = hasTrimEnd\n ? // Native\n function trimEnd(s) {\n return s.trimEnd();\n }\n : // Ponyfill\n function trimEnd(s) {\n return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n // Native\n var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n var _a;\n IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n };\n}\nelse {\n // IE11\n matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n var match = [];\n while (true) {\n var c = codePointAt(s, index);\n if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n break;\n }\n match.push(c);\n index += c >= 0x10000 ? 2 : 1;\n }\n return fromCodePoint.apply(void 0, match);\n };\n}\nvar Parser = /** @class */ (function () {\n function Parser(message, options) {\n if (options === void 0) { options = {}; }\n this.message = message;\n this.position = { offset: 0, line: 1, column: 1 };\n this.ignoreTag = !!options.ignoreTag;\n this.locale = options.locale;\n this.requiresOtherClause = !!options.requiresOtherClause;\n this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n }\n Parser.prototype.parse = function () {\n if (this.offset() !== 0) {\n throw Error('parser can only be used once');\n }\n return this.parseMessage(0, '', false);\n };\n Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n var elements = [];\n while (!this.isEOF()) {\n var char = this.char();\n if (char === 123 /* `{` */) {\n var result = this.parseArgument(nestingLevel, expectingCloseTag);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n else if (char === 125 /* `}` */ && nestingLevel > 0) {\n break;\n }\n else if (char === 35 /* `#` */ &&\n (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n var position = this.clonePosition();\n this.bump();\n elements.push({\n type: TYPE.pound,\n location: createLocation(position, this.clonePosition()),\n });\n }\n else if (char === 60 /* `<` */ &&\n !this.ignoreTag &&\n this.peek() === 47 // char code for '/'\n ) {\n if (expectingCloseTag) {\n break;\n }\n else {\n return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n }\n }\n else if (char === 60 /* `<` */ &&\n !this.ignoreTag &&\n _isAlpha(this.peek() || 0)) {\n var result = this.parseTag(nestingLevel, parentArgType);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n else {\n var result = this.parseLiteral(nestingLevel, parentArgType);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n }\n return { val: elements, err: null };\n };\n /**\n * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n * are accepted:\n *\n * ```\n * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"\"\n * tagName ::= [a-z] (PENChar)*\n * PENChar ::=\n * \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n * ```\n *\n * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n * since other tag-based engines like React allow it\n */\n Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n var startPosition = this.clonePosition();\n this.bump(); // `<`\n var tagName = this.parseTagName();\n this.bumpSpace();\n if (this.bumpIf('/>')) {\n // Self closing tag\n return {\n val: {\n type: TYPE.literal,\n value: \"<\".concat(tagName, \"/>\"),\n location: createLocation(startPosition, this.clonePosition()),\n },\n err: null,\n };\n }\n else if (this.bumpIf('>')) {\n var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n if (childrenResult.err) {\n return childrenResult;\n }\n var children = childrenResult.val;\n // Expecting a close tag\n var endTagStartPosition = this.clonePosition();\n if (this.bumpIf('')) {\n return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n }\n return {\n val: {\n type: TYPE.tag,\n value: tagName,\n children: children,\n location: createLocation(startPosition, this.clonePosition()),\n },\n err: null,\n };\n }\n else {\n return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n }\n }\n else {\n return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n }\n };\n /**\n * This method assumes that the caller has peeked ahead for the first tag character.\n */\n Parser.prototype.parseTagName = function () {\n var startOffset = this.offset();\n this.bump(); // the first tag name character\n while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n this.bump();\n }\n return this.message.slice(startOffset, this.offset());\n };\n Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n var start = this.clonePosition();\n var value = '';\n while (true) {\n var parseQuoteResult = this.tryParseQuote(parentArgType);\n if (parseQuoteResult) {\n value += parseQuoteResult;\n continue;\n }\n var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n if (parseUnquotedResult) {\n value += parseUnquotedResult;\n continue;\n }\n var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n if (parseLeftAngleResult) {\n value += parseLeftAngleResult;\n continue;\n }\n break;\n }\n var location = createLocation(start, this.clonePosition());\n return {\n val: { type: TYPE.literal, value: value, location: location },\n err: null,\n };\n };\n Parser.prototype.tryParseLeftAngleBracket = function () {\n if (!this.isEOF() &&\n this.char() === 60 /* `<` */ &&\n (this.ignoreTag ||\n // If at the opening tag or closing tag position, bail.\n !_isAlphaOrSlash(this.peek() || 0))) {\n this.bump(); // `<`\n return '<';\n }\n return null;\n };\n /**\n * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n * a character that requires quoting (that is, \"only where needed\"), and works the same in\n * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n */\n Parser.prototype.tryParseQuote = function (parentArgType) {\n if (this.isEOF() || this.char() !== 39 /* `'` */) {\n return null;\n }\n // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n // Check if is valid escaped character\n switch (this.peek()) {\n case 39 /* `'` */:\n // double quote, should return as a single quote.\n this.bump();\n this.bump();\n return \"'\";\n // '{', '<', '>', '}'\n case 123:\n case 60:\n case 62:\n case 125:\n break;\n case 35: // '#'\n if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n break;\n }\n return null;\n default:\n return null;\n }\n this.bump(); // apostrophe\n var codePoints = [this.char()]; // escaped char\n this.bump();\n // read chars until the optional closing apostrophe is found\n while (!this.isEOF()) {\n var ch = this.char();\n if (ch === 39 /* `'` */) {\n if (this.peek() === 39 /* `'` */) {\n codePoints.push(39);\n // Bump one more time because we need to skip 2 characters.\n this.bump();\n }\n else {\n // Optional closing apostrophe.\n this.bump();\n break;\n }\n }\n else {\n codePoints.push(ch);\n }\n this.bump();\n }\n return fromCodePoint.apply(void 0, codePoints);\n };\n Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n if (this.isEOF()) {\n return null;\n }\n var ch = this.char();\n if (ch === 60 /* `<` */ ||\n ch === 123 /* `{` */ ||\n (ch === 35 /* `#` */ &&\n (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n (ch === 125 /* `}` */ && nestingLevel > 0)) {\n return null;\n }\n else {\n this.bump();\n return fromCodePoint(ch);\n }\n };\n Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n var openingBracePosition = this.clonePosition();\n this.bump(); // `{`\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n if (this.char() === 125 /* `}` */) {\n this.bump();\n return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n // argument name\n var value = this.parseIdentifierIfPossible().value;\n if (!value) {\n return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n switch (this.char()) {\n // Simple argument: `{name}`\n case 125 /* `}` */: {\n this.bump(); // `}`\n return {\n val: {\n type: TYPE.argument,\n // value does not include the opening and closing braces.\n value: value,\n location: createLocation(openingBracePosition, this.clonePosition()),\n },\n err: null,\n };\n }\n // Argument with options: `{name, format, ...}`\n case 44 /* `,` */: {\n this.bump(); // `,`\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n }\n default:\n return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n };\n /**\n * Advance the parser until the end of the identifier, if it is currently on\n * an identifier character. Return an empty string otherwise.\n */\n Parser.prototype.parseIdentifierIfPossible = function () {\n var startingPosition = this.clonePosition();\n var startOffset = this.offset();\n var value = matchIdentifierAtIndex(this.message, startOffset);\n var endOffset = startOffset + value.length;\n this.bumpTo(endOffset);\n var endPosition = this.clonePosition();\n var location = createLocation(startingPosition, endPosition);\n return { value: value, location: location };\n };\n Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n var _a;\n // Parse this range:\n // {name, type, style}\n // ^---^\n var typeStartPosition = this.clonePosition();\n var argType = this.parseIdentifierIfPossible().value;\n var typeEndPosition = this.clonePosition();\n switch (argType) {\n case '':\n // Expecting a style string number, date, time, plural, selectordinal, or select.\n return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n case 'number':\n case 'date':\n case 'time': {\n // Parse this range:\n // {name, number, style}\n // ^-------^\n this.bumpSpace();\n var styleAndLocation = null;\n if (this.bumpIf(',')) {\n this.bumpSpace();\n var styleStartPosition = this.clonePosition();\n var result = this.parseSimpleArgStyleIfPossible();\n if (result.err) {\n return result;\n }\n var style = trimEnd(result.val);\n if (style.length === 0) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n styleAndLocation = { style: style, styleLocation: styleLocation };\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n var location_1 = createLocation(openingBracePosition, this.clonePosition());\n // Extract style or skeleton\n if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n // Skeleton starts with `::`.\n var skeleton = trimStart(styleAndLocation.style.slice(2));\n if (argType === 'number') {\n var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n if (result.err) {\n return result;\n }\n return {\n val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n err: null,\n };\n }\n else {\n if (skeleton.length === 0) {\n return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n }\n var dateTimePattern = skeleton;\n // Get \"best match\" pattern only if locale is passed, if not, let it\n // pass as-is where `parseDateTimeSkeleton()` will throw an error\n // for unsupported patterns.\n if (this.locale) {\n dateTimePattern = getBestPattern(skeleton, this.locale);\n }\n var style = {\n type: SKELETON_TYPE.dateTime,\n pattern: dateTimePattern,\n location: styleAndLocation.styleLocation,\n parsedOptions: this.shouldParseSkeletons\n ? parseDateTimeSkeleton(dateTimePattern)\n : {},\n };\n var type = argType === 'date' ? TYPE.date : TYPE.time;\n return {\n val: { type: type, value: value, location: location_1, style: style },\n err: null,\n };\n }\n }\n // Regular style or no style.\n return {\n val: {\n type: argType === 'number'\n ? TYPE.number\n : argType === 'date'\n ? TYPE.date\n : TYPE.time,\n value: value,\n location: location_1,\n style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n },\n err: null,\n };\n }\n case 'plural':\n case 'selectordinal':\n case 'select': {\n // Parse this range:\n // {name, plural, options}\n // ^---------^\n var typeEndPosition_1 = this.clonePosition();\n this.bumpSpace();\n if (!this.bumpIf(',')) {\n return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n }\n this.bumpSpace();\n // Parse offset:\n // {name, plural, offset:1, options}\n // ^-----^\n //\n // or the first option:\n //\n // {name, plural, one {...} other {...}}\n // ^--^\n var identifierAndLocation = this.parseIdentifierIfPossible();\n var pluralOffset = 0;\n if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n if (!this.bumpIf(':')) {\n return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n this.bumpSpace();\n var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n if (result.err) {\n return result;\n }\n // Parse another identifier for option parsing\n this.bumpSpace();\n identifierAndLocation = this.parseIdentifierIfPossible();\n pluralOffset = result.val;\n }\n var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n if (optionsResult.err) {\n return optionsResult;\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n var location_2 = createLocation(openingBracePosition, this.clonePosition());\n if (argType === 'select') {\n return {\n val: {\n type: TYPE.select,\n value: value,\n options: fromEntries(optionsResult.val),\n location: location_2,\n },\n err: null,\n };\n }\n else {\n return {\n val: {\n type: TYPE.plural,\n value: value,\n options: fromEntries(optionsResult.val),\n offset: pluralOffset,\n pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n location: location_2,\n },\n err: null,\n };\n }\n }\n default:\n return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n }\n };\n Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n // Parse: {value, number, ::currency/GBP }\n //\n if (this.isEOF() || this.char() !== 125 /* `}` */) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n this.bump(); // `}`\n return { val: true, err: null };\n };\n /**\n * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n */\n Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n var nestedBraces = 0;\n var startPosition = this.clonePosition();\n while (!this.isEOF()) {\n var ch = this.char();\n switch (ch) {\n case 39 /* `'` */: {\n // Treat apostrophe as quoting but include it in the style part.\n // Find the end of the quoted literal text.\n this.bump();\n var apostrophePosition = this.clonePosition();\n if (!this.bumpUntil(\"'\")) {\n return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n }\n this.bump();\n break;\n }\n case 123 /* `{` */: {\n nestedBraces += 1;\n this.bump();\n break;\n }\n case 125 /* `}` */: {\n if (nestedBraces > 0) {\n nestedBraces -= 1;\n }\n else {\n return {\n val: this.message.slice(startPosition.offset, this.offset()),\n err: null,\n };\n }\n break;\n }\n default:\n this.bump();\n break;\n }\n }\n return {\n val: this.message.slice(startPosition.offset, this.offset()),\n err: null,\n };\n };\n Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n var tokens = [];\n try {\n tokens = parseNumberSkeletonFromString(skeleton);\n }\n catch (e) {\n return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n }\n return {\n val: {\n type: SKELETON_TYPE.number,\n tokens: tokens,\n location: location,\n parsedOptions: this.shouldParseSkeletons\n ? parseNumberSkeleton(tokens)\n : {},\n },\n err: null,\n };\n };\n /**\n * @param nesting_level The current nesting level of messages.\n * This can be positive when parsing message fragment in select or plural argument options.\n * @param parent_arg_type The parent argument's type.\n * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n * the argument. It is a by-product of a previous parsing attempt.\n * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n * between a pair of opening and closing tags. The nested message will not parse beyond\n * the closing tag boundary.\n */\n Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n var _a;\n var hasOtherClause = false;\n var options = [];\n var parsedSelectors = new Set();\n var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n // Parse:\n // one {one apple}\n // ^--^\n while (true) {\n if (selector.length === 0) {\n var startPosition = this.clonePosition();\n if (parentArgType !== 'select' && this.bumpIf('=')) {\n // Try parse `={number}` selector\n var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n if (result.err) {\n return result;\n }\n selectorLocation = createLocation(startPosition, this.clonePosition());\n selector = this.message.slice(startPosition.offset, this.offset());\n }\n else {\n break;\n }\n }\n // Duplicate selector clauses\n if (parsedSelectors.has(selector)) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n }\n if (selector === 'other') {\n hasOtherClause = true;\n }\n // Parse:\n // one {one apple}\n // ^----------^\n this.bumpSpace();\n var openingBracePosition = this.clonePosition();\n if (!this.bumpIf('{')) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n }\n var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n if (fragmentResult.err) {\n return fragmentResult;\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n options.push([\n selector,\n {\n value: fragmentResult.val,\n location: createLocation(openingBracePosition, this.clonePosition()),\n },\n ]);\n // Keep track of the existing selectors\n parsedSelectors.add(selector);\n // Prep next selector clause.\n this.bumpSpace();\n (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n }\n if (options.length === 0) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n }\n if (this.requiresOtherClause && !hasOtherClause) {\n return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n return { val: options, err: null };\n };\n Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n var sign = 1;\n var startingPosition = this.clonePosition();\n if (this.bumpIf('+')) {\n }\n else if (this.bumpIf('-')) {\n sign = -1;\n }\n var hasDigits = false;\n var decimal = 0;\n while (!this.isEOF()) {\n var ch = this.char();\n if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n hasDigits = true;\n decimal = decimal * 10 + (ch - 48);\n this.bump();\n }\n else {\n break;\n }\n }\n var location = createLocation(startingPosition, this.clonePosition());\n if (!hasDigits) {\n return this.error(expectNumberError, location);\n }\n decimal *= sign;\n if (!isSafeInteger(decimal)) {\n return this.error(invalidNumberError, location);\n }\n return { val: decimal, err: null };\n };\n Parser.prototype.offset = function () {\n return this.position.offset;\n };\n Parser.prototype.isEOF = function () {\n return this.offset() === this.message.length;\n };\n Parser.prototype.clonePosition = function () {\n // This is much faster than `Object.assign` or spread.\n return {\n offset: this.position.offset,\n line: this.position.line,\n column: this.position.column,\n };\n };\n /**\n * Return the code point at the current position of the parser.\n * Throws if the index is out of bound.\n */\n Parser.prototype.char = function () {\n var offset = this.position.offset;\n if (offset >= this.message.length) {\n throw Error('out of bound');\n }\n var code = codePointAt(this.message, offset);\n if (code === undefined) {\n throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n }\n return code;\n };\n Parser.prototype.error = function (kind, location) {\n return {\n val: null,\n err: {\n kind: kind,\n message: this.message,\n location: location,\n },\n };\n };\n /** Bump the parser to the next UTF-16 code unit. */\n Parser.prototype.bump = function () {\n if (this.isEOF()) {\n return;\n }\n var code = this.char();\n if (code === 10 /* '\\n' */) {\n this.position.line += 1;\n this.position.column = 1;\n this.position.offset += 1;\n }\n else {\n this.position.column += 1;\n // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n this.position.offset += code < 0x10000 ? 1 : 2;\n }\n };\n /**\n * If the substring starting at the current position of the parser has\n * the given prefix, then bump the parser to the character immediately\n * following the prefix and return true. Otherwise, don't bump the parser\n * and return false.\n */\n Parser.prototype.bumpIf = function (prefix) {\n if (startsWith(this.message, prefix, this.offset())) {\n for (var i = 0; i < prefix.length; i++) {\n this.bump();\n }\n return true;\n }\n return false;\n };\n /**\n * Bump the parser until the pattern character is found and return `true`.\n * Otherwise bump to the end of the file and return `false`.\n */\n Parser.prototype.bumpUntil = function (pattern) {\n var currentOffset = this.offset();\n var index = this.message.indexOf(pattern, currentOffset);\n if (index >= 0) {\n this.bumpTo(index);\n return true;\n }\n else {\n this.bumpTo(this.message.length);\n return false;\n }\n };\n /**\n * Bump the parser to the target offset.\n * If target offset is beyond the end of the input, bump the parser to the end of the input.\n */\n Parser.prototype.bumpTo = function (targetOffset) {\n if (this.offset() > targetOffset) {\n throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n }\n targetOffset = Math.min(targetOffset, this.message.length);\n while (true) {\n var offset = this.offset();\n if (offset === targetOffset) {\n break;\n }\n if (offset > targetOffset) {\n throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n }\n this.bump();\n if (this.isEOF()) {\n break;\n }\n }\n };\n /** advance the parser through all whitespace to the next non-whitespace code unit. */\n Parser.prototype.bumpSpace = function () {\n while (!this.isEOF() && _isWhiteSpace(this.char())) {\n this.bump();\n }\n };\n /**\n * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n * If the input has been exhausted, then this returns null.\n */\n Parser.prototype.peek = function () {\n if (this.isEOF()) {\n return null;\n }\n var code = this.char();\n var offset = this.offset();\n var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n };\n return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n return ((codepoint >= 97 && codepoint <= 122) ||\n (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n return (c === 45 /* '-' */ ||\n c === 46 /* '.' */ ||\n (c >= 48 && c <= 57) /* 0..9 */ ||\n c === 95 /* '_' */ ||\n (c >= 97 && c <= 122) /** a..z */ ||\n (c >= 65 && c <= 90) /* A..Z */ ||\n c == 0xb7 ||\n (c >= 0xc0 && c <= 0xd6) ||\n (c >= 0xd8 && c <= 0xf6) ||\n (c >= 0xf8 && c <= 0x37d) ||\n (c >= 0x37f && c <= 0x1fff) ||\n (c >= 0x200c && c <= 0x200d) ||\n (c >= 0x203f && c <= 0x2040) ||\n (c >= 0x2070 && c <= 0x218f) ||\n (c >= 0x2c00 && c <= 0x2fef) ||\n (c >= 0x3001 && c <= 0xd7ff) ||\n (c >= 0xf900 && c <= 0xfdcf) ||\n (c >= 0xfdf0 && c <= 0xfffd) ||\n (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n return ((c >= 0x0009 && c <= 0x000d) ||\n c === 0x0020 ||\n c === 0x0085 ||\n (c >= 0x200e && c <= 0x200f) ||\n c === 0x2028 ||\n c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n return ((c >= 0x0021 && c <= 0x0023) ||\n c === 0x0024 ||\n (c >= 0x0025 && c <= 0x0027) ||\n c === 0x0028 ||\n c === 0x0029 ||\n c === 0x002a ||\n c === 0x002b ||\n c === 0x002c ||\n c === 0x002d ||\n (c >= 0x002e && c <= 0x002f) ||\n (c >= 0x003a && c <= 0x003b) ||\n (c >= 0x003c && c <= 0x003e) ||\n (c >= 0x003f && c <= 0x0040) ||\n c === 0x005b ||\n c === 0x005c ||\n c === 0x005d ||\n c === 0x005e ||\n c === 0x0060 ||\n c === 0x007b ||\n c === 0x007c ||\n c === 0x007d ||\n c === 0x007e ||\n c === 0x00a1 ||\n (c >= 0x00a2 && c <= 0x00a5) ||\n c === 0x00a6 ||\n c === 0x00a7 ||\n c === 0x00a9 ||\n c === 0x00ab ||\n c === 0x00ac ||\n c === 0x00ae ||\n c === 0x00b0 ||\n c === 0x00b1 ||\n c === 0x00b6 ||\n c === 0x00bb ||\n c === 0x00bf ||\n c === 0x00d7 ||\n c === 0x00f7 ||\n (c >= 0x2010 && c <= 0x2015) ||\n (c >= 0x2016 && c <= 0x2017) ||\n c === 0x2018 ||\n c === 0x2019 ||\n c === 0x201a ||\n (c >= 0x201b && c <= 0x201c) ||\n c === 0x201d ||\n c === 0x201e ||\n c === 0x201f ||\n (c >= 0x2020 && c <= 0x2027) ||\n (c >= 0x2030 && c <= 0x2038) ||\n c === 0x2039 ||\n c === 0x203a ||\n (c >= 0x203b && c <= 0x203e) ||\n (c >= 0x2041 && c <= 0x2043) ||\n c === 0x2044 ||\n c === 0x2045 ||\n c === 0x2046 ||\n (c >= 0x2047 && c <= 0x2051) ||\n c === 0x2052 ||\n c === 0x2053 ||\n (c >= 0x2055 && c <= 0x205e) ||\n (c >= 0x2190 && c <= 0x2194) ||\n (c >= 0x2195 && c <= 0x2199) ||\n (c >= 0x219a && c <= 0x219b) ||\n (c >= 0x219c && c <= 0x219f) ||\n c === 0x21a0 ||\n (c >= 0x21a1 && c <= 0x21a2) ||\n c === 0x21a3 ||\n (c >= 0x21a4 && c <= 0x21a5) ||\n c === 0x21a6 ||\n (c >= 0x21a7 && c <= 0x21ad) ||\n c === 0x21ae ||\n (c >= 0x21af && c <= 0x21cd) ||\n (c >= 0x21ce && c <= 0x21cf) ||\n (c >= 0x21d0 && c <= 0x21d1) ||\n c === 0x21d2 ||\n c === 0x21d3 ||\n c === 0x21d4 ||\n (c >= 0x21d5 && c <= 0x21f3) ||\n (c >= 0x21f4 && c <= 0x22ff) ||\n (c >= 0x2300 && c <= 0x2307) ||\n c === 0x2308 ||\n c === 0x2309 ||\n c === 0x230a ||\n c === 0x230b ||\n (c >= 0x230c && c <= 0x231f) ||\n (c >= 0x2320 && c <= 0x2321) ||\n (c >= 0x2322 && c <= 0x2328) ||\n c === 0x2329 ||\n c === 0x232a ||\n (c >= 0x232b && c <= 0x237b) ||\n c === 0x237c ||\n (c >= 0x237d && c <= 0x239a) ||\n (c >= 0x239b && c <= 0x23b3) ||\n (c >= 0x23b4 && c <= 0x23db) ||\n (c >= 0x23dc && c <= 0x23e1) ||\n (c >= 0x23e2 && c <= 0x2426) ||\n (c >= 0x2427 && c <= 0x243f) ||\n (c >= 0x2440 && c <= 0x244a) ||\n (c >= 0x244b && c <= 0x245f) ||\n (c >= 0x2500 && c <= 0x25b6) ||\n c === 0x25b7 ||\n (c >= 0x25b8 && c <= 0x25c0) ||\n c === 0x25c1 ||\n (c >= 0x25c2 && c <= 0x25f7) ||\n (c >= 0x25f8 && c <= 0x25ff) ||\n (c >= 0x2600 && c <= 0x266e) ||\n c === 0x266f ||\n (c >= 0x2670 && c <= 0x2767) ||\n c === 0x2768 ||\n c === 0x2769 ||\n c === 0x276a ||\n c === 0x276b ||\n c === 0x276c ||\n c === 0x276d ||\n c === 0x276e ||\n c === 0x276f ||\n c === 0x2770 ||\n c === 0x2771 ||\n c === 0x2772 ||\n c === 0x2773 ||\n c === 0x2774 ||\n c === 0x2775 ||\n (c >= 0x2794 && c <= 0x27bf) ||\n (c >= 0x27c0 && c <= 0x27c4) ||\n c === 0x27c5 ||\n c === 0x27c6 ||\n (c >= 0x27c7 && c <= 0x27e5) ||\n c === 0x27e6 ||\n c === 0x27e7 ||\n c === 0x27e8 ||\n c === 0x27e9 ||\n c === 0x27ea ||\n c === 0x27eb ||\n c === 0x27ec ||\n c === 0x27ed ||\n c === 0x27ee ||\n c === 0x27ef ||\n (c >= 0x27f0 && c <= 0x27ff) ||\n (c >= 0x2800 && c <= 0x28ff) ||\n (c >= 0x2900 && c <= 0x2982) ||\n c === 0x2983 ||\n c === 0x2984 ||\n c === 0x2985 ||\n c === 0x2986 ||\n c === 0x2987 ||\n c === 0x2988 ||\n c === 0x2989 ||\n c === 0x298a ||\n c === 0x298b ||\n c === 0x298c ||\n c === 0x298d ||\n c === 0x298e ||\n c === 0x298f ||\n c === 0x2990 ||\n c === 0x2991 ||\n c === 0x2992 ||\n c === 0x2993 ||\n c === 0x2994 ||\n c === 0x2995 ||\n c === 0x2996 ||\n c === 0x2997 ||\n c === 0x2998 ||\n (c >= 0x2999 && c <= 0x29d7) ||\n c === 0x29d8 ||\n c === 0x29d9 ||\n c === 0x29da ||\n c === 0x29db ||\n (c >= 0x29dc && c <= 0x29fb) ||\n c === 0x29fc ||\n c === 0x29fd ||\n (c >= 0x29fe && c <= 0x2aff) ||\n (c >= 0x2b00 && c <= 0x2b2f) ||\n (c >= 0x2b30 && c <= 0x2b44) ||\n (c >= 0x2b45 && c <= 0x2b46) ||\n (c >= 0x2b47 && c <= 0x2b4c) ||\n (c >= 0x2b4d && c <= 0x2b73) ||\n (c >= 0x2b74 && c <= 0x2b75) ||\n (c >= 0x2b76 && c <= 0x2b95) ||\n c === 0x2b96 ||\n (c >= 0x2b97 && c <= 0x2bff) ||\n (c >= 0x2e00 && c <= 0x2e01) ||\n c === 0x2e02 ||\n c === 0x2e03 ||\n c === 0x2e04 ||\n c === 0x2e05 ||\n (c >= 0x2e06 && c <= 0x2e08) ||\n c === 0x2e09 ||\n c === 0x2e0a ||\n c === 0x2e0b ||\n c === 0x2e0c ||\n c === 0x2e0d ||\n (c >= 0x2e0e && c <= 0x2e16) ||\n c === 0x2e17 ||\n (c >= 0x2e18 && c <= 0x2e19) ||\n c === 0x2e1a ||\n c === 0x2e1b ||\n c === 0x2e1c ||\n c === 0x2e1d ||\n (c >= 0x2e1e && c <= 0x2e1f) ||\n c === 0x2e20 ||\n c === 0x2e21 ||\n c === 0x2e22 ||\n c === 0x2e23 ||\n c === 0x2e24 ||\n c === 0x2e25 ||\n c === 0x2e26 ||\n c === 0x2e27 ||\n c === 0x2e28 ||\n c === 0x2e29 ||\n (c >= 0x2e2a && c <= 0x2e2e) ||\n c === 0x2e2f ||\n (c >= 0x2e30 && c <= 0x2e39) ||\n (c >= 0x2e3a && c <= 0x2e3b) ||\n (c >= 0x2e3c && c <= 0x2e3f) ||\n c === 0x2e40 ||\n c === 0x2e41 ||\n c === 0x2e42 ||\n (c >= 0x2e43 && c <= 0x2e4f) ||\n (c >= 0x2e50 && c <= 0x2e51) ||\n c === 0x2e52 ||\n (c >= 0x2e53 && c <= 0x2e7f) ||\n (c >= 0x3001 && c <= 0x3003) ||\n c === 0x3008 ||\n c === 0x3009 ||\n c === 0x300a ||\n c === 0x300b ||\n c === 0x300c ||\n c === 0x300d ||\n c === 0x300e ||\n c === 0x300f ||\n c === 0x3010 ||\n c === 0x3011 ||\n (c >= 0x3012 && c <= 0x3013) ||\n c === 0x3014 ||\n c === 0x3015 ||\n c === 0x3016 ||\n c === 0x3017 ||\n c === 0x3018 ||\n c === 0x3019 ||\n c === 0x301a ||\n c === 0x301b ||\n c === 0x301c ||\n c === 0x301d ||\n (c >= 0x301e && c <= 0x301f) ||\n c === 0x3020 ||\n c === 0x3030 ||\n c === 0xfd3e ||\n c === 0xfd3f ||\n (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n var skeletonCopy = '';\n for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n var patternChar = skeleton.charAt(patternPos);\n if (patternChar === 'j') {\n var extraLength = 0;\n while (patternPos + 1 < skeleton.length &&\n skeleton.charAt(patternPos + 1) === patternChar) {\n extraLength++;\n patternPos++;\n }\n var hourLen = 1 + (extraLength & 1);\n var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n var dayPeriodChar = 'a';\n var hourChar = getDefaultHourSymbolFromLocale(locale);\n if (hourChar == 'H' || hourChar == 'k') {\n dayPeriodLen = 0;\n }\n while (dayPeriodLen-- > 0) {\n skeletonCopy += dayPeriodChar;\n }\n while (hourLen-- > 0) {\n skeletonCopy = hourChar + skeletonCopy;\n }\n }\n else if (patternChar === 'J') {\n skeletonCopy += 'H';\n }\n else {\n skeletonCopy += patternChar;\n }\n }\n return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n var hourCycle = locale.hourCycle;\n if (hourCycle === undefined &&\n // @ts-ignore hourCycle(s) is not identified yet\n locale.hourCycles &&\n // @ts-ignore\n locale.hourCycles.length) {\n // @ts-ignore\n hourCycle = locale.hourCycles[0];\n }\n if (hourCycle) {\n switch (hourCycle) {\n case 'h24':\n return 'k';\n case 'h23':\n return 'H';\n case 'h12':\n return 'h';\n case 'h11':\n return 'K';\n default:\n throw new Error('Invalid hourCycle');\n }\n }\n // TODO: Once hourCycle is fully supported remove the following with data generation\n var languageTag = locale.language;\n var regionTag;\n if (languageTag !== 'root') {\n regionTag = locale.maximize().region;\n }\n var hourCycles = timeData[regionTag || ''] ||\n timeData[languageTag || ''] ||\n timeData[\"\".concat(languageTag, \"-001\")] ||\n timeData['001'];\n return hourCycles[0];\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n els.forEach(function (el) {\n delete el.location;\n if (isSelectElement(el) || isPluralElement(el)) {\n for (var k in el.options) {\n delete el.options[k].location;\n pruneLocation(el.options[k].value);\n }\n }\n else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n delete el.style.location;\n }\n else if ((isDateElement(el) || isTimeElement(el)) &&\n isDateTimeSkeleton(el.style)) {\n delete el.style.location;\n }\n else if (isTagElement(el)) {\n pruneLocation(el.children);\n }\n });\n}\nexport function parse(message, opts) {\n if (opts === void 0) { opts = {}; }\n opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n var result = new Parser(message, opts).parse();\n if (result.err) {\n var error = SyntaxError(ErrorKind[result.err.kind]);\n // @ts-expect-error Assign to error object\n error.location = result.err.location;\n // @ts-expect-error Assign to error object\n error.originalMessage = result.err.message;\n throw error;\n }\n if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n pruneLocation(result.val);\n }\n return result.val;\n}\nexport * from './types';\n// only for testing\nexport var _Parser = Parser;\n","//\n// Main\n//\nexport function memoize(fn, options) {\n var cache = options && options.cache ? options.cache : cacheDefault;\n var serializer = options && options.serializer ? options.serializer : serializerDefault;\n var strategy = options && options.strategy ? options.strategy : strategyDefault;\n return strategy(fn, {\n cache: cache,\n serializer: serializer,\n });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n var computedValue = cache.get(cacheKey);\n if (typeof computedValue === 'undefined') {\n computedValue = fn.call(this, arg);\n cache.set(cacheKey, computedValue);\n }\n return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n var args = Array.prototype.slice.call(arguments, 3);\n var cacheKey = serializer(args);\n var computedValue = cache.get(cacheKey);\n if (typeof computedValue === 'undefined') {\n computedValue = fn.apply(this, args);\n cache.set(cacheKey, computedValue);\n }\n return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n var strategy = fn.length === 1 ? monadic : variadic;\n return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nfunction ObjectWithoutPrototypeCache() {\n this.cache = Object.create(null);\n}\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n return this.cache[key];\n};\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n this.cache[key] = value;\n};\nvar cacheDefault = {\n create: function create() {\n // @ts-ignore\n return new ObjectWithoutPrototypeCache();\n },\n};\nexport var strategies = {\n variadic: strategyVariadic,\n monadic: strategyMonadic,\n};\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n // When we have a placeholder but no value to format\n ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n // When value supplied is invalid\n ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n // When we need specific Intl API but it's not available\n ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n __extends(FormatError, _super);\n function FormatError(msg, code, originalMessage) {\n var _this = _super.call(this, msg) || this;\n _this.code = code;\n _this.originalMessage = originalMessage;\n return _this;\n }\n FormatError.prototype.toString = function () {\n return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n };\n return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n __extends(InvalidValueError, _super);\n function InvalidValueError(variableId, value, options, originalMessage) {\n return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n }\n return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n __extends(InvalidValueTypeError, _super);\n function InvalidValueTypeError(value, type, originalMessage) {\n return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n }\n return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n __extends(MissingValueError, _super);\n function MissingValueError(variableId, originalMessage) {\n return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n }\n return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTimeElement, isTagElement, } from '@formatjs/icu-messageformat-parser';\nimport { MissingValueError, InvalidValueError, ErrorCode, FormatError, InvalidValueTypeError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n if (parts.length < 2) {\n return parts;\n }\n return parts.reduce(function (all, part) {\n var lastPart = all[all.length - 1];\n if (!lastPart ||\n lastPart.type !== PART_TYPE.literal ||\n part.type !== PART_TYPE.literal) {\n all.push(part);\n }\n else {\n lastPart.value += part.value;\n }\n return all;\n }, []);\n}\nexport function isFormatXMLElementFn(el) {\n return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n // Hot path for straight simple msg translations\n if (els.length === 1 && isLiteralElement(els[0])) {\n return [\n {\n type: PART_TYPE.literal,\n value: els[0].value,\n },\n ];\n }\n var result = [];\n for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n var el = els_1[_i];\n // Exit early for string parts.\n if (isLiteralElement(el)) {\n result.push({\n type: PART_TYPE.literal,\n value: el.value,\n });\n continue;\n }\n // TODO: should this part be literal type?\n // Replace `#` in plural rules with the actual numeric value.\n if (isPoundElement(el)) {\n if (typeof currentPluralValue === 'number') {\n result.push({\n type: PART_TYPE.literal,\n value: formatters.getNumberFormat(locales).format(currentPluralValue),\n });\n }\n continue;\n }\n var varName = el.value;\n // Enforce that all required values are provided by the caller.\n if (!(values && varName in values)) {\n throw new MissingValueError(varName, originalMessage);\n }\n var value = values[varName];\n if (isArgumentElement(el)) {\n if (!value || typeof value === 'string' || typeof value === 'number') {\n value =\n typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : '';\n }\n result.push({\n type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n value: value,\n });\n continue;\n }\n // Recursively format plural and select parts' option — which can be a\n // nested pattern structure. The choosing of the option to use is\n // abstracted-by and delegated-to the part helper object.\n if (isDateElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.date[el.style]\n : isDateTimeSkeleton(el.style)\n ? el.style.parsedOptions\n : undefined;\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isTimeElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.time[el.style]\n : isDateTimeSkeleton(el.style)\n ? el.style.parsedOptions\n : formats.time.medium;\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isNumberElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.number[el.style]\n : isNumberSkeleton(el.style)\n ? el.style.parsedOptions\n : undefined;\n if (style && style.scale) {\n value =\n value *\n (style.scale || 1);\n }\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getNumberFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isTagElement(el)) {\n var children = el.children, value_1 = el.value;\n var formatFn = values[value_1];\n if (!isFormatXMLElementFn(formatFn)) {\n throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n }\n var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n var chunks = formatFn(parts.map(function (p) { return p.value; }));\n if (!Array.isArray(chunks)) {\n chunks = [chunks];\n }\n result.push.apply(result, chunks.map(function (c) {\n return {\n type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n value: c,\n };\n }));\n }\n if (isSelectElement(el)) {\n var opt = el.options[value] || el.options.other;\n if (!opt) {\n throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n continue;\n }\n if (isPluralElement(el)) {\n var opt = el.options[\"=\".concat(value)];\n if (!opt) {\n if (!Intl.PluralRules) {\n throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n }\n var rule = formatters\n .getPluralRules(locales, { type: el.pluralType })\n .select(value - (el.offset || 0));\n opt = el.options[rule] || el.options.other;\n }\n if (!opt) {\n throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n continue;\n }\n }\n return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __rest, __spreadArray } from \"tslib\";\nimport { parse, } from '@formatjs/icu-messageformat-parser';\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n if (!c2) {\n return c1;\n }\n return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n return all;\n }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n if (!configs) {\n return defaultConfig;\n }\n return Object.keys(defaultConfig).reduce(function (all, k) {\n all[k] = mergeConfig(defaultConfig[k], configs[k]);\n return all;\n }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n return {\n create: function () {\n return {\n get: function (key) {\n return store[key];\n },\n set: function (key, value) {\n store[key] = value;\n },\n };\n },\n };\n}\nfunction createDefaultFormatters(cache) {\n if (cache === void 0) { cache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n }; }\n return {\n getNumberFormat: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.number),\n strategy: strategies.variadic,\n }),\n getDateTimeFormat: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.dateTime),\n strategy: strategies.variadic,\n }),\n getPluralRules: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.pluralRules),\n strategy: strategies.variadic,\n }),\n };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n function IntlMessageFormat(message, locales, overrideFormats, opts) {\n var _this = this;\n if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n this.formatterCache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n };\n this.format = function (values) {\n var parts = _this.formatToParts(values);\n // Hot path for straight simple msg translations\n if (parts.length === 1) {\n return parts[0].value;\n }\n var result = parts.reduce(function (all, part) {\n if (!all.length ||\n part.type !== PART_TYPE.literal ||\n typeof all[all.length - 1] !== 'string') {\n all.push(part.value);\n }\n else {\n all[all.length - 1] += part.value;\n }\n return all;\n }, []);\n if (result.length <= 1) {\n return result[0] || '';\n }\n return result;\n };\n this.formatToParts = function (values) {\n return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n };\n this.resolvedOptions = function () {\n var _a;\n return ({\n locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) ||\n Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n });\n };\n this.getAst = function () { return _this.ast; };\n // Defined first because it's used to build the format pattern.\n this.locales = locales;\n this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n if (typeof message === 'string') {\n this.message = message;\n if (!IntlMessageFormat.__parse) {\n throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n }\n var _a = opts || {}, formatters = _a.formatters, parseOpts = __rest(_a, [\"formatters\"]);\n // Parse string messages into an AST.\n this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale }));\n }\n else {\n this.ast = message;\n }\n if (!Array.isArray(this.ast)) {\n throw new TypeError('A message must be provided as a String or AST.');\n }\n // Creates a new object with the specified `formats` merged with the default\n // formats.\n this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n this.formatters =\n (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n }\n Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n get: function () {\n if (!IntlMessageFormat.memoizedDefaultLocale) {\n IntlMessageFormat.memoizedDefaultLocale =\n new Intl.NumberFormat().resolvedOptions().locale;\n }\n return IntlMessageFormat.memoizedDefaultLocale;\n },\n enumerable: false,\n configurable: true\n });\n IntlMessageFormat.memoizedDefaultLocale = null;\n IntlMessageFormat.resolveLocale = function (locales) {\n if (typeof Intl.Locale === 'undefined') {\n return;\n }\n var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n if (supportedLocales.length > 0) {\n return new Intl.Locale(supportedLocales[0]);\n }\n return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n };\n IntlMessageFormat.__parse = parse;\n // Default format options used as the prototype of the `formats` provided to the\n // constructor. These are used when constructing the internal Intl.NumberFormat\n // and Intl.DateTimeFormat instances.\n IntlMessageFormat.formats = {\n number: {\n integer: {\n maximumFractionDigits: 0,\n },\n currency: {\n style: 'currency',\n },\n percent: {\n style: 'percent',\n },\n },\n date: {\n short: {\n month: 'numeric',\n day: 'numeric',\n year: '2-digit',\n },\n medium: {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n },\n long: {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n full: {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n },\n time: {\n short: {\n hour: 'numeric',\n minute: 'numeric',\n },\n medium: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n long: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n full: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n },\n };\n return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","import { __extends } from \"tslib\";\nexport var IntlErrorCode;\n(function (IntlErrorCode) {\n IntlErrorCode[\"FORMAT_ERROR\"] = \"FORMAT_ERROR\";\n IntlErrorCode[\"UNSUPPORTED_FORMATTER\"] = \"UNSUPPORTED_FORMATTER\";\n IntlErrorCode[\"INVALID_CONFIG\"] = \"INVALID_CONFIG\";\n IntlErrorCode[\"MISSING_DATA\"] = \"MISSING_DATA\";\n IntlErrorCode[\"MISSING_TRANSLATION\"] = \"MISSING_TRANSLATION\";\n})(IntlErrorCode || (IntlErrorCode = {}));\nvar IntlError = /** @class */ (function (_super) {\n __extends(IntlError, _super);\n function IntlError(code, message, exception) {\n var _this = this;\n var err = exception\n ? exception instanceof Error\n ? exception\n : new Error(String(exception))\n : undefined;\n _this = _super.call(this, \"[@formatjs/intl Error \".concat(code, \"] \").concat(message, \"\\n\").concat(err ? \"\\n\".concat(err.message, \"\\n\").concat(err.stack) : '')) || this;\n _this.code = code;\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (typeof Error.captureStackTrace === 'function') {\n // @ts-ignore just so we don't need to declare dep on @types/node\n Error.captureStackTrace(_this, IntlError);\n }\n return _this;\n }\n return IntlError;\n}(Error));\nexport { IntlError };\nvar UnsupportedFormatterError = /** @class */ (function (_super) {\n __extends(UnsupportedFormatterError, _super);\n function UnsupportedFormatterError(message, exception) {\n return _super.call(this, IntlErrorCode.UNSUPPORTED_FORMATTER, message, exception) || this;\n }\n return UnsupportedFormatterError;\n}(IntlError));\nexport { UnsupportedFormatterError };\nvar InvalidConfigError = /** @class */ (function (_super) {\n __extends(InvalidConfigError, _super);\n function InvalidConfigError(message, exception) {\n return _super.call(this, IntlErrorCode.INVALID_CONFIG, message, exception) || this;\n }\n return InvalidConfigError;\n}(IntlError));\nexport { InvalidConfigError };\nvar MissingDataError = /** @class */ (function (_super) {\n __extends(MissingDataError, _super);\n function MissingDataError(message, exception) {\n return _super.call(this, IntlErrorCode.MISSING_DATA, message, exception) || this;\n }\n return MissingDataError;\n}(IntlError));\nexport { MissingDataError };\nvar IntlFormatError = /** @class */ (function (_super) {\n __extends(IntlFormatError, _super);\n function IntlFormatError(message, locale, exception) {\n var _this = _super.call(this, IntlErrorCode.FORMAT_ERROR, \"\".concat(message, \"\\nLocale: \").concat(locale, \"\\n\"), exception) || this;\n _this.locale = locale;\n return _this;\n }\n return IntlFormatError;\n}(IntlError));\nexport { IntlFormatError };\nvar MessageFormatError = /** @class */ (function (_super) {\n __extends(MessageFormatError, _super);\n function MessageFormatError(message, locale, descriptor, exception) {\n var _this = _super.call(this, \"\".concat(message, \"\\nMessageID: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.id, \"\\nDefault Message: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.defaultMessage, \"\\nDescription: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.description, \"\\n\"), locale, exception) || this;\n _this.descriptor = descriptor;\n _this.locale = locale;\n return _this;\n }\n return MessageFormatError;\n}(IntlFormatError));\nexport { MessageFormatError };\nvar MissingTranslationError = /** @class */ (function (_super) {\n __extends(MissingTranslationError, _super);\n function MissingTranslationError(descriptor, locale) {\n var _this = _super.call(this, IntlErrorCode.MISSING_TRANSLATION, \"Missing message: \\\"\".concat(descriptor.id, \"\\\" for locale \\\"\").concat(locale, \"\\\", using \").concat(descriptor.defaultMessage\n ? \"default message (\".concat(typeof descriptor.defaultMessage === 'string'\n ? descriptor.defaultMessage\n : descriptor.defaultMessage\n .map(function (e) { var _a; return (_a = e.value) !== null && _a !== void 0 ? _a : JSON.stringify(e); })\n .join(), \")\")\n : 'id', \" as fallback.\")) || this;\n _this.descriptor = descriptor;\n return _this;\n }\n return MissingTranslationError;\n}(IntlError));\nexport { MissingTranslationError };\n","import { __assign, __spreadArray } from \"tslib\";\nimport { IntlMessageFormat } from 'intl-messageformat';\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { UnsupportedFormatterError } from './error';\nexport function filterProps(props, allowlist, defaults) {\n if (defaults === void 0) { defaults = {}; }\n return allowlist.reduce(function (filtered, name) {\n if (name in props) {\n filtered[name] = props[name];\n }\n else if (name in defaults) {\n filtered[name] = defaults[name];\n }\n return filtered;\n }, {});\n}\nvar defaultErrorHandler = function (error) {\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (process.env.NODE_ENV !== 'production') {\n console.error(error);\n }\n};\nvar defaultWarnHandler = function (warning) {\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n};\nexport var DEFAULT_INTL_CONFIG = {\n formats: {},\n messages: {},\n timeZone: undefined,\n defaultLocale: 'en',\n defaultFormats: {},\n fallbackOnEmptyString: true,\n onError: defaultErrorHandler,\n onWarn: defaultWarnHandler,\n};\nexport function createIntlCache() {\n return {\n dateTime: {},\n number: {},\n message: {},\n relativeTime: {},\n pluralRules: {},\n list: {},\n displayNames: {},\n };\n}\nfunction createFastMemoizeCache(store) {\n return {\n create: function () {\n return {\n get: function (key) {\n return store[key];\n },\n set: function (key, value) {\n store[key] = value;\n },\n };\n },\n };\n}\n/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */\nexport function createFormatters(cache) {\n if (cache === void 0) { cache = createIntlCache(); }\n var RelativeTimeFormat = Intl.RelativeTimeFormat;\n var ListFormat = Intl.ListFormat;\n var DisplayNames = Intl.DisplayNames;\n var getDateTimeFormat = memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.dateTime),\n strategy: strategies.variadic,\n });\n var getNumberFormat = memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.number),\n strategy: strategies.variadic,\n });\n var getPluralRules = memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.pluralRules),\n strategy: strategies.variadic,\n });\n return {\n getDateTimeFormat: getDateTimeFormat,\n getNumberFormat: getNumberFormat,\n getMessageFormat: memoize(function (message, locales, overrideFormats, opts) {\n return new IntlMessageFormat(message, locales, overrideFormats, __assign({ formatters: {\n getNumberFormat: getNumberFormat,\n getDateTimeFormat: getDateTimeFormat,\n getPluralRules: getPluralRules,\n } }, (opts || {})));\n }, {\n cache: createFastMemoizeCache(cache.message),\n strategy: strategies.variadic,\n }),\n getRelativeTimeFormat: memoize(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new (RelativeTimeFormat.bind.apply(RelativeTimeFormat, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.relativeTime),\n strategy: strategies.variadic,\n }),\n getPluralRules: getPluralRules,\n getListFormat: memoize(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new (ListFormat.bind.apply(ListFormat, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.list),\n strategy: strategies.variadic,\n }),\n getDisplayNames: memoize(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new (DisplayNames.bind.apply(DisplayNames, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.displayNames),\n strategy: strategies.variadic,\n }),\n };\n}\nexport function getNamedFormat(formats, type, name, onError) {\n var formatType = formats && formats[type];\n var format;\n if (formatType) {\n format = formatType[name];\n }\n if (format) {\n return format;\n }\n onError(new UnsupportedFormatterError(\"No \".concat(type, \" format named: \").concat(name)));\n}\n","import { IntlFormatError } from './error';\nimport { filterProps, getNamedFormat } from './utils';\nvar NUMBER_FORMAT_OPTIONS = [\n 'style',\n 'currency',\n 'unit',\n 'unitDisplay',\n 'useGrouping',\n 'minimumIntegerDigits',\n 'minimumFractionDigits',\n 'maximumFractionDigits',\n 'minimumSignificantDigits',\n 'maximumSignificantDigits',\n // ES2020 NumberFormat\n 'compactDisplay',\n 'currencyDisplay',\n 'currencySign',\n 'notation',\n 'signDisplay',\n 'unit',\n 'unitDisplay',\n 'numberingSystem',\n // ES2023 NumberFormat\n 'trailingZeroDisplay',\n 'roundingPriority',\n 'roundingIncrement',\n 'roundingMode',\n];\nexport function getFormatter(_a, getNumberFormat, options) {\n var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n if (options === void 0) { options = {}; }\n var format = options.format;\n var defaults = ((format &&\n getNamedFormat(formats, 'number', format, onError)) ||\n {});\n var filteredOptions = filterProps(options, NUMBER_FORMAT_OPTIONS, defaults);\n return getNumberFormat(locale, filteredOptions);\n}\nexport function formatNumber(config, getNumberFormat, value, options) {\n if (options === void 0) { options = {}; }\n try {\n return getFormatter(config, getNumberFormat, options).format(value);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting number.', config.locale, e));\n }\n return String(value);\n}\nexport function formatNumberToParts(config, getNumberFormat, value, options) {\n if (options === void 0) { options = {}; }\n try {\n return getFormatter(config, getNumberFormat, options).formatToParts(value);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting number.', config.locale, e));\n }\n return [];\n}\n","import { getNamedFormat, filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar RELATIVE_TIME_FORMAT_OPTIONS = ['numeric', 'style'];\nfunction getFormatter(_a, getRelativeTimeFormat, options) {\n var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n if (options === void 0) { options = {}; }\n var format = options.format;\n var defaults = (!!format && getNamedFormat(formats, 'relative', format, onError)) || {};\n var filteredOptions = filterProps(options, RELATIVE_TIME_FORMAT_OPTIONS, defaults);\n return getRelativeTimeFormat(locale, filteredOptions);\n}\nexport function formatRelativeTime(config, getRelativeTimeFormat, value, unit, options) {\n if (options === void 0) { options = {}; }\n if (!unit) {\n unit = 'second';\n }\n var RelativeTimeFormat = Intl.RelativeTimeFormat;\n if (!RelativeTimeFormat) {\n config.onError(new FormatError(\"Intl.RelativeTimeFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-relativetimeformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n try {\n return getFormatter(config, getRelativeTimeFormat, options).format(value, unit);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting relative time.', config.locale, e));\n }\n return String(value);\n}\n","import { __assign } from \"tslib\";\nimport { filterProps, getNamedFormat } from './utils';\nimport { IntlFormatError } from './error';\nvar DATE_TIME_FORMAT_OPTIONS = [\n 'formatMatcher',\n 'timeZone',\n 'hour12',\n 'weekday',\n 'era',\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'timeZoneName',\n 'hourCycle',\n 'dateStyle',\n 'timeStyle',\n 'calendar',\n // 'dayPeriod',\n 'numberingSystem',\n 'fractionalSecondDigits',\n];\nexport function getFormatter(_a, type, getDateTimeFormat, options) {\n var locale = _a.locale, formats = _a.formats, onError = _a.onError, timeZone = _a.timeZone;\n if (options === void 0) { options = {}; }\n var format = options.format;\n var defaults = __assign(__assign({}, (timeZone && { timeZone: timeZone })), (format && getNamedFormat(formats, type, format, onError)));\n var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, defaults);\n if (type === 'time' &&\n !filteredOptions.hour &&\n !filteredOptions.minute &&\n !filteredOptions.second &&\n !filteredOptions.timeStyle &&\n !filteredOptions.dateStyle) {\n // Add default formatting options if hour, minute, or second isn't defined.\n filteredOptions = __assign(__assign({}, filteredOptions), { hour: 'numeric', minute: 'numeric' });\n }\n return getDateTimeFormat(locale, filteredOptions);\n}\nexport function formatDate(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'date', getDateTimeFormat, options).format(date);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting date.', config.locale, e));\n }\n return String(date);\n}\nexport function formatTime(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'time', getDateTimeFormat, options).format(date);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting time.', config.locale, e));\n }\n return String(date);\n}\nexport function formatDateTimeRange(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var from = _a[0], to = _a[1], _b = _a[2], options = _b === void 0 ? {} : _b;\n var timeZone = config.timeZone, locale = config.locale, onError = config.onError;\n var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, timeZone ? { timeZone: timeZone } : {});\n try {\n return getDateTimeFormat(locale, filteredOptions).formatRange(from, to);\n }\n catch (e) {\n onError(new IntlFormatError('Error formatting date time range.', config.locale, e));\n }\n return String(from);\n}\nexport function formatDateToParts(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'date', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting date.', config.locale, e));\n }\n return [];\n}\nexport function formatTimeToParts(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'time', getDateTimeFormat, options).formatToParts(date); // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting time.', config.locale, e));\n }\n return [];\n}\n","import { filterProps } from './utils';\nimport { IntlFormatError } from './error';\nimport { ErrorCode, FormatError } from 'intl-messageformat';\nvar PLURAL_FORMAT_OPTIONS = ['type'];\nexport function formatPlural(_a, getPluralRules, value, options) {\n var locale = _a.locale, onError = _a.onError;\n if (options === void 0) { options = {}; }\n if (!Intl.PluralRules) {\n onError(new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n var filteredOptions = filterProps(options, PLURAL_FORMAT_OPTIONS);\n try {\n return getPluralRules(locale, filteredOptions).select(value);\n }\n catch (e) {\n onError(new IntlFormatError('Error formatting plural.', locale, e));\n }\n return 'other';\n}\n","import { __assign } from \"tslib\";\nimport { invariant } from '@formatjs/ecma402-abstract';\nimport { IntlMessageFormat, } from 'intl-messageformat';\nimport { MissingTranslationError, MessageFormatError } from './error';\nimport { TYPE } from '@formatjs/icu-messageformat-parser';\nfunction setTimeZoneInOptions(opts, timeZone) {\n return Object.keys(opts).reduce(function (all, k) {\n all[k] = __assign({ timeZone: timeZone }, opts[k]);\n return all;\n }, {});\n}\nfunction deepMergeOptions(opts1, opts2) {\n var keys = Object.keys(__assign(__assign({}, opts1), opts2));\n return keys.reduce(function (all, k) {\n all[k] = __assign(__assign({}, (opts1[k] || {})), (opts2[k] || {}));\n return all;\n }, {});\n}\nfunction deepMergeFormatsAndSetTimeZone(f1, timeZone) {\n if (!timeZone) {\n return f1;\n }\n var mfFormats = IntlMessageFormat.formats;\n return __assign(__assign(__assign({}, mfFormats), f1), { date: deepMergeOptions(setTimeZoneInOptions(mfFormats.date, timeZone), setTimeZoneInOptions(f1.date || {}, timeZone)), time: deepMergeOptions(setTimeZoneInOptions(mfFormats.time, timeZone), setTimeZoneInOptions(f1.time || {}, timeZone)) });\n}\nexport var formatMessage = function (_a, state, messageDescriptor, values, opts) {\n var locale = _a.locale, formats = _a.formats, messages = _a.messages, defaultLocale = _a.defaultLocale, defaultFormats = _a.defaultFormats, fallbackOnEmptyString = _a.fallbackOnEmptyString, onError = _a.onError, timeZone = _a.timeZone, defaultRichTextElements = _a.defaultRichTextElements;\n if (messageDescriptor === void 0) { messageDescriptor = { id: '' }; }\n var msgId = messageDescriptor.id, defaultMessage = messageDescriptor.defaultMessage;\n // `id` is a required field of a Message Descriptor.\n invariant(!!msgId, \"[@formatjs/intl] An `id` must be provided to format a message. You can either:\\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.io/docs/tooling/babel-plugin)\\nor [@formatjs/ts-transformer](https://formatjs.io/docs/tooling/ts-transformer) OR\\n2. Configure your `eslint` config to include [eslint-plugin-formatjs](https://formatjs.io/docs/tooling/linter#enforce-id)\\nto autofix this issue\");\n var id = String(msgId);\n var message = \n // In case messages is Object.create(null)\n // e.g import('foo.json') from webpack)\n // See https://github.com/formatjs/formatjs/issues/1914\n messages &&\n Object.prototype.hasOwnProperty.call(messages, id) &&\n messages[id];\n // IMPORTANT: Hot path if `message` is AST with a single literal node\n if (Array.isArray(message) &&\n message.length === 1 &&\n message[0].type === TYPE.literal) {\n return message[0].value;\n }\n // IMPORTANT: Hot path straight lookup for performance\n if (!values &&\n message &&\n typeof message === 'string' &&\n !defaultRichTextElements) {\n return message.replace(/'\\{(.*?)\\}'/gi, \"{$1}\");\n }\n values = __assign(__assign({}, defaultRichTextElements), (values || {}));\n formats = deepMergeFormatsAndSetTimeZone(formats, timeZone);\n defaultFormats = deepMergeFormatsAndSetTimeZone(defaultFormats, timeZone);\n if (!message) {\n if (fallbackOnEmptyString === false && message === '') {\n return message;\n }\n if (!defaultMessage ||\n (locale && locale.toLowerCase() !== defaultLocale.toLowerCase())) {\n // This prevents warnings from littering the console in development\n // when no `messages` are passed into the for the\n // default locale.\n onError(new MissingTranslationError(messageDescriptor, locale));\n }\n if (defaultMessage) {\n try {\n var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n return formatter.format(values);\n }\n catch (e) {\n onError(new MessageFormatError(\"Error formatting default message for: \\\"\".concat(id, \"\\\", rendering default message verbatim\"), locale, messageDescriptor, e));\n return typeof defaultMessage === 'string' ? defaultMessage : id;\n }\n }\n return id;\n }\n // We have the translated message\n try {\n var formatter = state.getMessageFormat(message, locale, formats, __assign({ formatters: state }, (opts || {})));\n return formatter.format(values);\n }\n catch (e) {\n onError(new MessageFormatError(\"Error formatting message: \\\"\".concat(id, \"\\\", using \").concat(defaultMessage ? 'default message' : 'id', \" as fallback.\"), locale, messageDescriptor, e));\n }\n if (defaultMessage) {\n try {\n var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n return formatter.format(values);\n }\n catch (e) {\n onError(new MessageFormatError(\"Error formatting the default message for: \\\"\".concat(id, \"\\\", rendering message verbatim\"), locale, messageDescriptor, e));\n }\n }\n if (typeof message === 'string') {\n return message;\n }\n if (typeof defaultMessage === 'string') {\n return defaultMessage;\n }\n return id;\n};\n","/**\n * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue\n * @param x number\n */\nexport function getMagnitude(x) {\n // Cannot count string length via Number.toString because it may use scientific notation\n // for very small or very large numbers.\n return Math.floor(Math.log(x) * Math.LOG10E);\n}\nexport function repeat(s, times) {\n if (typeof s.repeat === 'function') {\n return s.repeat(times);\n }\n var arr = new Array(times);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = s;\n }\n return arr.join('');\n}\nexport function setInternalSlot(map, pl, field, value) {\n if (!map.get(pl)) {\n map.set(pl, Object.create(null));\n }\n var slots = map.get(pl);\n slots[field] = value;\n}\nexport function setMultiInternalSlots(map, pl, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var k = _a[_i];\n setInternalSlot(map, pl, k, props[k]);\n }\n}\nexport function getInternalSlot(map, pl, field) {\n return getMultiInternalSlots(map, pl, field)[field];\n}\nexport function getMultiInternalSlots(map, pl) {\n var fields = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n fields[_i - 2] = arguments[_i];\n }\n var slots = map.get(pl);\n if (!slots) {\n throw new TypeError(\"\".concat(pl, \" InternalSlot has not been initialized\"));\n }\n return fields.reduce(function (all, f) {\n all[f] = slots[f];\n return all;\n }, Object.create(null));\n}\nexport function isLiteralPart(patternPart) {\n return patternPart.type === 'literal';\n}\n/*\n 17 ECMAScript Standard Built-in Objects:\n Every built-in Function object, including constructors, that is not\n identified as an anonymous function has a name property whose value\n is a String.\n\n Unless otherwise specified, the name property of a built-in Function\n object, if it exists, has the attributes { [[Writable]]: false,\n [[Enumerable]]: false, [[Configurable]]: true }.\n*/\nexport function defineProperty(target, name, _a) {\n var value = _a.value;\n Object.defineProperty(target, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: value,\n });\n}\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n if (Err === void 0) { Err = Error; }\n if (!condition) {\n throw new Err(message);\n }\n}\n","import { __assign } from \"tslib\";\nimport { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar LIST_FORMAT_OPTIONS = [\n 'type',\n 'style',\n];\nvar now = Date.now();\nfunction generateToken(i) {\n return \"\".concat(now, \"_\").concat(i, \"_\").concat(now);\n}\nexport function formatList(opts, getListFormat, values, options) {\n if (options === void 0) { options = {}; }\n var results = formatListToParts(opts, getListFormat, values, options).reduce(function (all, el) {\n var val = el.value;\n if (typeof val !== 'string') {\n all.push(val);\n }\n else if (typeof all[all.length - 1] === 'string') {\n all[all.length - 1] += val;\n }\n else {\n all.push(val);\n }\n return all;\n }, []);\n return results.length === 1 ? results[0] : results.length === 0 ? '' : results;\n}\nexport function formatListToParts(_a, getListFormat, values, options) {\n var locale = _a.locale, onError = _a.onError;\n if (options === void 0) { options = {}; }\n var ListFormat = Intl.ListFormat;\n if (!ListFormat) {\n onError(new FormatError(\"Intl.ListFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-listformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n var filteredOptions = filterProps(options, LIST_FORMAT_OPTIONS);\n try {\n var richValues_1 = {};\n var serializedValues = values.map(function (v, i) {\n if (typeof v === 'object') {\n var id = generateToken(i);\n richValues_1[id] = v;\n return id;\n }\n return String(v);\n });\n return getListFormat(locale, filteredOptions)\n .formatToParts(serializedValues)\n .map(function (part) {\n return part.type === 'literal'\n ? part\n : __assign(__assign({}, part), { value: richValues_1[part.value] || part.value });\n });\n }\n catch (e) {\n onError(new IntlFormatError('Error formatting list.', locale, e));\n }\n // @ts-ignore\n return values;\n}\n","import { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar DISPLAY_NAMES_OPTONS = [\n 'style',\n 'type',\n 'fallback',\n 'languageDisplay',\n];\nexport function formatDisplayName(_a, getDisplayNames, value, options) {\n var locale = _a.locale, onError = _a.onError;\n var DisplayNames = Intl.DisplayNames;\n if (!DisplayNames) {\n onError(new FormatError(\"Intl.DisplayNames is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-displaynames\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n var filteredOptions = filterProps(options, DISPLAY_NAMES_OPTONS);\n try {\n return getDisplayNames(locale, filteredOptions).of(value);\n }\n catch (e) {\n onError(new IntlFormatError('Error formatting display name.', locale, e));\n }\n}\n","import { __assign } from \"tslib\";\nimport { createFormatters, DEFAULT_INTL_CONFIG } from './utils';\nimport { InvalidConfigError, MissingDataError } from './error';\nimport { formatNumber, formatNumberToParts } from './number';\nimport { formatRelativeTime } from './relativeTime';\nimport { formatDate, formatDateToParts, formatTime, formatTimeToParts, formatDateTimeRange, } from './dateTime';\nimport { formatPlural } from './plural';\nimport { formatMessage } from './message';\nimport { formatList, formatListToParts } from './list';\nimport { formatDisplayName } from './displayName';\nfunction messagesContainString(messages) {\n var firstMessage = messages ? messages[Object.keys(messages)[0]] : undefined;\n return typeof firstMessage === 'string';\n}\nfunction verifyConfigMessages(config) {\n if (config.onWarn &&\n config.defaultRichTextElements &&\n messagesContainString(config.messages || {})) {\n config.onWarn(\"[@formatjs/intl] \\\"defaultRichTextElements\\\" was specified but \\\"message\\\" was not pre-compiled. \\nPlease consider using \\\"@formatjs/cli\\\" to pre-compile your messages for performance.\\nFor more details see https://formatjs.io/docs/getting-started/message-distribution\");\n }\n}\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport function createIntl(config, cache) {\n var formatters = createFormatters(cache);\n var resolvedConfig = __assign(__assign({}, DEFAULT_INTL_CONFIG), config);\n var locale = resolvedConfig.locale, defaultLocale = resolvedConfig.defaultLocale, onError = resolvedConfig.onError;\n if (!locale) {\n if (onError) {\n onError(new InvalidConfigError(\"\\\"locale\\\" was not configured, using \\\"\".concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl/api#intlshape for more details\")));\n }\n // Since there's no registered locale data for `locale`, this will\n // fallback to the `defaultLocale` to make sure things can render.\n // The `messages` are overridden to the `defaultProps` empty object\n // to maintain referential equality across re-renders. It's assumed\n // each contains a `defaultMessage` prop.\n resolvedConfig.locale = resolvedConfig.defaultLocale || 'en';\n }\n else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.NumberFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n }\n else if (!Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n onError) {\n onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n }\n verifyConfigMessages(resolvedConfig);\n return __assign(__assign({}, resolvedConfig), { formatters: formatters, formatNumber: formatNumber.bind(null, resolvedConfig, formatters.getNumberFormat), formatNumberToParts: formatNumberToParts.bind(null, resolvedConfig, formatters.getNumberFormat), formatRelativeTime: formatRelativeTime.bind(null, resolvedConfig, formatters.getRelativeTimeFormat), formatDate: formatDate.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateToParts: formatDateToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTime: formatTime.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateTimeRange: formatDateTimeRange.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTimeToParts: formatTimeToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatPlural: formatPlural.bind(null, resolvedConfig, formatters.getPluralRules), \n // @ts-expect-error TODO: will get to this later\n formatMessage: formatMessage.bind(null, resolvedConfig, formatters), \n // @ts-expect-error TODO: will get to this later\n $t: formatMessage.bind(null, resolvedConfig, formatters), formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat), formatListToParts: formatListToParts.bind(null, resolvedConfig, formatters.getListFormat), formatDisplayName: formatDisplayName.bind(null, resolvedConfig, formatters.getDisplayNames) });\n}\n","import { createIntl, createIntlCache, IntlErrorCode } from '@formatjs/intl';\nexport { createIntl, createIntlCache };\nexport function onFormatjsIntlError(error) {\n switch (error.code) {\n case IntlErrorCode.MISSING_TRANSLATION:\n {\n // Do nothing\n break;\n }\n default:\n {\n throw error;\n }\n }\n}","export default [[\"en-us\", {\n \"annotations\": {\n \"filterResponse\": {\n \"orders\": {\n \"order1\": \"1st order {responseType}\",\n \"order10\": \"10th order {responseType}\",\n \"order2\": \"2nd order {responseType}\",\n \"order3\": \"3rd order {responseType}\",\n \"order4\": \"4th order {responseType}\",\n \"order5\": \"5th order {responseType}\",\n \"order6\": \"6th order {responseType}\",\n \"order7\": \"7th order {responseType}\",\n \"order8\": \"8th order {responseType}\",\n \"order9\": \"9th order {responseType}\",\n \"orderN\": \"{order}th order {responseType}\"\n },\n \"responseType\": {\n \"Bessel\": \"Bessel\",\n \"Butterworth\": \"Butterworth\",\n \"Butterworth Bessel\": \"Butterworth Bessel\",\n \"Chebyshev\": \"Chebyshev\"\n },\n \"responseValue\": \"{value} dB\",\n \"stages\": \"{count, plural, =1 {1 stage} other {# stages}}\"\n },\n \"magnitude\": {\n \"db-down\": \"{n} dB down\",\n \"gain\": \"Gain = {n} dB\",\n \"passband-region\": \"Passband region\",\n \"passband-ripple\": \"Passband ripple = {n} dB\",\n \"stopband-region\": \"Stopband region\"\n }\n },\n \"dialogs\": {\n \"algorithm-confirmation\": {\n \"decreasing-r2-advantages\": \"Decreasing R2 has the following advantages\",\n \"decreasing-r2-advantages-item-1\": \"Lower resistor noise from R2.\",\n \"decreasing-r2-advantages-item-2\": \"Lower current noise effect through R2.\",\n \"decreasing-r2-advantages-item-3\": \"Less chance of amplifier input capacitance affecting performance.\",\n \"expand\": \"expand\",\n \"hide\": \"hide\",\n \"increasing-r1-advantages\": \"Increasing R1 has the following advantages\",\n \"increasing-r1-advantages-item-1\": \"Smaller chance of source impedance affecting filter response.\",\n \"increasing-r1-advantages-item-2\": \"Higher input filter input impedance at high frequencies.\",\n \"increasing-r1-advantages-item-3\": \"Less loading on the amplifier output at high frequencies.\",\n \"introduction\": \"In November 2023 we updated Filter Wizard to calculate Sallen Key Lowpass components differently. All other stage types are unaffected. The change affects Sallen Key Lowpass stages with high R2/R1 ratios. High ratios negatively affect filter performance. We are reducing this ratio. This change will have little effect on the filter stage key specs: fp, Q, and gain. For some optimizations, you may see the stage order change, as our algorithm takes advantage of the better stage performance.\",\n \"new-algorithm-button\": \"Use new algorithm\",\n \"old-algorithm-button\": \"Use old algorithm\",\n \"post-script-new-design\": \"You may see a change in R1, R2, C1, and C2. All other components will be unaffected. All new designs will use the new method.\",\n \"post-script-save-design\": \"For this saved design, you can choose to continue to use the old algorithm or the new one. If you update to the new algorithm these components may be different than when you last saved.\",\n \"potential-drawbacks\": \"Potential drawbacks of this change\",\n \"potential-drawbacks-item-1\": \"C1/C2 was often a nice ratio of 10 with the old algorithm.\",\n \"potential-drawbacks-item-2\": \"Slight increase in noise gain. We believe the reduction in R2 noise outweighs this disadvantage.\",\n \"potential-drawbacks-item-3\": \"For single supply configurations when gain > 1, decreased R2 requires the mid-supply driver to have lower output impedance. We believe our AD8031 capacitor driving solution is well-equipped for this.\",\n \"pros-and-cons\": \"Pros and cons of reducing the R2/R1 ratio - click to\",\n \"title\": \"Change in Sallen Key Lowpass component calculations since you saved\"\n },\n \"common\": {\n \"cancel\": \"Cancel\",\n \"close\": \"Close\",\n \"ok\": \"OK\",\n \"open\": \"Open\",\n \"save\": \"Save\",\n \"select\": \"Select\"\n },\n \"connect-to\": {\n \"message-error\": \"Connection to {tool} failed\",\n \"title-error\": \"Connection Error\"\n },\n \"evaluation-boards\": {\n \"eval-board-column\": \"Eval Boards Needed\",\n \"eval-board-flagged\": \"Unable to Order Eval Board\",\n \"eval-board-flagged-after-incompatibles\": \"To order an evaluation board, please go back to the component selection tab and select parts that are compatible.\",\n \"eval-board-flagged-before-incompatibles\": \"In the component selection tab, you selected the following non-recommended op amps that are not compatible with the filter wizard evaluation board system: \",\n \"eval-board-flagged-multi-feedback\": \"In the component selection tab, you selected a Multiple Feedback stage implementation for one or more of your circuit Stages. Evaluation daughter boards are not yet available for Multiple Feedback circuit stages.\",\n \"eval-board-instruction\": \"In the page the Order button opens, click \\\"Buy Now\\\" to open the page where you can place items in the cart\",\n \"eval-board-multiple\": \"*Each daughterboard box we ship contains 4 individual stages, so it is not necessary to order them separately.\",\n \"eval-board-not-available-board\": \"Not available\",\n \"eval-board-parts-column\": \"Solder These Parts (Order Parts Separately)\",\n \"eval_board-flagged-inductor\": \"In the component selection tab, you selected an Inductor stage implementation for one or more of your circuit Stages. Evaluation daughter boards are not yet available for inductor circuit stages.\",\n \"evalboard-confirmation\": {\n \"cancel-button-text\": \"Cancel\",\n \"message\": \"We apologize. The filter wizard evaluation board system does not have daughter boards for stages using inductors.\",\n \"proceed-button-text\": \"Look at eval boards anyway\",\n \"title\": \"Frequencies too high for eval board system\"\n },\n \"stage-column\": \"Stage\",\n \"stage-info\": {\n \"channel-dual\": \"-- Dual Op Amp\",\n \"channel-none\": \"\",\n \"channel-single\": \"-- Single Op Amp\",\n \"implementation-buffered-rc\": \"Buffered RC\",\n \"implementation-deliyannis-friend\": \"Multiple Feedback (Deliyannis Friend)\",\n \"implementation-first-order\": \"First Order\",\n \"implementation-gain\": \"Gain\",\n \"implementation-inductor\": \"Inductor\",\n \"implementation-multiple-feedback\": \"Multiple Feedback\",\n \"implementation-none\": \"\",\n \"implementation-sallen-key\": \"Sallen Key\",\n \"stage-text\": \"{stageType} {stageImplementation} Stage {stageChannel}\",\n \"stage-type-band-pass\": \"Band Pass\",\n \"stage-type-band-stop\": \"Band Stop\",\n \"stage-type-gain\": \"Gain\",\n \"stage-type-high-pass\": \"High Pass\",\n \"stage-type-low-pass\": \"Low Pass\",\n \"stage-type-none\": \"\",\n \"stage-type-notch\": \"Notch\"\n },\n \"stage-info-column\": \"Stage Information\",\n \"table-title\": \"Evaluation Boards Needed\",\n \"title\": \"Order Eval Board\"\n },\n \"feedback\": {\n \"email\": \"EMail: \",\n \"feedback\": \"Your Feedback\",\n \"feedback-dialog-ng-message\": \"Failed to send user feedback. This may be due to a poor connection to the server. Please try again.\",\n \"feedback-dialog-ok-message\": \"Your feedback has been sent.\",\n \"give-feedback\": \"Tell us\",\n \"invitation\": \"Please let us know your opinion of this tool, good and bad.\",\n \"name\": \"Name: \",\n \"optional\": \"(Optional)\",\n \"title\": \"Give us your feedback!\"\n },\n \"load\": {\n \"choose-button\": \"Choose File\",\n \"invalid-file\": \"Invalid design file. Please verify the contents of the design file you are trying to load.\",\n \"invalid-parts\": \"Unable to load design. The following {numParts, plural, =1 {part in this design file is} other {parts in this design file are}} no longer supported by this application: {parts}\",\n \"message\": \"Load a design from a file on your computer.\",\n \"no-opamps\": \"OpAmp data is unavailable. Unable to load design. Try to refresh your browser. If the problem persists, please use Filter Wizard's feedback button in the upper right to report the issue.\",\n \"title\": \"Load Design\"\n },\n \"opamp\": {\n \"table\": {\n \"architecture\": \"Architecture\",\n \"canOrderEvalBoard\": \"Eval Board?\",\n \"comment\": \"Comment\",\n \"comments\": \"Comments\",\n \"commentsDisplay\": {\n \"showAll\": \"Show All\",\n \"showNotAllowed\": \"Not Allowed\",\n \"showNotAllowedMatch\": \"not allowed\",\n \"showNotRecommended\": \"Not Recommended\",\n \"showNotRecommendedMatch\": \"not recommended\",\n \"showRecommended\": \"Recommended\",\n \"showRecommendedMatch\": \"recommended\"\n },\n \"feedbackMethod\": \"Feedback Method\",\n \"gbw\": \"GBW (Hz)\",\n \"iBias\": \"max iBias (A)\",\n \"iNoise\": \"iNoise\",\n \"inHeadroomMinus\": \"In Headroom- (V)\",\n \"inHeadroomPlus\": \"In Headroom+ (V)\",\n \"index\": \"Index\",\n \"isLTSpiceDisplay\": {\n \"showAll\": \"Show All\",\n \"showNo\": \"No\",\n \"showYes\": \"Yes\"\n },\n \"isLTSpiceOpAmp\": \"LTspice?\",\n \"maxSupplyVoltage\": \"vSupply Max (V)\",\n \"minStableGain\": \"Min Stable Gain\",\n \"minSupplyVoltage\": \"vSupply Min (V)\",\n \"numberChannels\": \"# Channels\",\n \"outHeadroomMinus\": \"Out Headroom- (V)\",\n \"outHeadroomPlus\": \"Out Headroom+ (V)\",\n \"packageCode\": \"Package Code\",\n \"partNumber\": \"Part Name\",\n \"price\": \"Price (US $)\",\n \"rOut\": \"rOut\",\n \"rawGBW\": \"Raw GBW\",\n \"selectable\": \"Selectable?\",\n \"slewRate\": \"Slew Rate\",\n \"specialOpAmp\": \"Special Op-Amp?\",\n \"status\": \"Status Code\",\n \"statusDisplay\": {\n \"showAll\": \"Show All\",\n \"showNotRecommended\": \"Not Recommended for New Designs\",\n \"showProduction\": \"Production\",\n \"showRecommended\": \"Recommended for New Designs\"\n },\n \"statusText\": \"Status\",\n \"supplyCurrent\": \"iSupply (A)\",\n \"tempRange\": \"Temperature Range\",\n \"tempRangeDisplay\": {\n \"showAll\": \"Show All\",\n \"showBlanks\": \"(Blank)\"\n },\n \"vNoise\": \"vNoise (nV/√Hz)\",\n \"vintage\": \"Vintage\",\n \"vos\": \"max Vos (V)\"\n }\n },\n \"samples\": {\n \"add-button\": \"Add Selected Samples to Cart\",\n \"add-to-cart-column\": \"Add Sample to Cart\",\n \"model-column\": \"Device Model/Package\",\n \"part-column\": \"Device Name\",\n \"quantities-warning\": \"Analog Devices offers a limited amount of free samples to qualified customers. Due to the large demand for our product samples we ask that you limit your sample request to 2 pieces per part with a maximum of 4 parts per request within a 14 day time period. Should your design needs require additional product quantities, you can purchase them on the web through Buy Online, or you can contact one of our authorized distributors.\",\n \"title\": \"Order Samples\",\n \"unavailable-message\": \"Not available for sample\"\n },\n \"save\": {\n \"save-desc-error\": \"Please provide a Description\",\n \"save-desc-field\": \"Description\",\n \"save-name-error\": \"Please provide a Design Name\",\n \"save-name-field\": \"Design Name\",\n \"title\": \"Save Design\"\n },\n \"send-filter\": {\n \"message\": \"You may now close this browser tab.\",\n \"message-error\": \"Sending design to {tool} was unsuccessful\",\n \"title-cancel\": \"{tool} has broken the connection\",\n \"title-error\": \"Send Design Error\",\n \"title-ok\": \"Filter Transfer to {tool} Complete\"\n },\n \"share\": {\n \"share-button\": \"Email\",\n \"share-design-information\": \"

To share a copy of your design, enter your name into the Sender name field. Then enter the email address of the recipients in the Share design with field.

The recipients will receive an email from Analog Devices with an attachment containing a ZIP archive of the shared design. All you have to do is extract the design from the ZIP file and upload it using the Load Design functionality of the application

This process creates a copy of the design for each recipient. If recipients choose to make edits on their copies, it will have no effect on your design you saved to your own computer.

\",\n \"share-dialog-ng-message\": \"Unable to share design. This is likely due to a server connection error. Please try again.\",\n \"share-dialog-ok-message\": \"Design has been shared\",\n \"share-duplicate-email\": \"Duplicate emails found\",\n \"share-email-empty-error\": \"Please enter an email address\",\n \"share-email-field\": \"Share design with\",\n \"share-email-format-error\": \"At least one of the email addresses you entered is invalid. Please correct and try again\",\n \"share-email-placeholder\": \"Email Address\",\n \"share-name-error\": \"Please provide a Design Name\",\n \"share-name-field\": \"Design Name\",\n \"share-sender-error\": \"Please provide a Sender Name\",\n \"share-sender-field\": \"Sender Name\",\n \"title\": \"Email My Design\"\n },\n \"system\": {\n \"application-busy\": \"Working...\",\n \"connecting-to\": \"Connecting to {tool}...\",\n \"download-create-bom\": \"Creating BOM File...\",\n \"download-create-data\": \"Creating Data Files...\",\n \"download-create-design\": \"Creating Design File...\",\n \"download-create-eval-board\": \"Creating Eval Board File...\",\n \"download-create-graph\": \"Creating Graph Data...\",\n \"download-create-pdf\": \"Creating PDF File...\",\n \"download-create-spice\": \"Creating SPICE Files...\",\n \"download-downloading\": \"Downloading...\",\n \"download-requesting\": \"Requesting...\",\n \"error-opamp-data\": \"OpAmp data is unavailable. Filter Wizard is unable to proceed. Save your design and try to refresh your browser. If the problem persists, please use Filter Wizard's feedback button in the upper right to report the issue.\",\n \"error-pst-data\": \"Data map is temporarily unavailable, and hence the OpAmp table cannot be displayed. Save your design and try to refresh your browser. If the problem persists, please use Filter Wizard's feedback button in the upper right to report the issue.\",\n \"loading-opamp-data\": \"Loading OpAmp data...\",\n \"sending-filter\": \"Sending filter to {tool}...\",\n \"title\": \"Application Message\"\n },\n \"video\": {\n \"active_filter\": {\n \"title\": \"Filtering 101: Active Filter Stage Order\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489700001.html\"\n },\n \"active_passive\": {\n \"title\": \"Filtering 101: Active vs. Passive\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637523715001.html\"\n },\n \"analog_digital\": {\n \"title\": \"Filtering 101: Analog vs. Digital\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489722001.html\"\n },\n \"chebyshev_butterworth_bessel\": {\n \"title\": \"Filtering 101: Chebyshev vs. Butterworth vs. Bessel\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489717001.html\"\n },\n \"gain_attenuation\": {\n \"title\": \"Sallen Key 101: Gain and Attenuation\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489691001.html\"\n },\n \"heading\": \"Click on links below to see explanatory video\",\n \"opamp_output_impedance\": {\n \"title\": \"Sallen Key 101: Effect of Op Amp Output Impedance\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637495042001.html\"\n },\n \"picking_components\": {\n \"title\": \"Sallen Key 101: Picking Components\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637437921001.html\"\n },\n \"quality_factor\": {\n \"title\": \"Filtering 101: Q - The Quality Factor of a Filter\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489712001.html\"\n },\n \"sallenkey_feedback\": {\n \"title\": \"Filtering 101: Sallen Key vs. Multiple Feedback\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489704001.html\"\n },\n \"subtitle\": \"Tutorial videos on Filter Design\",\n \"title\": \"Videos\"\n }\n },\n \"download\": {\n \"error-message\": \"

Unable to get design files. This error may occur for the following reasons:

1) Broken connection to the server.

2) Services are down.

\",\n \"error-title\": \"Download\",\n \"file-content\": {\n \"no-schematic\": \"Now that LTspice is part of Analog Devices, we are converting our SPICE netlists into LTspice models. The op amps in your design do not currently have LTspice models available. If you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\\r\\nSPICE simulation supported by parts in your design:\\r\\n\",\n \"no-schematic-no-netlist\": \"ADI is currently in the process of transitioning our op amps from SPICE netlists to LTspice models. Your design contains a mixture of parts, where some have text based netlists and some have LTspice files. Because of this, the tool is not able to generate any SPICE output. We apologize for the inconvenience and are working on getting this fixed. If you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\\r\\n\\r\\nSPICE simulation supported by parts in your design:\\r\\n\",\n \"part-no-spice-info\": \"The following op amps in your design do not have LTspice models or text netlist models. If you would like ADI to prioritize LTspice model generation for a particular part, please let your sales representative know or send feedback through this tool.\"\n },\n \"pdf-content\": {\n \"image-headers\": {\n \"circuit\": \"Circuit\",\n \"group-delay\": \"Group Delay\",\n \"input-impedance-mag\": \"Input Impedance Magnitude\",\n \"input-impedance-phase\": \"Input Impedance Phase\",\n \"magnitude-db\": \"Magnitude(dB)\",\n \"magnitude-vv\": \"Magnitude(Volts per Volt)\",\n \"noise\": \"Noise\",\n \"phase-degrees\": \"Phase(degrees)\",\n \"phase-delay\": \"Phase Delay\",\n \"phase-radians\": \"Phase(radians)\",\n \"stages\": \"Stages\",\n \"step-response\": \"Step Response\"\n },\n \"pdf-data-ie-image-missing\": \"We are very sorry, but we are unable to generate images if you are using Internet Explorer 8 or below to browse this tool. Please use Firefox, Chrome, or Internet Explorer 9 or above if you would like to see the image on this page.\",\n \"pdf-desc\": \"{desc}\\n\\nCreated by {user} on {date}\",\n \"pdf-desc-no-design-name\": \"Created by {user} on {date}\",\n \"pdf-desc-no-name-desc\": \"Created on {date}\",\n \"pdf-desc-no-user-name\": \"{desc}\\n\\nCreated on {date}\",\n \"pdf-heading\": \"Filter Wizard Design Report\",\n \"pdf-orders\": {\n \"order1\": \"1st order\",\n \"order10\": \"10th order\",\n \"order11\": \"11th order\",\n \"order12\": \"12th order\",\n \"order2\": \"2nd order\",\n \"order3\": \"3rd order\",\n \"order4\": \"4th order\",\n \"order5\": \"5th order\",\n \"order6\": \"6th order\",\n \"order7\": \"7th order\",\n \"order8\": \"8th order\",\n \"order9\": \"9th order\"\n },\n \"pdf-subheading\": \"Filter Requirements for {filterType}, {nthOrder} {filterResponse}\",\n \"pdf-tool-name\": \"Filter Wizard\"\n }\n },\n \"ember-aditools-page\": {\n \"card\": {\n \"checkbox-tooltip\": \"Toggle\",\n \"help-tooltip\": \"Click for help\",\n \"part-number-tooltip\": \"Click to select part\"\n },\n \"common\": {\n \"cancel\": \"Cancel\",\n \"close\": \"Close\",\n \"load\": \"Load\",\n \"ok\": \"OK\",\n \"open\": \"Open\",\n \"save\": \"Save\",\n \"select\": \"Select\"\n },\n \"dialogs\": {\n \"feedback\": {\n \"email\": \"EMail: \",\n \"feedback\": \"Your Feedback\",\n \"give-feedback\": \"Tell us\",\n \"invitation\": \"Please let us know your opinion of this tool, good and bad.\",\n \"name\": \"Name: \",\n \"optional\": \"(Optional)\",\n \"title\": \"Give us your feedback!\"\n },\n \"load\": {\n \"choose-button\": \"Choose File\",\n \"message\": \"Load a design from a file on your computer.\",\n \"no-file-selected\": \"No file selected.\",\n \"title\": \"Load Design\"\n },\n \"samples\": {\n \"add-button\": \"Add Selected Samples to Cart\",\n \"add-link\": \"Add to Order\",\n \"add-to-cart-column\": \"Add Sample to Cart\",\n \"model-column\": \"Device Model/Package\",\n \"part-column\": \"Device Name\",\n \"quantities-warning\": \"Analog Devices offers a limited amount of free samples to qualified customers. Due to the large demand for our product samples we ask that you limit your sample request to 2 pieces per part with a maximum of 4 parts per request within a 14 day time period. Should your design needs require additional product quantities, you can purchase them on the web through Buy Online, or you can contact one of our authorized distributors.\",\n \"title\": \"Order Samples\",\n \"unavailable-message\": \"Not available for sample\"\n },\n \"save\": {\n \"save-desc-error\": \"Please provide a Description\",\n \"save-desc-field\": \"Description\",\n \"save-name-error\": \"Please provide a Design Name\",\n \"save-name-field\": \"Design Name\",\n \"title\": \"Save Design\"\n },\n \"share\": {\n \"share-button\": \"Email\",\n \"share-design-information\": \"

To share a copy of your design, enter your name into the Sender name field. Then enter the email address of the recipients in the Share design with field.

The recipients will receive an email from Analog Devices with an attachment containing a ZIP archive of the shared design. All you have to do is extract the design from the ZIP file and upload it using the Load Design functionality of the application

This process creates a copy of the design for each recipient. If recipients choose to make edits on their copies, it will have no effect on your design you saved to your own computer.

\",\n \"share-dialog-ng-message\": \"Unable to share design. This is likely due to a server connection error. Please try again.\",\n \"share-dialog-ok-message\": \"Design has been shared\",\n \"share-duplicate-email\": \"Duplicate emails found\",\n \"share-email-empty-error\": \"Please enter an email address\",\n \"share-email-field\": \"Share design with\",\n \"share-email-format-error\": \"At least one of the email addresses you entered is invalid. Please correct and try again\",\n \"share-email-placeholder\": \"Email Address\",\n \"share-name-error\": \"Please provide a Design Name\",\n \"share-name-field\": \"Design Name\",\n \"share-sender-error\": \"Please provide a Sender Name\",\n \"share-sender-field\": \"Sender Name\",\n \"title\": \"Share My Design\"\n },\n \"system\": {\n \"application-busy\": \"Working...\",\n \"title\": \"Application Message\"\n }\n },\n \"footer\": {\n \"accessibility\": \"Accessibility\",\n \"cookie-settings\": \"Cookie Settings\",\n \"copyright-text\": \"1995 - 2025 Analog Devices, Inc. All Rights Reserved\",\n \"icp-id\": \"\",\n \"legal\": \"Legal and Risk\",\n \"privacy-policy\": \"Privacy Policy\",\n \"privacy-settings\": \"Privacy Settings\",\n \"sitemap\": \"Sitemap\"\n },\n \"header\": {\n \"applications\": \"Applications\",\n \"company\": \"Company\",\n \"design-center\": \"Design Center\",\n \"education\": \"Education\",\n \"parametric-search\": \"Parametric Search\",\n \"products\": \"Products\",\n \"spoken\": {\n \"homepage\": \"ADI Home Page\",\n \"sitelinks\": \"ADI Site Links\"\n },\n \"support\": \"Support\"\n },\n \"menubar\": {\n \"chinese\": \"简体中文\",\n \"english\": \"English\",\n \"help\": \"Help\",\n \"japanese\": \"日本語\",\n \"load\": \"Load Design\",\n \"save\": \"Save\"\n },\n \"studio\": {\n \"adcdriver\": \"ADC Driver\",\n \"dacebc\": \"DAC\",\n \"diamond\": \"In Amp\",\n \"filterwizard\": \"Analog Filter\",\n \"noise\": \"Noise\",\n \"photodiode\": \"Photodiode\",\n \"precisionstudio\": \"ADI Precision Studio\",\n \"signalchaindesigner\": \"Signal Chain\",\n \"simdds\": \"DDS\",\n \"spoken\": {\n \"studiolinks\": \"ADI Precision Studio Links\"\n },\n \"virteval\": \"Virtual Eval\"\n },\n \"toolbar\": {\n \"actions\": \"Actions\"\n }\n },\n \"figures\": {\n \"billOfMaterials\": {\n \"bom-designator\": \"Reference Designator\",\n \"bom-material\": \"Material\",\n \"bom-package\": \"Package\",\n \"bom-quantity\": \"Quantity\",\n \"bom-text\": \"Click on Get Files->All Files to download a zip file that includes a Bill of Materials in tab delimited format.\",\n \"bom-text-italic\": \"Components in italics can be omitted if you are creating your own PCB rather than using ADI's evaluation board.\",\n \"bom-tolerance\": \"Tolerance\",\n \"bom-value\": \"Value\",\n \"extra-components\": {\n \"header\": \"header\",\n \"jumper\": \"jumper\",\n \"sma-jack\": \"SMA Jack, board edge female\",\n \"sma-male\": \"male-male SMA\",\n \"socket\": \"socket\",\n \"test-pin\": \"Test pin\"\n },\n \"materials\": {\n \"tantalum\": \"tantalum\"\n },\n \"title\": \"Bill of Materials\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"circuit\": {\n \"filter-type\": {\n \"band-pass\": \"Band-Pass\",\n \"high-pass\": \"High-Pass\",\n \"low-pass\": \"Low-Pass\"\n },\n \"implementation\": {\n \"first-order\": \"Buffered RC\",\n \"gain\": \"Gain\",\n \"inductor\": \"Inductor\",\n \"multiple-feedback\": \"Multiple Feedback\",\n \"sallen-key\": \"Sallen Key\"\n },\n \"order\": {\n \"eighth_order\": \"8th order\",\n \"fifth_order\": \"5th order\",\n \"first_order\": \"1st order\",\n \"fourth_order\": \"4th order\",\n \"nineth_order\": \"9th order\",\n \"second_order\": \"2nd order\",\n \"seventh_order\": \"7th order\",\n \"sixth_order\": \"6th order\",\n \"tenth_order\": \"10th order\",\n \"third_order\": \"3rd order\"\n },\n \"stage\": \"Stage {letter}\",\n \"title\": \"Circuit\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"errors\": {\n \"adcBandwidthIsLessThanMinimum\": \"The ADC bandwidth value (currently {value}Hz) must be at least {minimum}Hz\",\n \"centerFrequencyNotInRange\": \"The center frequency must be between {minimum}Hz and {maximum}Hz\",\n \"centerFrequencyTooHigh\": \"Ratio of center frequency to passband frequency is too high. Please decrease center frequency or increase passband frequency.\",\n \"centerFrequencyTooLow\": \"Ratio of center frequency to passband frequency is too low. Please increase center frequency or decrease passband frequency.\",\n \"emptyField\": \"The {fieldId} field cannot be empty.\",\n \"frequencyTooHigh\": \"Unable to find realistic component values. Your Q values may be too high. Use the stages view in the specifications screen to monitor your Q values. Things to try: (1) Use a Butterworth or Bessel rather than a Chebyshev filter response. (2) Use a slower transition from passband to stopband.\",\n \"frequencyTooLow\": \"Frequency too low. Unable to find component values.\",\n \"gainNotInRange\": \"The gain must be between {minimum} {unit} and {maximum} {unit}\",\n \"highOrderFiltersUnsupported\": \"No filter solution found with order ≤ 10. Decrease passband frequency or stopband attenuation, increase stopband frequency or passband attenuation, or adjust filter response.\",\n \"invalidField\": \"The value \\\"{value}\\\" in field {fieldId} cannot be parsed.\",\n \"noOpAmpFoundForRequirements\": \"No Op Amp found that meets requirements.\",\n \"noOpAmpFoundForRequirementsWithVoltage\": \"No Op Amp found that meets requirements. Setting +Vs to 5V and -Vs to 0V or -5V may yield better results.\",\n \"passbandAttenuationHighBandGreaterThan\": \"As the passband frequency approaches the maximum limit of {frequency}Hz, the passband attenuation becomes more restricted. At the stated passband frequency, the attenuation must be greater than {minimum} dB.\",\n \"passbandAttenuationLowGreaterThan\": \"As the passband frequency approaches the minimum limit of {frequency}Hz, the passband attenuation becomes more restricted. At the stated passband frequency, the attenuation must be greater than {minimum} dB.\",\n \"passbandAttenuationNotInRange\": \"The passband attenuation must be between {minimum} dB and {maximum} dB\",\n \"passbandFrequencyNotInRange\": \"The passband frequency must be between {minimum}Hz and {maximum}Hz\",\n \"passbandIsGreaterThanStopband\": \"The passband frequency (currently {passbandFrequency}Hz) must be less than the stopband frequency {stopbandFrequency}Hz\",\n \"referenceVoltageSpanGreaterThanMax\": \" Supply Voltage Span is too large for the AD8031 in the reference stage. Options: (1) Decrease supply voltage, (2) Switch to dual supply\",\n \"referenceVoltageSpanLessThanMinimum\": \"Supply Voltage Span is too small for the AD8031 in the reference stage. Options: (1) Increase supply voltage, (2) Switch to dual supply\",\n \"selectedOpAmpIsIdeal\": \"Stage {stage}: Please select an op-amp for this stage.\",\n \"selectedOpAmpIsIncompatible\": \"Stage {stage}: {opAmp} unable to meet the filter requirements. Please choose a different op-amp, or adjust your component sizes.\",\n \"selectedOpAmpIsIncompatibleWithVoltage\": \"Stage {stage}: {opAmp} unable to meet the filter requirements. Please choose a different op-amp, adjust your component sizes, or change your voltage supplies.\",\n \"stageQTooLarge\": \"The filter you specified has a stage with a Q of {qValue}. The filter wizard only supports stages with Qs less than 50. Options: (1) Decrease center frequency, (2) Increase stopband and passband frequency.\",\n \"stopbandAttenuationNotInRange\": \"The stopband attenuation must be between {minimum} dB and {maximum} dB\",\n \"stopbandFrequencyNotInRange\": \"The stopband frequency must be between {minimum}Hz and {maximum}Hz\",\n \"stopbandIsGreaterThanPassband\": \"The stopband frequency (currently {stopbandFrequency}Hz) must be less than the passband frequency {passbandFrequency}Hz\",\n \"stopbandIsGreaterThanPassbandAttenuation\": \"The stopband attenuation (currently {stopbandAttenuation} dB) must be deeper than the passband attenuation {passbandAttenuation} dB\",\n \"voltageSpanGreaterThanMax\": \" Voltage Span is too large. Difference between supplies should be no more than 36V\",\n \"voltageSpanLessThanMinimum\": \"Supply Voltage Span is too small. Difference between supplies should be at least 1.8V\",\n \"vsMinusShouldBeNegative\": \"-Vs voltage is too large. It should be 0V or less.\",\n \"vsMinusZeroVsPlusGreaterThanMax\": \"+Vs voltage must be less than 12.6V when -Vs = 0. The filter wizard always uses the AD8031 in its single supply reference circuit. This part has a max voltage supply of 12.6V.\",\n \"vsPlusShouldBePositive\": \"+Vs voltage is too small. It should be 0V or more.\"\n },\n \"groupDelay\": {\n \"title\": \"Group Delay\",\n \"x-axis\": \"Frequency (Hz)\",\n \"x-hover\": \"Frequency:\",\n \"y-axis\": \"Group Delay (s)\",\n \"y-hover\": \"Group Delay:\"\n },\n \"inputImpedanceMagnitude\": {\n \"title\": \"Input Impedance (Ω)\",\n \"x-axis\": \"Frequency (Hz)\",\n \"x-hover\": \"Frequency:\",\n \"y-axis\": \"Input Impedance (Ω)\",\n \"y-hover\": \"Impedance:\"\n },\n \"inputImpedancePhase\": {\n \"title\": \"Input Impedance (°)\",\n \"x-axis\": \"Frequency (Hz)\",\n \"x-hover\": \"Frequency:\",\n \"y-axis\": \"Input Impedance (°)\",\n \"y-hover\": \"Impedance:\"\n },\n \"magnitudeDb\": {\n \"title\": \"Magnitude (dB)\",\n \"x-axis\": \"Frequency (Hz)\",\n \"x-hover\": \"Frequency:\",\n \"y-axis\": \"Magnitude (dB)\",\n \"y-hover\": \"Magnitude:\"\n },\n \"magnitudeVV\": {\n \"title\": \"Magnitude (V/V)\",\n \"x-axis\": \"Frequency (Hz)\",\n \"x-hover\": \"Frequency:\",\n \"y-axis\": \"Magnitude (V/V)\",\n \"y-hover\": \"Magnitude:\"\n },\n \"noise\": {\n \"adc-bandwidth\": \"ADC Bandwidth\",\n \"adc-input-range\": \"ADC input range\",\n \"adc-range\": \"ADC range\",\n \"adc-table-title\": \"ADC Table\",\n \"enob-comp-sel\": \"Equivalent # of Bits\",\n \"enob-comp-tol\": \"ENOB (bits)\",\n \"enob-nominal\": \"Nominal\",\n \"enob-worst\": \"Worst\",\n \"graph-title\": \"Spectral Noise Density\",\n \"noise-referred-filter-output-1\": \"All noise referred to filter output.\",\n \"noise-referred-filter-output-2\": \"1/f noise not modeled.\",\n \"nominal-label\": \"nominal\",\n \"peak-to-peak-title\": \"Peak to Peak\",\n \"rms-peak-to-peak\": \"RMS & Peak to Peak\",\n \"rms-title\": \"RMS\",\n \"title\": \"Noise\",\n \"worst-case-label\": \"worst case\",\n \"x-axis\": \"Frequency (Hz)\",\n \"x-hover\": \"Frequency:\",\n \"y-axis\": \"Spectral Noise Density (V/√Hz)\",\n \"y-hover\": \"Noise:\"\n },\n \"phaseDegrees\": {\n \"title\": \"Phase (°)\",\n \"x-axis\": \"Frequency (Hz)\",\n \"x-hover\": \"Frequency:\",\n \"y-axis\": \"Phase (°)\",\n \"y-hover\": \"Phase:\"\n },\n \"phaseDelay\": {\n \"title\": \"Phase Delay\",\n \"x-axis\": \"Frequency (Hz)\",\n \"x-hover\": \"Frequency:\",\n \"y-axis\": \"Phase Delay (s)\",\n \"y-hover\": \"Phase Delay:\"\n },\n \"phaseRadians\": {\n \"title\": \"Phase (rad)\",\n \"x-axis\": \"Frequency (Hz)\",\n \"x-hover\": \"Frequency:\",\n \"y-axis\": \"Phase (rad)\",\n \"y-hover\": \"Phase:\"\n },\n \"power\": {\n \"header-text\": \"Note: This page shows the quiescient power consumption of the filter. The input signal can have a significant impact on power consumption, which is not modeled here.\",\n \"order-with\": {\n \"order1\": \"1st order with\",\n \"order2\": \"2nd order with\"\n },\n \"reference-stage-part-with\": \"with AD8031\",\n \"reference-stage-text\": \"Reference Stage\",\n \"reference-whats-this\": \"What's This?\",\n \"title\": \"Power\",\n \"total-power\": \"Total quiescient power\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"stages\": {\n \"filter-types\": {\n \"type-name-band-pass\": \"Band-Pass\",\n \"type-name-high-pass\": \"High-Pass\",\n \"type-name-low-pass\": \"Low-Pass\"\n },\n \"header-text\": \"Your filter requires {n} op amp stage(s) with the following characteristics\",\n \"implementations\": {\n \"buffered-rc\": \"Buffered RC\",\n \"gain\": \"Gain\",\n \"inductor\": \"Inductor\",\n \"multiple-feedback\": \"Multiple
Feedback\",\n \"sallen-key\": \"Sallen Key\"\n },\n \"orders\": {\n \"first-order\": \"1st order\",\n \"second-order\": \"2nd order\"\n },\n \"simulated\": \"Simulated\",\n \"simulated-to\": \" to {value}\",\n \"target\": \"Target\",\n \"title\": \"Stages\",\n \"tooltip\": {\n \"fp\": \"Pole frequency of the stage. Also known as cutoff frequency, natural frequency, or fundamental frequency.\",\n \"gain\": \"Gain (V/V): Gain of the stage\",\n \"q\": \"Q indicates how much peaking the stage has. Higher numbers indicate a higher peak near the pole frequency.\"\n },\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"stepResponse\": {\n \"title\": \"Step Response\",\n \"x-axis\": \"Time (s)\",\n \"x-hover\": \"Time:\",\n \"y-axis\": \"Amplitude (V/V)\",\n \"y-hover\": \"Amplitude:\"\n },\n \"voltageRange\": {\n \"amp-input-range\": \"Input Range\",\n \"amp-output-range\": \"Output Range\",\n \"amplifier\": \"Amplifier\",\n \"amplifier_specs\": \"Amplifier Specs\",\n \"input-range\": \"Input Signal\",\n \"max-signals\": \"Max Signals\",\n \"max-signals-nominal\": \"Nominal\",\n \"max-signals-worst-case\": \"Worst Case\",\n \"maximum-input\": \"Maximum Input\",\n \"output-range\": \"Output Signal\",\n \"signal-possible\": \"Possible\",\n \"slew-rate\": \"Slew Rate\",\n \"title\": \"Voltage Range\",\n \"warning-input-range-voltage-range\": \"The Input Range of this stage limits the signal range.\",\n \"warning-output-range-voltage-range\": \"The Output Range of this stage limits the signal range.\",\n \"warning-slew-rate_voltage-range\": \"The Slew Rate of this stage limits the signal range.\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n }\n },\n \"footer\": {\n \"copyright\": \"© 1995 - 2018 Analog Devices, Inc. All Rights Reserved \",\n \"privacy-security\": \"Privacy & Security\",\n \"privacy-security-url\": \"/en/about-adi/landing-pages/001/privacy_security_statement.html\",\n \"privacy-settings\": \"Privacy Settings\",\n \"privacy-settings-url\": \"/en/landing-pages/001/privacy-settings.html\",\n \"sitemap\": \"Sitemap\",\n \"sitemap-url\": \"/en/sitemap.html\",\n \"terms-of-use\": \"Terms of use\",\n \"terms-of-use-url\": \"/en/about-adi/landing-pages/001/terms_of_use.html\"\n },\n \"fragments\": {\n \"at\": \"@\",\n \"eq\": \"=\",\n \"f\": \"f\",\n \"in\": \"IN\",\n \"left\": \"◄----\",\n \"n-a\": \"N/A\",\n \"out\": \"OUT\",\n \"p\": \"p\",\n \"plus\": \"+\",\n \"q\": \"Q\",\n \"r\": \"R\",\n \"ref\": \"REF\",\n \"right\": \"---►\",\n \"times\": \"×\",\n \"to\": \"to\"\n },\n \"header\": {\n \"applications\": \"Applications\",\n \"community\": \"Community\",\n \"design-center\": \"Design Center\",\n \"education\": \"Education\",\n \"parametric-search\": \"Parametric Search\",\n \"products\": \"Products\",\n \"support\": \"Support\",\n \"title\": \"Analog Filter Wizard\"\n },\n \"help\": {\n \"common\": {\n \"noise\": {\n \"adc-bandwidth\": {\n \"message\": \"

Enter the bandwidth of your ADC here. We combine this value with the noise from the spectral density plot to calculate the rms and peak to peak noise.

We integrate the noise in the spectral density plot over the ADC bandwidth to create both the rms and peak and peak noise. If you look closely at the spectral density plot, the spectral density at the highest frequency is a non-zero number, and in reality continues at frequencies higher than this graph shows. The ADC acts as a filter to remove this residual high frequency noise.

We model the ADC as a first order filter. We create a first order magnitude plot of the ADC roll off, multiply it by the spectral density plot, and then integrate the result. If you have an ADC with a sharper roll-off (for example a sinc^3 sigma delta), this tool may slightly overestimate the filter noise.

Some ADC's require an RC filter between the amplifier driver and the ADC. If this RC filter has a lower bandwidth than the ADC itself (or you don't know the ADC bandwidth), use the frequency cutoff of this RC filter instead. Frequency cutoff of an RC filter is 1/(2πRC).

\",\n \"title\": \"ADC Bandwidth\",\n \"tooltip\": \"Click for help\"\n }\n },\n \"power\": {\n \"message\": \"

The filter tool adds a reference stage whenever –Vs = 0. This reference stage creates a mid-supply voltage rail that functions as the reference voltage for the filter circuits.

The reference stage includes an AD8031 op amp driving a 10 μF capacitance. Driving a capacitance directly with an op amp is typically a very bad idea. However the architecture of the AD8031 ensures this configuration is stable, as long as the capacitance being driven is large enough. The advantage of this circuit is that it provides a low frequency source impedance across the entire frequency spectrum. Because the filter circuits can source and sink considerable amounts of current into the reference, a low source impedance reference is important for the best filter performance. To keep this reference circuit stable, please ensure the following:

  • Use the AD8031. The stability of the circuit depends of the properties of this specific op amp.
  • The capacitance the AD8031 drives should be at least 10 μF. Any number of bypass capacitors can be placed in parallel with this capacitance.
  • No resistance should be placed between the AD8031 output and the capacitor(s).

In the tool we show the reference voltage being derived with a voltage divider directly off the positive supply rail. However this voltage could also be generated from a voltage reference IC such as an ADR4520 or ADR3420. Footprints for these reference IC's are included on the evaluation board for your convenience.

Because the AD8031 is a high speed amplifier, it consumes a relatively large amount of power. In a low power design, this reference circuit can dominate the power budget. Here a few other techiques that can be used in place of the reference circuit we show in the filter wizard:

  • Level shift the signal before the filter and use low pass filter stages without gain
  • Use voltage dividers instead of resistors connected to a reference voltage. For example, if the designs calls for a 10 kΩ resistor connected to a mid-scale voltage reference, use a voltage divider between the two supplies consisting of 2 20 kΩ resistors instead. Of course voltage dividers consume power themselves, so this technique only saves power when the resistors connected to the reference voltage in the original filter design have high values.
  • Use a low power voltage follower to generate the reference voltage. Do not connect capacitors between the reference voltage and ground. This technique works if the output impedance of the voltage follower is small compared to the rest of the resistors in the filter in the frequency range of interest. Unfortunately, as a general rule, the lower the power of an op amp, the higher its output resistance at a particular frequency.

The tool shows that the reference voltage is derived directly from the positive supply voltage using a voltage divider, but this voltage can also be generated from a voltage reference IC like the ADR4520 or ADR3420. The reference IC footprint is included on the evaluation board for convenience.

\",\n \"title\": \"Reference Stage\",\n \"tooltip\": \"Click for help\"\n },\n \"voltage-range\": {\n \"message\": \"The input voltage range of an active filter, and corresponding output voltage range, are limited by the non-ideal characteristics of the op amps. The \\\"Voltage Range\\\" view shows the calculated maximum input range, and highlights which op amp specification caused that limitation.
  • The \\\"Maximum Input Signal Possible\\\" is the largest input voltage allowed - using a larger input signal will result in clipping or distortion.
  • The \\\"Amplifier Specs\\\" section shows the specifications for the selected op amp in each stage.
  • The \\\"Max Signals\\\" section shows the results of calculations to determine the maximum allowable input voltage. The op amp stage and specification that limits the input signal voltage is indicated with a warning icon. The other values in the \\\"Max Signals\\\" section are calculated to ensure that the limiting parameter is never exceeded - in other words, to ensure no clipping or distortion through the entire filter path.
  • In the \\\"Component Tolerances\\\" tab, there are values for nominal and worst case. Nominal assumes the nominal component values shown in the schematic. Worst case calculates with passive values at the edge of their tolerance ranges, which may result in a larger gain transfer function, requiring further reduction in input signal. See the \\\"Magnitude\\\" plot views in the \\\"Component Tolerances\\\" tab for an illustration of the uncertainly in the gain transfer function as a result of component tolerances.

Slew Rate Limited: If the slew rate of one of the op amps is the limiting specification for filter input voltage range, the input signal voltage is reduced to a level that doesn't slew faster than the op amp is capable of. See \\\"Slew Rate and Full-Power Bandwidth\\\" section of mini-tutorial MT-045: Op Amp Bandwidth and Bandwidth Flatness for more information.

Output Voltage Range Limited: If the output voltage range of one of the op amps is the limiting specification for the filter input voltage range, the input signal voltage is reduced to a level that doesn't overdrive the op amp outputs.

Input Voltage Range Limited: If the input voltage range of one of the op amps is the limiting specification for the filter input voltage range, the input signal voltage is reduced to a level that doesn't overdrive the op amp inputs.

\",\n \"title\": \"Voltage Range\",\n \"tooltip\": \"Click for help\"\n }\n },\n \"comp-select\": {\n \"choosing-components\": {\n \"message\": \"

Now that you have chosen the theoretical performance of the filter in the specifications screen, it is time to pick actual components. As you change components, you can see the changes in the circuit view. If you change to other views, you can see if the component choices affect the filter performance.

The software supports two different ways of picking components

Method 1: Have the software pick components for you

In this mode the software chooses the op amps, resistors and capacitors for you. We support three optimizations in this mode:

  • Voltage Range: Tool selects an op amp with a wide input and output range. Resistor and capacitor values tend to be between the \\\"Noise\\\" and \\\"Power\\\" optimizations.
  • Noise: Tool selects an op amp with a low spectral noise density - taking into account both voltage and current noise. The tool uses lower value resistors and higher value capacitors to keep noise contribution from resistors low.
  • Power: Tool selects an op amp with low current consumption. In this mode the tools relaxes the accuracy requirement on the filter to allow use of op amps with lower gain bandwidth products, which typically have lower current consumption. Tool uses higher value resistors and lower value capacitor values to keep current consumption minimized.

Method 2: Choose the components yourself

In this mode, the software starts with the last values used in the “Pick for me” mode. You can then adjust the component values in three ways:

  • Adjust the resistor-capacitor tradeoff: For example you can move the slider to get a larger resistor and smaller capacitor. As you adjust this slider, the RC time constant stays the same, so the frequency cutoff of the filter will still match the cutoff chosen in the specifications screen.
  • Adjust the gain resistors: . If a stage has them, you can adjust the absolute values of the gain resistors. The ratio between the resistors stays fixed to maintain the gain chosen in the specifications screen.
  • Choose a different op amp: The program calculates minimum requirements based on your entries in the specifications screen. You can pick from op amps in our portfolio that meet these minimum requirements.

You can also adjust the stage order by grabbing one of the stage bars and moving it above/below the other stages. Stage order typically does not affect the magnitude and phase performance, but can have a significant impact on noise and voltage range.

\",\n \"title\": \"Choosing Components\",\n \"tooltip\": \"Click for help\"\n },\n \"compensate-gbw\": {\n \"message\": \"

If this control is left unchecked, the software program computes the resistor and capacitor values assuming an ideal op amp that is infinitely fast, similar to what you might do using a filter textbook. Real op amps are not infinitely fast, and this limitation can affect the filter response. If this control is checked, then the program adjusts the resistor and capacitor values to compensate for the effect of the op amp's limited gain bandwidth, so that the final result is closer to what was intended.

For example: lets say a filter stage is supposed to have a frequency cutoff of 100 kHz and a Q of 1. However because of the op amp's limited gain bandwidth product, the actual result with textbook component values might be 95 KHz and a Q of 1.1. If the checkbox is checked, the tool will compensate by selecting resistor and capacitor values that are off in the opposite direction, say for a cutoff frequency of 105 kHz and Q of 0.9 if the op amp were ideal. The errors will cancel out to get a result close to the ideal response.

In general it is better to choose an op amp with enough gain bandwidth, rather than relying on this compensation method. If you are using the \\\"Pick for me\\\" mode and the \\\"Voltage Range\\\" or \\\"Low Noise\\\" optimization, the tool attempts to choose an op amp with high enough gain bandwidth that it approximates ideal, but not so high that it wastes a lot of power. Therefore the Compensate for GBW checkbox shouldn't make much difference. However with the \\\"Power\\\" optimization, checking this box can improve performance, since this optimization relaxes the op amp GBW requirement to save power. If you are using “I want to choose” mode, and choose an op amp at or below the recommend GBW, checking this box may also help.

Limitations of this technique:

  • This technique only compensates for the op amp's gain bandwidth product, not its output resistance. If you are designing a low pass or bandpass filter and see the response curve go upward at high frequencies, this is a likely a result of the output resistance nonideality. Output resistance should be addressed by choosing an op amp with a higher gain bandwidth, choosing an op amp with a standard (instead of rail to rail) output stage, or by increasing the circuit's resistor values.
  • This technique elimates most, but not all the error from the op amp's gain bandwidth product.
  • This technique cannot fix the rolloff of a high pass or bandpass filter at high frequencies.
  • The program assumes a fairly simple model for the op amp open loop gain curve. If the op amp's actual performance varies significantly from the model, this gain bandwidth compensation may not be correct. Results should be checked in SPICE and in the lab.
  • Especially when working with high Q circuits, the compensation may depend on fairly small variations in the R & C components. Use the \\\"Component Tolerances\\\" screen to see how actual component tolerances affect the results.
\",\n \"title\": \"Compensate For GBW\",\n \"tooltip\": \"Click for help\"\n },\n \"component-sizing\": {\n \"message\": \"

The filter wizard allows the ratio of resistors to capacitors to be varied. Larger resistors will create more noise and bias current error, but reduce op amp output resistance errors and lower power consumption. If possible, keep capacitor values under 0.1μF - this will allow the use of C0G rather than X7R capacitors. C0G material is preferred because its capacitance is much more stable with the temperature and applied voltage than the X7R type.

Some filter architectures have both a positive and negative feedback path. If this is the case, one of the feedback paths will simply be a ratio of resistors. The second control in this section allows the absolute values in this feedback path to be adjusted (while the ratio remains the same.)

\",\n \"title\": \"Component Sizing\",\n \"tooltip\": \"Click for help\"\n },\n \"implementation\": {\n \"message\": \"

The filter wizard current supports the following circuit implementations: Sallen Key, Multiple Feedback, and First Order. If an implementation is appropriate for the order and type of the filter stage, it will be listed here.

For more information on the Sallen Key implementation see the MT-222 tutorial. For a comparison of the Sallen Key vs. Multiple Feedback implementation, see the Filtering 101: Sallen Key vs. Multiple Feedback video.

\",\n \"title\": \"Implementation\",\n \"tooltip\": \"Click for help\"\n },\n \"noise\": {\n \"adc-table\": {\n \"message\": \"

This table shows you the effective number of bits of an ADC. The equivalent number of bits (ENOB) is calculated as follows:

Max input signal (rms) = ADC input range (peak to peak) / 2√2

SNR = 20 * log (Max input signal (rms) / noise (rms))

ENOB = (SNR – 1.76) / 6.02

\",\n \"title\": \"ADC Table\",\n \"tooltip\": \"Click for help\"\n }\n },\n \"op-amp-selection\": {\n \"message\": \"

If you prefer a different op amp than the one the tool selected, here is where you can change it.

The tool divides ADI's op amp library into three categories:

  • Not Allowed: The tool will not allow you to pick some op amps for a variety of reasons: op amp is simply not fast enough to implement the filter, op amp won't fit on the the evaluation board, op amp won't work at the supplies you specified, op amp database missing specifications the tool needs, etc.
  • Marginal: Some op amps are fast enough to implement the filter you chose, but with some error. While not optimal, you still may want to use one of these parts. For example, because you have it in stock or because you really need to conserve power in your design. The tool warns you, but allows you to use these parts in your design. It is often a good idea to use the \\\"Compensate for GBW\\\" option with these op amps to reduce the error they create.
  • Recommended: These parts are fast enough to work well in your design.
\",\n \"title\": \"Op Amp\",\n \"tooltip\": \"Click for help\"\n },\n \"op-amp-selection-help\": {\n \"message\": \"

What these op amp requirements mean:

  • Total Supply voltage: comes from the “Voltage Supplies” section in the Components.
  • Recommended GBW: An op amp with this gain bandwidth or higher should give good performance for the filter stage. An op amp must meet this minimum GBW to be a “recommended” part in the op amp list.
  • Required GBW: Op amps with gain bandwidth lower than this threshold are not selectable. This because the filter performance would be so bad that we are not able to accurately simulate it. If an op amp has a GBW between recommend and required, the fp and Q will be affected, but performance may still be good enough for some applications.

How the GBW limits are calculated

The standard rule of thumb for filter design is min GBW > gain * Q * fp * 100. This rule of thumb has the advantage of being straightforward and easy to remember. However it generally gives a more conservative answer than necessary. In other words, you can often use a slower op amp than what this equation recommends and get a perfectly good filter result.

Unfortunately for a more precise answer, the math becomes quite complicated. Because computers can do math well, we use this complicated math in the Filter Wizard to compute the numbers we show. Unfortunately these equations are messy and don’t enhance understanding.

If you want to understand how the op amp affects the filter response, Mac Van Valkenburg's excellent \\\"Design of Analog Filters\\\" has some good discussions about the effect of the op amp's finite amplifier gain on overall filter response. His equations, as much as they can be, are written to teach you what is going on. This text heavily influenced the equations we use in the Filter Wizard.

Where to draw the line is also subjective. It really depends on how much error you are willing to tolerate. This is why we give both a recommended GBW (what we think is a good lower limit) and required GBW (the lowest number where we feel comfortable our simulations will be reasonably accurate.) Most importantly, we simulate the response in real time, so you can immediately see the effect of the op amp on the filter performance. Our recommended GBW is a rough first pass - ultimately it is up to you whether the filter performance meets your specific needs. We tried to make our simulations fast and painless, so you can quickly try out various options and evaluate the results on the metrics that are important to you.

\",\n \"title\": \"Op Amp Requirements\",\n \"tooltip\": \"Click for help\"\n },\n \"voltage-supplies\": {\n \"message\": \"

Choose voltage supplies for the op amp. The program will use these voltages to select an appropriate op amp when “pick for me” is chosen or narrow down the op amp choices if “I want to choose” is chosen.

If you choose a single supply voltage (–Vs = 0), the tool inserts a mid-supply reference voltage generator into the circuit for you.

\",\n \"title\": \"Voltage Supplies\",\n \"tooltip\": \"Click for help\"\n }\n },\n \"comp-tolerance\": {\n \"GBW\": {\n \"message\": \"

The part to part variation in gain bandwidth is typically +/-20% for most op amps. This control lets you see the effect of this gain bandwidth variation. Unless the op amp is barely fast enough for the design, the variation in gain bandwidth product normally has little effect on the filter accuracy.

\",\n \"title\": \"GBW\",\n \"tooltip\": \"Click for help\"\n },\n \"capacitor\": {\n \"message\": \"

Capacitor – Tolerance

This control tells the program what range of capacitor values to use to compute the tolerance envelope shown on the graph.

For example, let’s say the filter calculations on the previous page compute an ideal capacitor value of 1.12 μF. Let’s also assume you selected E6 as the preferred series, which means this capacitor will be rounded down to 1 uF. If you select 20% for a tolerance, the program will compute the envelope using 1 μF +/-20%.

Because 1% capacitor values typically have limited availability, this program limits 1% capacitors to 4.7nF and below. Higher values will be bumped up to 5% tolerance.

Capacitor Tolerance Allowed Range
Ideal10pF to 10µF
1%10pF to 4.7nF
5%10pF to 10µF
10%10pF to 10µF
20%10pF to 10µF

Note that capacitors are typically the most inaccurate part of a filter design, so purchasing higher tolerance capacitors is typically a good investment. We recommend 5% or better capacitors, built using C0G (also known as NP0) ceramic material.

\",\n \"title\": \"Capacitor\",\n \"tooltip\": \"Click for help\"\n },\n \"inductor\": {\n \"message\": \"

Inductor – Tolerance

This control tells the program what range of inductor values to use to compute the tolerance envelope shown on the graph.

For example, let’s say the filter calculations on the previous page compute an ideal inductor value of 1.12nH. Let’s also assume you selected E6 as the preferred series, which means this inductor will be rounded down to 1uH. If you select 20% for a tolerance, the program will compute the envelope using 1 μH +/-20%.

Inductor Tolerance Allowed Range
Ideal10nH to 33µH
5%10nH to 33µH
10%10nH to 33µH
20%10nH to 33µH

When you order the parts for your circuit, we recommend choosing inductors with a resonant frequency at least 10x that of your passband frequency (for low pass filters) or center frequency (for bandpass filters). This constraint may affect the inductor tolerance you are able to order.

\",\n \"title\": \"Inductor\",\n \"tooltip\": \"Click for help\"\n },\n \"noise\": {\n \"adc-table\": {\n \"message\": \"

This table shows you the effective number of bits of an ADC. The equivalent number of bits (ENOB) is calculated as follows:

Max input signal (rms) = ADC input range (peak to peak) / 2√2

SNR = 20 * log (Max input signal (rms) / noise (rms))

ENOB = (SNR – 1.76) / 6.02

We calculate the effective number of bits for the nominal and worst case combinations of components. The tighter the tolerances, the closer these numbers will be to each other

\",\n \"title\": \"ADC Table\",\n \"tooltip\": \"Click for help\"\n }\n },\n \"pref-series-capacitor\": {\n \"message\": \"

Capacitor – Preferred Series

The filter wizard program lets you set the preferred series for passive components: the value a component will be rounded to.

For examples, let’s say the filter calculations on the previous page compute an ideal capacitor value of 1.12 uF. The following table shows where this value will be rounded, based on the preferred series.

Preferred Series Rounded value
Ideal1.12 uF
E241.1 uF
E121.2 uF
E61 uF
\",\n \"title\": \"Capacitor\",\n \"tooltip\": \"Click for help\"\n },\n \"pref-series-inductor\": {\n \"message\": \"

Inductor – Preferred Series

The filter wizard program lets you set the preferred series for passive components: the value a component will be rounded to.

For examples, let’s say the filter calculations on the previous page compute an ideal inductor value of 1.12 uH. The following table shows where this value will be rounded, based on the preferred series.

Preferred Series Rounded value
Ideal1.12 uH
E121.2 uH
E61 uH

When you order the parts for your circuit, we recommend choosing inductors with a resonant frequency at least 10x that of your passband frequency (for low pass filters) or center frequency (for bandpass filters). This constraint may affect the inductor tolerance you are able to order.

\",\n \"title\": \"Inductor\",\n \"tooltip\": \"Click for help\"\n },\n \"pref-series-resistor\": {\n \"message\": \"

Resistor – Preferred Series

The filter wizard program lets you set the preferred series for passive components: the value a component will be rounded to.

For examples, let’s say the filter calculations on the previous page compute an ideal resistor value of 1.12 kΩ. The following table shows where this value will be rounded, based on the preferred series.

Preferred Series Rounded value
Ideal1.12 kΩ
E961.13 kΩ
E481.1 kΩ
E241.1 kΩ
E121.2 kΩ
E61 kΩ
\",\n \"title\": \"Resistor\",\n \"tooltip\": \"Click for help\"\n },\n \"resistor\": {\n \"message\": \"

Resistor – Tolerance

This control tells the program what range of resistor values to use to compute the tolerance envelope shown on the graph.

For example, let’s say the filter calculations on the previous page compute an ideal resistor value of 1.12 kΩ. Let’s also assume you selected E96 as the preferred series, which means this resistor will be rounded up to 1.13 kΩ. If you select 1% for a tolerance, the program will compute the envelope using 1.13 kΩ +/-1%.

Because 0.1% and 0.5% resistor values typically have limited availability, this program limits these resistors to 10Ω to 1 MΩ. Values outside this range will be bumped up to a 1% tolerance.

Resistor Tolerance Allowed Range
Ideal1Ω to 10 MΩ
0.1%10Ω to 1 MΩ
0.5%10Ω to 1 MΩ
1%1Ω to 10 MΩ
5%1Ω to 10 MΩ

We recommend 25 ppm/°C thin film resistors when designing filters. These typically provide a good compromise between accuracy and cost.

\",\n \"title\": \"Resistor\",\n \"tooltip\": \"Click for help\"\n },\n \"step-response\": {\n \"why-no-envelope\": {\n \"message\": \"

This tool does not calculate the tolerance envelope for the step response view. Calculating an accurate step response envelope requires a large number of iterations, each of which take a long time to calculate. To preserve the interactive nature of the tool, we decided not to include this feature. We recommend using Monte Carlo simulations in SPICE if step response variation is critical.

While we don't calculate the envelope, we do calculate the nominal step response based on the nominal component values in the filter. As you change the tolerance values, the nominal values change, so you will see some movement in the step response plot.

\",\n \"title\": \"Why No Envelope?\",\n \"tooltip\": \"Click for help\"\n }\n }\n },\n \"main\": {\n \"message\": \"

Tool Overview

Use the Analog Filter Wizard to design low-pass, high-pass, or band-pass filters with actual op amps in minutes. As you progress through the design process, you can observe the characteristics of your filter design from ideal specifications to real world circuit behavior. Quickly evaluate the tradeoffs in op amp specifications - including gain-bandwidth, noise, and supply current – to determine the best filter design for your requirements. Features include:

  • Filter Response slider – select between Fewest Stages (Chebyshev) to Fastest Settling (Bessel), with numerous responses in between (Chebyshev, Butterworth, and Butterworth-Bessel)
  • Allow Filter Wizard to select op amps (optimizing for low power, low noise, or voltage range), or use “I want to choose” feature to manually select op-amps
  • Sallen Key and Multiple Feedback topology available in “I want to choose” section
  • Calculations and plots include the effects of non-ideal op-amp characteristics and passive component tolerances.
  • Prototype finished design using the Filter Wizard Evaluation System
  • Save and share design, and download design file package, which includes design report, SPICE simulation files, bill of materials, and evaluation PCB design files.

Help on Specific Items

For help on specific items, please on click on the blue question mark next to the item of interest.

\",\n \"title\": \"Filter Wizard Help\"\n },\n \"next-steps\": {\n \"circuit\": {\n \"bypass-capacitor-title\": \"BYPASS CAPACITORS\",\n \"eval-board-help\": {\n \"message\": \"

The filter wizard evaluation board system consists of a motherboard and several daughterboards. Each motherboard has slots for 4 daughterboards. Use one daughterboard per stage. If the design calls for more than 4 stages, multiple motherboards can be ganged together. The motherboard also contains bypass circuitry and the reference stage (if needed).

The motherboard/daughterboard system gives you the following advantages:

  • Change stage order quickly. For example to trade-off noise performance vs. input range.
  • Use multiple different stage types. The filter wizard evaluation board system contains several daughterboard models to support different types of stages. These daughterboards can be mixed and matched in the same design. For example: One stage can use a single op amp while another stage uses a dual package op amp. Or a low-pass and high-pass stage can be combined to create a bandpass filter.
  • Measure individual stage performance easily. The design makes it very clear where one stage starts and another ends. Single stages can be debugged in isolation.

You can purchase the bare evaluation boards and sample op amps from Analog Devices. The rest of the components should be purchased from your distributor.

The filter wizard refers to components on each board by the last letter in the reference designator. For example, stage A components will be referred to as R1A, U1A, etc. Stage B components will be referred to as R1B, U1B, etc. The motherboard components will be referred to as R1M, U1M, etc. If your design has multiple daughterboards of the same type, we recommend marking your daughterboards to keep track of which board is stage A, which board is stage B, etc.

Picture of Motherboard and a Daughterboard
\",\n \"title\": \"Explanation of Evaluation Board System\",\n \"tooltip\": \"Click for help\"\n },\n \"opamp-spares-title\": \"SPARES\",\n \"whats-this\": {\n \"message\": \"

The filter tool adds a reference stage whenever –Vs = 0. This reference stage creates a mid-supply voltage rail that functions as the reference voltage for the filter circuits.

The reference stage includes an AD8031 op amp driving a 10 μF capacitance. Driving a capacitance directly with an op amp is typically a very bad idea. However the architecture of the AD8031 ensures this configuration is stable, as long as the capacitance being driven is large enough. The advantage of this circuit is that it provides a low frequency source impedance across the entire frequency spectrum. Because the filter circuits can source and sink considerable amounts of current into the reference, a low source impedance reference is important for the best filter performance. To keep this reference circuit stable, please ensure the following:

  • Use the AD8031. The stability of the circuit depends of the properties of this specific op amp.
  • The capacitance the AD8031 drives should be at least 10 μF. Any number of bypass capacitors can be placed in parallel with this capacitance.
  • No resistance should be placed between the AD8031 output and the capacitor(s).

In the tool we show the reference voltage being derived with a voltage divider directly off the positive supply rail. However this voltage could also be generated from a voltage reference IC such as an ADR4520 or ADR3420. Footprints for these reference IC's are included on the evaluation board for your convenience.


Because the AD8031 is a high speed amplifier, it consumes a relatively large amount of power. In a low power design, this reference circuit can dominate the power budget. Here a few other techiques that can be used in place of the reference circuit we show in the filter wizard:

  • Level shift the signal before the filter and use low pass filter stages without gain
  • Use voltage dividers instead of resistors connected to a reference voltage. For example, if the designs calls for a 10 kΩ resistor connected to a mid-scale voltage reference, use a voltage divider between the two supplies consisting of 2 20 kΩ resistors instead. Of course voltage dividers consume power themselves, so this technique only saves power when the resistors connected to the reference voltage in the original filter design have high values.
  • Use a low power voltage follower to generate the reference voltage. Do not connect capacitors between the reference voltage and ground. This technique works if the output impedance of the voltage follower is small compared to the rest of the resistors in the filter in the frequency range of interest. Unfortunately, as a general rule, the lower the power of an op amp, the higher its output resistance at a particular frequency.
\",\n \"title\": \"Mid-Supply Voltage Reference\",\n \"tooltip\": \"Click for help\"\n },\n \"whats-this-trigger\": \"What's This?\",\n \"why-spares\": {\n \"message\": \"

When using dual or quad op amps, the filter wizard only uses one of the op amps in the package. The unused op amps are shown in the spares section. The spares are wired so they use minimum power.

For filters with multiple stages using dual or quad op amps, the filter wizard \\\"wastes\\\" op amps; it makes no attempt to use the extra op amp(s) from one stage for another stage. We do this to make the evaluation board system easy to use: by keeping one IC per stage we can use one daughter card per stage, which makes it easy to swap out different daughter cards to see performance differences.

When you lay out your circuit for production, we recommend making use of each op amp in the package.

\",\n \"title\": \"Why The Spares?\",\n \"tooltip\": \"Click for help\"\n }\n }\n },\n \"specifications\": {\n \"filter-response\": {\n \"message\": \"

Use this slider to choose the filter response. Choosing a response is a trade-off between the number of components vs. other desirable properties. This tool supports four response types:

Slider PositionFilter ResponseComments
Left

(Fewest Stages)

Chebyshev

The Chebyshev response provides the steepest transition between passband and stopband and therefore requires the fewest stages (i.e fewest components.)

Drawbacks of this filter are:

  • ripple in the passband
  • poor step response
  • high sensitivity to component variation

Move the slider further to the left to increase the amount of ripple (and decrease the number of stages needed.) Move the slider closer to the center to decrease the ripple needed.

See MT-206 tutorial for more information on the Chebyshev response.

MiddleButterworth

The Butterworth response is a good compromise between number of components and other characteristics like step response and component tolerance sensitivity. The Butterworth response is often called the \\\"maximally flat\\\" response because it offers the steepest transition between passband and stopband while still avoiding peaking.

See MT-224 tutorial for more information on the Butterworth response.

Right MiddleButterworth Bessel

The Butterworth-Bessel filter is a transition filter between the Bessel and Butterworth responses. Its performance is a mixture of these two response types.

Move the slider towards the middle position to make this filter more \\\"Butterworth-like\\\". Move the slider further to the right to make this filter more \\\"Bessel-like\\\".

Furthest Right

(Fastest Settling)

Bessel

The Bessel filter offers the shallowest transition between passband and stopband and therefore requires the most stages (i.e. most components).

However it otherwise has excellent characteristics

  • great step response
  • excellent group and phase delay
  • low sensitivity to component variation

Note that if the stopband and passband frequencies are too close together a Bessel solution may not be possible.

See MT-204 tutorial for more information on the Bessel response.

\",\n \"title\": \"Filter Response\",\n \"tooltip\": \"Click for help\"\n },\n \"passband\": {\n \"message\": \"

This is the range of frequencies you want to let through. Define this region by entering the circuit gain at the passband frequencies, the frequency cutoff, and the attenuation you prefer at this frequency cutoff.

Attenuation is relative to the gain entered. For example, if you enter 20 dB for the gain and attenuation of -3 dB, then the tool attempts to set the passband cutoff frequency at 17 dB.

\",\n \"title\": \"Passband\",\n \"tooltip\": \"Click for help\"\n },\n \"stopband\": {\n \"message\": \"

This is the range of frequencies you want to reject.

The attenuation is relative to the circuit gain. For example if you enter 20 dB for the gain and an attenuation of -35 dB, then the tool attempts to set the stopband frequency at -15 dB.

\",\n \"title\": \"Stopband\",\n \"tooltip\": \"Click for help\"\n }\n },\n \"to-precision-warning\": {\n \"message\": \"We have detected that you are using a browser, probably Edge 15 or 16, that displays certain numbers inaccurately when a precision is specified. (The issue first showed up in Edge 15 and was fixed in Edge 17.) The discrepancy can be as high as 50% in some cases. You will get more reliable results with this application using a different browser.\",\n \"title\": \"Browser Number Display Issue\"\n }\n },\n \"navbar\": {\n \"chinese\": \"简体中文\",\n \"english\": \"English\",\n \"feedback\": \"Feedback\",\n \"help\": \"Help\",\n \"japanese\": \"日本語\",\n \"load\": \"Load\",\n \"next-tab\": \"Next Tab\",\n \"previous-tab\": \"Previous Tab\",\n \"save\": \"Save\",\n \"videos\": \"Videos\"\n },\n \"opAmpSelection\": {\n \"innerRequirements\": {\n \"recommended-gbw-title\": \"Recommended GBW: \",\n \"required-gbw-title\": \"Required GBW: \",\n \"requirement-title-one\": \"Stage \",\n \"requirement-title-two\": \" op amp requirements\",\n \"total-supply-voltage-title\": \"Total Supply Voltage: \"\n },\n \"status\": {\n \"blank-opamp-name\": \"op amps name is blank\",\n \"channel-support\": \"filter evaluation board only supports singles and duals\",\n \"components-out-of-range\": \"R, L, or C in circuit too big or small\",\n \"current-feedback-unsupported\": \"Current feedback op amps not supported\",\n \"disabled\": \"disabled\",\n \"gbw-low\": \"gbw low\",\n \"gbw-too-low\": \"GBW too low\",\n \"ibias_high\": \"bias current high\",\n \"last-time-buy\": \"Last Time Buy\",\n \"marginal\": \"marginal\",\n \"not-allowed\": \"not allowed\",\n \"not-available-in-database\": \"Not Available in database:\",\n \"not-enough-negative-input-range\": \"not enough negative input range\",\n \"not-enough-negative-output-range\": \"not enough negative output range\",\n \"not-enough-positive-input-range\": \"not enough positive input range\",\n \"not-enough-positive-output-range\": \"not enough positive output range\",\n \"not-recommended\": \"not recommended\",\n \"not-recommended-new-designs\": \"not recommended for new designs\",\n \"obsolete\": \"Obsolete\",\n \"output-impedence-high\": \"output impedance too high\",\n \"package-incompatible\": \"package incompatible with evaluation board\",\n \"prerelease\": \"pre-release\",\n \"quad-opamp\": \"quad op amps not supported by eval board\",\n \"recommended\": \"recommended\",\n \"rout-high\": \"output resistance high\",\n \"row-count\": \"'{count, plural, =0 {Displaying # of {total} op amps. Please check the filters provided.} other {Displaying # of {total} op amps.}}'\",\n \"slew-rate-low\": \"slew rate too low\",\n \"supply-voltage-high\": \"supply voltage too high\",\n \"supply-voltage-low\": \"supply voltage too low\",\n \"under-min-stable-gain\": \"Min stable gain = {value}\",\n \"under-min-stable-gain-no-cap\": \"Min stable gain = {value} (assumes no comp cap)\"\n },\n \"title\": \"Choose Op Amp\"\n },\n \"page\": {\n \"description\": \"Design active filters with real op amps in minutes.\",\n \"title\": \"Filter Wizard | Analog Devices\"\n },\n \"panel\": {\n \"display-context\": {\n \"center-frequency\": \"center\",\n \"compensate-gbw\": \"; GBW comp\",\n \"components\": \"Optimize: {optimization}; +Vs: {vplus}; -Vs: {vminus}\",\n \"filter-type\": {\n \"bandPass\": \"Band-Pass\",\n \"highPass\": \"High-Pass\",\n \"lowPass\": \"Low-Pass\"\n },\n \"frequency\": \"{value}Hz {signal}\",\n \"optimizations\": {\n \"noise\": \"Noise\",\n \"power\": \"Power\",\n \"specific-components\": \"Specific Parts\",\n \"voltage-range\": \"Voltage Range\"\n },\n \"passband-frequency\": \"passband\",\n \"specifications\": \"{order} {implementation}\",\n \"stopband-frequency\": \"stopband\",\n \"tolerances\": \"R: {rtolerance}; C: {ctolerance}\",\n \"tolerances-inductor\": \"L: {ltolerance}\"\n },\n \"view\": \"View:\"\n },\n \"parameter-selector\": {\n \"choose-parameters\": \"Choose Parameters\",\n \"ok\": \"OK\"\n },\n \"settings\": {\n \"components\": {\n \"change-op-amp\": \"Change Op Amp\",\n \"choose-op-amp\": \"Choose\",\n \"compensate-gbw\": \"Compensate for GBW\",\n \"component-sizing\": \"Component Sizing:\",\n \"components\": \"Components\",\n \"gain-resistors\": \"Gain Resistors\",\n \"gain-slider\": \"Gain Slider\",\n \"implementation\": \"Implementation\",\n \"implementations\": {\n \"buffered-rc\": \"Buffered RC\",\n \"first-order\": \"First Order\",\n \"gain\": \"Gain\",\n \"inductor\": \"Inductor\",\n \"multiple-feedback\": \"Multiple Feedback\",\n \"sallen-key\": \"Sallen Key\"\n },\n \"negative-supply-voltage\": \"Negative Supply Voltage\",\n \"op-amp\": \"Op Amp:\",\n \"optimization\": \"Optimization\",\n \"optimizations\": {\n \"low-noise\": \"Low Noise\",\n \"low-power\": \"Low Power\",\n \"specific-components\": \"Specific Parts\",\n \"voltage-range\": \"Voltage Range\"\n },\n \"pick-for-me\": \"Pick for me\",\n \"positive-supply-voltage\": \"Positive Supply Voltage\",\n \"q-resistors\": \"Q Resistors\",\n \"rc-sizing\": \"RC Sizing\",\n \"stage\": \"Stage: {letter}\",\n \"stages\": \"Stages\",\n \"user-choice\": \"I want to choose\",\n \"volt-unit\": \"V\",\n \"voltage-supplies\": \"Voltage Supplies\",\n \"vs-minus\": \"-Vs :\",\n \"vs-plus\": \"+Vs :\"\n },\n \"filter-tab\": {\n \"bandPass\": \"Band Pass\",\n \"highPass\": \"High Pass\",\n \"lowPass\": \"Low Pass\",\n \"select-filter-type\": \"Select your filter type\"\n },\n \"next-steps\": {\n \"all-files\": \"All Files\",\n \"all-files-tooltip\": \"Download zip file containing SPICE files, BOM, evaluation PCB design files, and pdf versions of views\",\n \"evaluation-board\": \"Eval Board\",\n \"evaluation-board-tooltip\": \"Order eval board kit to build hardware prototype\",\n \"feedback\": \"Give Feedback\",\n \"get-files\": \"Get Files\",\n \"mail-colleague\": \"Mail to Colleague\",\n \"mail-colleague-tooltip\": \"Send a copy of this design to a colleague\",\n \"order\": \"Order\",\n \"samples\": \"Samples\",\n \"samples-tooltip\": \"Order component sample\",\n \"send-design\": \"Send filter
to {toolname}\",\n \"send-design-tooltip\": \"Sends a filter design to the calling application\",\n \"share\": \"Share\",\n \"spice-only\": \"SPICE Only\",\n \"spice-only-tooltip\": \"Download zip file containing SPICE files\"\n },\n \"specifications\": {\n \"center\": \"Center Frequency\",\n \"db\": \"dB\",\n \"fastest-settling-0\": \"Fastest\",\n \"fastest-settling-1\": \"Settling\",\n \"fewest-stages-0\": \"Fewest\",\n \"fewest-stages-1\": \"Stages\",\n \"filter-response\": \"Filter Response\",\n \"gain\": \"Gain\",\n \"gain-units\": {\n \"db\": \"dB\",\n \"vv\": \"V/V\"\n },\n \"hz\": \"Hz\",\n \"passband\": \"Passband\",\n \"passband-attenuation\": \"Passband Attenuation\",\n \"passband-frequency\": \"Passband Frequency\",\n \"passband-gain-units\": \"Passband Gain Units\",\n \"stopband\": \"Stopband\",\n \"stopband-attenuation\": \"Stopband Attenuation\",\n \"stopband-frequency\": \"Stopband Frequency\"\n },\n \"tolerances\": {\n \"E12\": \"E12\",\n \"E24\": \"E24\",\n \"E48\": \"E48\",\n \"E6\": \"E6\",\n \"E96\": \"E96\",\n \"capacitor\": \"Capacitor\",\n \"capacitor-series\": \"Capacitor Preferred Series\",\n \"capacitor-tolerance\": \"Capacitor Tolerance\",\n \"component-tolerances\": \"Component Tolerances\",\n \"five\": \"5%\",\n \"fiveTenths\": \"0.5%\",\n \"gbw-tolerance\": \"Op Amp GBW Tolerance\",\n \"ideal\": \"ideal\",\n \"inductor\": \"Inductor\",\n \"inductor-series\": \"Inductor Preferred Series\",\n \"inductor-tolerance\": \"Inductor Tolerance\",\n \"one\": \"1%\",\n \"oneTenth\": \"0.1%\",\n \"op-amp-gbw\": \"Op Amp GBW\",\n \"preferred-series\": \"Preferred Series\",\n \"resistor\": \"Resistor\",\n \"resistor-series\": \"Resistor Preferred Series\",\n \"resistor-tolerance\": \"Resistor Tolerance\",\n \"ten\": \"10%\",\n \"twenty\": \"20%\"\n }\n },\n \"units\": {\n \"ampere\": \"A\",\n \"db\": \"dB\",\n \"degree\": \"°\",\n \"hz\": \"Hz\",\n \"ohm\": \"Ω\",\n \"radian\": \"rad\",\n \"second\": \"s\",\n \"snd\": \"V/√Hz\",\n \"volt\": \"V\",\n \"vperus\": \"V/us\",\n \"vpp\": \"Vpp\",\n \"vrms\": \"Vrms\",\n \"vv\": \"V/V\",\n \"watt\": \"W\"\n },\n \"wizard\": {\n \"components\": \"Components\",\n \"filter-type\": \"Filter Type\",\n \"next-steps\": \"Next Steps\",\n \"specifications\": \"Specifications\",\n \"tolerances\": \"Tolerances\"\n }\n}], [\"ja-jp\", {\n \"annotations\": {\n \"filterResponse\": {\n \"orders\": {\n \"order1\": \"1次{responseType}\",\n \"order10\": \"10次{responseType}\",\n \"order2\": \"2次{responseType}\",\n \"order3\": \"3次{responseType}\",\n \"order4\": \"4次{responseType}\",\n \"order5\": \"5次{responseType}\",\n \"order6\": \"6次{responseType}\",\n \"order7\": \"7次{responseType}\",\n \"order8\": \"8次{responseType}\",\n \"order9\": \"9次{responseType}\",\n \"orderN\": \"{order}次{responseType}\"\n },\n \"responseType\": {\n \"Bessel\": \"ベッセル\",\n \"Butterworth\": \"バタワース\",\n \"Butterworth Bessel\": \"バタワース・ベッセル\",\n \"Chebyshev\": \"チェビシェフ\"\n },\n \"responseValue\": \"{value} dB\",\n \"stages\": \"{count, plural, =1 {1 段} other {# 段}}\"\n },\n \"magnitude\": {\n \"db-down\": \"{n}dB 減衰\",\n \"gain\": \"ゲイン = {n} dB\",\n \"passband-region\": \"ベースバンド領域\",\n \"passband-ripple\": \"通過帯域のリップル = {n} dB\",\n \"stopband-region\": \"ストップバンド領域\"\n }\n },\n \"dialogs\": {\n \"algorithm-confirmation\": {\n \"decreasing-r2-advantages\": \"R2の低減には以下のメリットがあります。\",\n \"decreasing-r2-advantages-item-1\": \"R2で生じる抵抗ノイズの低減\",\n \"decreasing-r2-advantages-item-2\": \"R2で生じる電流性ノイズの影響の低減\",\n \"decreasing-r2-advantages-item-3\": \"アンプの入力容量が性能に影響する可能性の低減\",\n \"expand\": \"展開\",\n \"hide\": \"隠す\",\n \"increasing-r1-advantages\": \"R1の増大には以下のメリットがあります。\",\n \"increasing-r1-advantages-item-1\": \"ソース・インピーダンスがフィルターの応答に影響する可能性の低減\",\n \"increasing-r1-advantages-item-2\": \"高周波における入力フィルター側の入力インピーダンスの増大\",\n \"increasing-r1-advantages-item-3\": \"高周波におけるアンプ出力での負荷低減\",\n \"introduction\": \"2023年11月にフィルター・ウィザードをアップデートし、サレンキー・ローパス使用部品を他と異なる方法で計算するように変更しました。その他のステージの形態には影響がありません。この変更は高いR2/R1比となるサレンキー・ローパス・ステージに影響します。高い比率はフィルターの性能に悪影響を及ぼします。そのためこの比率を低減しました。この変更はフィルター・ステージの主な仕様(fp、Q、および利得)にはほとんど影響しません。このアルゴリズムでは向上したステージ性能を得るため、一部の最適化においてステージの順序が変わっている場合があります。\",\n \"new-algorithm-button\": \"新アルゴリズムを使用\",\n \"old-algorithm-button\": \"旧アルゴリズムを使用\",\n \"post-script-new-design\": \"R1、R2、C1、およびC2が変化する場合があります。その他のすべての部品は影響を受けません。すべての新規設計には新しい方式が使用されます。\",\n \"post-script-save-design\": \"この保存済みの設計に対して、引き続き旧アルゴリズムを使用するか、新アルゴリズムを使用するかを選択できます。新アルゴリズムにアップデートすると、これらの部品は最後に保存した時点と異なるものになる場合があります。\",\n \"potential-drawbacks\": \"この変更によって以下のデメリットが生じる可能性があります。\",\n \"potential-drawbacks-item-1\": \"旧アルゴリズムではC1/C2が10という良好な比率になることが多かった。\",\n \"potential-drawbacks-item-2\": \"ノイズ・ゲインのわずかな増大。ただしR2低減のよるノイズ低下がこのデメリットを上回ると考えられます。\",\n \"potential-drawbacks-item-3\": \"単電源構成で利得が1より大きい場合、R2の低減に伴い出力インピーダンスのより低い中間電位ドライバが必要。当社のAD8031コンデンサ駆動ソリューションは十分これに対応可能と考えられます。\",\n \"pros-and-cons\": \"R2/R1比を低減することによるメリットとデメリット - クリックして\",\n \"title\": \"保存後に行われたサレンキー・ローパス使用部品の計算方式の変更\"\n },\n \"common\": {\n \"cancel\": \"キャンセル\",\n \"close\": \"閉じる\",\n \"ok\": \"OK\",\n \"open\": \"開く\",\n \"save\": \"保存する\",\n \"select\": \"選ぶ\"\n },\n \"connect-to\": {\n \"message-error\": \"Connection to {tool} failed\",\n \"title-error\": \"Connection Error\"\n },\n \"evaluation-boards\": {\n \"eval-board-column\": \"必要な評価用ボード\",\n \"eval-board-flagged\": \"評価ボードは、ご注文いただけません。\",\n \"eval-board-flagged-after-incompatibles\": \"評価ボードを注文するには、部品選択タブから互換性のある製品を選びなおしてください。\",\n \"eval-board-flagged-before-incompatibles\": \"部品選択タブで、フィルターウィザード評価ボードシステムでは非推奨のオペアンプを選んでいます: \",\n \"eval-board-flagged-multi-feedback\": \"コンポーネント選択タブで、1つまたは複数の回路段に対して多重帰還段の実装が選択されています。多重帰還回路段に使用できる評価用ドーター・ボードはまだありません。\",\n \"eval-board-instruction\": \"「注文」ボタンが開くページで、「ご購入」をクリックしてカートにアイテムを追加できるページを開いてください。\",\n \"eval-board-multiple\": \"* 出荷される各ドーターボードのボックスには4つの個別段が含まれており、それぞれを個別に注文する必要はありません。\",\n \"eval-board-not-available-board\": \"使用できません\",\n \"eval-board-parts-column\": \"これらの部品をハンダ付けする(部品は別々に注文する) \",\n \"eval_board-flagged-inductor\": \"コンポーネント選択タブで、1つまたは複数の回路段に対してインダクタ段の実装が選択されています。インダクタ回路段に使用できる評価用ドーター・ボードはまだありません。\",\n \"evalboard-confirmation\": {\n \"cancel-button-text\": \"キャンセル\",\n \"message\": \"申し訳ありません。フィルタ・ウィザードの評価用ボード・システムには、インダクタを用いる段のためのドーターボードがありません。\",\n \"proceed-button-text\": \"ともかく評価用ボードを見る\",\n \"title\": \"評価用ボード・システムに対し周波数が高すぎます。\"\n },\n \"stage-column\": \"段\",\n \"stage-info\": {\n \"channel-dual\": \"-- デュアルオペアンプ\",\n \"channel-none\": \"\",\n \"channel-single\": \"-- シングル・オペアンプ\",\n \"implementation-buffered-rc\": \"RC\",\n \"implementation-deliyannis-friend\": \"複数のフィードバック (Deliyannis Friend)\",\n \"implementation-first-order\": \"初回注文\",\n \"implementation-gain\": \"ゲイン\",\n \"implementation-inductor\": \"インダクタ許容誤差\",\n \"implementation-multiple-feedback\": \"複数のフィードバック\",\n \"implementation-none\": \"\",\n \"implementation-sallen-key\": \"サレンキー\",\n \"stage-text\": \"{stageType} {stageImplementation} 段 {stageChannel}\",\n \"stage-type-band-pass\": \"バンドパス\",\n \"stage-type-band-stop\": \"バンドストップ\",\n \"stage-type-gain\": \"ゲイン\",\n \"stage-type-high-pass\": \"ハイパス\",\n \"stage-type-low-pass\": \"ローパス\",\n \"stage-type-none\": \"\",\n \"stage-type-notch\": \"ノッチ\"\n },\n \"stage-info-column\": \"回路段の情報\",\n \"table-title\": \"必要な評価ボード\",\n \"title\": \"評価ボードを注文する\"\n },\n \"feedback\": {\n \"email\": \"お客様のメールアドレス:\",\n \"feedback\": \"ご意見、ご要望:\",\n \"feedback-dialog-ng-message\": \"フィードバックの送信に失敗しました。ネットワーク接続に問題がある場合があります。お手数ですが再度お試しください。\",\n \"feedback-dialog-ok-message\": \"ご意見、ご要望をご記入頂きありがとうございました。\",\n \"give-feedback\": \"意見または感想を送る\",\n \"invitation\": \"このツールに関する率直なご意見、ご要望をお聞かせください。 \",\n \"name\": \"お客様のお名前:\",\n \"optional\": \"(Optional)\",\n \"title\": \"皆様のご意見をお聞かせください!\"\n },\n \"load\": {\n \"choose-button\": \"ファイルを選択\",\n \"invalid-file\": \"有効でない設計ファイルです。ファイルをご確認ください。\",\n \"invalid-parts\": \"{numParts,plural,other{設計を読み込めません。この設計で使用されている次の部品は、このアプリケーションではサポートされていません: }}{parts}\",\n \"message\": \"ローカルPC上の設計ファイルを読み込む\",\n \"no-opamps\": \"オペアンプのデータが入手できません。設計を読み込むことができません。ブラウザを更新してみてください。引き続きこの問題が発生する場合は、フィルタ・ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n \"title\": \"設計を読み込む\"\n },\n \"opamp\": {\n \"table\": {\n \"architecture\": \"Architecture\",\n \"canOrderEvalBoard\": \"Eval Board?\",\n \"comment\": \"コメント\",\n \"comments\": \"コメント\",\n \"commentsDisplay\": {\n \"showAll\": \"すべて表示\",\n \"showNotAllowed\": \"許可されていない\",\n \"showNotAllowedMatch\": \"使用できません\",\n \"showNotRecommended\": \"おススメではない\",\n \"showNotRecommendedMatch\": \"非推奨\",\n \"showRecommended\": \"お勧め\",\n \"showRecommendedMatch\": \"推奨\"\n },\n \"feedbackMethod\": \"Feedback Method\",\n \"gbw\": \"GBW (Hz)\",\n \"iBias\": \"max iBias (A)\",\n \"iNoise\": \"iNoise\",\n \"inHeadroomMinus\": \"In Headroom- (V)\",\n \"inHeadroomPlus\": \"In Headroom+ (V)\",\n \"index\": \"Index\",\n \"isLTSpiceDisplay\": {\n \"showAll\": \"すべて表示\",\n \"showNo\": \"いいえ\",\n \"showYes\": \"はい\"\n },\n \"isLTSpiceOpAmp\": \"LTspice?\",\n \"maxSupplyVoltage\": \"最大供給 (V)\",\n \"minStableGain\": \"Min Stable Gain\",\n \"minSupplyVoltage\": \"最少供給 (V)\",\n \"numberChannels\": \"#チャネル\",\n \"outHeadroomMinus\": \"Out Headroom- (V)\",\n \"outHeadroomPlus\": \"Out Headroom+ (V)\",\n \"packageCode\": \"Package Code\",\n \"partNumber\": \"部品\",\n \"price\": \"価格 (US $)\",\n \"rOut\": \"rOut\",\n \"rawGBW\": \"Raw GBW\",\n \"selectable\": \"Selectable?\",\n \"slewRate\": \"Slew Rate\",\n \"specialOpAmp\": \"Special Op-Amp?\",\n \"status\": \"Status Code\",\n \"statusDisplay\": {\n \"showAll\": \"すべて表示\",\n \"showNotRecommended\": \"新規設計には非推奨\",\n \"showProduction\": \"生産/供給中\",\n \"showRecommended\": \"新規設計にお薦めします。\"\n },\n \"statusText\": \"ステータス\",\n \"supplyCurrent\": \"iSupply (A)\",\n \"tempRange\": \"温度範囲\",\n \"tempRangeDisplay\": {\n \"showAll\": \"すべて表示\",\n \"showBlanks\": \"(ブランク)\"\n },\n \"vNoise\": \"vNoise (nV/√Hz)\",\n \"vintage\": \"Vintage\",\n \"vos\": \"max Vos (V)\"\n }\n },\n \"samples\": {\n \"add-button\": \"選択したサンプルをカートに入れる\",\n \"add-to-cart-column\": \"サンプルをカートに入れる\",\n \"model-column\": \"モデル/パッケージ\",\n \"part-column\": \"構成部品\",\n \"quantities-warning\": \"アナログ・デバイセズは認証させていただいたお客様に限り、無料サンプルのご注文を受け付けています。 サンプルについては大変多くのご要望をいただいておりますため、おひとり様2週間あたり最大で4製品、各2個ずつまでのご注文とさせていただきます。無料サンプルとしてご注文いただける以上の量が必要な場合は、オンライン購入をしていただくか(在庫がある場合に限ります)、販売代理店にお問い合わせください。\",\n \"title\": \"サンプル注文\",\n \"unavailable-message\": \"サンプルの提供はありません。\"\n },\n \"save\": {\n \"save-desc-error\": \"概要を入力してください。\",\n \"save-desc-field\": \"概要\",\n \"save-name-error\": \"デザイン名を入力してください。\",\n \"save-name-field\": \"デザイン名\",\n \"title\": \"保存\"\n },\n \"send-filter\": {\n \"message\": \"You may now close this browser tab.\",\n \"message-error\": \"Sending design to {tool} was unsuccessful\",\n \"title-cancel\": \"{tool} has broken the connection\",\n \"title-error\": \"Send Design Error\",\n \"title-ok\": \"Filter Transfer to {tool} Complete\"\n },\n \"share\": {\n \"share-button\": \"Email\",\n \"share-design-information\": \"

設計ファイルのコピーを共有するには、“差出人名”にお客様のお名前を、共有したい方のメールアドレスを“設計を共有”項目にご入力ください。送信先が複数の場合には、それぞれのメールアドレスを改行してご入力ください。

アナログ・デバイセズよりZIPファイルにまとめられた設計ファイルが添付されたメールを、ご入力いただいたメールアドレスにお送りします。添付されたZIPファイルを解凍して、各ツールのアップロード機能を使用して設計ファイルをアップロードするだけで、その設計ファイルを使用することが出来ます。

上記手順により、共有された設計ファイルのコピーを使用することが出来ます。ただし、共有された設計ファイルのコピーが編集されても、お客様のオリジナルの設計ファイルが編集されることはありません。

\",\n \"share-dialog-ng-message\": \"回路を共有できません。サーバーの接続不良による可能性があります。再度お試しください。\",\n \"share-dialog-ok-message\": \"回路は共有されました\",\n \"share-duplicate-email\": \"同じメールアドレスが複数含まれています\",\n \"share-email-empty-error\": \"メールアドレスを入力してください。\",\n \"share-email-field\": \"設計を共有\",\n \"share-email-format-error\": \"お客様が入力したメールアドレスの中で少なくとも1つは無効です。修正して再度お試しください。\",\n \"share-email-placeholder\": \"メールアドレス\",\n \"share-name-error\": \"デザイン名を入力してください。\",\n \"share-name-field\": \"デザイン名\",\n \"share-sender-error\": \"差出人名を入力してください。\",\n \"share-sender-field\": \"差出人名\",\n \"title\": \"自分の設計をメールで送信\"\n },\n \"system\": {\n \"application-busy\": \"処理中・・・\",\n \"connecting-to\": \"Connecting to {tool}...\",\n \"download-create-bom\": \"BOM ファイルを作成中・・・\",\n \"download-create-data\": \"データ・ファイルを作成中・・・\",\n \"download-create-design\": \"設計ファイルの作成中・・・\",\n \"download-create-eval-board\": \"評価用ボード・ファイルを作成中・・・\",\n \"download-create-graph\": \"Graph データを作成中・・・\",\n \"download-create-pdf\": \"PDFファイルを作成中・・・\",\n \"download-create-spice\": \"SPICEファイルを作成中・・・\",\n \"download-downloading\": \"ダウンロード中・・・\",\n \"download-requesting\": \"送信中・・・\",\n \"error-opamp-data\": \"オペアンプのデータが入手できません。そのため、フィルタ・ウィザードを続行できません。設計を保存しブラウザを更新してみてください。引き続きこの問題が発生する場合は、フィルタ・ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n \"error-pst-data\": \"現在データ・マップが入手できません。そのため、オペアンプ・テーブルを表示できません。設計を保存しブラウザを更新してみてください。引き続きこの問題が発生する場合は、フィルタ・ウィザードの右上部にある[ご意見・ご要望]ボタンで問題をご報告ください。\",\n \"loading-opamp-data\": \"オペアンプ・データ読み込み中...\",\n \"sending-filter\": \"Sending filter to {tool}...\",\n \"title\": \"アプリケーション・メッセージ\"\n },\n \"video\": {\n \"active_filter\": {\n \"title\": \"Filtering 101: アクティブ・フィルタ段の順序\",\n \"url\": \"{basedir}/jp/resources/media-center/videos/4586846379001.html\"\n },\n \"active_passive\": {\n \"title\": \"Filtering 101: アクティブ・フィルタ vs. パッシブ・フィルタ\",\n \"url\": \"{basedir}/jp/resources/media-center/videos/4282614503001.html\"\n },\n \"analog_digital\": {\n \"title\": \"Filtering 101: アナログ vs デジタル\",\n \"url\": \"{basedir}/jp/resources/media-center/videos/4301672668001.html\"\n },\n \"chebyshev_butterworth_bessel\": {\n \"title\": \"Filtering 101: チェビシェフ VS バターワース VS ベッセル\",\n \"url\": \"{basedir}/jp/resources/media-center/videos/4301683346001.html\"\n },\n \"gain_attenuation\": {\n \"title\": \"Sallen-Key 101: ゲインと減衰\",\n \"url\": \"{basedir}/jp/resources/media-center/videos/4616958051001.html\"\n },\n \"heading\": \"説明のビデオを観るには、下のリンクをクリックしてください。\",\n \"opamp_output_impedance\": {\n \"title\": \"Sallen-Key 101: オペアンプの出力インピーダンスの影響\",\n \"url\": \"{basedir}/jp/resources/media-center/videos/4586847310001.html\"\n },\n \"picking_components\": {\n \"title\": \"Sallen-Key 101: 部品の選び方\",\n \"url\": \"{basedir}/jp/resources/media-center/videos/4616965945001.html\"\n },\n \"quality_factor\": {\n \"title\": \"Filtering 101: Q-フィルタの品質係数\",\n \"url\": \"{basedir}/jp/resources/media-center/videos/4586847309001.html\"\n },\n \"sallenkey_feedback\": {\n \"title\": \"Filtering 101: サレンキー回路 vs 多重帰還回路\",\n \"url\": \"{basedir}/jp/resources/media-center/videos/4304269767001.html\"\n },\n \"subtitle\": \"フィルタ設計に関するチュートリアル・ビデオ\",\n \"title\": \"ビデオ\"\n }\n },\n \"download\": {\n \"error-message\": \"

設計ファイルを取得できません。 このエラーは、以下の理由で発生している場合があります。

1)サーバとの接続が切れているため。

2)サービスが停止されているため。\",\n \"error-title\": \"ダウンロード\",\n \"file-content\": {\n \"no-schematic\": \"現在、LTspiceはアナログ・デバイセズのツールとなり、SPICEネットリストをLTspiceモデルに変換しております。残念ながら、お客様の設計で使用しているオペアンプ製品は、現在LTspiceでは使用できません。特定の製品をLTspiceで使用されることをご希望の場合には、営業担当者にご連絡いただくか、このツールのフィードバック機能よりご意見をお送りください。\\r\\n\\r\\nSPICEシュミレーション・ツールでのサポート済み製品:\\r\\n\",\n \"no-schematic-no-netlist\": \"アナログ・デバイセズは、現在SPICE ネットリストのオペアンプ製品をLTspiceにてご使用いただけるよう移行を行っております。お客様の設計にはLTspiceで使用できるものと使用できないものがあり、このツールではSPICE用ファイルを作成することが出来ません。ご不便をお掛けしておりますこと、お詫び申し上げます。特定の製品をLTspiceで使用されることをご希望の場合には、営業担当者にご連絡いただくか、このツールのフィードバック機能よりご意見を頂きますようお願い申し上げます。\\r\\n\\r\\nSPICEシュミレーション・ツールでのサポート済み製品:\\r\\n\",\n \"part-no-spice-info\": \"設計で使用されている次のオペアンプには、LTspiceモデルまたはテキスト・ネットリスト・モデルがありません。特定部品のLTspiceモデルを優先的に作成することをアナログ・デバイセズに希望される場合は、営業担当者またはこのツールを通じてご連絡ください。\"\n },\n \"pdf-content\": {\n \"image-headers\": {\n \"circuit\": \"回路\",\n \"group-delay\": \"群遅延\",\n \"input-impedance-mag\": \"入力インピーダンス\",\n \"input-impedance-phase\": \"入力インピーダンス位相\",\n \"magnitude-db\": \"振幅(dB)\",\n \"magnitude-vv\": \"振幅(V/V)\",\n \"noise\": \"ノイズ\",\n \"phase-degrees\": \"位相(度)\",\n \"phase-delay\": \"位相遅れ\",\n \"phase-radians\": \"位相(ラジアン)\",\n \"stages\": \"段\",\n \"step-response\": \"ステップ応答\"\n },\n \"pdf-data-ie-image-missing\": \"大変申し訳ありませんが、このツールをExplorer 8 またはそれ以下のバージョンでお使いの場合、画像を表示することができません。Firefox,Chrome,または Explorer 9をお使いください。\",\n \"pdf-desc\": \"{desc}\\n\\n作成者 {user} 作成日 {date}\",\n \"pdf-desc-no-design-name\": \"作成者 {user} 作成日{date}\",\n \"pdf-desc-no-name-desc\": \"作成日{date}\",\n \"pdf-desc-no-user-name\": \"{desc}\\n\\n作成日 {date}\",\n \"pdf-heading\": \"フィルタ・ウィザード・デザイン・レポート\",\n \"pdf-orders\": {\n \"order1\": \"1次\",\n \"order10\": \"10次\",\n \"order11\": \"11次\",\n \"order12\": \"12次\",\n \"order2\": \"2次\",\n \"order3\": \"3次\",\n \"order4\": \"4次\",\n \"order5\": \"5次\",\n \"order6\": \"6次\",\n \"order7\": \"7次\",\n \"order8\": \"8次\",\n \"order9\": \"9次\"\n },\n \"pdf-subheading\": \"{filterType}、{nthOrder}{filterResponse}のフィルタの条件\",\n \"pdf-tool-name\": \"フィルタ・ウィザード\"\n }\n },\n \"ember-aditools-page\": {\n \"card\": {\n \"checkbox-tooltip\": \"Toggle\",\n \"help-tooltip\": \"Click for help\",\n \"part-number-tooltip\": \"Click to select part\"\n },\n \"common\": {\n \"cancel\": \"キャンセル\",\n \"close\": \"閉じる\",\n \"load\": \"読み込む\",\n \"ok\": \"OK\",\n \"open\": \"開く\",\n \"save\": \"保存する\",\n \"select\": \"選ぶ\"\n },\n \"dialogs\": {\n \"feedback\": {\n \"email\": \"お客様のメールアドレス:\",\n \"feedback\": \"ご意見、ご要望:\",\n \"give-feedback\": \"意見または感想を送る\",\n \"invitation\": \"このツールに関する率直なご意見、ご要望をお聞かせください。 \",\n \"name\": \"お客様のお名前:\",\n \"optional\": \"(Optional)\",\n \"title\": \"皆様のご意見をお聞かせください!\"\n },\n \"load\": {\n \"choose-button\": \"ファイルを選択\",\n \"message\": \"ローカルPC上の設計ファイルを読み込む\",\n \"no-file-selected\": \"No file selected.\",\n \"title\": \"設計を読み込む\"\n },\n \"samples\": {\n \"add-button\": \"選択したサンプルをカートに入れる\",\n \"add-link\": \"Add to Order\",\n \"add-to-cart-column\": \"サンプルをカートに入れる\",\n \"model-column\": \"モデル/パッケージ\",\n \"part-column\": \"構成部品\",\n \"quantities-warning\": \"アナログ・デバイセズは認証させていただいたお客様に限り、無料サンプルのご注文を受け付けています。 サンプルについては大変多くのご要望をいただいておりますため、おひとり様2週間あたり最大で4製品、各2個ずつまでのご注文とさせていただきます。無料サンプルとしてご注文いただける以上の量が必要な場合は、オンライン購入をしていただくか(在庫がある場合に限ります)、販売代理店にお問い合わせください。\",\n \"title\": \"サンプル注文\",\n \"unavailable-message\": \"サンプルの提供はありません。\"\n },\n \"save\": {\n \"save-desc-error\": \"概要を入力してください。\",\n \"save-desc-field\": \"概要\",\n \"save-name-error\": \"デザイン名を入力してください。\",\n \"save-name-field\": \"デザイン名\",\n \"title\": \"保存\"\n },\n \"share\": {\n \"share-button\": \"Email\",\n \"share-design-information\": \"

設計ファイルのコピーを共有するには、“差出人名”にお客様のお名前を、共有したい方のメールアドレスを“設計を共有”項目にご入力ください。送信先が複数の場合には、それぞれのメールアドレスを改行してご入力ください。

アナログ・デバイセズよりZIPファイルにまとめられた設計ファイルが添付されたメールを、ご入力いただいたメールアドレスにお送りします。添付されたZIPファイルを解凍して、各ツールのアップロード機能を使用して設計ファイルをアップロードするだけで、その設計ファイルを使用することが出来ます。

上記手順により、共有された設計ファイルのコピーを使用することが出来ます。ただし、共有された設計ファイルのコピーが編集されても、お客様のオリジナルの設計ファイルが編集されることはありません。

\",\n \"share-dialog-ng-message\": \"回路を共有できません。サーバーの接続不良による可能性があります。再度お試しください。\",\n \"share-dialog-ok-message\": \"回路は共有されました\",\n \"share-duplicate-email\": \"同じメールアドレスが複数含まれています\",\n \"share-email-empty-error\": \"メールアドレスを入力してください。\",\n \"share-email-field\": \"設計を共有\",\n \"share-email-format-error\": \"お客様が入力したメールアドレスの中で少なくとも1つは無効です。修正して再度お試しください。\",\n \"share-email-placeholder\": \"メールアドレス\",\n \"share-name-error\": \"デザイン名を入力してください。\",\n \"share-name-field\": \"デザイン名\",\n \"share-sender-error\": \"差出人名を入力してください。\",\n \"share-sender-field\": \"差出人名\",\n \"title\": \"自分の設計をメールで送信\"\n },\n \"system\": {\n \"application-busy\": \"処理中・・・\",\n \"title\": \"アプリケーション・メッセージ\"\n }\n },\n \"footer\": {\n \"accessibility\": \"アクセシビリティ\",\n \"cookie-settings\": \"Cookieの設定\",\n \"copyright-text\": \"1995 - 2025 Analog Devices, Inc. 全著作権所有\",\n \"icp-id\": \"\",\n \"legal\": \"法的事項およびリスク約\",\n \"privacy-policy\": \"プライバシーポリシー\",\n \"privacy-settings\": \"プライバシー設定\",\n \"sitemap\": \"サイトマップ\"\n },\n \"header\": {\n \"applications\": \"アプリケーション\",\n \"company\": \"企業情報\",\n \"design-center\": \"設計支援\",\n \"education\": \"調べる/学ぶ\",\n \"parametric-search\": \"パラメータ検索\",\n \"products\": \"製品\",\n \"spoken\": {\n \"homepage\": \"ホームページ\",\n \"sitelinks\": \"アナログ・デバイセズのサイトへのリンク\"\n },\n \"support\": \"サポート\"\n },\n \"menubar\": {\n \"chinese\": \"简体中文\",\n \"english\": \"English\",\n \"help\": \"ヘルプ\",\n \"japanese\": \"日本語\",\n \"load\": \"設計を読み込む\",\n \"save\": \"保存\"\n },\n \"studio\": {\n \"adcdriver\": \"ADCドライバ\",\n \"dacebc\": \"DAC\",\n \"diamond\": \"計装アンプ\",\n \"filterwizard\": \"アナログ・フィルタ\",\n \"noise\": \"ノイズ\",\n \"photodiode\": \"フォトダイオード\",\n \"precisionstudio\": \"ADI Precision Studio\",\n \"signalchaindesigner\": \"Signal Chain\",\n \"simdds\": \"DDS\",\n \"spoken\": {\n \"studiolinks\": \"ADI Precision Studio へのリンク\"\n },\n \"virteval\": \"Virtual Eval\"\n },\n \"toolbar\": {\n \"actions\": \"Actions\"\n }\n },\n \"figures\": {\n \"billOfMaterials\": {\n \"bom-designator\": \"リファレンス・デジグネーター\",\n \"bom-material\": \"材料\",\n \"bom-package\": \"パッケージ\",\n \"bom-quantity\": \"量\",\n \"bom-text\": \"「ファイルの取得」をクリックすると、テキストファイル形式のBOMを含むすべてのファイルをzip形式でダウンロードできます。\",\n \"bom-text-italic\": \"アナログ・デバイセズ製の評価ボードを使用せずに、お客様自身でPCBを作成する場合、斜体文字で書かれているパッケージは省略可能です。\",\n \"bom-tolerance\": \"許容誤差\",\n \"bom-value\": \"値\",\n \"extra-components\": {\n \"header\": \"ヘッダ\",\n \"jumper\": \"ジャンパ\",\n \"sma-jack\": \"SMAジャック、ボード・エッジ、メス\",\n \"sma-male\": \"オス-オスSMA\",\n \"socket\": \"ソケット\",\n \"test-pin\": \"テスト・ピン\"\n },\n \"materials\": {\n \"tantalum\": \"タンタル\"\n },\n \"title\": \"部品表\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"circuit\": {\n \"filter-type\": {\n \"band-pass\": \"バンドパス\",\n \"high-pass\": \"ハイパス\",\n \"low-pass\": \"ローパス\"\n },\n \"implementation\": {\n \"first-order\": \"RC\",\n \"gain\": \"ゲイン\",\n \"inductor\": \"インダクタ許容誤差\",\n \"multiple-feedback\": \"複数のフィードバック\",\n \"sallen-key\": \"サレンキー\"\n },\n \"order\": {\n \"eighth_order\": \"8次\",\n \"fifth_order\": \"5次\",\n \"first_order\": \"1次\",\n \"fourth_order\": \"4次\",\n \"nineth_order\": \"9次\",\n \"second_order\": \"2次\",\n \"seventh_order\": \"7次\",\n \"sixth_order\": \"6次\",\n \"tenth_order\": \"10次\",\n \"third_order\": \"3次\"\n },\n \"stage\": \"ステージ {letter}\",\n \"title\": \"回路\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"errors\": {\n \"adcBandwidthIsLessThanMinimum\": \"ADCの帯域幅(現在{value}Hz)は、{minimum}Hz以上であることが必要です。\",\n \"centerFrequencyNotInRange\": \"中心周波数は{minimum}Hzから{maximum}Hzの間で設定してください。\",\n \"centerFrequencyTooHigh\": \"中心周波数と通過帯域幅の比率が高すぎます。中心周波数を下げるか、通過帯域幅を広くしてください。\",\n \"centerFrequencyTooLow\": \"中心周波数と通過帯域幅の比が低すぎます。中心周波数を上げるか、通過帯域幅を狭くしてください。\",\n \"emptyField\": \"{fieldId} は必ず入力してください。\",\n \"frequencyTooHigh\": \"実際の部品の値を求める事はできません。 お客様のQ値は高すぎるかもしれません。お客様のQ値をモニターするために仕様画面のステージ図をご利用ください。 以下をお試しください: (1) チェビシェフ・フィルタ応答ではなくバターワース応答あるいはベッセル応答を使用する。 (2) 通過帯域から阻止帯域への変化を遅くする。\",\n \"frequencyTooLow\": \"周波数が低すぎます。部品の値が見つかりません。\",\n \"gainNotInRange\": \"ゲインは{minimum} {unit}から{maximum} {unit}の間で設定してください。\",\n \"highOrderFiltersUnsupported\": \"次数10以下のフィルタ・ソリューションが見つかりません。パスバンド周波数またはストップバンド減衰量を下げるか、ストップバンド周波数またはパスバンド減衰量を上げる、フィルタ応答を調整する、のいずれかを行ってください。\",\n \"invalidField\": \"{fieldId}フィールドに入力された{value}という値は解析できません。\",\n \"noOpAmpFoundForRequirements\": \"該当するオペアンプはございません。\",\n \"noOpAmpFoundForRequirementsWithVoltage\": \"該当するオペアンプはございません。+Vs ~5V および -Vs ~ 0V または -5Vに設定すると、よりよい結果が得られます。\",\n \"passbandAttenuationHighBandGreaterThan\": \"As the passband frequency approaches the maximum limit of {frequency}Hz, the passband attenuation becomes more restricted. At the stated passband frequency, the attenuation must be greater than {minimum} dB.\",\n \"passbandAttenuationLowGreaterThan\": \"As the passband frequency approaches the minimum limit of {frequency}Hz, the passband attenuation becomes more restricted. At the stated passband frequency, the attenuation must be greater than {minimum} dB.\",\n \"passbandAttenuationNotInRange\": \"パスバンド(通過)減衰量は{minimum} dBから{maximum} dBの間で設定してください。\",\n \"passbandFrequencyNotInRange\": \"パスバンド(通過)周波数は{minimum}Hzから{maximum}Hzの間で設定してください。\",\n \"passbandIsGreaterThanStopband\": \"パスバンド(通過)周波数(現在は {passbandFrequency}Hz)は、ストップバンド(阻止)周波数{stopbandFrequency}Hzよりも小さくなければなりません。\",\n \"referenceVoltageSpanGreaterThanMax\": \"リファレンス段のAD8031には電源電圧範囲が広すぎます。電源電圧を下げてください。\",\n \"referenceVoltageSpanLessThanMinimum\": \"リファレンス段のAD8031には電源電圧範囲が狭すぎます。電源電圧を上げるか、両電源に変更してください。\",\n \"selectedOpAmpIsIdeal\": \"ステージ {stage}: このステージのオペアンプを選択してください。\",\n \"selectedOpAmpIsIncompatible\": \"ステージ {stage}: {opAmp} はフィルタ要件を満たしていません。 別のオペアンプを選択するか、コンポーネントの定数を調整してください。\",\n \"selectedOpAmpIsIncompatibleWithVoltage\": \"ステージ {stage}: {opAmp} はフィルタ要件を満たしていません。 別のオペアンプを選択するか、コンポーネントの定数を調整、または電源電圧を変更してください。\",\n \"stageQTooLarge\": \"あなたのフィルタ段のQは{qValue}。フィルタウィザードツールがサポートするQは50以下です。以下の対処法がありますン: (1) センター周波数を下げる、(2) ストップバンドとパスバンドの周波数を上げる。\",\n \"stopbandAttenuationNotInRange\": \"ストップバンド(阻止)減衰量は{minimum} dBから{maximum} dBの間で設定してください。\",\n \"stopbandFrequencyNotInRange\": \"ストップバンド(阻止)周波数は{minimum}Hzから{maximum}Hzの間で設定してください。\",\n \"stopbandIsGreaterThanPassband\": \"ストップバンド(阻止)周波数(現在は {stopbandFrequency}Hz)は、パスバンド(通過)周波数{passbandFrequency}Hzよりも小さくなければなりません。\",\n \"stopbandIsGreaterThanPassbandAttenuation\": \"ストップバンド(阻止)減衰量 (現在は {stopbandAttenuation} dB)は、パスバンド(通過)減衰量{passbandAttenuation} dBよりも大きくなければなりません。\",\n \"voltageSpanGreaterThanMax\": \"供給電圧範囲が広すぎます。電圧差36V以内に設定してください。\",\n \"voltageSpanLessThanMinimum\": \"供給電圧範囲がせますぎます。1.8V以上に設定してください。\",\n \"vsMinusShouldBeNegative\": \"-Vs 電圧の値が高すぎます。0V以下の値を設定してください。\",\n \"vsMinusZeroVsPlusGreaterThanMax\": \"+Vs 電圧は -Vs = 0の時、12.6V以下に設定してください。この数値は、最大電圧供給値は12.6Vの単電源リファレンスドライバ AD8031という製品の仕様からきています。\",\n \"vsPlusShouldBePositive\": \"+Vs 電圧の値が低すぎます。0V以上の値を設定してください。\"\n },\n \"groupDelay\": {\n \"title\": \"群遅延\",\n \"x-axis\": \"周波数(Hz)\",\n \"x-hover\": \"周波数:\",\n \"y-axis\": \"群遅延 (s)\",\n \"y-hover\": \"群遅延:\"\n },\n \"inputImpedanceMagnitude\": {\n \"title\": \"入力インピーダンス(Ω)\",\n \"x-axis\": \"周波数(Hz)\",\n \"x-hover\": \"周波数:\",\n \"y-axis\": \"入力インピーダンス(Ω)\",\n \"y-hover\": \"入力インピーダンス:\"\n },\n \"inputImpedancePhase\": {\n \"title\": \"入力インピーダンス(°)\",\n \"x-axis\": \"周波数(Hz)\",\n \"x-hover\": \"周波数:\",\n \"y-axis\": \"入力インピーダンス(°)\",\n \"y-hover\": \"入力インピーダンス:\"\n },\n \"magnitudeDb\": {\n \"title\": \"振幅(dB)\",\n \"x-axis\": \"周波数(Hz)\",\n \"x-hover\": \"周波数:\",\n \"y-axis\": \"振幅(dB)\",\n \"y-hover\": \"振幅:\"\n },\n \"magnitudeVV\": {\n \"title\": \"振幅(V/V)\",\n \"x-axis\": \"周波数(Hz)\",\n \"x-hover\": \"周波数:\",\n \"y-axis\": \"振幅(V/V)\",\n \"y-hover\": \"振幅:\"\n },\n \"noise\": {\n \"adc-bandwidth\": \"ADCバンド幅\",\n \"adc-input-range\": \"ADC入力レンジ\",\n \"adc-range\": \"ADCの範囲\",\n \"adc-table-title\": \"ADCテーブル\",\n \"enob-comp-sel\": \"等価ビット数\",\n \"enob-comp-tol\": \"等価ビット数\",\n \"enob-nominal\": \"公称有効\",\n \"enob-worst\": \"ワースト有効\",\n \"graph-title\": \"スペクトル・ノイズ密度\",\n \"noise-referred-filter-output-1\": \"全フィルタ出力換算ノイズ。\",\n \"noise-referred-filter-output-2\": \"1/fノイズはモデル化されていません。\",\n \"nominal-label\": \"少量\",\n \"peak-to-peak-title\": \"ピーク to ピーク\",\n \"rms-peak-to-peak\": \"RMS & ピーク to ピーク\",\n \"rms-title\": \"RMS\",\n \"title\": \"ノイズ\",\n \"worst-case-label\": \"最も悪いケース\",\n \"x-axis\": \"周波数(Hz)\",\n \"x-hover\": \"周波数:\",\n \"y-axis\": \"スペクトル・ノイズ密度 (V/√Hz)\",\n \"y-hover\": \"ノイズ:\"\n },\n \"phaseDegrees\": {\n \"title\": \"位相 (°)\",\n \"x-axis\": \"周波数(Hz)\",\n \"x-hover\": \"周波数:\",\n \"y-axis\": \"位相 (°)\",\n \"y-hover\": \"位相:\"\n },\n \"phaseDelay\": {\n \"title\": \"位相遅れ\",\n \"x-axis\": \"周波数(Hz)\",\n \"x-hover\": \"周波数:\",\n \"y-axis\": \"位相遅れ (s)\",\n \"y-hover\": \"位相遅れ:\"\n },\n \"phaseRadians\": {\n \"title\": \"位相(rad)\",\n \"x-axis\": \"周波数(Hz)\",\n \"x-hover\": \"周波数:\",\n \"y-axis\": \"位相(rad)\",\n \"y-hover\": \"位相:\"\n },\n \"power\": {\n \"header-text\": \"ご注意:このページでは、フィルターの静電消費電力を示しています。入力信号は、電力供給に莫大なインパクトをもたらします。\",\n \"order-with\": {\n \"order1\": \"1次と共に\",\n \"order2\": \"2次と共に\"\n },\n \"reference-stage-part-with\": \"AD8031と共に\",\n \"reference-stage-text\": \"リファレンス段\",\n \"reference-whats-this\": \"詳細を見る\",\n \"title\": \"電源\",\n \"total-power\": \"静止電力の合計\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"stages\": {\n \"filter-types\": {\n \"type-name-band-pass\": \"バンドパス\",\n \"type-name-high-pass\": \"ハイパス\",\n \"type-name-low-pass\": \"ローパス\"\n },\n \"header-text\": \"フィルタは要求します{n}以下の性質のオペアンプステージ\",\n \"implementations\": {\n \"buffered-rc\": \"RC\",\n \"gain\": \"ゲイン\",\n \"inductor\": \"インダクタ許容誤差\",\n \"multiple-feedback\": \"複数の
フィードバック\",\n \"sallen-key\": \"サレンキー\"\n },\n \"orders\": {\n \"first-order\": \"1次\",\n \"second-order\": \"2次\"\n },\n \"simulated\": \"シュミレーション\",\n \"simulated-to\": \" へ {value}\",\n \"target\": \"ターゲット\",\n \"title\": \"段\",\n \"tooltip\": {\n \"fp\": \"そのステージの極周波数。カットオフ周波数、自然周波数、あるいは基本周波数としても知られています。\",\n \"gain\": \"ゲイン (V/V): ゲインステージ\",\n \"q\": \"Qはそのステージでのピーキングのレベルを示します。この値が高いほど極周波数付近でのピークが高い事を表します。\"\n },\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"stepResponse\": {\n \"title\": \"ステップ応答\",\n \"x-axis\": \"時間(秒)\",\n \"x-hover\": \"時間:\",\n \"y-axis\": \"振幅 (V/V)\",\n \"y-hover\": \"振幅:\"\n },\n \"voltageRange\": {\n \"amp-input-range\": \"入力範囲\",\n \"amp-output-range\": \"出力範囲\",\n \"amplifier\": \"アンプ\",\n \"amplifier_specs\": \"アンプの仕様\",\n \"input-range\": \"入力範囲\",\n \"max-signals\": \"最大信号\",\n \"max-signals-nominal\": \"少量\",\n \"max-signals-worst-case\": \"最も悪いケース\",\n \"maximum-input\": \"最大入力\",\n \"output-range\": \"出力信号\",\n \"signal-possible\": \"可能な信号\",\n \"slew-rate\": \"スルー・レート\",\n \"title\": \"電圧範囲\",\n \"warning-input-range-voltage-range\": \"このステージの入力範囲は信号範囲を制限します。\",\n \"warning-output-range-voltage-range\": \"このステージの出力範囲は信号範囲を制限します。\",\n \"warning-slew-rate_voltage-range\": \"このステージのスルーレートは信号範囲を制限します。\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n }\n },\n \"footer\": {\n \"copyright\": \"© 1995 - 2018 Analog Devices, Inc. All Rights Reserved \",\n \"privacy-security\": \"個人情報保護方針\",\n \"privacy-security-url\": \"/jp/about-adi/landing-pages/001/privacy_security_statement.html\",\n \"privacy-settings\": \"Privacy Settings\",\n \"privacy-settings-url\": \"/jp/landing-pages/001/privacy-settings.html\",\n \"sitemap\": \"サイトマップ\",\n \"sitemap-url\": \"/jp/sitemap.html\",\n \"terms-of-use\": \"利用規約\",\n \"terms-of-use-url\": \"/jp/about-adi/landing-pages/001/terms_of_use.html\"\n },\n \"fragments\": {\n \"at\": \"@\",\n \"eq\": \"=\",\n \"f\": \"f\",\n \"in\": \"IN\",\n \"left\": \"◄----\",\n \"n-a\": \"N/A\",\n \"out\": \"OUT\",\n \"p\": \"p\",\n \"plus\": \"+\",\n \"q\": \"Q\",\n \"r\": \"R\",\n \"ref\": \"REF\",\n \"right\": \"---►\",\n \"times\": \"×\",\n \"to\": \"to\"\n },\n \"header\": {\n \"applications\": \"アプリケーション\",\n \"community\": \"コミニティ\",\n \"design-center\": \"設計支援\",\n \"education\": \"調べる/学ぶ\",\n \"parametric-search\": \"パラメータ検索\",\n \"products\": \"製品\",\n \"support\": \"サポート\",\n \"title\": \"アナログ・フィルター・ウィザード\"\n },\n \"help\": {\n \"common\": {\n \"noise\": {\n \"adc-bandwidth\": {\n \"message\": \"

ここでADCの帯域を入力してください。この値とスペクトル密度のグラフから得たノイズを組み合わせて、実効値とピークtoピーク・ノイズを計算します。

実効値とピークtoピークのノイズを計算するためにADCの帯域全体に渡ってスペクトル密度のグラフのノイズを積分します。スペクトル密度のグラフを良く見ると、最も高い周波数でのスペクトル密度の数字はゼロではなく、実際にはグラフが示す周波数よりも高い周波数でも続いています。ADCはフィルタとして動作し、この残留高周波ノイズを取り除きます。

ADCを1次フィルタとしてモデル化します。ADCロールオフが1次のグラフを作成し、それにスペクトル密度のグラフを掛け、次にその結果を積分します。もしお客様のADCがより鋭いロールオフ(たとえばsinc^3Σ-Δ)の場合、このツールは全体のシステム・ノイズを多少過大評価する可能性があります。

ADCによっては駆動アンプとADCの間にRCフィルタが必要になります。もしこのRCフィルタの帯域がADC自信の帯域よりも低い(あるいはお客様がADCの帯域をご存じない)場合、代わりにこのRCフィルタのカットオフ周波数をご使用ください。   RCフィルタのカットオフ周波数は 1/(2πRC)です。

\",\n \"title\": \"ADCバンド幅\",\n \"tooltip\": \"ヘルプはここをクリック\"\n }\n },\n \"power\": {\n \"message\": \"

-­Vs=0の時、フィルタ・ツールはリファレンス段を追加します.このリファレンス段はフィルタ回路の基準電圧として機能する中間電源電圧を作ります.

リファレンス段はコンデンサ10μFを駆動するオペアンプAD8031を含みます.一般的にはコンデンサをオペアンプで直接駆動するのは良くありません.しかし駆動するコンデンサが十分大きければAD8031の回路構造はこの回路が安定に動作する事を保証します.この回路の利点は全周波数スペクトルにわたり低周波数ソース・インピーダンスになっている事です。フィルタ回路はリファレンスに対してかなりの量の電流の吐き出し/吸い込みを行う可能性があるので、ベストのフィルタ性能を得るに低ソース・インピーダンスのリファレンスが重要です.このリファレンス回路を使用する時、次の事に留意してください:

  • AD8031を使用する。この回路で他のオペンプに置き換えると不安定になります.
  • AD8031が駆動するコンデンサは10μF以上にする必要があります。このコンデンサと並列にいくつでもバイパスコンデンサを接続する事ができます.
  • AD8031とコンデンサの間に抵抗は接続しないでください.

ツールはリファレンス電圧を正電源電圧から直接電圧分割器を使って得ている事を示しています.しかしこの電圧を又ADR4520 又は ADR3420のようおな電圧リファレンスICから生成する事もできます. これらのリファレンスICのフットプリントは便利のよいように評価ボードに含まれています.

\",\n \"title\": \"リファレンス段\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"voltage-range\": {\n \"message\": \"アクティブ・フィルタの入力電圧範囲と対応する出力電圧範囲はオペアンプの非理想的な特性によって制限されます。”電圧範囲”ビューは計算された最大入力範囲を示し、どのオペアンプの仕様がその制限に影響を及ぼしているかを強調します。
  • ”可能な最も大きな入力信号”は許容される最大入力電圧です- それよりも大きな入力信号を印加するとクリッピングまたは歪をもたらします。
  • ”アンプの仕様”セクションは各段で選択されたオペアンプの仕様を示します。
  • ”最大信号”セクションは最大入力許容力電圧を決定する計算の結果を示します。オペアンプ段と入力信号電圧を制限する仕様は警告アイコンで表示されます。”最大信号”セクションの中の他の値は制限パラメータが絶対に超えないように計算されます-言い変えると全体のフィルタ経路を通して確実にクリッピングあるいは歪が生じないようにします。
  • ”部品の許容誤差”タブには、公称値とワーストケースの値があります。公称は回路図に示された部品の公称値と想定します。ワーストケースは許容誤差範囲の限界(その部分ではゲイン伝達関数がより大きくなっていて、入力信号をさらに低く抑える必要がでてきます)でのパッシブ値を使って計算します。部品の許容誤差によるゲイン伝達関数の不確実の説明については”部品許容誤差”タブの”振幅”ビューをご覧ください。

スルーレートの制限: オペアンプの1つのスルーレートがフィルタの入力電圧範囲を制限する仕様の場合、オペアンプの出力はその能力以上には変化しないので、入力信号電圧はそのスルーレートが対応できるレベルまで減少します。詳細についてはミニチュートリアル MT-045:オペアンプの帯域幅と帯域幅平坦度の”スルーレートとフルパワー帯域幅”セクションをご覧ください。

出力電圧範囲の制限: オペアンプの1つの出力電圧範囲がフィルタ入力電圧範囲を制限する仕様の場合、入力信号電圧はオペアンプ出力がオーバードライブしないレベルに減少します。

入力電圧範囲の制限:オペアンプの1つの入力電圧範囲がフィルタ入力電圧範囲の制限する仕様の場合、入力信号電圧はオペアンプ入力がオーバードライブしないレベルに減少します。

\",\n \"title\": \"電圧範囲\",\n \"tooltip\": \"ヘルプはここをクリック\"\n }\n },\n \"comp-select\": {\n \"choosing-components\": {\n \"message\": \"

仕様決定の画面でフィルタの理論的な性能を選択し終わると、次は部品選択の画面で実際の部品を選ぶ番です。部品を変更した際は、回路図上でその変更を見る事ができます。他の表示に変更すれば、部品の選択がフィルタ性能にどのように影響するか見る事ができます。

フィルタ・ウィザードは部品を選択するために異なる2通りの方法に対応しています。

方法1:ソフトウェアに部品を選択させる方法「”推奨値”ラジオボタンを選択」  このモードではフィルタ・ウィザード・ソフトウェアがオペアンプ、抵抗、コンデンサを選びます。このモードでは3種類の最適化に対応します。

  • 電圧範囲:ツールは広い入/出力範囲のオペアンプを選択します。 抵抗値とコンデンサ値は\\\"ノイズ\\\"の適正化と\\\"電源\\\"の最適化の間の値になる傾向があります.
  • ノイズ:ツールは低スペクトル・ノイズ密度のオペアンプを選択します;電圧ノイズと電流ノイズの両方を計算に入れます。ツールは抵抗からのノイズに対する影響を低く抑えるために、できるだけ低い値の抵抗とできるだけ高い値のコンデンサを使用します.
  • 電源: ツールは低消費電流のオペアンプを選択します。ツールは消費電流を最小限にするためにできるだけ高い値の抵抗とできるだけ低い値のコンデンサを選択します.
  • 方法2:お客様ご自身で部品を選択する方法「”自分で選ぶ”ラジオボタンを選択」。

    このモードでは”推奨値”モードで使われた最後の値で始まります。次に3種類の方法で部品の値を調整する事ができます。

    • ー 抵抗ーコンデンサ間のトレードオフを調整する:たとえば抵抗値がより大きく、コンデンサ値がより小さくなるようにスライダーを動かす事が出来ます。このスライダーを調整する時、RC時定数は同じ値を保ちます。従ってフィルターのカットオフ周波数は仕様決定画面で選択したカットオフ周波数と同じ値になっています。
    • ーゲイン抵抗を調整する:そのステージにゲイン調整用抵抗が接続されていれば、ゲイン抵抗値の絶対値を調整できます。抵抗比は仕様決定画面で選択されたゲインを維持するために一定に保たれます。
    • ー異なるオペアンプを選択する:プログラムは仕様決定画面でのお客様の入力を基に最小要求を計算します。オペンプ一覧表の中からこれらの最小要求を満足するオペアンプを選択できます。

    また、ステージ名のバーをつかんで、他のステージ・バーの上または下にドラッグ&ドロップする事によりそれらのステージの順序を入れ替える事ができます。ステージの順番を変えても一般的に大きさや位相性能には影響しませんが、ノイズや電圧範囲に大きな影響がある可能性があります。

    \",\n \"title\": \"設定を最適化する\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"compensate-gbw\": {\n \"message\": \"

    もしこのコントロールにチェックが付いてない状態の場合、ソフトウエア・プログラムは(フィルタ教本を使って行うであろう方法と同様に)オペアンプを無限に速い理想的なオペアンプと仮定して、抵抗値とコンデンサ値を計算します。実際のオペアンプは無限に速くはないので、この速さの限界がフィルタ応答に影響を及ぼします.もしこのコントロールにチェックが付いていれば、プログラムは抵抗値とコンデンサ値を調整して、最終結果が意図した結果により近くなるようにオペアンプの限界のある利得帯域幅による影響を補正します.

    たとえば:仮にフィルタ段のカットオフ周波数が100KHzで、Qが1と想定されるとします. しかしオペアンプの利得帯域幅積には限界があるので、教本にある部品での実際の結果はカットオフ周波数が95 KHz で Q が 1.1になるかもしれません.もしチェックボックスにチェックが入っていれば、ツールはオペアンプが理想的とすればカットオフ周波数が105kHzでQが0.9のような反対方向にはならないような抵抗値とコンデンサ値を選択して補償します.  誤差は相殺して理想の応答に近い結果が得られます.

    一般的にオペアンプを選択する場合はこの補正方法に依存するよりも十分なゲイン帯域幅のあるオペアンプを選択する方が優れています。もしお客様が”推奨値”モードの”電圧範囲”での最適化あるいは”低ノイズ”での最適化のどちらかを選択した場合、ツールはゲイン帯域幅として十分に高く理想に近いが、消費電力が過度に大きくならない程度のゲイン帯域幅を持つオペアンプを選択しようとします。従って”GBWの補正”のチェックボックスの有り無しで回路に大きな違いはないはずです。しかし”低電力”の最適化を選択した場合、この”GBWの補正”のボックスにチェックを入れると電力を節約するためにオペアンプのゲイン帯域幅要求を緩和するので性能が改善する可能性があります。もし”自分で選ぶ”モードにおいて、推奨ゲイン帯域幅かそれ以下の帯域幅のオペアンプを選択した場合、このチェックボックスを確認する事は役に立つかもしれません。

    この技術の限界:

    • この技術はオペアンプの利得帯域幅積のみ補償し、その出力抵抗は補償しません。もしローパスフィルタあるいはバンドパスフィルタを設計していて、応答曲線が高い周波数で上昇するのを観察したら、これは出力抵抗の非理想特性の結果と考えられます.出力抵抗はより高い利得帯域幅のオペアンプを選択したり、標準(レールtoレールではなく)出力段のオペアンプを選択したり、あるいは回路の抵抗値を増加して改善する必要があります。.
    • この技術によってオペアンプの利得帯域幅積からすべての誤差は削減されません.
    • この技術によって高い周波数でのハイパスフィルタのロールオフは改善できません.
    • プログラムはオペアンプのオープンループゲイン曲線をかなり簡単なモデルと仮定します.もしオペアンプの実際の性能がモデルから大幅に変化したら、この利得帯域幅の補正は正しくないかもしれません. 結果をスパイスと実験室でチェックする必要があります.
    • 得に高いQの回路を取り扱う時、補償はRとC部品のかなり小さなばらつきの影響を受ける可能性があります。 実際の部品の許誤差が結果にどのように影響するかについて確認するために\\\"部品許容誤差\\\"画面を使用してください.
    \",\n \"title\": \"GBWの補正\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"component-sizing\": {\n \"message\": \"

    フィルタ・ウイザートによって抵抗 対 コンデンサ比を変更する事ができます.抵抗を大きくするとノイズとバイアス電流誤差が増えますが、オペアンプの出力抵抗による誤差が減少し、電力消費も小さくなります.できればコンデンサ値を0.1μF以下にしてください ;これによりX7RコンデンサではなくC0Gを使用する事ができます.C0Gタイプのコンデンサの方がX7Rタイプより温度と供給電圧に対してはるかに安定しているのでC0Gをお薦めします.

    フィルタの中には正と負のフィードバック経路がある回路構成のフィルタがあります. このような場合1つの経路は簡単な抵抗比です。このセクションの2番目のコントロールによりこのフィードバック経路の絶対値を調整できます(一方比率は同じ値に維持します)

    \",\n \"title\": \"「部品のサイジング」\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"implementation\": {\n \"message\": \"

    フィルタ・ウイザードは以下の回路組込みをサポートしています:Sallen Key(サレンキー)、Multiple Feedback(多重帰還形フィルタの変形)、1次順序やフィルタ段タイプの組込みが適切な場合はここに表示されます.

    サレンキー(Sallen Key)実装についての詳細は、MT-222 チュートリアル(英語)をご覧ください。 サレンキーと多重機関回路の実装についての比較は、 Filtering 101 : サレンキー回路 vs 多重帰還回路 のビデオをご覧ください

    \",\n \"title\": \"組込み\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"noise\": {\n \"adc-table\": {\n \"message\": \"

    この表は、ADCの有効ビット数を示しており、有効ビット数(ENOB)は次式から計算できます:

    最大入力信号(rms)= ADCの入力範囲(ピークtoピーク)/ 2√2

    SNR = 20 × log(最大入力信号(rms)/ノイズ(rms))

    ENOB = (SNR – 1.76) / 6.02

    \",\n \"title\": \"ADCテーブル\",\n \"tooltip\": \"ヘルプはここをクリック\"\n }\n },\n \"op-amp-selection\": {\n \"message\": \"

    もしツールが選択したオペアンプと違うオペアンプを選ぶ場合、オペアンプを変更できるかどうかは下記の判定によります.

    ツールはADIのオペアンプのライブラリを3つの分類に分けます:

    • 使用不可:ツールは各種の理由によりあるオペアンプは使用不可にしいます:オペアンプが単純にフィルタを実施するには十分速くない、オペアンプが評価ボードに適さない、あなたが指定した電源でオペアンプが動作しない、オペアンプ・データベースにツールが必要とする仕様が欠けている等.
    • マージナル:あるオペアンプの速さはユーザが選んだフィルタを実施するのに十分速いが多少の誤差がある。最適ではないが、これらのオペアンプの一つを使用したい。たとえば、在庫している、あるいは真剣に回路の電力を節約しなければならない。ツールは警告を出しますが、これらの部品を設計に使用する事を許可します。 時にはこれらのオペアンプが作る誤差を削減するためにこれらのオペアンプについて\\\"GBWの補償\\\"オプションを使用するのは良い考えです.
    • 推奨品: これらのオペアンプは十分速いのでユーザの設計の中で正常に動作します.
    \",\n \"title\": \"オペアンプ\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"op-amp-selection-help\": {\n \"message\": \"

    これらのオペアンプの条件:

    • 全体の供給電圧:部品選択の「オペアンプ電圧供給」セクションの値で決まります。
    • 推奨されるGBW:ゲイン帯域幅がこの値以上のオペアンプは、フィルタ段用に優れた性能を発揮します。オペアンプ・リストの「推奨」部品となるためには、オペアンプはこの最小GBWを満たす必要があります。
    • 要求されるGBW:ゲイン帯域幅がこの閾値より小さいオペアンプは選択できません。これは、フィルタ性能が低下し、正確なシミュレーションができないためです。オペアンプのGBWが「推奨されるGBW」と「要求されるGBW」の間にある場合は、fpとQが影響を受けますが、アプリケーションによっては十分に良好な性能を保つことができます。

    GBW制限値の計算方法

    フィルタ設計の標準的な経験則は、最小GBW > ゲイン × Q × fp × 100です。この経験則は、簡単で覚えやすいという利点がありますが、一般に、必要以上に慎重な答えが導き出されます。言い換えると、この式が推奨する値よりも遅いオペアンプを使用しても、全く良好なフィルタ性能を得られる場合が多々あるということです。

    あいにく、より正確な答えを得ようとすると、数式は非常に複雑なものになってしまいます。コンピュータではこの数式をきちんと処理できるため、フィルタ・ウィザードでは、この複雑な数式を使用して計算し、数値を表示しています。残念ながら、これらの数式は複雑で、それを見ても理解が増すことはありません。

    オペアンプがフィルタ応答に与える影響を理解するには、Mac Van Valkenburgの優れた著書『Design of Analog Filters』が参考になります。この著書にはオペアンプの有限のアンプ利得がフィルタ応答全体に及ぼす影響が詳述されており、できる限り多くの式を用いて、内容を理解できるようになっています。フィルタ・ウィザードで使用している式は、この著書の影響を強く受けています。

    どこで線引きをするかも問題です。これはどの程度の誤差を許容するかに大きく依存します。このことが、推奨のGBW(余裕を持った下限値と思われる値)と要求されるGBW(かなり正確なシミュレーションが可能と想定される最小値)の両方を提示する理由です。最も重要な点は、応答が実時間でシミュレーションされるので、オペアンプがフィルタ性能に及ぼす影響を直ちに知ることができることです。推奨のGBWは大まかな初期設定値です。そのフィルタ性能が特定の目的に適うかどうかを判断するのは、最終的にお客様です。アナログ・デバイセズでは、シミュレーションが高速で使いやすいものとなるよう改良を重ねています。そのため、様々なオプションを即座に試していただき、その結果を、お客様にとって重要な尺度で評価いただけます。

    \",\n \"title\": \"オペアンプの条件\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"voltage-supplies\": {\n \"message\": \"

    オペアンプの電源電圧を選択してください。「推奨値」を選択すると適切な値のオペアンプが選択され、「自分で選ぶ」を選択すると、製品の選択肢を絞ることができます。

    単電源電圧(–Vs=0)を選択すると、ツールは回路に中間電源リファレンス電圧発生器を挿入します.

    \",\n \"title\": \"オペアンプ電圧供給\",\n \"tooltip\": \"ヘルプはここをクリック\"\n }\n },\n \"comp-tolerance\": {\n \"GBW\": {\n \"message\": \"

    ほとんどのオペアンプの場合、ゲイン帯域幅の部品毎のばらつきは+/-20%typ です.この制御を行う事によりこのゲイン帯域幅のばらつきの影響がわかります.オペアンプの速度が設計回路に対してぎりぎりでなければ、通常ゲイン帯域幅積のばらつきが許容誤差の包絡線全体に影響を及ぼす事はほとんどありません.

    \",\n \"title\": \"オペアンプGBW\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"capacitor\": {\n \"message\": \"

    コンデンサ - 誤差

    この設定はコンデンサ容量の誤差範囲を指定します。この設定値は誤差の包絡線の計算に用いられ、グラフ表示されます。

    たとえば、前ページのフィルタ計算の結果、最適なコンデンサの値が1.12μFになったとします。E6系列が選択されている場合、コンデンサの値は端数が切捨てられ1μFになります。誤差20%を選択した場合、プログラムは1μF +/-20%として包絡線を計算します。

    一般的に1%のコンデンサ値は入手性に制限があるので、このプログラムは1%誤差コンデンサの容量を4.7nF以下に制限しています。4.7nFより高い値の場合は5%の誤差に変更されます。

    コンデンサの誤差 使用できるコンデンサ容量の範囲
    理想10pF ~ 10µF
    1%10pF ~ 4.7nF
    5%10pF ~ 10µF
    10%10pF ~ 10µF
    20%10pF ~ 10µF

    一般的にコンデンサはフィルタ回路構成部品の中で最も精度の悪い部品なので、誤差の小さいコンデンサを使用する事をお薦めします。誤差5%またはそれ以下で、温度特性C0G(あるいはNP0)の良好なセラミック・コンデンサをお薦めします。

    \",\n \"title\": \"コンデンサ\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"inductor\": {\n \"message\": \"

    インダクタ – 誤差

    この設定はインダクタの誤差範囲を指定します。この設定値は誤差の包絡線の計算に用いられ、グラフ表示されます。

    たとえば、前ページのフィルタ計算の結果、理想的なインダクタの値が1.12nHになったとします。E6系列が選択されている場合、インダクタの値は端数が切捨てられ1 nHになります。誤差20%を選択した場合、プログラムは1 nH +/-20%として包絡線を計算します。

    インダクタ の誤差 使用できるインダクタの範囲
    理想10nH ~ 33µH
    5%10nH ~ 33µH
    10%10nH ~ 33µH
    20%10nH ~ 33µH

    インダクタの選定の際には、通過帯域周波数(ローパス・フィルタの場合)あるいは中心周波数(バンドパス・フィルタの場合)の10倍以上の共振周波数を持つインダクタを選択する事をお勧めします。この制約はお客様が注文できるインダクタの誤差に影響する可能性があります。

    \",\n \"title\": \"インダクタ\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"noise\": {\n \"adc-table\": {\n \"message\": \"

    この表は、ADCの有効ビット数を示しており、有効ビット数(ENOB)は次式から計算できます:

    最大入力信号(rms)= ADCの入力範囲(ピークtoピーク)/ 2√2

    SNR = 20 × log(最大入力信号(rms)/ノイズ(rms))

    ENOB = (SNR – 1.76) / 6.02

    公称値でワーストケースの組み合わせの部品対する有効ビット数を計算します。許容誤差をより厳しくすると、これらの数は互いに近くなります。

    \",\n \"title\": \"ADCテーブル\",\n \"tooltip\": \"ヘルプはここをクリック\"\n }\n },\n \"pref-series-capacitor\": {\n \"message\": \"

    コンデンサ - 系列の指定

    使用する部品の系列を設定することができます。設定された系列によって値が丸め処理されます。

    たとえば、前ページのフィルタ計算の結果、コンデンサの理想値が1.12μFになった場合、次の表は指定された系列に基づいて1.12μFがどのように丸め処理されるかを示しています。

    設定した系列 丸め処理される値
    理想1.12 uF
    E241.1 uF
    E121.2 uF
    E61 uF
    \",\n \"title\": \"コンデンサ\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"pref-series-inductor\": {\n \"message\": \"

    インダクタ –系列の指定

    使用する部品の系列を設定することができます。設定された系列によって値が丸め処理されます。

    たとえば、前ページでのフィルタの計算の結果、理想インダクタが1.12uH になった場合、次の表は指定された系列に基づいて1.12uHがどのように丸め処理されるかを示しています。

    設定した系列 丸め処理される値
    理想1.12 uH
    E121.2 uH
    E61 uH

    インダクタの選定の際には、通過帯域周波数(ローパス・フィルタの場合)あるいは中心周波数(バンドパス・フィルタの場合)の10倍以上の共振周波数を持つインダクタを選択する事をお勧めします。この制約はお客様が注文できるインダクタの誤差に影響する可能性があります。

    \",\n \"title\": \"インダクタ\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"pref-series-resistor\": {\n \"message\": \"

    抵抗 - 望ましい系列

    使用する部品の系列を設定することができます。設定された系列によって値が丸め処理されます。

    たとえば、前ページのフィルタ計算の結果、抵抗の理想値が1.12kΩになった場合、次の表は指定された系列に基づいて1.12kΩがどのように丸め処理されるかを示しています。

    設定した系列 丸め処理される値
    理想1.12 kΩ
    E961.13 kΩ
    E481.1 kΩ
    E241.1 kΩ
    E121.2 kΩ
    E61 kΩ
    \",\n \"title\": \"抵抗\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"resistor\": {\n \"message\": \"

    抵抗 - 誤差

    この設定は抵抗値の誤差範囲を指定します。この設定値は誤差の包絡線の計算に用いられ、グラフ表示されます。

    たとえば、前ページのフィルタ計算の結果、最適な抵抗値が1.12kΩになったとします。E6系列が選択されている場合、抵抗値は端数が切り上げられ1.13kΩになります。誤差1%を選択した場合、プログラムは1.13kΩ +/-1%として包絡線を計算します。

    一般的に誤差0.1% と 0.5%の抵抗値は入手性に制限があるので、このプログラムはこれらの誤差を持つ抵抗を10Ω ~ 1 MΩの範囲に制限しています。この範囲を外れる抵抗値を使う場合は1%の誤差に変更されます。

    抵抗の誤差 使用できる抵抗値の範囲
    理想1Ω ~ 10 MΩ
    0.1%10Ω ~ 1 MΩ
    0.5%10Ω ~ 1 MΩ
    1%1Ω ~ 10 MΩ
    5%1Ω ~ 10 MΩ

    一般的に精度とコストとのバランスが良いため、フィルタ設計には25 ppm/°C の薄膜抵抗をお薦めします。

    \",\n \"title\": \"抵抗\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"step-response\": {\n \"why-no-envelope\": {\n \"message\": \"

    本ツールは、ステップ応答のグラフでは許容差の計算は行いません。正確なステップ応答の計算には、処理時間が必要な大量の繰返し演算が必要です。ツール自体のインタラクティブ性を保つため、許容差の計算は除外しています。ステップ応答の許容差計算にはSPICEシミュレータ上でのモンテカルロ法によるシミュレーションを実施されることをおすすめします。

    包絡線を計算しない時は、フィルタの公称部品の値に基づいて公称ステップ応答を計算します。公差値を変更すると公称値が変わるので、ステップ応答グラフで多少の変動があるのがわかります。

    \",\n \"title\": \"なぜ包絡線がないのか?\",\n \"tooltip\": \"ヘルプはここをクリック\"\n }\n }\n },\n \"main\": {\n \"message\": \"

    ツール概要

    アナログ・フィルタ・ウィザードを利用すれば、実際のオペアンプを使い、ローパス、ハイパス、あるいはバンドパス・フィルタを数分間で設計することができます。理想の仕様から実際の回路動作までフィルタ設計の各種特性を確認しながら、設計プロセスを進めることができます。ゲインと帯域幅、ノイズ、電源電流などのオペアンプ仕様のトレードオフを迅速に評価し、必要な条件に対応する最良のフィルタ設計を決定できます。ウィザードは以下のような機能を備えています。

    • フィルタ応答スライダ - 最小の段数(チェビシェフ)と最速の設定(ベッセル)の間でスライダを移動させることにより、さまざまな応答(チェビシェフ、バターワース、バターワース・ベッセル)が得られます。
    • フィルタ・ウィザードでオペアンプを選ぶ(低消費電力、低ノイズ、または電圧範囲のいずれかに最適化)か、「自分で選ぶ」を選択して手動でオペアンプを選択できます。
    • 「自分で選ぶ」のセクションでは、サレンキーまたは多重帰還方式を選ぶことができます。
    • 計算とプロットには、非理想的なオペアンプ特性と受動部品の許容誤差の影響が含まれています。
    • フィルタ・ウィザード評価システムを使用したプロトタイプの最終設計
    • 設計を保存して共有し、設計レポート、SPICEシミュレーション・ファイル、部品表、評価用PCB設計ファイルなどを含む設計ファイル・パッケージをダウンロードします。

    特定の項目に関するヘルプ

    特定の項目に関するヘルプを表示するには、その項目の横にある青いクエスチョン・マーク をクリックしてください。

    \",\n \"title\": \"フィルタ・ウィザードのヘルプ\"\n },\n \"next-steps\": {\n \"circuit\": {\n \"bypass-capacitor-title\": \"バイパスコンデンサ\",\n \"eval-board-help\": {\n \"message\": \"

    フィルタ・ウィザードの評価ボード・システムはマザーボードと複数のドーターボードで構成されています。各マザーボードには4つのドーターボード用スロットがあります。1ステージあたり1つのドーターボードを使用します。回路で4ステージ以上必要とする場合は、複数のマザーボードをいっしょに使用する事ができます。マザーボードには(必要に応じて)バイパス回路とリファレンス段も含まれています。

    このマザーボード/ドーターボード構成の評価システムによって、たとえばノイズ性能と入力範囲のトレードオフを行うといったステージの順番を速やかに変えたり、異なるステージ・タイプを複数使用することが可能といった利点があります。

    • フィルター・ウィザードの評価ボード・システムには異なるタイプのステージに対応するために複数のドーターボード・モデルが含まれています。これらのドーターボードを同一回路の中で混在させ、組み合わせて使うことができます。たとえば、1つのステージではシングル・オペアンプを使用し、もう1つのステージではデュアル・オペアンプを使用するといった事ができます。あるいはローパスとハイパス・ステージをそれぞれ組み合わせてバンドパス・フィルタを形成する事ができます。
    • 各ステージの性能測定は容易です。 回路はどのステージから開始し、どのステージで終わるかが非常にはっきりしています。1つのステージを分離してデバックできます。

    デバイスが実装されていない状態の評価ボードとサンプルのオペアンプはアナログ・デバイセズまたは販売代理店からご購入いただけます。

    フィルター・ウィザードは各ボードの部品を部品番号の最後の文字で表現します。たとえば、ステージAの部品をR1A、 U1Aなどと呼びます。ステージBの部品をR1B、 U1Bのように呼びます。マザーボードの部品をR1M、 U1Mと呼びます。もしお客様の回路で同じタイプのドーターボードが複数使用される場合は、どのボードがステージAで、どのボードがステージBであるかを記録するためにお客様のドーターボードにマーキングする事をお薦めします。

    マザーボードとドーターボードの図
    \",\n \"title\": \"評価ボードシステムについて\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"opamp-spares-title\": \"スペア\",\n \"whats-this\": {\n \"message\": \"

    -­Vs=0の時、フィルタ・ツールはリファレンス段を追加します.このリファレンス段はフィルタ回路の基準電圧として機能する中間電源電圧を作ります.

    リファレンス段はコンデンサ10μFを駆動するオペアンプAD8031を含みます.一般的にはコンデンサをオペアンプで直接駆動するのは良くありません.しかし駆動するコンデンサが十分大きければAD8031の回路構造はこの回路が安定に動作する事を保証します.この回路の利点は全周波数スペクトルにわたり低周波数ソース・インピーダンスになっている事です。フィルタ回路はリファレンスに対してかなりの量の電流の吐き出し/吸い込みを行う可能性があるので、ベストのフィルタ性能を得るに低ソース・インピーダンスのリファレンスが重要です.このリファレンス回路を使用する時、次の事に留意してください:

    • AD8031を使用する。この回路で他のオペンプに置き換えると不安定になります.
    • AD8031が駆動するコンデンサは10μF以上にする必要があります。このコンデンサと並列にいくつでもバイパスコンデンサを接続する事ができます.
    • AD8031とコンデンサの間に抵抗は接続しないでください.

    ツールはリファレンス電圧を正電源電圧から直接電圧分割器を使って得ている事を示しています.しかしこの電圧を又ADR4520 又は ADR3420のようおな電圧リファレンスICから生成する事もできます. これらのリファレンスICのフットプリントは便利のよいように評価ボードに含まれています.

    \",\n \"title\": \"中間電源電圧リファレンス\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"whats-this-trigger\": \"詳細を見る\",\n \"why-spares\": {\n \"message\": \"

    デュアル・オペアンプを使用する時、フィルタ・ウイザードは常にパッケージに含まれる2つのオペアンプの1つだけを使用します。未使用のオペアンプはスペア・セクションに表示されます。このオペアンプも配線されているため、消費電力は最少です。

    デュアル・オペアンプを使用した複数ステージのフィルタの場合、フィルター・ウィザードはオペアンプを冗長に使います;例えばデュアル・オペアンプが内蔵する2個のオペアンプのうち、1個のみをそのステージに使用し、余ったもう1つの内蔵オペアンプを別のステージに使用する事はしません。フィルタウィザードでは評価ボード・システムをシンプルに構成するためにこのようにしています:1ステージあたり1つのICを使うルールにする事によって、1ステージあたり1つのドーターカードにする事ができるので、性能の違いを見るために異なるドーターカードと容易に交換する事ができます。

    お客様の回路を量産用にレイアウトする時には、一つのデバイス・パッケージ内の各々のオペアンプを無駄なく利用する事をお薦めします。

    \",\n \"title\": \"スペアが必要な理由\",\n \"tooltip\": \"ヘルプはここをクリック\"\n }\n }\n },\n \"specifications\": {\n \"filter-response\": {\n \"message\": \"

    このスライダを使用してフィルタ応答を選択します。応答の選択は部品点数 対 他の希望の特性の間でのトレードオフになります。 このツールは3つの応答のタイプを支援します:

    スライダー選択フィルター応答コメント
    最小段数チェビシェフ

    これはパスバンドからストップバンド間の遷移域において、一番急峻な周波数応答を実現できます。そのため、より少ない段数、より少ない部品点数で実現できます。

    このフィルターの欠点

    • パスバンドのリップル
    • 弱いステップ応答
    • 部品のバリエーションに対して高感度

    チェビシェフ応答について詳しくは、MT-206をご覧ください。

    ミドルポジションバタ-ワース

    この応答は、部品点数とステップ応答や部品のばらつき感度のような他の特性の両方を考慮した場合良い妥協点になります。

    バターワース応答は、しばしば、 \\\"最大限平坦型\\\" 応答と呼ばれています。なぜなら通過帯域と阻止帯域の間で最も急峻な変化を示しますがそれでもピーキングはないからです。

    バターワース応答については詳しくは、<MT-224をご覧ください。

    右側中部バターワースベッセル

    バターワース・ベッセルフィルタはベッセルとバターワース応答の中間的なものです。そのため特性は、この2つのフィルタ応答が混在したような形になります。

    スライダーを中央に動かすと、フィルタは、バターワース的な構成になります。さらに右側にスライダーを動かすと、フィルタはベッセルフィルタに近い構成になります。

    セトリングが最も速いベッセル

    ベッセルフィルタは、通過帯域と阻止帯域の間の変化が最も緩やかなので、最も多くの段数(すなわち最も多くの部品数)を必要とします。

    しかし、さもなければそれは優れた特性を持ちます。

    • 大きなステップ応答
    • 部品のばらつきに対して低感度

    もし阻止帯域の周波数と通過帯域の周波数が互いに近すぎるとベッセルフィルタ回路は困難になる可能性があります。

    ベッセル応答について詳しくはMT-204をご覧くださいMT-204 tutorial.

    \",\n \"title\": \"フィルター応答\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"passband\": {\n \"message\": \"

    これは通過させたい周波数の範囲です。通過帯域周波数での回路ゲイン、周波数カットオフ、この周波数カットオフで希望する減衰を入力する事によりこの領域を定義してください。減衰は入力したゲインに関連します。たとえばゲインを20と入力し、減衰を-3dBと入力すると、ツールは通過帯域カットオフ周波数を17dBに設定しようとします.

    フィルタ応答が \\\"Fewest Stages\\\"(チェビシェフ)の場合、通過帯域での希望するリップル量を入力できます。リップル仕様を大きくすると通過帯域から阻止帯域への変化が急峻になりますが、ステップ応答は悪くなり、部品のばらつきのフィルタへの影響も大きくなります。ローパス・フィルタとハイパス・フィルタに関して、フィルタの次数が奇数の場合、リップルは規定のゲインよりも下で生じます;フィルタ次数が偶数の時リップルは規定のゲインよりも上で生じます。同じ原則が通過帯域フィルタにも適用します;ただ 最初に次数を2で割ります.

    \",\n \"title\": \"パスバンド\",\n \"tooltip\": \"ヘルプはここをクリック\"\n },\n \"stopband\": {\n \"message\": \"

    これは除去したい周波数の範囲です。減衰は回路ゲインと関連があります。たとえばゲインを20dBにして、減衰を-35dBにすると、ツールは阻止帯域周波数を-15dBに設定しょうとします.

    \",\n \"title\": \"ストップバンド\",\n \"tooltip\": \"ヘルプはここをクリック\"\n }\n },\n \"to-precision-warning\": {\n \"message\": \"ご使用ブラウザーが”Edge”のバージョン 15か16の可能性を検出しました。この場合、精度を指定する際に数値が不正確に表示され、誤った値が選択される可能性があります。このため、”Edge”のバージョン17以降か、別のブラウザーで本アプリケーションを使用することを推奨します。\",\n \"title\": \"特定ブラウザでの値表示異常の可能性があります。\"\n }\n },\n \"navbar\": {\n \"chinese\": \"简体中文\",\n \"english\": \"English\",\n \"feedback\": \"ご意見 ・ ご要望\",\n \"help\": \"ヘルプ\",\n \"japanese\": \"日本語\",\n \"load\": \"設計を読み込む\",\n \"next-tab\": \"次のタブ\",\n \"previous-tab\": \"前のタブ\",\n \"save\": \"保存\",\n \"videos\": \"ビデオ\"\n },\n \"opAmpSelection\": {\n \"innerRequirements\": {\n \"recommended-gbw-title\": \"お勧めするGBW: \",\n \"required-gbw-title\": \"要求されるGBW: \",\n \"requirement-title-one\": \"ステージ \",\n \"requirement-title-two\": \" オペアンプの要件\",\n \"total-supply-voltage-title\": \"全体の供給電圧: \"\n },\n \"status\": {\n \"blank-opamp-name\": \"オペアンプ名が空欄です。\",\n \"channel-support\": \"フィルタ評価ボードはシングル・オペアンプとデュアル・オペアンプのみサポートします、\",\n \"components-out-of-range\": \"回路内のR、L、またはCが大き過ぎるか小さ過ぎる、\",\n \"current-feedback-unsupported\": \"電流帰還形オペアンプはサポートしていません。\",\n \"disabled\": \"使用不能\",\n \"gbw-low\": \"GBWの値が低すぎます\",\n \"gbw-too-low\": \"GBWの値が低すぎます。,\",\n \"ibias_high\": \"高いバイアス電流\",\n \"last-time-buy\": \"ラスト・タイム・バイ\",\n \"marginal\": \"非推奨\",\n \"not-allowed\": \"使用できません\",\n \"not-available-in-database\": \"データベースに存在していません。\",\n \"not-enough-negative-input-range\": \"不十分な負入力範囲、\",\n \"not-enough-negative-output-range\": \"不十分な負出力範囲、\",\n \"not-enough-positive-input-range\": \"不十分な正入力範囲、\",\n \"not-enough-positive-output-range\": \"十分な正出力範囲、\",\n \"not-recommended\": \"非推奨\",\n \"not-recommended-new-designs\": \"新規設計にお勧めしません。\",\n \"obsolete\": \"生産中止\",\n \"output-impedence-high\": \"出力インピーダンスが大きすぎる、\",\n \"package-incompatible\": \"評価ボードに対応していないパッケージ\",\n \"prerelease\": \"未発表\",\n \"quad-opamp\": \"評価ボードはクワッドオペアンプをサポートしていません、\",\n \"recommended\": \"推奨\",\n \"rout-high\": \"Rout ハイ\",\n \"row-count\": \"'{count, plural, =0 {{total}製品中#個のオペアンプを表示しています。フィルタを確認してください。} other {{total}製品中#個のオペアンプを表示しています。}}'\",\n \"slew-rate-low\": \"スルーレートの値が低すぎます、\",\n \"supply-voltage-high\": \"供給電圧の値が高すぎます。\",\n \"supply-voltage-low\": \"電源電圧が低すぎます\",\n \"under-min-stable-gain\": \"最小安定ゲイン= {value}\",\n \"under-min-stable-gain-no-cap\": \"最小安定ゲイン= {value} (補正用コンデンサが存在しないと仮定します。),\"\n },\n \"title\": \"オペアンプを選ぶ\"\n },\n \"page\": {\n \"description\": \"実際のオペアンプを使ったアクティブ・フィルタの設計が数分で行えます。\",\n \"title\": \"フィルタ・ウィザード | アナログ・デバイセズ\"\n },\n \"panel\": {\n \"display-context\": {\n \"center-frequency\": \"中心周波数\",\n \"compensate-gbw\": \"; GBW comp\",\n \"components\": \"最適化: {optimization}; +Vs: {vplus}; -Vs: {vminus}\",\n \"filter-type\": {\n \"bandPass\": \"バンドパス\",\n \"highPass\": \"ハイパス\",\n \"lowPass\": \"ローパス\"\n },\n \"frequency\": \"{value}Hz {signal}\",\n \"optimizations\": {\n \"noise\": \"ノイズ\",\n \"power\": \"電力\",\n \"specific-components\": \"特定部品\",\n \"voltage-range\": \"電圧範囲\"\n },\n \"passband-frequency\": \"パスバンド\",\n \"specifications\": \"{order} {implementation}\",\n \"stopband-frequency\": \"ストップバンド\",\n \"tolerances\": \"R: {rtolerance}; C: {ctolerance}\",\n \"tolerances-inductor\": \"L: {ltolerance}\"\n },\n \"view\": \"表示:\"\n },\n \"parameter-selector\": {\n \"choose-parameters\": \"パラメータを選ぶ\",\n \"ok\": \"OK\"\n },\n \"settings\": {\n \"components\": {\n \"change-op-amp\": \"オペアンプの変更\",\n \"choose-op-amp\": \"選択\",\n \"compensate-gbw\": \"GBWの補正\",\n \"component-sizing\": \"「部品のサイジング」\",\n \"components\": \"部品\",\n \"gain-resistors\": \"ゲイン抵抗\",\n \"gain-slider\": \"ゲインスライダ\",\n \"implementation\": \"組込み\",\n \"implementations\": {\n \"buffered-rc\": \"RC\",\n \"first-order\": \"初回注文\",\n \"gain\": \"ゲイン\",\n \"inductor\": \"インダクタ許容誤差\",\n \"multiple-feedback\": \"複数のフィードバック\",\n \"sallen-key\": \"サレンキー\"\n },\n \"negative-supply-voltage\": \"負電源電圧\",\n \"op-amp\": \"オペアンプ\",\n \"optimization\": \"設計回路を最適化する\",\n \"optimizations\": {\n \"low-noise\": \"低ノイズ\",\n \"low-power\": \"低電力\",\n \"specific-components\": \"特定部品\",\n \"voltage-range\": \"電圧範囲\"\n },\n \"pick-for-me\": \"推奨値\",\n \"positive-supply-voltage\": \"正電源電圧\",\n \"q-resistors\": \"Q値設定抵抗\",\n \"rc-sizing\": \"RC比率\",\n \"stage\": \"ステージ: {letter}\",\n \"stages\": \"Stages\",\n \"user-choice\": \"自分で選ぶ\",\n \"volt-unit\": \"V\",\n \"voltage-supplies\": \"オペアンプ電圧供給\",\n \"vs-minus\": \"-Vs :\",\n \"vs-plus\": \"+Vs :\"\n },\n \"filter-tab\": {\n \"bandPass\": \"バンドパス\",\n \"highPass\": \"ハイパス\",\n \"lowPass\": \"ローパス\",\n \"select-filter-type\": \"フィルタータイプをお選びください。\"\n },\n \"next-steps\": {\n \"all-files\": \"設計用ファイル\",\n \"all-files-tooltip\": \"SPICEファイル、BOM、評価ボードデザインファイル、PDFファイルのバージョン情報等が格納されたzipファイルをダウンロードする\",\n \"evaluation-board\": \"評価用ボ一ドを注文\",\n \"evaluation-board-tooltip\": \"ハードウェアの試作品用に評価ボードキットを注文する\",\n \"feedback\": \"ご意見 ・ ご要望\",\n \"get-files\": \"ファイル取得\",\n \"mail-colleague\": \"同僚にメールする(email)\",\n \"mail-colleague-tooltip\": \"同僚に送る\",\n \"order\": \"注文\",\n \"samples\": \"サンプル注文\",\n \"samples-tooltip\": \"構成部品のサンプルを注文\",\n \"send-design\": \"Send filter
    to {toolname}\",\n \"send-design-tooltip\": \"Sends a filter design to the calling application\",\n \"share\": \"共有\",\n \"spice-only\": \"SPICE ファイル\",\n \"spice-only-tooltip\": \"SPICEファイルを含んだzipファイルをダウンロード\"\n },\n \"specifications\": {\n \"center\": \"中心周波数\",\n \"db\": \"dB\",\n \"fastest-settling-0\": \"最速\",\n \"fastest-settling-1\": \"設定\",\n \"fewest-stages-0\": \"最少\",\n \"fewest-stages-1\": \"段\",\n \"filter-response\": \"フィルター応答\",\n \"gain\": \"ゲイン\",\n \"gain-units\": {\n \"db\": \"dB\",\n \"vv\": \"V/V\"\n },\n \"hz\": \"Hz\",\n \"passband\": \"パスバンド\",\n \"passband-attenuation\": \"パスバンドの減衰量\",\n \"passband-frequency\": \"パスバンドの周波数\",\n \"passband-gain-units\": \"パスバンドのゲインの単位\",\n \"stopband\": \"ストップバンド\",\n \"stopband-attenuation\": \"ストップバンドの減衰量\",\n \"stopband-frequency\": \"ストップバンドの周波数\"\n },\n \"tolerances\": {\n \"E12\": \"E12\",\n \"E24\": \"E24\",\n \"E48\": \"E48\",\n \"E6\": \"E6\",\n \"E96\": \"E96\",\n \"capacitor\": \"コンデンサ\",\n \"capacitor-series\": \"コンデンサの標準容量系列を使用\",\n \"capacitor-tolerance\": \"コンデンサ許容誤差\",\n \"component-tolerances\": \"部品の許容誤差\",\n \"five\": \"5%\",\n \"fiveTenths\": \"0.5%\",\n \"gbw-tolerance\": \"オペアンプ GBW許容誤差\",\n \"ideal\": \"ideal\",\n \"inductor\": \"インダクタ\",\n \"inductor-series\": \"インダクタの標準容量系列を使用\",\n \"inductor-tolerance\": \"インダクタ許容誤差\",\n \"one\": \"1%\",\n \"oneTenth\": \"0.1%\",\n \"op-amp-gbw\": \"Op Amp GBW\",\n \"preferred-series\": \"設定した系列\",\n \"resistor\": \"抵抗\",\n \"resistor-series\": \"抵抗の標準容量系列を使用\",\n \"resistor-tolerance\": \"抵抗許容誤差\",\n \"ten\": \"10%\",\n \"twenty\": \"20%\"\n }\n },\n \"units\": {\n \"ampere\": \"A\",\n \"db\": \"dB\",\n \"degree\": \"°\",\n \"hz\": \"Hz\",\n \"ohm\": \"Ω\",\n \"radian\": \"rad\",\n \"second\": \"s\",\n \"snd\": \"V/√Hz\",\n \"volt\": \"V\",\n \"vperus\": \"V/us\",\n \"vpp\": \"Vpp\",\n \"vrms\": \"Vrms\",\n \"vv\": \"V/V\",\n \"watt\": \"W\"\n },\n \"wizard\": {\n \"components\": \"部品選択\",\n \"filter-type\": \"タイプ\",\n \"next-steps\": \"次のステップ\",\n \"specifications\": \"仕様\",\n \"tolerances\": \"部品の公差\"\n }\n}], [\"zh-cn\", {\n \"annotations\": {\n \"filterResponse\": {\n \"orders\": {\n \"order1\": \"一阶{responseType}\",\n \"order10\": \"十阶{responseType}\",\n \"order2\": \"二阶{responseType}\",\n \"order3\": \"三阶{responseType}\",\n \"order4\": \"四阶{responseType}\",\n \"order5\": \"五阶{responseType}\",\n \"order6\": \"六阶{responseType}\",\n \"order7\": \"七阶{responseType}\",\n \"order8\": \"八阶{responseType}\",\n \"order9\": \"九阶{responseType}\",\n \"orderN\": \"{order}阶{responseType}\"\n },\n \"responseType\": {\n \"Bessel\": \"贝塞尔\",\n \"Butterworth\": \"巴特沃兹\",\n \"Butterworth Bessel\": \"巴特沃兹-贝塞尔\",\n \"Chebyshev\": \"切比雪夫\"\n },\n \"responseValue\": \"{value} dB\",\n \"stages\": \"{count, plural, =1 {1 级} other {# 级数}}\"\n },\n \"magnitude\": {\n \"db-down\": \"{n} dB衰减\",\n \"gain\": \"增益 = {n} dB\",\n \"passband-region\": \"通带区间\",\n \"passband-ripple\": \"通带纹波 = {n} dB\",\n \"stopband-region\": \"阻带区间\"\n }\n },\n \"dialogs\": {\n \"algorithm-confirmation\": {\n \"decreasing-r2-advantages\": \"降低R2有以下优点\",\n \"decreasing-r2-advantages-item-1\": \"降低R2的电阻噪声。\",\n \"decreasing-r2-advantages-item-2\": \"通过R2降低电流噪声影响。\",\n \"decreasing-r2-advantages-item-3\": \"放大器输入电容影响性能的可能性较小。\",\n \"expand\": \"展开\",\n \"hide\": \"收起\",\n \"increasing-r1-advantages\": \"提高R1有以下优点\",\n \"increasing-r1-advantages-item-1\": \"源阻抗影响滤波器响应的可能性较小。\",\n \"increasing-r1-advantages-item-2\": \"高频下输入滤波器输入阻抗较高。\",\n \"increasing-r1-advantages-item-3\": \"高频下放大器输出负载较小。\",\n \"introduction\": \"2023年11月,我们更新了滤波器向导,采用不同的方法计算Sallen Key低通组件。所有其他滤波器级不受影响。这一变化会影响R2/R1比率较高的Sallen Key低通滤波级。高比率会对滤波器性能产生不利影响。我们在设法降低该比率值。改变算法对滤波器级关键规格(fp、Q值和增益)影响不大。对于某些优化考量,我们的算法会更好地利用滤波器级性能,因此可能会看到滤波器级顺序发生变化。\",\n \"new-algorithm-button\": \"使用新算法\",\n \"old-algorithm-button\": \"使用旧算法\",\n \"post-script-new-design\": \"您可能会看到R1、R2、C1和C2发生变化。所有其他组件将不受影响。所有新设计都将使用新方法。\",\n \"post-script-save-design\": \"对于已保存的设计,既可以继续使用旧算法,也可选择用新算法。如果更新为新算法,这些组件可能与您上次保存时不同。\",\n \"potential-drawbacks\": \"这一变化的潜在弊端\",\n \"potential-drawbacks-item-1\": \"使用旧算法时,C1/C2比率通常为10比较合适。\",\n \"potential-drawbacks-item-2\": \"噪声增益会略有增加。 我们认为降低R2噪声可以弥补这个缺点,利大于弊。\",\n \"potential-drawbacks-item-3\": \"对于增益>1时的单电源配置,减小R2需要中间电源驱动器具有较低的输出阻抗。 我们的AD8031电容驱动解决方案完全符合这一要求。\",\n \"pros-and-cons\": \"降低R2/R1比率的利弊-点击\",\n \"title\": \"上次保存后Sallen Key低通组件计算结果可能发生变化\"\n },\n \"common\": {\n \"cancel\": \"取消\",\n \"close\": \"关闭\",\n \"ok\": \"确定\",\n \"open\": \"打开\",\n \"save\": \"保存\",\n \"select\": \"选择\"\n },\n \"connect-to\": {\n \"message-error\": \"Connection to {tool} failed\",\n \"title-error\": \"Connection Error\"\n },\n \"evaluation-boards\": {\n \"eval-board-column\": \"需要评估板\",\n \"eval-board-flagged\": \"无法订购评估板\",\n \"eval-board-flagged-after-incompatibles\": \"如需订购评估板,请返回器件选项卡选择兼容的器件。\",\n \"eval-board-flagged-before-incompatibles\": \"在器件选择选项卡中,您选择的下列不推荐运算放大器与滤波器向导评估板系统不兼容:\",\n \"eval-board-flagged-multi-feedback\": \"在组件选择选项卡中,为一个或多个电路级选择多反馈级方案。多反馈电路级的评估子板尚未上市。\",\n \"eval-board-instruction\": \"在订单按钮打开的页面中,单击“立即购买”打开页面,您可以将商品放入购物车中。\",\n \"eval-board-multiple\": \"* 我们运送的每个子板箱中包含4个独立的模块,所以没有必要单独订购。\",\n \"eval-board-not-available-board\": \"不可用\",\n \"eval-board-parts-column\": \"焊接这些器件(单独订购器件)\",\n \"eval_board-flagged-inductor\": \"在组件选择选项卡中,为一个或多个电路级选择电感级方案。 电感电路级的评估子板尚未上市。\",\n \"evalboard-confirmation\": {\n \"cancel-button-text\": \"取消\",\n \"message\": \"抱歉。滤波器向导评估板系统不含相关子板,无法用于评估使用电感的级。\",\n \"proceed-button-text\": \"继续浏览评估板\",\n \"title\": \"对于评估板系统来说,频率过高\"\n },\n \"stage-column\": \"阶段\",\n \"stage-info\": {\n \"channel-dual\": \"-- 双通道运算放大器\",\n \"channel-none\": \"\",\n \"channel-single\": \"-- 单通道运算放大器\",\n \"implementation-buffered-rc\": \"缓冲RC\",\n \"implementation-deliyannis-friend\": \"Multiple Feedback (Deliyannis Friend)\",\n \"implementation-first-order\": \"一阶\",\n \"implementation-gain\": \"增益\",\n \"implementation-inductor\": \"电感\",\n \"implementation-multiple-feedback\": \"Multiple Feedback\",\n \"implementation-none\": \"\",\n \"implementation-sallen-key\": \"Sallen Key\",\n \"stage-text\": \"{stageType} {stageImplementation} 级 {stageChannel}\",\n \"stage-type-band-pass\": \"带通\",\n \"stage-type-band-stop\": \"带阻\",\n \"stage-type-gain\": \"增益\",\n \"stage-type-high-pass\": \"高通\",\n \"stage-type-low-pass\": \"低通\",\n \"stage-type-none\": \"\",\n \"stage-type-notch\": \"陷波\"\n },\n \"stage-info-column\": \"阶段信息\",\n \"table-title\": \"所需的评估板\",\n \"title\": \"订购评估板\"\n },\n \"feedback\": {\n \"email\": \"电子邮件:\",\n \"feedback\": \"你的反馈:\",\n \"feedback-dialog-ng-message\": \"您的反馈发送失败。可能是由于服务器的连接问题,请尝试再次发送。\",\n \"feedback-dialog-ok-message\": \"您的反馈已经发送。\",\n \"give-feedback\": \"给予反馈\",\n \"invitation\": \"请告诉我们你对这款工具的看法,任何好的或坏的。 \",\n \"name\": \"姓名:\",\n \"optional\": \"(Optional)\",\n \"title\": \"提交您的意见或反馈!\"\n },\n \"load\": {\n \"choose-button\": \"选择文档\",\n \"invalid-file\": \"设计文件无效。请验证您尝试加载的设计文件的内容。\",\n \"invalid-parts\": \"{numParts,plural,other{如果不能加载设计,接下来的设计文件将不支持这个应用:}}{parts}\",\n \"message\": \"从计算机文件中加载设计\",\n \"no-opamps\": \"运算放大器数据不可用。无法加载设计。请尝试刷新浏览器。如果问题依然存在,请使用滤波器向导右上方的反馈按钮来报告该问题。\",\n \"title\": \"加载设计\"\n },\n \"opamp\": {\n \"table\": {\n \"architecture\": \"Architecture\",\n \"canOrderEvalBoard\": \"Eval Board?\",\n \"comment\": \"注释\",\n \"comments\": \"注释\",\n \"commentsDisplay\": {\n \"showAll\": \"显示全部\",\n \"showNotAllowed\": \"不允许\",\n \"showNotAllowedMatch\": \"不允许\",\n \"showNotRecommended\": \"不推荐使用\",\n \"showNotRecommendedMatch\": \"不推荐使用\",\n \"showRecommended\": \"推荐\",\n \"showRecommendedMatch\": \"推荐\"\n },\n \"feedbackMethod\": \"Feedback Method\",\n \"gbw\": \"GBW (Hz)\",\n \"iBias\": \"最大偏置电流(A)\",\n \"iNoise\": \"iNoise\",\n \"inHeadroomMinus\": \"输入负裕量(V)\",\n \"inHeadroomPlus\": \"输入正裕量(V)\",\n \"index\": \"Index\",\n \"isLTSpiceDisplay\": {\n \"showAll\": \"显示全部\",\n \"showNo\": \"否\",\n \"showYes\": \"是\"\n },\n \"isLTSpiceOpAmp\": \"LTspice?\",\n \"maxSupplyVoltage\": \"最大电源电压 (V)\",\n \"minStableGain\": \"Min Stable Gain\",\n \"minSupplyVoltage\": \"最小电源电压 (V)\",\n \"numberChannels\": \"通道数\",\n \"outHeadroomMinus\": \"输出负裕量(V)\",\n \"outHeadroomPlus\": \"输出正裕量(V)\",\n \"packageCode\": \"Package Code\",\n \"partNumber\": \"产品型号\",\n \"price\": \"价格(美元)\",\n \"rOut\": \"rOut\",\n \"rawGBW\": \"Raw GBW\",\n \"selectable\": \"Selectable?\",\n \"slewRate\": \"Slew Rate\",\n \"specialOpAmp\": \"Special Op-Amp?\",\n \"status\": \"Status Code\",\n \"statusDisplay\": {\n \"showAll\": \"显示全部\",\n \"showNotRecommended\": \"不推荐用于新设计\",\n \"showProduction\": \"量产\",\n \"showRecommended\": \"推荐用于新设计\"\n },\n \"statusText\": \"状态\",\n \"supplyCurrent\": \"电源电流(A)\",\n \"tempRange\": \"温度范围\",\n \"tempRangeDisplay\": {\n \"showAll\": \"显示全部\",\n \"showBlanks\": \"(空白)\"\n },\n \"vNoise\": \"噪声电压(nV/√Hz)\",\n \"vintage\": \"Vintage\",\n \"vos\": \"最大失调电压(V)\"\n }\n },\n \"samples\": {\n \"add-button\": \"添加所选样片至购物车\",\n \"add-to-cart-column\": \"样片加入购物车\",\n \"model-column\": \"元器件模型/封装\",\n \"part-column\": \"组成部分\",\n \"quantities-warning\": \"ADI公司向符合条件的客户免费限量提供样片。 出于客户对我们产品样片有大量需求,两周内,每款器件您只能申请2片,每份申请最多申请4款器件。 如果您的设计需要额外数量的产品,请在网站上通过在线购买或者联系我们的授权代理商购买。\",\n \"title\": \"申请样片\",\n \"unavailable-message\": \"无法申请样片\"\n },\n \"save\": {\n \"save-desc-error\": \"请提供描述\",\n \"save-desc-field\": \"介绍\",\n \"save-name-error\": \"请输入设计名称\",\n \"save-name-field\": \"设计名称\",\n \"title\": \"保存\"\n },\n \"send-filter\": {\n \"message\": \"You may now close this browser tab.\",\n \"message-error\": \"Sending design to {tool} was unsuccessful\",\n \"title-cancel\": \"{tool} has broken the connection\",\n \"title-error\": \"Send Design Error\",\n \"title-ok\": \"Filter Transfer to {tool} Complete\"\n },\n \"share\": {\n \"share-button\": \"Email\",\n \"share-design-information\": \"

    若要共享您的设计副本,请在 发件人名称 字段中输入您的姓名。然后在 共享设计 字段中输入收件人的电子邮件地址。多个收件人的地址需分行填写。

    收件人将收到ADI发出的电子邮件,内含包括共享设计ZIP存档的附件。您只需要从ZIP文件中提取设计并使用应用的“加载设计”功能上传。

    本过程为每个收件人创建一份设计副本。收件人编辑他们的副本并不会影响您保存在您自己的电脑中的设计。

    \",\n \"share-dialog-ng-message\": \"无法共享设计,这可能是因为服务器连接问题。请重试。\",\n \"share-dialog-ok-message\": \"已共享设计\",\n \"share-duplicate-email\": \"找到重复的电子邮件\",\n \"share-email-empty-error\": \"请输入电子邮件地址\",\n \"share-email-field\": \"收件人\",\n \"share-email-format-error\": \"您输入的电子邮件地址中有一个或多个无效,请更正后重试。\",\n \"share-email-placeholder\": \"电子邮件地址\",\n \"share-name-error\": \"请输入设计名称\",\n \"share-name-field\": \"设计名称\",\n \"share-sender-error\": \"请提交收件人姓名\",\n \"share-sender-field\": \"收件人姓名\",\n \"title\": \"通过邮件发送我的设计\"\n },\n \"system\": {\n \"application-busy\": \"处理中...\",\n \"connecting-to\": \"Connecting to {tool}...\",\n \"download-create-bom\": \"正在创建BOM文件...\",\n \"download-create-data\": \"正在创建数据文件...\",\n \"download-create-design\": \"正在创建设计文件...\",\n \"download-create-eval-board\": \"正在创建评估板文件...\",\n \"download-create-graph\": \"正在创建图形数据...\",\n \"download-create-pdf\": \"正在创建PDF文件...\",\n \"download-create-spice\": \"正在创建SPICE文件...\",\n \"download-downloading\": \"正在下载……\",\n \"download-requesting\": \"正在请求……\",\n \"error-opamp-data\": \"运算放大器数据不可用。滤波器向导无法继续运行。请保存您的设计,然后尝试刷新浏览器。如果问题依然存在,请使用滤波器向导右上方的反馈按钮来报告该问题。\",\n \"error-pst-data\": \"数据映射暂时不可用,因此无法显示运算放大器表。请保存您的设计,然后尝试刷新浏览器。如果问题依然存在,请使用滤波器向导右上方的反馈按钮来报告该问题。\",\n \"loading-opamp-data\": \"加载 OpAmp 数据...\",\n \"sending-filter\": \"Sending filter to {tool}...\",\n \"title\": \"应用消息\"\n },\n \"video\": {\n \"active_filter\": {\n \"title\": \"Filtering 101: Active Filter Stage Order\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489700001.html\"\n },\n \"active_passive\": {\n \"title\": \"Filtering 101: Active vs. Passive\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637523715001.html\"\n },\n \"analog_digital\": {\n \"title\": \"Filtering 101: Analog vs. Digital\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489722001.html\"\n },\n \"chebyshev_butterworth_bessel\": {\n \"title\": \"Filtering 101: Chebyshev vs. Butterworth vs. Bessel\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489717001.html\"\n },\n \"gain_attenuation\": {\n \"title\": \"Sallen Key 101: Gain and Attenuation\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489691001.html\"\n },\n \"heading\": \"点击下列链接,观看说明视频\",\n \"opamp_output_impedance\": {\n \"title\": \"Sallen Key 101: Effect of Op Amp Output Impedance\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637495042001.html\"\n },\n \"picking_components\": {\n \"title\": \"Sallen Key 101: Picking Components\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637437921001.html\"\n },\n \"quality_factor\": {\n \"title\": \"Filtering 101: Q - The Quality Factor of a Filter\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489712001.html\"\n },\n \"sallenkey_feedback\": {\n \"title\": \"Filtering 101: Sallen Key vs. Multiple Feedback\",\n \"url\": \"{basedir}/en/resources/media-center/videos/3637489704001.html\"\n },\n \"subtitle\": \"Tutorial videos on Filter Design\",\n \"title\": \"视频\"\n }\n },\n \"download\": {\n \"error-message\": \"

    无法获取设计文件。出现此错误的原因可能有:

    1)与服务器的连接中断。

    2)服务中断。

    \",\n \"error-title\": \"下载\",\n \"file-content\": {\n \"no-schematic\": \"既然 LTspice 是ADI公司的一部分,我们可将SPICE网络列表转换为 LTspice 模型。设计中的运算放大器当前没有可用的 LTspice 模型。如果您希望ADI优先考虑针对特定器件生成 LTspice 模型,请告诉您的销售代表或通过此工具发送反馈。\\r\\n\\r\\n由您设计中的器件支持的SPICE仿真:\\r\\n\",\n \"no-schematic-no-netlist\": \"ADI当前正处于将运算放大器从SPICE网络列表转换为LTspice模型的过程。您的设计包含一系列器件,有些器件具有基于文本的网络列表,而另一些具有LTspice文件。为此,该工具无法生成任何SPICE输出。对于由此带来的不便,我们表示歉意并将努力解决此问题。如果您希望ADI优先考虑针对特定器件生成LTspice模型,请告诉您的销售代表或通过此工具发送反馈。\\r\\n\\r\\n由您设计中的器件支持的SPICE仿真:\\r\\n\",\n \"part-no-spice-info\": \"设计中的以下运算放大器没有LTspice模型或文本网络列表模型。如果您希望ADI优先考虑针对特定器件生成LTspice模型,请告诉您的销售代表或通过此工具发送反馈。\"\n },\n \"pdf-content\": {\n \"image-headers\": {\n \"circuit\": \"电路\",\n \"group-delay\": \"群延迟\",\n \"input-impedance-mag\": \"输入阻抗幅度\",\n \"input-impedance-phase\": \"输入阻抗相位\",\n \"magnitude-db\": \"幅度(dB)\",\n \"magnitude-vv\": \"幅度(按伏特计算)\",\n \"noise\": \"噪声\",\n \"phase-degrees\": \"相位(度)\",\n \"phase-delay\": \"相位延迟\",\n \"phase-radians\": \"相位(弧度)\",\n \"stages\": \"级数\",\n \"step-response\": \"阶跃响应\"\n },\n \"pdf-data-ie-image-missing\": \"很遗憾,若您使用IE 8或更低版本的IE浏览该工具,将无法生成图片。若您想要浏览页面上的图片,请使用Firefox、Chrome、IE 9或更高版本的IE浏览器。\",\n \"pdf-desc\": \"{desc}\\n\\n由{user}在{date}上创建\",\n \"pdf-desc-no-design-name\": \"由 {user} 创建于{date}\",\n \"pdf-desc-no-name-desc\": \"创建于{date}\",\n \"pdf-desc-no-user-name\": \"{desc}\\n\\n创建于 {date}\",\n \"pdf-heading\": \"滤波器设计向导\",\n \"pdf-orders\": {\n \"order1\": \"一阶\",\n \"order10\": \"十阶\",\n \"order11\": \"十一阶\",\n \"order12\": \"十二阶\",\n \"order2\": \"二阶\",\n \"order3\": \"三阶\",\n \"order4\": \"四阶\",\n \"order5\": \"五阶\",\n \"order6\": \"六阶\",\n \"order7\": \"七阶\",\n \"order8\": \"八阶\",\n \"order9\": \"九阶\"\n },\n \"pdf-subheading\": \"{filterType}、{nthOrder}{filterResponse}的滤波器要求\",\n \"pdf-tool-name\": \"滤波器设计向导\"\n }\n },\n \"ember-aditools-page\": {\n \"card\": {\n \"checkbox-tooltip\": \"Toggle\",\n \"help-tooltip\": \"Click for help\",\n \"part-number-tooltip\": \"Click to select part\"\n },\n \"common\": {\n \"cancel\": \"取消\",\n \"close\": \"关闭\",\n \"load\": \"加载\",\n \"ok\": \"确定\",\n \"open\": \"打开\",\n \"save\": \"保存\",\n \"select\": \"选择\"\n },\n \"dialogs\": {\n \"feedback\": {\n \"email\": \"电子邮件:\",\n \"feedback\": \"你的反馈:\",\n \"give-feedback\": \"给予反馈\",\n \"invitation\": \"请告诉我们你对这款工具的看法,任何好的或坏的。 \",\n \"name\": \"姓名:\",\n \"optional\": \"(Optional)\",\n \"title\": \"提交您的意见或反馈!\"\n },\n \"load\": {\n \"choose-button\": \"选择文档\",\n \"message\": \"从计算机文件中加载设计\",\n \"no-file-selected\": \"No file selected.\",\n \"title\": \"加载设计\"\n },\n \"samples\": {\n \"add-button\": \"添加所选样片至购物车\",\n \"add-link\": \"Add to Order\",\n \"add-to-cart-column\": \"样片加入购物车\",\n \"model-column\": \"元器件模型/封装\",\n \"part-column\": \"组成部分\",\n \"quantities-warning\": \"ADI公司向符合条件的客户免费限量提供样片。 出于客户对我们产品样片有大量需求,两周内,每款器件您只能申请2片,每份申请最多申请4款器件。 如果您的设计需要额外数量的产品,请在网站上通过在线购买或者联系我们的授权代理商购买。\",\n \"title\": \"申请样片\",\n \"unavailable-message\": \"无法申请样片\"\n },\n \"save\": {\n \"save-desc-error\": \"请提供描述\",\n \"save-desc-field\": \"介绍\",\n \"save-name-error\": \"请输入设计名称\",\n \"save-name-field\": \"设计名称\",\n \"title\": \"保存\"\n },\n \"share\": {\n \"share-button\": \"Email\",\n \"share-design-information\": \"

    若要共享您的设计副本,请在 发件人名称 字段中输入您的姓名。然后在 共享设计 字段中输入收件人的电子邮件地址。多个收件人的地址需分行填写。

    收件人将收到ADI发出的电子邮件,内含包括共享设计ZIP存档的附件。您只需要从ZIP文件中提取设计并使用应用的“加载设计”功能上传。

    本过程为每个收件人创建一份设计副本。收件人编辑他们的副本并不会影响您保存在您自己的电脑中的设计。

    \",\n \"share-dialog-ng-message\": \"无法共享设计,这可能是因为服务器连接问题。请重试。\",\n \"share-dialog-ok-message\": \"已共享设计\",\n \"share-duplicate-email\": \"找到重复的电子邮件\",\n \"share-email-empty-error\": \"请输入电子邮件地址\",\n \"share-email-field\": \"收件人\",\n \"share-email-format-error\": \"您输入的电子邮件地址中有一个或多个无效,请更正后重试。\",\n \"share-email-placeholder\": \"电子邮件地址\",\n \"share-name-error\": \"请输入设计名称\",\n \"share-name-field\": \"设计名称\",\n \"share-sender-error\": \"请提交收件人姓名\",\n \"share-sender-field\": \"收件人姓名\",\n \"title\": \"通过邮件发送我的设计\"\n },\n \"system\": {\n \"application-busy\": \"处理中...\",\n \"title\": \"应用消息\"\n }\n },\n \"footer\": {\n \"accessibility\": \"可访问性\",\n \"cookie-settings\": \"Cookie设置\",\n \"copyright-text\": \"1995 - 2025 Analog Devices, Inc. 保留所有权利\",\n \"icp-id\": \"沪ICP备09046653号-1\",\n \"legal\": \"法律与风险\",\n \"privacy-policy\": \"隐私政策\",\n \"privacy-settings\": \"隐私设置\",\n \"sitemap\": \"网站地图\"\n },\n \"header\": {\n \"applications\": \"应用\",\n \"company\": \"公司\",\n \"design-center\": \"设计中心\",\n \"education\": \"教育培训\",\n \"parametric-search\": \"参数搜索\",\n \"products\": \"产品\",\n \"spoken\": {\n \"homepage\": \"ADI主页\",\n \"sitelinks\": \"ADI网站链接\"\n },\n \"support\": \"支持\"\n },\n \"menubar\": {\n \"chinese\": \"简体中文\",\n \"english\": \"English\",\n \"help\": \"帮助\",\n \"japanese\": \"日本語\",\n \"load\": \"加载设计\",\n \"save\": \"保存\"\n },\n \"studio\": {\n \"adcdriver\": \"ADC驱动器\",\n \"dacebc\": \"DAC\",\n \"diamond\": \"仪表放大器\",\n \"filterwizard\": \"模拟滤波器\",\n \"noise\": \"噪声\",\n \"photodiode\": \"光电二极管\",\n \"precisionstudio\": \"ADI Precision Studio\",\n \"signalchaindesigner\": \"Signal Chain\",\n \"simdds\": \"DDS\",\n \"spoken\": {\n \"studiolinks\": \"ADI Precision Studio链接\"\n },\n \"virteval\": \"Virtual Eval\"\n },\n \"toolbar\": {\n \"actions\": \"Actions\"\n }\n },\n \"figures\": {\n \"billOfMaterials\": {\n \"bom-designator\": \"标识\",\n \"bom-material\": \"材料\",\n \"bom-package\": \"封装\",\n \"bom-quantity\": \"数量\",\n \"bom-text\": \"点击“获取文件”->下载Zip包中包含一张表格形式的物料清单。\",\n \"bom-text-italic\": \"若您创建自己的PCB而非采用ADI公司的评估板,则斜体字部分的元件可省略。\",\n \"bom-tolerance\": \"容差\",\n \"bom-value\": \"值\",\n \"extra-components\": {\n \"header\": \"表头\",\n \"jumper\": \"跳线\",\n \"sma-jack\": \"SMA插孔、插口式电路板边缘\",\n \"sma-male\": \"插入式-插入式SMA\",\n \"socket\": \"插座\",\n \"test-pin\": \"测试引脚\"\n },\n \"materials\": {\n \"tantalum\": \"钽\"\n },\n \"title\": \"物料清单\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"circuit\": {\n \"filter-type\": {\n \"band-pass\": \"带通\",\n \"high-pass\": \"高通\",\n \"low-pass\": \"低通\"\n },\n \"implementation\": {\n \"first-order\": \"缓冲RC\",\n \"gain\": \"增益\",\n \"inductor\": \"电感\",\n \"multiple-feedback\": \"Multiple Feedback\",\n \"sallen-key\": \"Sallen Key\"\n },\n \"order\": {\n \"eighth_order\": \"八阶\",\n \"fifth_order\": \"五阶\",\n \"first_order\": \"一阶\",\n \"fourth_order\": \"四阶\",\n \"nineth_order\": \"九阶\",\n \"second_order\": \"二阶\",\n \"seventh_order\": \"七阶\",\n \"sixth_order\": \"六阶\",\n \"tenth_order\": \"十阶\",\n \"third_order\": \"三阶\"\n },\n \"stage\": \"阶段 {letter}\",\n \"title\": \"电路\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"errors\": {\n \"adcBandwidthIsLessThanMinimum\": \"ADC带宽值(当前为{value}Hz)必须至少为{minimum}Hz\",\n \"centerFrequencyNotInRange\": \"中心频率必须介于{minimum}Hz和{maximum}Hz之间\",\n \"centerFrequencyTooHigh\": \"中心频率与通带频率之比过高。请降低中心频率或增加通带频率。\",\n \"centerFrequencyTooLow\": \"中心频率与通带频率之比过低。请增加中心频率或降低通带频率。\",\n \"emptyField\": \"{fieldId}字段不能为空。\",\n \"frequencyTooHigh\": \"无法找到实际元件值。 您的Q值可能太高。 在规格屏幕中使用级视图监控Q值。 您可以尝试: (1) 使用巴特沃兹或贝塞尔而非切比雪夫滤波器响应。 (2) 使用速度较低的通带-阻带转换。\",\n \"frequencyTooLow\": \"频率过低。无法找到元件值。\",\n \"gainNotInRange\": \"增益必须介于{minimum} {unit}和{maximum} {unit}之间\",\n \"highOrderFiltersUnsupported\": \"未找到阶数≤ 10的滤波器解决方案。降低通带频率或阻带衰减,增加阻带频率或通带衰减,或调整滤波器响应。\",\n \"invalidField\": \"无法解析字段{fieldId}中的值{value}。\",\n \"noOpAmpFoundForRequirements\": \"未发现能够满足需要的运算放大器。\",\n \"noOpAmpFoundForRequirementsWithVoltage\": \"未发现能够满足需要的运算放大器。将+Vs设置为5V、-Vs设置为0V或-5V,可能效果更佳。\",\n \"passbandAttenuationHighBandGreaterThan\": \"As the passband frequency approaches the maximum limit of {frequency}Hz, the passband attenuation becomes more restricted. At the stated passband frequency, the attenuation must be greater than {minimum} dB.\",\n \"passbandAttenuationLowGreaterThan\": \"As the passband frequency approaches the minimum limit of {frequency}Hz, the passband attenuation becomes more restricted. At the stated passband frequency, the attenuation must be greater than {minimum} dB.\",\n \"passbandAttenuationNotInRange\": \"通带衰减必须介于{minimum} dB和{maximum} dB之间\",\n \"passbandFrequencyNotInRange\": \"通带频率必须介于{minimum}Hz和{maximum}Hz之间\",\n \"passbandIsGreaterThanStopband\": \"通带频率(当前为{passbandFrequency}Hz)必须小于阻带频率{stopbandFrequency}Hz\",\n \"referenceVoltageSpanGreaterThanMax\": \"对于基准级中的AD8031,电源电压范围太宽。建议:(1)减小电源电压,(2)切换到双电源\",\n \"referenceVoltageSpanLessThanMinimum\": \"对于基准级中的AD8031,电源电压范围太窄。建议:(1)提高电源电压,(2)切换到双电源\",\n \"selectedOpAmpIsIdeal\": \"级{stage}:请选择此级的运算放大器。\",\n \"selectedOpAmpIsIncompatible\": \"级{stage}:{opAmp}无法满足滤波器要求。请选择不同的运算放大器或调整您的元件尺寸\",\n \"selectedOpAmpIsIncompatibleWithVoltage\": \"级{stage}:{opAmp}无法满足滤波器要求。请选择不同的运算放大器,调整您的元件尺寸或更改电压源。\",\n \"stageQTooLarge\": \"您指定的滤波器具有Q值为{qValue}。的级 滤波器设计向导仅支持Q值小于50的滤波器级。建议:(1) 降低中心频率、(2) 增加阻带和通带频率。\",\n \"stopbandAttenuationNotInRange\": \"阻带衰减必须介于{minimum} dB和{maximum} dB之间\",\n \"stopbandFrequencyNotInRange\": \"阻带频率必须介于{minimum}Hz和{maximum}Hz之间\",\n \"stopbandIsGreaterThanPassband\": \"阻带频率(当前为{stopbandFrequency}Hz)必须小于通带频率{passbandFrequency}Hz\",\n \"stopbandIsGreaterThanPassbandAttenuation\": \"阻带衰减(当前为{stopbandAttenuation} dB)必须比通带衰减{passbandAttenuation} dB深\",\n \"voltageSpanGreaterThanMax\": \"电源电压范围太宽。电源之间的电压差不应当超过36V\",\n \"voltageSpanLessThanMinimum\": \"电源电压范围太窄。电源之间的电压差应至少为1.8V\",\n \"vsMinusShouldBeNegative\": \"-Vs电压太高。其数值应当为0V或更低\",\n \"vsMinusZeroVsPlusGreaterThanMax\": \"当-Vs = 0时,+Vs电压必须低于12.6V。这是由于AD8031单电源基准电压驱动器的限制所致,其最大电源电压为12.6V。\",\n \"vsPlusShouldBePositive\": \"+Vs电压太低。其数值应当为0V或更高。\"\n },\n \"groupDelay\": {\n \"title\": \"相位延迟\",\n \"x-axis\": \"频率(Hz)\",\n \"x-hover\": \"频率:\",\n \"y-axis\": \"相位延迟(s)\",\n \"y-hover\": \"相位延迟:\"\n },\n \"inputImpedanceMagnitude\": {\n \"title\": \"输入阻抗(Ω)\",\n \"x-axis\": \"频率(Hz)\",\n \"x-hover\": \"频率:\",\n \"y-axis\": \"输入阻抗(Ω)\",\n \"y-hover\": \"输入阻抗:\"\n },\n \"inputImpedancePhase\": {\n \"title\": \"输入阻抗(°)\",\n \"x-axis\": \"频率(Hz)\",\n \"x-hover\": \"频率:\",\n \"y-axis\": \"输入阻抗(°)\",\n \"y-hover\": \"输入阻抗:\"\n },\n \"magnitudeDb\": {\n \"title\": \"幅度(dB)\",\n \"x-axis\": \"频率(Hz)\",\n \"x-hover\": \"频率:\",\n \"y-axis\": \"幅度(dB)\",\n \"y-hover\": \"幅度:\"\n },\n \"magnitudeVV\": {\n \"title\": \"幅度(V/V)\",\n \"x-axis\": \"频率(Hz)\",\n \"x-hover\": \"频率:\",\n \"y-axis\": \"幅度(V/V)\",\n \"y-hover\": \"幅度:\"\n },\n \"noise\": {\n \"adc-bandwidth\": \"ADC带宽\",\n \"adc-input-range\": \"ADC输入范围\",\n \"adc-range\": \"ADC范围\",\n \"adc-table-title\": \"ADC表\",\n \"enob-comp-sel\": \"等效位数\",\n \"enob-comp-tol\": \"等效位数\",\n \"enob-nominal\": \"标称\",\n \"enob-worst\": \"最差情况下的\",\n \"graph-title\": \"频谱噪声密度\",\n \"noise-referred-filter-output-1\": \"所有噪声均指滤波器输出。\",\n \"noise-referred-filter-output-2\": \"1/f噪声未建模。\",\n \"nominal-label\": \"标称值\",\n \"peak-to-peak-title\": \"峰峰值\",\n \"rms-peak-to-peak\": \"均方根和峰峰值\",\n \"rms-title\": \"有效值\",\n \"title\": \"噪声\",\n \"worst-case-label\": \"最差情况\",\n \"x-axis\": \"频率(Hz)\",\n \"x-hover\": \"频率:\",\n \"y-axis\": \"频谱噪声密度 (V/√Hz)\",\n \"y-hover\": \"噪声:\"\n },\n \"phaseDegrees\": {\n \"title\": \"相位(°)\",\n \"x-axis\": \"频率(Hz)\",\n \"x-hover\": \"频率:\",\n \"y-axis\": \"相位(°)\",\n \"y-hover\": \"相位:\"\n },\n \"phaseDelay\": {\n \"title\": \"相位延迟\",\n \"x-axis\": \"频率(Hz)\",\n \"x-hover\": \"频率:\",\n \"y-axis\": \"相位延迟(s)\",\n \"y-hover\": \"相位延迟:\"\n },\n \"phaseRadians\": {\n \"title\": \"相位(弧度)\",\n \"x-axis\": \"频率(Hz)\",\n \"x-hover\": \"频率:\",\n \"y-axis\": \"相位(弧度)\",\n \"y-hover\": \"相位:\"\n },\n \"power\": {\n \"header-text\": \"注意:本页显示滤波器的静态功耗输入信号可能会对功耗产生极大影响,这里未建模。\",\n \"order-with\": {\n \"order1\": \"一阶滤波\",\n \"order2\": \"二阶滤波\"\n },\n \"reference-stage-part-with\": \"AD8031采用\",\n \"reference-stage-text\": \"基准级\",\n \"reference-whats-this\": \"这是什么?\",\n \"title\": \"功率\",\n \"total-power\": \"总静态功耗\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"stages\": {\n \"filter-types\": {\n \"type-name-band-pass\": \"带通\",\n \"type-name-high-pass\": \"高通\",\n \"type-name-low-pass\": \"低通\"\n },\n \"header-text\": \"您的滤波器需要{n}具有如下特性的运算放大器级\",\n \"implementations\": {\n \"buffered-rc\": \"缓冲RC\",\n \"gain\": \"增益\",\n \"inductor\": \"电感\",\n \"multiple-feedback\": \"Multiple
    Feedback\",\n \"sallen-key\": \"Sallen Key\"\n },\n \"orders\": {\n \"first-order\": \"一阶\",\n \"second-order\": \"二阶\"\n },\n \"simulated\": \"仿真\",\n \"simulated-to\": \" 至 {value}\",\n \"target\": \"目标\",\n \"title\": \"级数\",\n \"tooltip\": {\n \"fp\": \"该级的极点频率。亦称为截止频率、自然频率或基频。\",\n \"gain\": \"增益(V/V):+该级的增益\",\n \"q\": \"Q表示该级的峰值大小。数字越大表示极点频率附近的峰值越高。\"\n },\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n },\n \"stepResponse\": {\n \"title\": \"阶跃响应\",\n \"x-axis\": \"时间(s)\",\n \"x-hover\": \"时间:\",\n \"y-axis\": \"幅度(V/V)\",\n \"y-hover\": \"幅度:\"\n },\n \"voltageRange\": {\n \"amp-input-range\": \"输入范围\",\n \"amp-output-range\": \"输出范围\",\n \"amplifier\": \"放大器\",\n \"amplifier_specs\": \"放大器规格\",\n \"input-range\": \"输入范围\",\n \"max-signals\": \"最大信号\",\n \"max-signals-nominal\": \"标称值\",\n \"max-signals-worst-case\": \"最差情况\",\n \"maximum-input\": \"最大输入\",\n \"output-range\": \"输出范围\",\n \"signal-possible\": \"可实现信号\",\n \"slew-rate\": \"压摆率\",\n \"title\": \"电压范围\",\n \"warning-input-range-voltage-range\": \"本级输入范围限制信号范围。\",\n \"warning-output-range-voltage-range\": \"本级输出范围限制信号范围。\",\n \"warning-slew-rate_voltage-range\": \"本级压摆率限制信号范围。\",\n \"x-axis\": \"\",\n \"y-axis\": \"\"\n }\n },\n \"footer\": {\n \"copyright\": \"© 1995 - 2018 Analog Devices, Inc. All Rights Reserved \",\n \"privacy-security\": \"隐私和保密政策\",\n \"privacy-security-url\": \"/cn/about-adi/landing-pages/001/privacy_security_statement.html\",\n \"privacy-settings\": \"Privacy Settings\",\n \"privacy-settings-url\": \"/cn/landing-pages/001/privacy-settings.html\",\n \"sitemap\": \"网站地图\",\n \"sitemap-url\": \"/cn/sitemap.html\",\n \"terms-of-use\": \"使用条款\",\n \"terms-of-use-url\": \"/cn/about-adi/landing-pages/001/terms_of_use.html\"\n },\n \"fragments\": {\n \"at\": \"@\",\n \"eq\": \"=\",\n \"f\": \"f\",\n \"in\": \"IN\",\n \"left\": \"◄----\",\n \"n-a\": \"N/A\",\n \"out\": \"OUT\",\n \"p\": \"p\",\n \"plus\": \"+\",\n \"q\": \"Q\",\n \"r\": \"R\",\n \"ref\": \"REF\",\n \"right\": \"---►\",\n \"times\": \"×\",\n \"to\": \"to\"\n },\n \"header\": {\n \"applications\": \"应用\",\n \"community\": \"社区\",\n \"design-center\": \"设计中心\",\n \"education\": \"教育培训\",\n \"parametric-search\": \"参数搜索\",\n \"products\": \"产品\",\n \"support\": \"支持\",\n \"title\": \"滤波器设计向导\"\n },\n \"help\": {\n \"common\": {\n \"noise\": {\n \"adc-bandwidth\": {\n \"message\": \"

    在此输入您ADC的带宽。该数值将与频谱密度曲线的噪声值一同纳入计算,得到均方根噪声和峰峰值噪声。

    我们对整个ADC带宽范围的频谱密度曲线内的噪声进行积分,以计算均方根噪声以及峰峰值噪声。ADC用作滤波器,可降低您刚创建的运算放大器滤波器的输出噪声。 若您仔细查看频谱密度曲线,则最高频率处的频谱密度为非零值,并且实际使用中,该现象继续在高于本图所示的频率范围内存在。ADC可过滤此噪声。

    我们假定ADC为一阶滚降。我们为ADC滚降建立了一阶幅度曲线,将其与频谱密度曲线相乘,然后对结果进行积分运算。若您的ADC具有更陡峭的滚降曲线(例如sinc^3 Σ-Δ型ADC)则该工具可能会略为高估总系统噪声。

    某些ADC需要在放大器驱动器和ADC之间使用RC滤波器。若此RC滤波器带宽低于该ADC本身(或者您不知道该ADC的带宽),则应当使用此RC滤波器的截止频率。 RC滤波器的截止频率为:1/(2πRC)。

    \",\n \"title\": \"ADC带宽\",\n \"tooltip\": \"点击查看帮助\"\n }\n },\n \"power\": {\n \"message\": \"

    只要-Vs =0,滤波器工具就会增加一个基准级。此基准级产生一个中间电源电压轨,用作滤波器电路的基准电压.

    基准级包括一个AD8031运算放大器,它驱动10 μF电容。利用运算放大器直接驱动电容一般是一个非常糟糕的主意,但只要所驱动电容足够大,AD8031的架构就能确保这种配置保持稳定。该电路的优势在于,它在整个频谱内提供了一个低频源阻抗。由于滤波器电路可能流出和吸入可观的电流到基准电压源,因此低源阻抗基准源对于实现最佳滤波器性能至关重要。使用此基准电路时,请注意以下几点:

    • 使用AD8031。换上其它运算放大器会导致电路不稳定.
    • AD8031驱动的电容至少应为10 μF。可以放置任意数量的旁路电容与此电容并联.
    • AD8031与电容之间不应放置电阻

    工具中显示基准电压通过一个直接与正电源轨相连的分压器获得。然而,此电压也可以从ADR4520或ADR3420等基准电压源IC产生。评估板考虑了这些基准源IC的尺寸,方便您使用.

    \",\n \"title\": \"基准级\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"voltage-range\": {\n \"message\": \"有源滤波器的输入电压范围以及相应的输出电压范围受限于运算放大器的非理想特性。 \\\"电压范围\\\"视图显示最大输入范围的计算结果,并以高亮显示哪个运算放大器规格造成了这种限制。
    • \\\"可能的最大输入信号\\\"是允许的最大输入电压——使用更大的输入信号将产生削波或失真。
    • \\\"放大器规格\\\"部分显示每一级选定运算放大器的规格。
    • \\\"最大信号\\\"部分显示确定最大允许输入电压的计算结果。 限制输入信号电压的运算放大器级和规格用一个警告标志来表示。 计算\\\"最大信号\\\"部分的其他数值,确保不超过参数限值——换言之,确保整个滤波器路径上没有削波或失真。
    • \\\"元件容差\\\"选项卡给出了标称值和最差情况值。 标称值指的是原理图中元件的标称值。 最差情况计算的是容差范围内边界处的无源值,可能导致较大的增益传递函数,需进一步降低输入信号。 参见\\\"元件容差\\\"选项卡上的\\\"幅度\\\"曲线图,了解元件容差导致的增益传递函数不确定性。

    压摆率限制 如果一个运算放大器的压摆率限制了滤波器输入电压范围规格,则输入信号电压下降至这样一种水平,在该水平下的压摆速度不会超过运算放大器所能达到的速度。 更多信息,请参见小型指南MT-045:运算放大器带宽和带宽平坦度中的\\\"压摆率和全功率带宽\\\"部分。

    输出电压范围限制 如果运算放大器的输出电压范围限制了滤波器输入电压范围规格,则输入信号电压下降至不会过驱运算放大器输出的水平。

    输入电压范围限制 如果运算放大器的输入电压范围限制了滤波器输入电压范围规格,则输入信号电压下降至不会过驱运算放大器输入的水平。

    \",\n \"title\": \"电压范围\",\n \"tooltip\": \"点击查看帮助\"\n }\n },\n \"comp-select\": {\n \"choosing-components\": {\n \"message\": \"

    您已经在规格屏幕中选择了滤波器的理论性能,现在可以选择实际元件。当更改元件时,您可在电路视图中看到这些更改。如果您更改为其他视图,则可以查看元件选择是否影响滤波器性能。软件支持两种元件选择方式

    软件支持两种元件选择方式

    方法1:让软件为您选择元件

    在这种模式下,软件会为您选择运算放大器、电阻和电容。在此模式下,可以支持三种优化:

    • 电压范围:工具选择具有较宽的输入和输出范围的运算放大器。电阻和电容值一般介于“噪声”优化与“功耗”优化之间。
    • 噪声:工具选择具有低频谱噪声密度的运算放大器,电压和电流噪声均要考虑。工具使用较小的电阻和较大的电容以降低电阻的噪声贡献。
    • 功耗:工具选择具有低功耗的运算放大器。在此模式下,工具降低对滤波器的精度要求,允许使用具有较低增益带宽积的运算放大器,它们通常具有较低的功耗。工具使用较大的电阻和较小的电容以使功耗最低。

    方法 2:自行选择元件 在此模式下

    软件在启动时使用在“为我选择”(Pick for me) 模式下使用的最新值。然后,您可以通过三种方式调整元件值:

    • 调整电阻-电容权衡关系:例如,您可以移动滑块,以获得更大的电阻和更小的电容。当您调整滑块时,RC 时间常数保持不变,因此滤波器的截止频率将与规格屏幕中选择的截止频率相匹配。
    • 调整增益电阻:. 如果某个级具有增益电阻,则您可以调整增益电阻的绝对值。电阻之间的比率保持固定,以保持在规格屏幕中选择的增益。
    • 选择不同的运算放大器:程序根据您在规格屏幕中输入的值,计算最低要求。您可以在我们的产品组合中选择满足这些最低要求的运算放大器。

    您还可以通过抓取某一个级条,并将其移动至其他级的上方/下方,从而调整级顺序。级顺序通常不会影响幅度和相位性能,但可能对噪声和电压范围产生很大影响。

    \",\n \"title\": \"优化设计\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"compensate-gbw\": {\n \"message\": \"

    如果不勾选此控件,软件程序将假设运算放大器为理想器件,速度无限快,并据此计算电阻和电容值,就像滤波器教科书中所做的一样。实际的运算放大器并不是无限快,这一局限会影响滤波器响应。如果勾选此控件,程序将调整电阻和电容值以补偿运放有限增益带宽的影响,使得最终结果更接近预想的情况.

    例如:假设滤波器级的截止频率应当为100 kHz,Q应当为1。然而,由于运放的增益带宽积有限,使用理论元件值得到的实际结果可能是95 KHz和1.1的Q。如果勾选该复选框,工具将选择反向偏移的电阻和电容值来进行补偿,例如所选值使得理想运放的截止频率为105 kHz,Q为0.9。这样,误差将抵消,所得结果将接近于理想响应.

    一般而言,最好选择具有足够增益带宽的运算放大器,而不要依赖补偿方法。如果您使用“为我选择”模式以及“电压范围”或“低噪声”优化,则工具会尝试选择具有足够高的增益带宽、接近理想值的运算放大器,但又不会由于带宽过高而浪费大量功耗。因此,是否勾选“补偿 GBW”复选框并无多大区别。但是,在使用“功耗”优化时,勾选此复选框可以提高性能,因为此优化会降低运算放大器 GBW 要求以节省功耗。如果您使用“我要选择”模式,并且选择等于或低于建议 GBW 的运算放大器,则勾选此复选框也会有所帮助

    这种技术的局限性:

    • 该技术只补偿运算放大器的增益带宽积,而不补偿其输出电阻。如果您设计的是低通或带通滤波器,并且看到响应曲线在高频时上翘,那么这很有可能是输出电阻不理想的结果。输出电阻问题应通过如下方法来解决:选择增益带宽较高的运算放大器,选择具有标准(而非轨到轨)输出级的运算放大器,或者提高电路的电阻值.
    • 该技术不能消除运放增益带宽积中的所有误差.
    • 该技术不能解决高通滤波器在高频时的滚降问题.
    • 程序使用一个相当简单的模型来获得运放的开环增益曲线。如果运放的实际性能与此模型有很大出入,那么这种增益带宽补偿可能不正确。结果应在SPICE和实验室中进行检查.
    • 尤其是使用高Q电路时,补偿可能取决于电阻和电容元件的极小变化。利用\\\"元件容差\\\"屏幕可查看实际元件容差如何影响结果.
    \",\n \"title\": \"补偿GBW\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"component-sizing\": {\n \"message\": \"

    滤波器向导允许改变电阻与电容之比。较大的电阻会产生较高的噪声和偏置电流误差,但会降低运放输出电阻误差和功耗。如果可能,应使电容值低于0.1μF,这样就可以使用C0G电容,而无需使用X7R电容。之所以优先选用C0G材料,是因为在一定的温度和电压下,其容值远比X7R型稳定.

    某些滤波器架构同时具有正和负反馈路径。这种情况下,其中一个反馈路径将是电阻之比。利用本部分的第二个控件,可以调整此反馈路径中的绝对值(比例保持不变)

    \",\n \"title\": \"元件大小\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"implementation\": {\n \"message\": \"

    滤波器向导目前支持实现下列电路:Sallen Key、Multiple Feedback和一阶。如果某种电路方案适合该滤波器级的阶数和类型,它就会列于此处.

    有关 Sallen Key 应用的更多信息,请参见指南:MT-222。相关 Sallen Key 应用与多重反馈实现的比较,请参见滤波101:Sallen Key 与多重反馈视频。

    \",\n \"title\": \"实施\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"noise\": {\n \"adc-table\": {\n \"message\": \"

    此表显示ADC的有效位数。等效位数(ENOB)计算如下:

    最大输入信号(rms) = ADC输入范围(峰峰值)/ 2√2

    SNR = 20 * log (最大输入信号(rms) / 噪声(rms))

    ENOB = (SNR – 1.76) / 6.02

    \",\n \"title\": \"ADC表\",\n \"tooltip\": \"点击查看帮助\"\n }\n },\n \"op-amp-selection\": {\n \"message\": \"

    如果您不想使用工具选择的运算放大器,而要使用其它运算放大器,您可以在此处进行更改.

    工具将ADI运算放大器库分为三类:

    • 不允许:出于各种原因,工具不允许您选择某些运算放大器:运放不够快,无法实现滤波器;运放不适合评估板;运放不能在您指定的电源电压下工作;运放数据手册缺少工具需要的规格,等等
    • 勉强能用:某些运算放大器速度够快,可以实现所选的滤波器,但存在一些误差。虽然不是最佳,您可能仍希望使用此类器件。例如,因为您的库存中有货,或者确实需要降低设计功耗。工具会提出警告,但允许您在设计中使用此类器件。对于这些运放,为了降低其所产生的误差,使用\\\"补偿GBW\\\"选项常常有效.
    • 推荐使用:这些器件足够快,非常适合您的设计.
    \",\n \"title\": \"运算放大器\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"op-amp-selection-help\": {\n \"message\": \"

    这些运算放大器的要求意味着:

    • 总电源电压:采用元件中的“电压电源”部分。
    • 推荐的GBW:具有此增益带宽或以上的运算放大器应具有滤波器级的良好性能。运算放大器必须满足运算放大器列表中成为“推荐”部分的最低GBW要求。
    • 所需的GBW:增益带宽低于此阈值的运算放大器不可选。这是因为滤波器性能会很差,导致我们无法精确地模拟该性能。如果运算放大器的GBW介于推荐值和所需值之间,则fp和Q会受影响,但有些应用的性能可能仍足够好。

    如何计算GBW限制

    滤波器设计的标准经验法则为最小GBW > 增益* Q * fp * 100。该经验法则非常简单且容易记住。然而,它通常给出的答案比必要情况更保守。换言之,通常可以使用比该公式推荐更慢的运算放大器,并获得完美的滤波结果。

    遗憾的是,为得到更精确的答案,数学变得相当复杂。由于计算机可以很好地进行计算,因此我们在滤波器向导中使用该复杂数学来计算我们展示的数字。遗憾的是,这些公式较为混乱且不易理解。

    如果想要了解运算放大器如何影响滤波器响应,Mac Van Valkenburg出色的“模拟滤波器设计”,很好地讨论了运算放大器有限放大器增益对总体滤波器响应的影响。他的公式旨在尽可能告知您发生的情况。本文会严重影响我们在滤波器向导中使用的公式。

    在哪里划界也很主观。这实际上取决于您愿意承受多少误差。这就是为什么我们给出推荐的GBW(我们认为这是一个很好的下限)和所需的GBW(我们感到舒服的最低数值,我们的模拟会相当准确)的原因。最重要的是,我们实时模拟响应,这样便可立即看到运算放大器对滤波器性能的影响。我们推荐的GBW大致为初步数值,最终您须自行决定滤波器性能是否满足您的特定需求。我们尝试简单、快速地进行模拟以便快速尝试各种选项,并根据对您很重要的指标来评估结果。

    \",\n \"title\": \"运算放大器的要求\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"voltage-supplies\": {\n \"message\": \"

    选择运算放大器的电压源。当选择“为我选择” 模式时,程序将使用这些电压来选择相应的运算放大器,当选择“我要选择”模式时,程序将缩小运算放大器选择范围。

    如果您选择单电源电压(–Vs = 0),工具会将一个值为中间电源的基准电压插入电路中。

    \",\n \"title\": \"运算放大器电源\",\n \"tooltip\": \"点击查看帮助\"\n }\n },\n \"comp-tolerance\": {\n \"GBW\": {\n \"message\": \"

    对于大多数运算放大器,器件之间的增益带宽差异通常为+/-20%。此控件让您能够查看此增益带宽差异的影响。除非运算放大器的速度刚好勉强满足设计需求,否则增益带宽积的差异对整体容差包络的影响很小。

    \",\n \"title\": \"运放增益带宽积\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"capacitor\": {\n \"message\": \"

    电容 – 容差

    该控制功能告诉程序使用何种范围的电容值来计算图上显示的容差包络。

    例如,假设上一页的滤波器计算得出理想电容值为1.12 μF。 让我们再假设将E6当作首选系列,这意味着该电容将向下取整为1 uF。 如果选择20%作为容差,则程序将使用1 μF +/-20%计算包络。

    由于1%电容值通常较难获取,该程序将1%电容限制在不超过4.7 nF。 较高的数值会将容差上推至5%。

    电容容差 容许范围
    理想10pF 至 10µF
    1%10pF 至 4.7nF
    5%10pF 至 10µF
    10%10pF 至 10µF
    20%10pF 至 10µF

    注意,电容通常是滤波器设计中精度最差的元件,一般建议购买容差较高的电容。 我们推荐选用C0G(亦称为NP0)陶瓷材质的5%或更好的电容。

    \",\n \"title\": \"电容\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"inductor\": {\n \"message\": \"

    电感 – 容差

    该控制功能告诉程序使用何种范围的电感值来计算图上显示的容差包络。

    例如,假设上一页的滤波器计算得出理想电感值为1.12 nH。 让我们再假设将E6作为首选系列,这意味着该电感将取整为1 nH。 如果选择20%作为容差,则程序将使用1 nH +/-20%计算包络。

    电容容差 容许范围
    理想10nH 至 33µH
    5%10nH 至 33µH
    10%10nH 至 33µH
    20%10nH 至 33µH

    当您订购电路器件时,我们建议选择谐振频率至少是您低通滤波器通带频率或带通滤波器中心频率10倍的电感。 该限制条件可能会影响到您订购的电感容差。

    \",\n \"title\": \"容差\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"noise\": {\n \"adc-table\": {\n \"message\": \"

    此表显示ADC的有效位数。等效位数(ENOB)计算如下:

    最大输入信号(rms) = ADC输入范围(峰峰值)/ 2√2

    SNR = 20 * log (最大输入信号(rms) / 噪声(rms))

    ENOB = (SNR – 1.76) / 6.02

    我们结合器件标称值和最差情况值计算该有效位数。器件容差越小,则这些数字彼此越接近。

    \",\n \"title\": \"ADC表\",\n \"tooltip\": \"点击查看帮助\"\n }\n },\n \"pref-series-capacitor\": {\n \"message\": \"

    电容 – 首选系列

    滤波器向导程序可让您设置无源元件的首选系列: 元件的取整值。

    例如,假设上一页的滤波器计算得出理想电容值为1.12 uF。 下表显示根据首选系列,该值将在何处取整。

    首选系列 取整值
    理想1.12 uF
    E241.1 uF
    E121.2 uF
    E61 uF
    \",\n \"title\": \"电容\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"pref-series-inductor\": {\n \"message\": \"

    电感 – 首选系列

    滤波器向导程序可让您设置无源元件的首选系列: 元件的取整值。

    例如,假设上一页的滤波器计算得出理想电感值为1.12 uH。 下表显示根据首选系列,该值将在何处取整。

    首选系列 取整值
    理想1.12 uH
    E121.2 uH
    E61 uH

    当您订购电路器件时,我们建议选择谐振频率至少是您低通滤波器通带频率或带通滤波器中心频率10倍的电感。 该限制条件可能会影响到您订购的电感容差。

    \",\n \"title\": \"容差\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"pref-series-resistor\": {\n \"message\": \"

    电阻 – 首选系列

    滤波器向导程序可让您设置无源元件的首选系列: 元件的取整值。

    例如,假设上一页的滤波器计算得出理想电阻值为1.12 kΩ。 下表显示根据首选系列,该值将在何处取整。

    首选系列 取整值
    理想1.12 kΩ
    E961.13 kΩ
    E481.1 kΩ
    E241.1 kΩ
    E121.2 kΩ
    E61 kΩ
    \",\n \"title\": \"电阻\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"resistor\": {\n \"message\": \"

    电阻 – 容差

    该控制功能告诉程序使用何种范围的电阻值来计算图上显示的容差包络。

    例如,假设上一页的滤波器计算得出理想电阻值为1.12 kΩ。 让我们再假设将E96作为首选系列,这意味着该电阻将向上取整为1.13 kΩ。 如果选择1%作为容差,则程序将使用1.13 kΩ +/-1%计算包络。

    由于0.1%和0.5%电阻值通常较难获取,该程序将这些电阻限制在10 Ω至1 MΩ内。 超出该范围的数值会将容差上推至1%。

    电容容差 容许范围
    理想1Ω 至 10 MΩ
    0.1%10Ω 至 1 MΩ
    0.5%10Ω 至 1 MΩ
    1%1Ω 至 10 MΩ
    5%1Ω 至 10 MΩ

    设计滤波器时,建议使用25 ppm/°C薄膜电阻。 这通常能够获得精度和成本之间的良好折衷。

    \",\n \"title\": \"电阻\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"step-response\": {\n \"why-no-envelope\": {\n \"message\": \"

    本工具不计算阶跃响应视图的容差包络。精确计算阶跃响应包络需要多次迭代,每次计算都将花费较长时间。为了保留本工具的交互式本质,我们决定不集成这一功能。若阶跃响应的波动很大,则建议在SPICE中运行蒙特卡洛仿真

    虽然不计算包络,但会根据滤波器的标称元件值计算标称阶跃响应。改变容差值时,标称值随之改变,你会发现阶跃响应图有一些移动。

    \",\n \"title\": \"为什么没有包络?\",\n \"tooltip\": \"点击查看帮助\"\n }\n }\n },\n \"main\": {\n \"message\": \"

    工具概览

    使用模拟滤波器向导和实际运算放大器在几分钟内设计低通、高通或带通滤波器。 设计过程中,可以观察滤波器设计的理想规格与实际电路行为特性。 快速评估权衡运算放大器规格 – 包括增益带宽、噪声和电源电流 – 以确定满足您需求的最佳滤波器设计。 具有以下特性:

    • 滤波器响应滑块 – 在最少级数(切比雪夫)和最快速建立(贝塞尔)之间进行选择,并在(切比雪夫、巴特沃兹和巴特沃兹-贝塞尔)之间进行多次响应
    • 通过滤波器向导选择运算放大器(针对低功耗、低噪声或电压范围进行优化),或使用“我想选择”功能手动选择运算放大器
    • “我想选择”部分提供Sallen Key和多路反馈拓扑结构
    • 计算结果和曲线图包括非理想运算放大器特性和无源元件容差的影响。
    • 使用滤波器向导评估系统完成原型设计
    • 保存和分享设计,并下载设计文件包,具体包括设计报告、SPICE仿真文件、物料清单和评估PCB设计文件。

    具体项目帮助

    有关具体项目帮助,请单击相关项目旁边的蓝色问号。

    \",\n \"title\": \"滤波器向导帮助\"\n },\n \"next-steps\": {\n \"circuit\": {\n \"bypass-capacitor-title\": \"旁路电容\",\n \"eval-board-help\": {\n \"message\": \"

    滤波器向导评估板系统由一个母版和数个子板组成。每个母版都提供4个子板插槽,每级使用一个子板。若设计需要的级多于4个,则多个母版可组合使用。母版还包括旁通电路和参考级(若必要)。

    母版/子板系统可带来如下优势:

    • 快速改变级顺序。 例如,使用多个不同类型的级权衡噪声性能与输入范围。
    • 范围。 滤波器向导评估板系统含有数个子板模型,支持不同类型的级。这些子板可在同一个设计中混合搭配。例如:某级可使用单运算放大器,而另一级则使用双封装运算放大器。或者,低通级与高通级搭配组成带通滤波器。
    • 轻松测量单个级的性能。 该设计可清楚表明级的开始与结束位置,单级可隔离调试。

    您可向ADI公司订购评估板裸片和运算放大器样片,其余器件应向经销商订购。

    滤波器向导通过索引标识符的最后一个字母,标识每块板上的对应元件。 例如, A级元件将称为R1A、U1A等,B级元件将称为R1B、U1B等。母版元件将称为R1M、U1M等。 若您的设计含有多个同类子板,则建议标记您的子板,以便跟踪哪一块板用作A级、哪一块用作B级等。

    母版和子板照片
    \",\n \"title\": \"评估板系统说明\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"opamp-spares-title\": \"备件\",\n \"whats-this\": {\n \"message\": \"

    只要-Vs =0,滤波器工具就会增加一个基准级。此基准级产生一个中间电源电压轨,用作滤波器电路的基准电压.

    基准级包括一个AD8031运算放大器,它驱动10 μF电容。利用运算放大器直接驱动电容一般是一个非常糟糕的主意,但只要所驱动电容足够大,AD8031的架构就能确保这种配置保持稳定。该电路的优势在于,它在整个频谱内提供了一个低频源阻抗。由于滤波器电路可能流出和吸入可观的电流到基准电压源,因此低源阻抗基准源对于实现最佳滤波器性能至关重要。使用此基准电路时,请注意以下几点:

    • 使用AD8031。换上其它运算放大器会导致电路不稳定.
    • AD8031驱动的电容至少应为10 μF。可以放置任意数量的旁路电容与此电容并联.
    • AD8031与电容之间不应放置电阻

    工具中显示基准电压通过一个直接与正电源轨相连的分压器获得。然而,此电压也可以从ADR4520或ADR3420等基准电压源IC产生。评估板考虑了这些基准源IC的尺寸,方便您使用.

    \",\n \"title\": \"中间电源基准电压源\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"whats-this-trigger\": \"这是什么?\",\n \"why-spares\": {\n \"message\": \"

    使用双运算放大器时,滤波器向导将始终仅使用封装内两个运算放大器中的一个。未使用的运算放大器显示在备件部分。备件相连,以便尽可能降低功耗。

    对于使用双运算放大器的多级滤波器,滤波器向导会“浪费”运算放大器;它不会试图将其中一个运算放大器用于某一级,而另一个用于另一级。我们采用下述方法使评估板系统易于使用:通过每一级保留一个IC,我们便可每一级都使用一个子卡,便于交换不同的子卡,观察性能差异。

    当您进行量产电路布局时,我们建议利用封装内的每一个运算放大器。

    \",\n \"title\": \"为何要有备件?\",\n \"tooltip\": \"点击查看帮助\"\n }\n }\n },\n \"specifications\": {\n \"filter-response\": {\n \"message\": \"

    使用此滑块选择滤波器响应。选择一个折中考虑元件数与其它所需特性的响应。此工具支持三种响应类型:

    滚动条选择滤波器响应注释
    最少级数切比雪夫

    此响应提供通带和阻带之间的最陡峭转换,因而需要最少级数(即最少元件)。

    此滤波器的缺点是:

    • 通带中的纹波
    • 阶跃响应较差
    • 对元件变化的高敏感度

    有关切比雪夫响应的更多信息,请参阅指南MT-206

    中间位置巴特沃兹

    此种响应达到了器件数量与其他特性(例如阶跃响应和器件容差灵敏度)之间的良好平衡

    巴特沃兹响应通常称为“最平坦”响应,因为它提供通带和阻带之间的最陡峭转换,同时仍然避免峰化。

    有关巴特沃兹响应的更多信息,请参阅指南MT-224

    右中部巴特沃兹-贝塞尔

    巴特沃兹-贝塞尔滤波器是介于贝塞尔响应和巴特沃兹响应之间的过渡滤波器。它的性能兼具这两类响应的特点。

    将滑块移动到中间,使其更像一个巴特沃兹滤波器。 将滑块向右移动,使其更像一个贝塞尔滤波器。

    最快设置贝塞尔

    贝塞尔滤波器提供通带和阻带之间的最平缓转换,因而需要最多级数(即最多元件)。

    但是,它还具有其他优良特性

    • 阶跃响应良好
    • 对元件变化的低敏感度

    请注意,如果阻带和通带频率过于接近,则贝塞尔解决方案可能无法实现。

    有关贝塞尔响应的更多信息,请参阅指南MT-204

    \",\n \"title\": \"滤波器响应\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"passband\": {\n \"message\": \"

    这是您希望让其通过的频率范围。要定义此区间,请在电路增益部分输入通带频率、截止频率,以及在该截止频率您需要多少衰减。衰减与输入的增益相关。例如,如果您输入20 dB的增益和-3 dB的衰减,工具就会尝试把通带截止频率设置在17 dB.

    如果滤波器响应是 \\\"最少级数\\\"(切比雪夫),您就可以输入您希望通带中有多少纹波。纹波量越大,则从通带到阻带的转换越陡峭,但同时也会降低阶跃响应性能,并提高滤波器对元件变化的敏感度。对于低通和高通滤波器,如果滤波器阶数为奇数,纹波将出现在额定增益以下;如果阶数为偶数,纹波将出现在额定增益以上。带通滤波器同样如此,不过首先应将阶数除以2.

    \",\n \"title\": \"通带\",\n \"tooltip\": \"点击查看帮助\"\n },\n \"stopband\": {\n \"message\": \"

    这是您希望抑制的频率范围。衰减与电路增益相关。例如,如果您输入20 dB的增益和-35 dB的衰减,工具就会尝试把阻带频率设置在-15 dB.

    \",\n \"title\": \"阻带\",\n \"tooltip\": \"点击查看帮助\"\n }\n },\n \"to-precision-warning\": {\n \"message\": \"我们检测到您使用的浏览器可能是边缘15或16,在指定精度时某些数字显示不准确。(第一个问题在边缘15中出现,并在边缘17中修复。)在某些情况下,差异可能高达50%。使用此应用和其他浏览器,将会获得更可靠的结果。\",\n \"title\": \"浏览器数字显示问题\"\n }\n },\n \"navbar\": {\n \"chinese\": \"简体中文\",\n \"english\": \"English\",\n \"feedback\": \"提交意见反馈\",\n \"help\": \"帮助\",\n \"japanese\": \"日本語\",\n \"load\": \"下载\",\n \"next-tab\": \"下一个选项卡\",\n \"previous-tab\": \"上一个选项卡\",\n \"save\": \"保存\",\n \"videos\": \"视频\"\n },\n \"opAmpSelection\": {\n \"innerRequirements\": {\n \"recommended-gbw-title\": \"推荐的GBW:\",\n \"required-gbw-title\": \"所需的GBW:\",\n \"requirement-title-one\": \"阶段 \",\n \"requirement-title-two\": \" 运算放大器的要求\",\n \"total-supply-voltage-title\": \"总电源电压: \"\n },\n \"status\": {\n \"blank-opamp-name\": \"运算放大器名称为空\",\n \"channel-support\": \"滤波器评估板只支持单通道和双通道\",\n \"components-out-of-range\": \"电路中的R、L或C太大或太小。\",\n \"current-feedback-unsupported\": \"不支持电流反馈运算放大器,\",\n \"disabled\": \"禁用\",\n \"gbw-low\": \"gbw低,\",\n \"gbw-too-low\": \"GBW过低\",\n \"ibias_high\": \"高输偏置电流\",\n \"last-time-buy\": \"最后一次采购\",\n \"marginal\": \"勉强能用\",\n \"not-allowed\": \"不允许\",\n \"not-available-in-database\": \"在数据库中不可用:\",\n \"not-enough-negative-input-range\": \"负输入范围不足\",\n \"not-enough-negative-output-range\": \"负输出范围不足\",\n \"not-enough-positive-input-range\": \"正输入范围不足\",\n \"not-enough-positive-output-range\": \"正输出范围不足\",\n \"not-recommended\": \"不推荐使用\",\n \"not-recommended-new-designs\": \"新设计不推荐使用本产品\",\n \"obsolete\": \"停产\",\n \"output-impedence-high\": \"输出阻抗过高\",\n \"package-incompatible\": \"封装与评估板不兼容\",\n \"prerelease\": \"预发布\",\n \"quad-opamp\": \"评估板不支持四通道运算放大器\",\n \"recommended\": \"推荐\",\n \"rout-high\": \"高速信号路由\",\n \"row-count\": \"'{count, plural, =0 {显示#/{total}个运算放大器。请检查提供的滤波器。} other {显示#/{total}个运算放大器。}}'\",\n \"slew-rate-low\": \"压摆率过低\",\n \"supply-voltage-high\": \"电源电压过高\",\n \"supply-voltage-low\": \"电源电压过低\",\n \"under-min-stable-gain\": \"最小稳定增益 = {value}\",\n \"under-min-stable-gain-no-cap\": \"最小稳定增益 = {value} (假设不存在COMP电容)\"\n },\n \"title\": \"选择运算放大器\"\n },\n \"page\": {\n \"description\": \"在几分钟内设计集成实际运算放大器的有源滤波器\",\n \"title\": \"滤波器设计向导 | 亚德诺半导体\"\n },\n \"panel\": {\n \"display-context\": {\n \"center-frequency\": \"中心频率\",\n \"compensate-gbw\": \"; GBW补偿\",\n \"components\": \"优化目标: {optimization}; +Vs: {vplus}; -Vs: {vminus}\",\n \"filter-type\": {\n \"bandPass\": \"带通\",\n \"highPass\": \"高通\",\n \"lowPass\": \"低通\"\n },\n \"frequency\": \"{value}Hz {signal}\",\n \"optimizations\": {\n \"noise\": \"噪声\",\n \"power\": \"电源\",\n \"specific-components\": \"特定元件\",\n \"voltage-range\": \"电压范围\"\n },\n \"passband-frequency\": \"通带\",\n \"specifications\": \"{order} {implementation}\",\n \"stopband-frequency\": \"阻带\",\n \"tolerances\": \"R: {rtolerance}; C: {ctolerance}\",\n \"tolerances-inductor\": \"L: {ltolerance}\"\n },\n \"view\": \"查看:\"\n },\n \"parameter-selector\": {\n \"choose-parameters\": \"选择参数\",\n \"ok\": \"OK\"\n },\n \"settings\": {\n \"components\": {\n \"change-op-amp\": \"更改运算放大器\",\n \"choose-op-amp\": \"选择\",\n \"compensate-gbw\": \"补偿GBW\",\n \"component-sizing\": \"元件大小\",\n \"components\": \"元件\",\n \"gain-resistors\": \"增益电阻\",\n \"gain-slider\": \"增益滑块\",\n \"implementation\": \"实施\",\n \"implementations\": {\n \"buffered-rc\": \"缓冲RC\",\n \"first-order\": \"一阶r\",\n \"gain\": \"增益\",\n \"inductor\": \"电感\",\n \"multiple-feedback\": \"Multiple Feedback\",\n \"sallen-key\": \"Sallen Key\"\n },\n \"negative-supply-voltage\": \"负电源电压\",\n \"op-amp\": \"运算放大器\",\n \"optimization\": \"优化\",\n \"optimizations\": {\n \"low-noise\": \"低噪声\",\n \"low-power\": \"低功耗\",\n \"specific-components\": \"特定元件\",\n \"voltage-range\": \"电压范围\"\n },\n \"pick-for-me\": \"为我选择\",\n \"positive-supply-voltage\": \"正电源电压\",\n \"q-resistors\": \"Q 电阻\",\n \"rc-sizing\": \"RC尺寸调整\",\n \"stage\": \"阶段: {letter}\",\n \"stages\": \"Stages\",\n \"user-choice\": \"我想选择\",\n \"volt-unit\": \"V\",\n \"voltage-supplies\": \"运算放大器电源\",\n \"vs-minus\": \"-Vs\",\n \"vs-plus\": \"+Vs\"\n },\n \"filter-tab\": {\n \"bandPass\": \"带通\",\n \"highPass\": \"高通\",\n \"lowPass\": \"低通\",\n \"select-filter-type\": \"选择滤波器类型\"\n },\n \"next-steps\": {\n \"all-files\": \"获取设计\",\n \"all-files-tooltip\": \"下载包含SPICE文件、BOM、评估板文件、和pdf版视图的zip文件\",\n \"evaluation-board\": \"订购评估板\",\n \"evaluation-board-tooltip\": \"订购评估板套件以构建硬件原型\",\n \"feedback\": \"提交意见反馈\",\n \"get-files\": \"获取文件\",\n \"mail-colleague\": \"邮件分享给同事\",\n \"mail-colleague-tooltip\": \"将此设计的副本发送给同事\",\n \"order\": \"订购\",\n \"samples\": \"申请样片\",\n \"samples-tooltip\": \"申请器件样片\",\n \"send-design\": \"Send filter
    to {toolname}\",\n \"send-design-tooltip\": \"Sends a filter design to the calling application\",\n \"share\": \"共享\",\n \"spice-only\": \"仅SPICE\",\n \"spice-only-tooltip\": \"下载包含SPICE文件的zip文件\"\n },\n \"specifications\": {\n \"center\": \"中心频率\",\n \"db\": \"dB\",\n \"fastest-settling-0\": \"最快\",\n \"fastest-settling-1\": \"建立\",\n \"fewest-stages-0\": \"最少\",\n \"fewest-stages-1\": \"级数\",\n \"filter-response\": \"滤波器响应\",\n \"gain\": \"增益\",\n \"gain-units\": {\n \"db\": \"dB\",\n \"vv\": \"V/V\"\n },\n \"hz\": \"Hz\",\n \"passband\": \"通带\",\n \"passband-attenuation\": \"通带衰减\",\n \"passband-frequency\": \"通带频率\",\n \"passband-gain-units\": \"通带增益单元\",\n \"stopband\": \"阻带\",\n \"stopband-attenuation\": \"阻带衰减\",\n \"stopband-frequency\": \"阻带频率\"\n },\n \"tolerances\": {\n \"E12\": \"E12\",\n \"E24\": \"E24\",\n \"E48\": \"E48\",\n \"E6\": \"E6\",\n \"E96\": \"E96\",\n \"capacitor\": \"电容\",\n \"capacitor-series\": \"电容首选系列\",\n \"capacitor-tolerance\": \"电容容差\",\n \"component-tolerances\": \"元件容差\",\n \"five\": \"5%\",\n \"fiveTenths\": \"0.5%\",\n \"gbw-tolerance\": \"运算放大器GBW容差\",\n \"ideal\": \"理想\",\n \"inductor\": \"容差\",\n \"inductor-series\": \"电感首选系列\",\n \"inductor-tolerance\": \"电感容差\",\n \"one\": \"1%\",\n \"oneTenth\": \"0.1%\",\n \"op-amp-gbw\": \"运放增益带宽积\",\n \"preferred-series\": \"首选系列\",\n \"resistor\": \"电阻\",\n \"resistor-series\": \"电阻首选系列\",\n \"resistor-tolerance\": \"电阻容差\",\n \"ten\": \"10%\",\n \"twenty\": \"20%\"\n }\n },\n \"units\": {\n \"ampere\": \"A\",\n \"db\": \"dB\",\n \"degree\": \"°\",\n \"hz\": \"Hz\",\n \"ohm\": \"Ω\",\n \"radian\": \"弧度\",\n \"second\": \"s\",\n \"snd\": \"V/√Hz\",\n \"volt\": \"V\",\n \"vperus\": \"V/us\",\n \"vpp\": \"Vpp\",\n \"vrms\": \"Vrms\",\n \"vv\": \"V/V\",\n \"watt\": \"W\"\n },\n \"wizard\": {\n \"components\": \"元件选择\",\n \"filter-type\": \"类型\",\n \"next-steps\": \"后续步骤\",\n \"specifications\": \"详细规格\",\n \"tolerances\": \"元件容差\"\n }\n}]];","/**\n * @private\n * @hide\n */\nexport function convertToArray(locale) {\n if (Array.isArray(locale)) {\n return locale;\n }\n return [locale];\n}\n\n/**\n * @private\n * @hide\n */\nexport function convertToString(locale) {\n if (Array.isArray(locale)) {\n return locale[0];\n }\n return locale;\n}\n/**\n * @private\n * @hide\n */\nexport function hasLocaleChanged(locale1, locale2) {\n if (!Array.isArray(locale2)) {\n return true;\n }\n return locale1.toString() !== locale2.toString();\n}\n\n/**\n * @private\n * @hide\n */\nexport function normalizeLocale(locale) {\n return locale.replace(/_/g, '-').toLowerCase();\n}","/**\n * @private\n * @hide\n */\nexport function flattenKeys(object) {\n const result = {};\n for (const key in object) {\n if (!Object.prototype.hasOwnProperty.call(object, key)) {\n continue;\n }\n const value = object[key];\n\n // If `value` is not `null`\n if (value && typeof value === 'object') {\n const hash = flattenKeys(value);\n for (const suffix in hash) {\n const translation = hash[suffix];\n if (typeof translation !== 'undefined') {\n result[`${key}.${suffix}`] = translation;\n }\n }\n } else {\n if (typeof value !== 'undefined') {\n result[key] = value;\n }\n }\n }\n return result;\n}","var _class, _descriptor, _descriptor2;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nimport { getOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { cancel, next } from '@ember/runloop';\nimport Service from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport EventEmitter from 'eventemitter3';\nimport { FormatDate, FormatList, FormatMessage, FormatNumber, FormatRelative, FormatTime } from '../-private/formatters';\nimport { createIntl, createIntlCache, onFormatjsIntlError } from '../-private/utils/formatjs';\nimport getDOM from '../-private/utils/get-dom';\nimport hydrate from '../-private/utils/hydrate';\nimport { convertToArray, convertToString, hasLocaleChanged, normalizeLocale } from '../-private/utils/locale';\nimport { flattenKeys } from '../-private/utils/translations';\nlet IntlService = (_class = class IntlService extends Service {\n /**\n * Returns an array of registered locale names\n *\n */\n get locales() {\n return Object.keys(this._intls);\n }\n\n /** @public **/\n set locale(localeName) {\n const proposedLocale = convertToArray(localeName).map(normalizeLocale);\n if (hasLocaleChanged(proposedLocale, this._locale)) {\n this._locale = proposedLocale;\n cancel(this._timer);\n this._timer = next(() => {\n this._ee.emit('localeChanged');\n this._updateDocumentLanguage(this._locale);\n });\n }\n }\n get locale() {\n return this._locale;\n }\n\n /**\n * Returns the first locale of the currently active locales\n *\n */\n get primaryLocale() {\n return this.locale[0];\n }\n\n /** @public **/\n\n /** @public **/\n constructor() {\n super(...arguments);\n _defineProperty(this, \"formatRelative\", createFormatterProxy('relative'));\n /** @public **/\n _defineProperty(this, \"formatMessage\", createFormatterProxy('message'));\n /** @public **/\n _defineProperty(this, \"formatNumber\", createFormatterProxy('number'));\n /** @public **/\n _defineProperty(this, \"formatTime\", createFormatterProxy('time'));\n /** @public **/\n _defineProperty(this, \"formatDate\", createFormatterProxy('date'));\n /** @public **/\n _defineProperty(this, \"formatList\", createFormatterProxy('list'));\n /** @private **/\n _initializerDefineProperty(this, \"_locale\", _descriptor, this);\n /** @private **/\n _defineProperty(this, \"_timer\", null);\n /** @private **/\n _defineProperty(this, \"_formats\", null);\n /** @private **/\n _defineProperty(this, \"_formatters\", {\n message: new FormatMessage(),\n relative: new FormatRelative(),\n number: new FormatNumber(),\n time: new FormatTime(),\n date: new FormatDate(),\n list: new FormatList()\n });\n /** @private */\n _initializerDefineProperty(this, \"_intls\", _descriptor2, this);\n /**\n * @private\n * @type {EventEmitter}\n */\n _defineProperty(this, \"_ee\", null);\n _defineProperty(this, \"_cache\", createIntlCache());\n const initialLocale = this.locale || ['en-us'];\n this._intls = {};\n this._ee = new EventEmitter();\n this.setLocale(initialLocale);\n this._owner = getOwner(this);\n if (!this._formats) {\n this._formats = this._owner.resolveRegistration('formats:main') || {};\n }\n this.getIntl = this.getIntl.bind(this);\n this.getOrCreateIntl = this.getOrCreateIntl.bind(this);\n hydrate(this);\n }\n willDestroy() {\n super.willDestroy(...arguments);\n cancel(this._timer);\n }\n\n /** @public **/\n lookup(key, localeName, options = {}) {\n const localeNames = this._localeWithDefault(localeName);\n let translation;\n for (let i = 0; i < localeNames.length; i++) {\n const messages = this.translationsFor(localeNames[i]);\n if (!messages) {\n continue;\n }\n translation = messages[key];\n if (translation !== undefined) {\n break;\n }\n }\n if (translation === undefined && options.resilient !== true) {\n const missingMessage = this._owner.resolveRegistration('util:intl/missing-message');\n return missingMessage.call(this, key, localeNames, options);\n }\n return translation;\n }\n\n /**\n * @private\n */\n getIntl(locale) {\n const resolvedLocale = convertToString(locale);\n return this._intls[resolvedLocale];\n }\n getOrCreateIntl(locale, messages) {\n const resolvedLocale = convertToString(locale);\n const existingIntl = this._intls[resolvedLocale];\n if (!existingIntl) {\n this._intls = {\n ...this._intls,\n [resolvedLocale]: this.createIntl(resolvedLocale, messages)\n };\n } else if (messages) {\n this._intls = {\n ...this._intls,\n [resolvedLocale]: this.createIntl(resolvedLocale, {\n ...(existingIntl.messages || {}),\n ...messages\n })\n };\n }\n return this._intls[resolvedLocale];\n }\n\n /**\n * @private\n * @param {String} locale Locale of intl obj to create\n */\n createIntl(locale, messages = {}) {\n const {\n _formats: formats\n } = this;\n const resolvedLocale = convertToString(locale);\n return createIntl({\n defaultFormats: formats,\n defaultLocale: resolvedLocale,\n formats,\n locale: resolvedLocale,\n messages,\n onError: onFormatjsIntlError\n }, this._cache);\n }\n\n /** @public **/\n t(key, options = {}) {\n let keys = [key];\n if (options.default) {\n if (Array.isArray(options.default)) {\n keys = [...keys, ...options.default];\n } else if (typeof options.default === 'string') {\n keys = [...keys, options.default];\n }\n }\n keys.forEach(key => {\n assert(`[ember-intl] expected translation key \"${key}\" to be of type String but received: \"${typeof key}\"`, typeof key === 'string');\n });\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n const message = this.lookup(key, options.locale, {\n ...options,\n // Note: last iteration will throw with the last key that was missing\n // in the future maybe the thrown error should include all the keys to help debugging\n resilient: keys.length - 1 !== index\n });\n\n // @formatjs/intl consider empty message to be an error\n if (message === '' || typeof message === 'number') {\n return message;\n }\n if (message) {\n return this.formatMessage({\n id: key,\n defaultMessage: message\n }, options);\n }\n }\n }\n\n /** @public **/\n exists(key, localeName) {\n const localeNames = this._localeWithDefault(localeName);\n assert(`[ember-intl] locale is unset, cannot lookup '${key}'`, Array.isArray(localeNames) && localeNames.length);\n return localeNames.some(localeName => key in (this.getIntl(localeName)?.messages || {}));\n }\n\n /** @public */\n setLocale(locale) {\n assert(`[ember-intl] No locale has been set. See https://ember-intl.github.io/ember-intl/docs/quickstart#4-configure-project`, locale);\n this.locale = locale;\n this.getOrCreateIntl(locale);\n }\n\n /** @public **/\n addTranslations(localeName, payload) {\n const locale = normalizeLocale(localeName);\n const messages = flattenKeys(payload);\n this.getOrCreateIntl(locale, messages);\n }\n\n /** @public **/\n translationsFor(localeName) {\n const locale = normalizeLocale(localeName);\n return this.getIntl(locale)?.messages;\n }\n\n /** @private **/\n _localeWithDefault(localeName) {\n if (!localeName) {\n return this._locale || [];\n }\n return convertToArray(localeName).map(normalizeLocale);\n }\n\n /** @private **/\n _updateDocumentLanguage(locales) {\n const dom = getDOM(this);\n if (dom) {\n const [primaryLocale] = locales;\n const html = dom.documentElement;\n html.setAttribute('lang', primaryLocale);\n }\n }\n\n /**\n * @private\n * @param fn\n * @param context\n */\n onLocaleChanged(fn, context) {\n this._ee.on('localeChanged', fn, context);\n registerDestructor(context, () => {\n this._ee.off('localeChanged', fn, context);\n });\n }\n}, _applyDecoratedDescriptor(_class.prototype, \"locale\", [dependentKeyCompat], Object.getOwnPropertyDescriptor(_class.prototype, \"locale\"), _class.prototype), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"_locale\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n}), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"_intls\", [tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n}), _class);\nexport { IntlService as default };\nfunction createFormatterProxy(name) {\n return function serviceFormatterProxy(value, formatOptions) {\n let locale;\n let intl;\n if (formatOptions && formatOptions.locale) {\n locale = this._localeWithDefault(formatOptions.locale);\n // Cannot use getOrCreateIntl since it triggers a re-render which\n // might cause infinite loop\n // This is also a case we're not optimizing for so let it take\n // the slow path\n intl = this.createIntl(locale);\n } else {\n locale = this.locale;\n intl = this.getIntl(locale);\n }\n return this._formatters[name].format(intl, value, formatOptions);\n };\n}","import translations from '../../translations';\n\n/**\n * @private\n * @hide\n */\nexport default function hydrate(service) {\n translations.forEach(([locale, translations]) => {\n service.addTranslations(locale, translations);\n });\n}","import { getOwner } from '@ember/application';\n\n// adjusted from https://github.com/yapplabs/ember-wormhole/blob/0.5.4/addon/utils/dom.js#L45-L63\n//\n// Private Ember API usage. Get the dom implementation used by the current\n// renderer, be it native browser DOM or Fastboot SimpleDOM\n/**\n * @private\n * @hide\n */\nexport default function getDOM(context) {\n let {\n renderer\n } = context;\n if (!renderer || !renderer._dom) {\n // pre glimmer2\n let container = getOwner ? getOwner(context) : context.container;\n let documentService = container.lookup('service:-document');\n if (documentService) {\n return documentService;\n }\n renderer = container.lookup('renderer:-dom');\n }\n if (renderer._dom && renderer._dom.document) {\n // pre Ember 2.6\n return renderer._dom.document;\n }\n return null;\n}","import { warn } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\n\n/**\n * @private\n * @hide\n */\nexport default function missingMessage(key, locales) {\n if (isEmpty(locales)) {\n warn(`[ember-intl] No locale has been set. See https://ember-intl.github.io/ember-intl/docs/quickstart#4-configure-project`, false, {\n id: 'ember-intl-no-locale-set'\n });\n return `No locale defined. Unable to resolve translation: \"${key}\"`;\n }\n const localeNames = locales.join(', ');\n warn(`[ember-intl] translation: \"${key}\" on locale: \"${localeNames}\" was not found.`, false, {\n id: 'ember-intl-missing-translation'\n });\n return `Missing translation \"${key}\" for locale \"${localeNames}\"`;\n}","import { assert } from '@ember/debug';\nimport { typeOf } from '@ember/utils';\nimport Component from '@ember/component';\nimport { capitalize } from '@ember/string';\nimport { observer, computed } from '@ember/object';\nimport { on } from '@ember/object/evented';\nconst SUPPORTED_TARGET_ATTACHMENTS = ['top', 'right', 'bottom', 'left', 'center', 'elementCenter', 'none'];\nexport default Component.extend({\n // target - element selector, element, or Ember View\n // targetAttachment - top, right, bottom, left, center, or none\n // left, right, top, bottom (relative to target)\n // center (relative to container)\n targetAttachment: 'center',\n isPositioned: computed('targetAttachment', 'target', 'renderInPlace', function () {\n if (this.renderInPlace) {\n return false;\n }\n let target = this.target;\n let targetAttachment = this.targetAttachment;\n if (target === 'body' && (targetAttachment === 'center' || targetAttachment === 'middle center')) {\n return false;\n }\n if (target && targetAttachment) {\n return true;\n }\n return false;\n }),\n didGetPositioned: observer('isPositioned', on('didInsertElement', function () {\n if (this._state !== 'inDOM') {\n return;\n }\n if (this.isPositioned) {\n this.updateTargetAttachment();\n } else {\n this.element.style.left = '';\n this.element.style.top = '';\n }\n })),\n getWrappedTargetAttachmentElement() {\n const target = this.target;\n if (!target) {\n return null;\n }\n if (typeOf(target) === 'string') {\n const targetSelector = target;\n const wrappedElement = document.querySelector(targetSelector);\n assert(`No element found for modal-dialog's target selector '${targetSelector}'.`, wrappedElement);\n return wrappedElement;\n }\n\n // passed an ember view or component\n if (target.element) {\n return target.element;\n }\n\n // passed an element directly\n return target;\n },\n updateTargetAttachment() {\n let targetAttachment = this.targetAttachment;\n // Convert tether-styled values like 'middle right' to 'right'\n targetAttachment = targetAttachment.split(' ').slice(-1)[0];\n assert(`Positioned container supports targetAttachments of ${SUPPORTED_TARGET_ATTACHMENTS.join(', ')}`, SUPPORTED_TARGET_ATTACHMENTS.indexOf(targetAttachment) > -1);\n const targetAttachmentMethod = `align${capitalize(targetAttachment)}`;\n const targetAttachmentElement = this.getWrappedTargetAttachmentElement();\n this[targetAttachmentMethod](targetAttachmentElement);\n },\n alignCenter() {\n const elementWidth = this.element.offsetWidth;\n const elementHeight = this.element.offsetHeight;\n this.element.style.left = '50%';\n this.element.style.top = '50%';\n this.element.style.marginLeft = `${elementWidth * -0.5}px`;\n this.element.style.marginTop = `${elementHeight * -0.5}px`;\n },\n alignLeft(targetAttachmentElement) {\n assert('Left targetAttachment requires a target', targetAttachmentElement);\n const elementWidth = this.element.offsetWidth;\n const originOffset = targetAttachmentElement.getBoundingClientRect();\n const originOffsetTop = originOffset.top;\n this.element.style.left = `${originOffset.left - elementWidth}px`;\n this.element.style.top = `${originOffsetTop}px`;\n },\n alignRight(targetAttachmentElement) {\n assert('Right targetAttachment requires a target', targetAttachmentElement);\n const targetWidth = targetAttachmentElement.offsetWidth;\n const originOffset = targetAttachmentElement.getBoundingClientRect();\n const originOffsetTop = originOffset.top;\n this.element.style.left = `${originOffset.left + targetWidth}px`;\n this.element.style.top = `${originOffsetTop}px`;\n },\n alignTop(targetAttachmentElement) {\n assert('Top targetAttachment requires a target', targetAttachmentElement);\n const elementWidth = this.element.offsetWidth;\n const elementHeight = this.element.offsetHeight;\n const originOffset = targetAttachmentElement.getBoundingClientRect();\n const originOffsetTop = originOffset.top;\n const targetWidth = targetAttachmentElement.offsetWidth;\n this.element.style.left = `${originOffset.left + targetWidth / 2 - elementWidth / 2}px`;\n this.element.style.top = `${originOffsetTop - elementHeight}px`;\n },\n alignBottom(targetAttachmentElement) {\n assert('Bottom targetAttachment requires a target', targetAttachmentElement);\n const elementWidth = this.element.offsetWidth;\n const originOffset = targetAttachmentElement.getBoundingClientRect();\n const originOffsetTop = originOffset.top;\n const targetWidth = targetAttachmentElement.offsetWidth;\n const targetHeight = targetAttachmentElement.offsetHeight;\n this.element.style.left = `${originOffset.left + targetWidth / 2 - elementWidth / 2}px`;\n this.element.style.top = `${originOffsetTop + targetHeight}px`;\n },\n alignElementCenter(targetAttachmentElement) {\n assert('ElementCenter targetAttachment requires a target', targetAttachmentElement);\n const elementWidth = this.element.offsetWidth;\n const originOffset = targetAttachmentElement.getBoundingClientRect();\n const originOffsetTop = originOffset.top;\n const targetWidth = targetAttachmentElement.offsetWidth;\n const targetHeight = targetAttachmentElement.offsetHeight;\n const elementHeight = this.element.offsetHeight;\n this.element.style.left = `${originOffset.left + targetWidth / 2 - elementWidth / 2}px`;\n this.element.style.top = `${originOffsetTop + targetHeight / 2 - elementHeight / 2}px`;\n },\n alignNone() {}\n});","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{yield}}\\n\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/modal-dialog.hbs\" })","var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { tagName, layout as templateLayout } from '@ember-decorators/component';\nimport { action, computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { readOnly, oneWay } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { dasherize } from '@ember/string';\nimport { isEmpty, typeOf, isNone } from '@ember/utils';\nimport layout from '../templates/components/modal-dialog';\nimport { assert, warn } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport { importSync } from '@embroider/macros';\nimport { ensureSafeComponent } from '@embroider/util';\nconst VALID_OVERLAY_POSITIONS = ['parent', 'sibling'];\nlet ModalDialog = (_dec = tagName(''), _dec2 = templateLayout(layout), _dec3 = service('modal-dialog'), _dec4 = readOnly('modalService.hasLiquidWormhole'), _dec5 = readOnly('modalService.hasLiquidTether'), _dec6 = oneWay('elementId'), _dec7 = computed('attachment'), _dec8 = computed('renderInPlace', 'tetherTarget', 'animatable', 'hasLiquidWormhole', 'hasLiquidTether'), _dec(_class = _dec2(_class = (_class2 = class ModalDialog extends Component {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modalService\", _descriptor, this);\n _defineProperty(this, \"animatable\", null);\n _defineProperty(this, \"clickOutsideToClose\", false);\n _defineProperty(this, \"destinationElementId\", null);\n _defineProperty(this, \"hasOverlay\", true);\n _defineProperty(this, \"overlayPosition\", 'parent');\n // `parent` or `sibling`\n _defineProperty(this, \"renderInPlace\", false);\n _defineProperty(this, \"targetAttachment\", 'middle center');\n _defineProperty(this, \"tetherClassPrefix\", null);\n _defineProperty(this, \"tetherTarget\", null);\n _defineProperty(this, \"translucentOverlay\", false);\n _defineProperty(this, \"value\", 0);\n // pass a `value` to set a \"value\" to be passed to liquid-wormhole / liquid-tether\n _initializerDefineProperty(this, \"hasLiquidWormhole\", _descriptor2, this);\n _initializerDefineProperty(this, \"hasLiquidTether\", _descriptor3, this);\n _initializerDefineProperty(this, \"stack\", _descriptor4, this);\n }\n // pass a `stack` string to set a \"stack\" to be passed to liquid-wormhole / liquid-tether\n\n get attachmentClass() {\n let attachment = this.attachment;\n if (isEmpty(attachment)) {\n return undefined;\n }\n return attachment.split(' ').map(attachmentPart => {\n return `emd-attachment-${dasherize(attachmentPart)}`;\n }).join(' ');\n }\n get whichModalDialogComponent() {\n let {\n animatable,\n hasLiquidTether,\n hasLiquidWormhole,\n tetherTarget\n } = this;\n let module = importSync('ember-modal-dialog/components/basic-dialog');\n if (this.renderInPlace) {\n module = importSync('ember-modal-dialog/components/in-place-dialog');\n } else if (tetherTarget && hasLiquidTether && hasLiquidWormhole && animatable === true) {\n module = importSync('ember-modal-dialog/components/liquid-tether-dialog');\n } else if (tetherTarget) {\n this.ensureEmberTetherPresent();\n module = importSync('ember-modal-dialog/components/tether-dialog');\n } else if (hasLiquidWormhole && animatable === true) {\n module = importSync('ember-modal-dialog/components/liquid-dialog');\n }\n return ensureSafeComponent(module.default, this);\n }\n init() {\n super.init(...arguments);\n if (!this.destinationElementId) {\n set(this, 'destinationElementId', this.modalService.destinationElementId);\n }\n }\n didReceiveAttrs() {\n super.didReceiveAttrs(...arguments);\n if (DEBUG) {\n this.validateProps();\n }\n }\n validateProps() {\n let overlayPosition = this.overlayPosition;\n if (VALID_OVERLAY_POSITIONS.indexOf(overlayPosition) === -1) {\n warn(`overlayPosition value '${overlayPosition}' is not valid (valid values [${VALID_OVERLAY_POSITIONS.join(', ')}])`, false, {\n id: 'ember-modal-dialog.validate-overlay-position'\n });\n }\n }\n ensureEmberTetherPresent() {\n if (!this.modalService.hasEmberTether) {\n throw new Error('Please install ember-tether in order to pass a tetherTarget to modal-dialog');\n }\n }\n onCloseAction() {\n const onClose = this.onClose;\n // we shouldn't warn if the callback is not provided at all\n if (isNone(onClose)) {\n return;\n }\n assert('onClose handler must be a function', typeOf(onClose) === 'function');\n onClose();\n }\n onClickOverlayAction(e) {\n e.preventDefault();\n const onClickOverlay = this.onClickOverlay;\n // we shouldn't warn if the callback is not provided at all\n if (isNone(onClickOverlay)) {\n this.onCloseAction();\n return;\n }\n assert('onClickOverlay handler must be a function', typeOf(onClickOverlay) === 'function');\n onClickOverlay();\n }\n}, _descriptor = _applyDecoratedDescriptor(_class2.prototype, \"modalService\", [_dec3], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"hasLiquidWormhole\", [_dec4], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"hasLiquidTether\", [_dec5], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"stack\", [_dec6], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _applyDecoratedDescriptor(_class2.prototype, \"attachmentClass\", [_dec7], Object.getOwnPropertyDescriptor(_class2.prototype, \"attachmentClass\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"whichModalDialogComponent\", [_dec8], Object.getOwnPropertyDescriptor(_class2.prototype, \"whichModalDialogComponent\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onCloseAction\", [action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onCloseAction\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onClickOverlayAction\", [action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onClickOverlayAction\"), _class2.prototype), _class2)) || _class) || _class);\nexport { ModalDialog as default };","/**\nAdopted from https://github.com/ef4/ember-ignore-children-helper\n\nThe MIT License (MIT)\n\nCopyright (c) 2016\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nimport { helper } from '@ember/component/helper';\nexport default helper(function ignoreChildren([nextHandler]) {\n return function (...args) {\n let event = args[args.length - 1];\n if (event && event.target === event.currentTarget) {\n nextHandler.apply(this, args);\n }\n };\n});","import { getDestinationElementIdFromConfig } from 'ember-modal-dialog/utils/config-utils';\nimport { getOwner } from '@ember/application';\nlet hasDOM = typeof document !== 'undefined';\nfunction appendContainerElement(rootElementOrId, id) {\n if (!hasDOM) {\n return;\n }\n let rootEl = rootElementOrId.appendChild ? rootElementOrId : document.querySelector(rootElementOrId);\n if (rootEl.querySelector('#' + id)) {\n return;\n }\n let modalContainerEl = document.createElement('div');\n modalContainerEl.id = id;\n rootEl.appendChild(modalContainerEl);\n}\nexport default function (instance) {\n let config = instance.resolveRegistration('config:environment');\n let modalContainerElId = getDestinationElementIdFromConfig(config);\n\n // As there is only a single `Router` across the whole app, which is owned\n // by the root `Application`, this reliably finds the root `Application`\n // from an `Application` or `Engine`.\n // eslint-disable-next-line ember/no-private-routing-service\n let app = getOwner(instance.lookup('router:main'));\n appendContainerElement(app.rootElement, modalContainerElId);\n}","import initialize from 'ember-modal-dialog/instance-initializers/add-modals-container';\n\nexport default {\n name: 'add-modals-container',\n initialize,\n};\n","import { computed } from '@ember/object';\nimport Service from '@ember/service';\nimport ENV from '../config/environment';\nimport { getDestinationElementIdFromConfig } from 'ember-modal-dialog/utils/config-utils';\n\nfunction computedFromConfig(prop) {\n return computed(function () {\n return ENV['ember-modal-dialog'] && ENV['ember-modal-dialog'][prop];\n });\n}\n\nexport default Service.extend({\n hasEmberTether: computedFromConfig('hasEmberTether'),\n hasLiquidWormhole: computedFromConfig('hasLiquidWormhole'),\n hasLiquidTether: computedFromConfig('hasLiquidTether'),\n destinationElementId: computed(function () {\n return getDestinationElementIdFromConfig(ENV);\n }),\n});\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if this.isOverlaySibling}}\\n
    \\n {{#if this.hasOverlay}}\\n \\n
    \\n {{/if}}\\n \\n {{yield}}\\n \\n
\\n {{else}}\\n
\\n {{#if this.hasOverlay}}\\n \\n \\n {{yield}}\\n \\n
\\n {{else}}\\n \\n {{yield}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/basic-dialog.hbs\" })","var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { tagName, layout as templateLayout } from '@ember-decorators/component';\nimport { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport layout from '../templates/components/basic-dialog';\nimport { dasherize } from '@ember/string';\nlet BasicDialog = (_dec = tagName(''), _dec2 = templateLayout(layout), _dec3 = service('modal-dialog'), _dec4 = computed('attachmentClass', 'containerClass', 'containerClassNames.{[],join}', 'targetAttachmentClass'), _dec5 = computed('overlayClass', 'overlayClassNames.{[],join}', 'translucentOverlay'), _dec6 = computed('targetAttachmentClass', 'variantWrapperClass', 'wrapperClass', 'wrapperClassNames.{[],join}'), _dec7 = computed('overlayPosition'), _dec8 = computed('targetAttachment'), _dec(_class = _dec2(_class = (_class2 = class BasicDialog extends Component {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"containerClassNames\", null);\n _defineProperty(this, \"overlayClassNames\", null);\n _defineProperty(this, \"wrapperClassNames\", null);\n _defineProperty(this, \"destinationElementId\", null);\n _defineProperty(this, \"translucentOverlay\", false);\n _defineProperty(this, \"clickOutsideToClose\", false);\n _defineProperty(this, \"hasOverlay\", true);\n _defineProperty(this, \"isCentered\", true);\n _defineProperty(this, \"overlayPosition\", null);\n _initializerDefineProperty(this, \"modalService\", _descriptor, this);\n _defineProperty(this, \"variantWrapperClass\", 'emd-static');\n }\n init() {\n super.init(...arguments);\n if (!this.destinationElementId) {\n set(this, 'destinationElementId', this.modalService.destinationElementId);\n }\n }\n get containerClassNamesString() {\n let classNames = this.containerClassNames?.join && this.containerClassNames?.join(' ') || this.containerClassNames;\n return ['ember-modal-dialog', classNames, this.targetAttachmentClass, this.attachmentClass, this.containerClass].filter(className => !isEmpty(className)).join(' ');\n }\n get overlayClassNamesString() {\n let classNames = this.overlayClassNames?.join && this.overlayClassNames?.join(' ') || this.overlayClassNames;\n return ['ember-modal-overlay', classNames, this.translucentOverlay ? 'translucent' : null, this.overlayClass].filter(className => !isEmpty(className)).join(' ');\n }\n get wrapperClassNamesString() {\n let classNames = this.wrapperClassNames?.join && this.wrapperClassNames?.join(' ') || this.wrapperClassNames;\n return ['ember-modal-wrapper', classNames, this.targetAttachmentClass.replace('emd-', 'emd-wrapper-'), this.variantWrapperClass, this.wrapperClass].filter(className => !isEmpty(className)).join(' ');\n }\n get isOverlaySibling() {\n return this.overlayPosition === 'sibling';\n }\n get targetAttachmentClass() {\n let targetAttachment = this.targetAttachment || '';\n // Convert tether-styled values like 'middle right' to 'right'\n targetAttachment = targetAttachment.split(' ').slice(-1)[0];\n return `ember-modal-dialog-target-attachment-${dasherize(targetAttachment)} emd-target-attachment-${dasherize(targetAttachment)}`;\n }\n didInsertElement() {\n if (!this.clickOutsideToClose) {\n return;\n }\n this.makeOverlayClickableOnIOS();\n this.handleClick = ({\n target\n }) => {\n // if the click has already resulted in the target\n // being removed or hidden, do nothing\n if (target.offsetWidth === 0 && target.offsetHeight === 0) {\n return;\n }\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n let modalSelector = '.ember-modal-dialog';\n if (this.stack) {\n modalSelector = '#' + this.stack + modalSelector;\n }\n\n // if the click is within the dialog, do nothing\n let modalEl = document.querySelector(modalSelector);\n if (modalEl && modalEl.contains(target)) {\n return;\n }\n if (this.onClose) {\n this.onClose();\n }\n };\n const registerClick = () => document.addEventListener('click', this.handleClick);\n\n // setTimeout needed or else the click handler will catch the click that spawned this modal dialog\n setTimeout(registerClick);\n if (this.isIOS) {\n const registerTouch = () => document.addEventListener('touchend', this.handleClick);\n setTimeout(registerTouch);\n }\n super.didInsertElement(...arguments);\n }\n willDestroyElement() {\n document.removeEventListener('click', this.handleClick);\n if (this.isIOS) {\n document.removeEventListener('touchend', this.handleClick);\n }\n super.willDestroyElement(...arguments);\n }\n get isIOS() {\n return /iPad|iPhone|iPod/.test(navigator.userAgent);\n }\n makeOverlayClickableOnIOS() {\n if (this.isIOS) {\n let overlayEl = document.querySelector('div[data-emd-overlay]');\n if (overlayEl) {\n overlayEl.style.cursor = 'pointer';\n }\n }\n }\n}, _descriptor = _applyDecoratedDescriptor(_class2.prototype, \"modalService\", [_dec3], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _applyDecoratedDescriptor(_class2.prototype, \"containerClassNamesString\", [_dec4], Object.getOwnPropertyDescriptor(_class2.prototype, \"containerClassNamesString\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"overlayClassNamesString\", [_dec5], Object.getOwnPropertyDescriptor(_class2.prototype, \"overlayClassNamesString\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"wrapperClassNamesString\", [_dec6], Object.getOwnPropertyDescriptor(_class2.prototype, \"wrapperClassNamesString\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isOverlaySibling\", [_dec7], Object.getOwnPropertyDescriptor(_class2.prototype, \"isOverlaySibling\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"targetAttachmentClass\", [_dec8], Object.getOwnPropertyDescriptor(_class2.prototype, \"targetAttachmentClass\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"isIOS\", [computed], Object.getOwnPropertyDescriptor(_class2.prototype, \"isIOS\"), _class2.prototype), _class2)) || _class) || _class);\nexport { BasicDialog as default };","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{yield}}\\n
\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/in-place-dialog.hbs\" })","var _dec, _dec2, _class;\nimport { tagName, layout as templateLayout } from '@ember-decorators/component';\nimport Component from '@ember/component';\nimport layout from '../templates/components/in-place-dialog';\nlet InPlaceDialog = (_dec = tagName(''), _dec2 = templateLayout(layout), _dec(_class = _dec2(_class = class InPlaceDialog extends Component {\n get containerClassNamesString() {\n const addonClassNamesString = ['ember-modal-dialog', 'ember-modal-dialog-in-place', 'emd-in-place'].join(' ');\n const containerClassNamesString = this.containerClassNames?.join && this.containerClassNames?.join(' ') || this.containerClassNames || '';\n return `${addonClassNamesString} ${containerClassNamesString}`;\n }\n}) || _class) || _class);\nexport { InPlaceDialog as default };","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.isOverlaySibling}}\\n \\n
\\n {{#if this.hasOverlay}}\\n \\n
\\n {{/if}}\\n
\\n {{yield}}\\n
\\n
\\n \\n{{else}}\\n \\n {{#if this.hasOverlay}}\\n \\n
\\n {{yield}}\\n
\\n \\n {{else}}\\n
\\n {{yield}}\\n
\\n {{/if}}\\n \\n{{/if}}\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/liquid-dialog.hbs\" })","var _dec, _class;\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { layout as templateLayout } from '@ember-decorators/component';\nimport BasicDialog from './basic-dialog';\nimport layout from '../templates/components/liquid-dialog';\nlet LiquidDialog = (_dec = templateLayout(layout), _dec(_class = class LiquidDialog extends BasicDialog {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"hasOverlay\", true);\n _defineProperty(this, \"variantWrapperClass\", 'emd-animatable');\n }\n init() {\n super.init(...arguments);\n this.containerClassNames?.push('liquid-dialog');\n }\n}) || _class);\nexport { LiquidDialog as default };","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.hasOverlay}}\\n \\n \\n \\n \\n{{/if}}\\n\\n {{yield}}\\n\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/liquid-tether-dialog.hbs\" })","var _dec, _dec2, _class, _class2;\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n/* eslint-disable ember/no-computed-properties-in-native-classes */\nimport { layout as templateLayout } from '@ember-decorators/component';\nimport { computed, set } from '@ember/object';\nimport { dasherize } from '@ember/string';\nimport BasicDialog from './basic-dialog';\nimport layout from '../templates/components/liquid-tether-dialog';\nlet LiquidTetherDialog = (_dec = templateLayout(layout), _dec2 = computed('targetAttachment'), _dec(_class = (_class2 = class LiquidTetherDialog extends BasicDialog {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"targetAttachment\", null);\n _defineProperty(this, \"attachment\", null);\n _defineProperty(this, \"hasOverlay\", true);\n _defineProperty(this, \"tetherTarget\", null);\n }\n get targetAttachmentClass() {\n let targetAttachment = this.targetAttachment || '';\n // Convert tether-styled values like 'middle right' to 'right'\n targetAttachment = targetAttachment.split(' ').slice(-1)[0];\n return `ember-modal-dialog-target-attachment-${dasherize(targetAttachment)} emd-target-attachment-${dasherize(targetAttachment)}`;\n }\n didReceiveAttrs() {\n super.didReceiveAttrs(...arguments);\n if (!this.attachment) {\n set(this, 'attachment', 'middle center');\n }\n if (!this.targetAttachment) {\n set(this, 'targetAttachment', 'middle center');\n }\n }\n get tetherClassPrefix() {\n return 'liquid-tether';\n }\n set tetherClassPrefix(val) {\n if (val) {\n return val;\n }\n return 'liquid-tether';\n }\n\n // element, css selector, view instance, 'viewport', or 'scroll-handle'\n // offset - passed in\n // targetOffset - passed in\n // targetModifier - passed in\n}, _applyDecoratedDescriptor(_class2.prototype, \"targetAttachmentClass\", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, \"targetAttachmentClass\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"tetherClassPrefix\", [computed], Object.getOwnPropertyDescriptor(_class2.prototype, \"tetherClassPrefix\"), _class2.prototype), _class2)) || _class);\nexport { LiquidTetherDialog as default };","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.hasOverlay}}\\n \\n \\n \\n \\n{{/if}}\\n\\n {{yield}}\\n\",{ moduleName: \"C:/JenkinsWS/workspace/loud_filter-wizard-cd_Deploy_Dev/application/node_modules/.embroider/rewritten-packages/ember-modal-dialog.4d6eb3ab/node_modules/ember-modal-dialog/templates/components/tether-dialog.hbs\" })","var _dec, _dec2, _class, _class2;\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nimport { layout as templateLayout } from '@ember-decorators/component';\nimport { computed, set } from '@ember/object';\nimport { dasherize } from '@ember/string';\nimport BasicDialog from './basic-dialog';\nimport layout from '../templates/components/tether-dialog';\nlet TetherDialog = (_dec = templateLayout(layout), _dec2 = computed('targetAttachment'), _dec(_class = (_class2 = class TetherDialog extends BasicDialog {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"targetAttachment\", null);\n _defineProperty(this, \"attachment\", null);\n _defineProperty(this, \"tetherTarget\", null);\n }\n init() {\n super.init(...arguments);\n this._ensureAttachments();\n }\n get targetAttachmentClass() {\n let targetAttachment = this.targetAttachment || '';\n // Convert tether-styled values like 'middle right' to 'right'\n targetAttachment = targetAttachment.split(' ').slice(-1)[0];\n return `ember-modal-dialog-target-attachment-${dasherize(targetAttachment)} emd-target-attachment-${dasherize(targetAttachment)}`;\n }\n didReceiveAttrs() {\n super.didReceiveAttrs(...arguments);\n this._ensureAttachments();\n }\n // element, css selector, view instance, 'viewport', or 'scroll-handle'\n\n get tetherClassPrefix() {\n return 'ember-tether';\n }\n set tetherClassPrefix(val) {\n if (val) {\n return val;\n }\n return 'ember-tether';\n }\n\n // offset - passed in\n // targetOffset - passed in\n // targetModifier - passed in\n _ensureAttachments() {\n if (!this.attachment) {\n set(this, 'attachment', 'middle center');\n }\n if (!this.targetAttachment) {\n set(this, 'targetAttachment', 'middle center');\n }\n }\n}, _applyDecoratedDescriptor(_class2.prototype, \"targetAttachmentClass\", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, \"targetAttachmentClass\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"tetherClassPrefix\", [computed], Object.getOwnPropertyDescriptor(_class2.prototype, \"tetherClassPrefix\"), _class2.prototype), _class2)) || _class);\nexport { TetherDialog as default };","export function getDestinationElementIdFromConfig(config) {\n // if (config.environment === 'test') {\n // return 'ember-testing';\n // }\n let modalContainerId = config['ember-modal-dialog'] && config['ember-modal-dialog'].modalRootElementId;\n modalContainerId = modalContainerId || 'modal-overlays';\n return modalContainerId;\n}","export function isFactory(\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n_factoryOrClass) {\n return !true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\n/**\n * Consume each positional and named argument to entangle it in autotracking and\n * enable updates.\n *\n * This is a temporary workaround for a change in the autotracking semantics of\n * the args proxy introduced in `v3.22`. What changed is that arguments are no\n * longer eagerly consumed. Didn’t use an argument? Then updates won’t be run\n * when its value changes. This workaround reproduces the previous behaviour to\n * avoid introducing a breaking change until a suitable transition path is made\n * available.\n */\nlet consumeArgs = noop;\nif (true) {\n consumeArgs = function ({\n positional,\n named\n }) {\n // SAFETY: TS before 4.6 does not correctly/fully resolve the type in a way\n // that allows the type checker to see that `positional` must *always* be\n // something which `extends unknown[]` here, because the underlying\n // machinery is fairly complicated and relies on a fair bit of type\n // recursion. It will stop mattering when we cut v4.0, because we won't be\n // doing this anyway.\n const pos = positional;\n for (let i = 0; i < pos.length; i++) {\n pos[i];\n }\n\n // SAFETY: TS 4.7 does not see that `named` will always be an object here.\n // However, it is guaranteed to be resolved as such by the types. This *may*\n // be a bug (https://github.com/microsoft/TypeScript/issues/48468), but it\n // *should* also stop being relevant once we ship 4.0.\n Object.values(named);\n };\n}\nexport { consumeArgs };","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { capabilities } from '@ember/modifier';\nimport { destroy, registerDestructor } from '@ember/destroyable';\nimport { Element, _implementsModify, Args } from './modifier';\nimport { consumeArgs, isFactory } from '../compat';\nfunction destroyModifier(modifier) {\n modifier.willRemove();\n modifier.willDestroy();\n}\n\n/**\n * The state bucket used throughout the life-cycle of the modifier. Basically a\n * state *machine*, where the framework calls us with the version we hand back\n * to it at each phase. The two states are the two `extends` versions of this\n * below.\n *\n * @internal\n */\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\n */\n\n/**\n * The `State` after calling `installModifier`, and therefore the state\n * available in all `updateModifier` calls and in `destroyModifier`.\n * @internal\n */\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(state, element) {\n // SAFETY: this cast represents how we are actually handling the state machine\n // transition: from this point forward in the lifecycle of the modifier, it\n // always behaves as `InstalledState`. It is safe because, and *only*\n // because, we immediately initialize `element`. (We cannot create a new state\n // from the old one because the modifier manager API expects mutation of a\n // single state bucket rather than updating it at hook calls.)\n const installedState = state;\n installedState.element = element;\n return installedState;\n}\nfunction installElementOnInstance(instance, element) {\n // SAFETY: we use the internal API for all class-based modifiers to set this\n // in a way which lets us issue the deprecation warning for anyone accessing\n // `element` as a getter while allowing types to continue working for any\n // existing subclasses (see the discussion on the class definition).\n instance[Element] = element;\n}\nfunction updateArgsOnInstance(instance, args) {\n // SAFETY: we use the internal API for all class-based modifiers to set this\n // in a way which lets us issue the deprecation warning for anyone accessing\n // `args` as a getter while allowing types to continue working for any\n // existing subclasses (see the discussion on the class definition).\n instance[Args] = args;\n}\nexport default class ClassBasedModifierManager {\n constructor(owner) {\n _defineProperty(this, \"capabilities\", capabilities(true ? '3.22' : '3.13'));\n this.owner = owner;\n }\n createModifier(factoryOrClass, args) {\n const Modifier = isFactory(factoryOrClass) ? factoryOrClass.class : factoryOrClass;\n const modifier = new Modifier(this.owner, args);\n registerDestructor(modifier, destroyModifier);\n return {\n instance: modifier,\n implementsModify: _implementsModify(modifier),\n element: null\n };\n }\n installModifier(createdState, element, args) {\n const state = installElement(createdState, element);\n\n // TODO: this can be deleted entirely at v4.\n const {\n instance\n } = state;\n installElementOnInstance(instance, element);\n if (state.implementsModify) {\n instance.modify(element, args.positional, args.named);\n } else {\n // The `consumeArgs()` call provides backwards compatibility on v3 for the\n // deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`,\n // and `didUpdateArguments`), which accidentally had eager consumption\n // semantics prior to Ember 3.22. The new, recommended `modify` hook has\n // the updated lazy semantics associated with normal auto-tracking.\n if (true) {\n consumeArgs(args);\n }\n instance.didReceiveArguments();\n instance.didInstall();\n }\n }\n updateModifier(state, args) {\n const {\n instance\n } = state;\n\n // TODO: remove at 4.0\n updateArgsOnInstance(state.instance, args);\n if (state.implementsModify) {\n instance.modify(state.element, args.positional, args.named);\n } else {\n // The `consumeArgs()` call provides backwards compatibility on v3 for the\n // deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`,\n // and `didUpdateArguments`), which accidentally had eager consumption\n // semantics prior to Ember 3.22. The new, recommended `modify` hook has\n // the updated lazy semantics associated with normal auto-tracking.\n if (true) {\n consumeArgs(args);\n }\n instance.didUpdateArguments();\n instance.didReceiveArguments();\n }\n }\n destroyModifier(state) {\n destroy(state.instance);\n }\n}","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport Manager from './modifier-manager';\nimport { isDestroying, isDestroyed } from '@ember/destroyable';\nimport { assert, deprecate } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\n\n// SAFETY: these sets are dev-only code to avoid showing deprecations for the\n// same class more than once.\n\nlet SEEN_CLASSES_FOR_LIFECYCLE;\nif (DEBUG) {\n SEEN_CLASSES_FOR_LIFECYCLE = new Set();\n}\nlet SEEN_CLASSES_FOR_DESTROYABLES;\nif (DEBUG) {\n SEEN_CLASSES_FOR_DESTROYABLES = new Set();\n}\nlet SEEN_CLASSES_FOR_ARGS;\nif (DEBUG) {\n SEEN_CLASSES_FOR_ARGS = new Set();\n}\nlet SEEN_CLASSES_FOR_ELEMENTS;\nif (DEBUG) {\n SEEN_CLASSES_FOR_ELEMENTS = new Set();\n}\n\n/** @internal */\nexport const _implementsModify = instance => instance.modify !== ClassBasedModifier.prototype.modify;\n\n/** @internal */\nexport const _implementsLegacyHooks = instance => instance.didInstall !== ClassBasedModifier.prototype.didInstall || instance.didUpdateArguments !== ClassBasedModifier.prototype.didUpdateArguments || instance.didReceiveArguments !== ClassBasedModifier.prototype.didReceiveArguments;\n\n/** @internal */\nexport const Element = Symbol('Element');\n\n/** @internal */\nexport const Args = Symbol('Args');\n\n// Preserve the signature on a class-based modifier so it can be plucked off\n// later (by e.g. Glint), using interface merging with an opaque item to\n// preserve it in the type system. The fact that it's an empty interface is\n// actually the point: it *only* hooks the type parameter into the opaque\n// (nominal) type. Note that this is distinct from the function-based modifier\n// type intentionally, because it is actually the static class side of a\n// class-based modifier which corresponds to the result of calling `modifier()`\n// with a callback defining a function-based modifier.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\n\n/**\n * A base class for modifiers which need more capabilities than function-based\n * modifiers. Useful if, for example:\n *\n * 1. You need to inject services and access them\n * 2. You need fine-grained control of updates, either for performance or\n * convenience reasons, and don't want to teardown the state of your modifier\n * every time only to set it up again.\n * 3. You need to store some local state within your modifier.\n *\n * The lifecycle hooks of class modifiers are tracked. When they run, they any\n * values they access will be added to the modifier, and the modifier will\n * update if any of those values change.\n */\nexport default class ClassBasedModifier {\n // Done this way with the weird combination of `declare` and `defineProperty`\n // so that subclasses which are overriding this by writing their own `args`\n // field type declarations continue to type check correctly. (If we introduced\n // a getter here, existing classes defining their args via a `declare args:`\n // would stop type checking, because TS -- correctly! -- differentiates\n // between class fields and getters).\n /**\n * The arguments passed to the modifier. `args.positional` is an array of\n * positional arguments, and `args.named` is an object containing the named\n * arguments.\n *\n * @deprecated Until 4.0. Access positional and named arguments directly in\n * the `modify` hook instead.\n */\n\n // Done this way with the weird combination of `declare` and `defineProperty`\n // so that subclasses which are overriding this by writing their own `element`\n // field declarations continue to type check correctly.\n /**\n * The element the modifier is applied to.\n *\n * @warning `element` is ***not*** available during `constructor` or\n * `willDestroy`.\n * @deprecated Until 4.0. Access the `element` as an argument in the `modify`\n * hook instead.\n */\n\n constructor(owner, args) {\n setOwner(this, owner);\n\n // SAFETY: the point here is (for the period where we are providing `args`\n // and `element`) to provide an internal-only way of setting and update the\n // `args` for the modifier instance; we use the `InternalClassBasedModifier`\n // interface to represent the internal-only API in a way that end users do\n // *not* have access to when subclassing `ClassBasedModifier`.\n this[Args] = args;\n assert('ember-modifier: You cannot implement both `modify` and any of the deprecated legacy lifecycle hooks (`didInstall`, `didReceiveArguments`, and `didUpdateArguments`)', !(_implementsModify(this) && _implementsLegacyHooks(this)));\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): \\`willDestroy\\`, \\`isDestroyed\\`, and \\`isDestroyed\\` are deprecated. Use the corresponding API from '@ember/destroyable' instead.`, this.willDestroy === ClassBasedModifier.prototype.willDestroy || SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n id: 'ember-modifier.use-destroyables',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n }\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): The \\`didInstall\\`, \\`didReceiveArguments\\`, and \\`didUpdateArguments\\` hooks are deprecated. Use the new \\`modify\\` hook instead.`, _implementsModify(this) || SEEN_CLASSES_FOR_LIFECYCLE.has(this.constructor), {\n id: 'ember-modifier.use-modify',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_LIFECYCLE.has(this.constructor)) {\n SEEN_CLASSES_FOR_LIFECYCLE.add(this.constructor);\n }\n }\n\n /**\n * Called when the modifier is installed and any time any tracked state used\n * in the modifier changes.\n *\n * If you need to do first-time-only setup, create a class field representing\n * the initialization state and check it when running the hook. That is also\n * where and when you should use `registerDestructor` for any teardown you\n * need to do. For example:\n *\n * ```js\n * function disconnect(instance) {\n * instance.observer?.disconnect();\n * }\n *\n * class IntersectionObserver extends Modifier {\n * observer;\n *\n * constructor(owner, args) {\n * super(owner, args);\n * registerDestructor(this, disconnect);\n * }\n *\n * modify(element, callback, options) {\n * disconnect(this);\n *\n * this.observer = new IntersectionObserver(callback, options);\n * this.observer.observe(element);\n * }\n * }\n * ```\n *\n * @param element The element to which the modifier is applied.\n * @param positional The positional arguments to the modifier.\n * @param named The named arguments to the modifier.\n */\n modify(/* eslint-disable @typescript-eslint/no-unused-vars */\n element, positional, named) {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the modifier is installed **and** anytime the arguments are\n * updated.\n *\n * @deprecated Until 4.0. Use `modify()`.\n */\n didReceiveArguments() {\n /* no op, for subclassing */\n }\n\n /**\n * Called anytime the arguments are updated but **not** on the initial\n * install. Called before `didReceiveArguments`.\n *\n * @deprecated Until 4.0. Use `modify()`.\n */\n didUpdateArguments() {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the modifier is installed on the DOM element. Called after\n * `didReceiveArguments`.\n *\n * @deprecated Until 4.0. Use `modify()`.\n */\n didInstall() {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the DOM element is about to be destroyed; use for removing\n * event listeners on the element and other similar clean-up tasks.\n *\n * @deprecated since 2.0.0: prefer to use `willDestroy`, since both it and\n * `willRemove` can perform all the same operations, including on the\n * `element`.\n */\n willRemove() {\n /* no op, for subclassing */\n }\n\n /**\n * Called when the modifier itself is about to be destroyed; use for teardown\n * code. Called after `willRemove`.\n *\n * @deprecated Until 4.0. Use `registerDestructor` from `@ember/destroyables`.\n */\n willDestroy() {\n /* no op, for subclassing */\n }\n\n /**\n * @deprecated Until 4.0. Use `isDestroying` from `@ember/destroyables`.\n */\n get isDestroying() {\n deprecate('Modifier.isDestroying is deprecated', SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n id: 'ember-modifier.use-destroyables',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n }\n return isDestroying(this);\n }\n\n /**\n * @deprecated Until 4.0. Use `isDestroyed` from `@ember/destroyables`.\n */\n get isDestroyed() {\n deprecate('Modifier.isDestroyed is deprecated', SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor), {\n id: 'ember-modifier.use-destroyables',\n until: '4.0.0',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n }\n });\n if (DEBUG && !SEEN_CLASSES_FOR_DESTROYABLES.has(this.constructor)) {\n SEEN_CLASSES_FOR_DESTROYABLES.add(this.constructor);\n }\n return isDestroyed(this);\n }\n}\n\n// We apply these here, against the prototype, so that there is only one of\n// these, rather than one per instance. We also only issue the deprecation once\n// per class for each of `args` and `element`.\nObject.defineProperty(ClassBasedModifier.prototype, 'args', {\n enumerable: true,\n get() {\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): using \\`this.args\\` is deprecated. Access positional and named arguments directly in the \\`modify\\` hook instead.`, SEEN_CLASSES_FOR_ARGS.has(this.constructor), {\n id: 'ember-modifier.no-args-property',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n if (DEBUG && !SEEN_CLASSES_FOR_ARGS.has(this.constructor)) {\n SEEN_CLASSES_FOR_ARGS.add(this.constructor);\n }\n return this[Args];\n }\n});\nObject.defineProperty(ClassBasedModifier.prototype, 'element', {\n enumerable: true,\n get() {\n deprecate(`ember-modifier (in ${this.constructor.name} at ${new Error().stack}): using \\`this.element\\` is deprecated. Access the \\`element\\` as an argument in the \\`modify\\` hook instead.`, SEEN_CLASSES_FOR_ELEMENTS.has(this.constructor), {\n id: 'ember-modifier.no-element-property',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n if (DEBUG && !SEEN_CLASSES_FOR_ELEMENTS.has(this.constructor)) {\n SEEN_CLASSES_FOR_ELEMENTS.add(this.constructor);\n }\n return this[Element] ?? null;\n }\n});\n\n/**\n * @internal This provides an interface we can use to backwards-compatibly set\n * up the element in a way that external callers will not have access to or\n * even see.\n */\n\nsetModifierManager(owner => new Manager(owner), ClassBasedModifier);","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { capabilities } from '@ember/modifier';\nimport { consumeArgs, isFactory } from '../compat';\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement(state, element) {\n // SAFETY: this cast represents how we are actually handling the state machine\n // transition: from this point forward in the lifecycle of the modifier, it\n // always behaves as `InstalledState`. It is safe because, and *only*\n // because, we immediately initialize `element`. (We cannot create a new state\n // from the old one because the modifier manager API expects mutation of a\n // single state bucket rather than updating it at hook calls.)\n const installedState = state;\n installedState.element = element;\n return installedState;\n}\nexport default class FunctionBasedModifierManager {\n constructor(options) {\n _defineProperty(this, \"capabilities\", capabilities(true ? '3.22' : '3.13'));\n _defineProperty(this, \"options\", void 0);\n this.options = {\n eager: options?.eager ?? true\n };\n }\n createModifier(factoryOrClass) {\n const instance = isFactory(factoryOrClass) ? factoryOrClass.class : factoryOrClass;\n return {\n element: null,\n instance: instance\n };\n }\n installModifier(createdState, element, args) {\n const state = installElement(createdState, element);\n const {\n positional,\n named\n } = args;\n const teardown = createdState.instance(element, positional, named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n if (true && this.options.eager) {\n consumeArgs(args);\n }\n }\n updateModifier(state, args) {\n if (state.teardown) {\n state.teardown();\n }\n const teardown = state.instance(state.element, args.positional, args.named);\n if (typeof teardown === 'function') {\n state.teardown = teardown;\n }\n if (true && this.options.eager) {\n consumeArgs(args);\n }\n }\n destroyModifier(state) {\n if (typeof state.teardown === 'function') {\n state.teardown();\n }\n }\n}","import { deprecate } from '@ember/debug';\nimport { setModifierManager } from '@ember/modifier';\nimport Modifier from '../class/modifier';\nimport FunctionBasedModifierManager from './modifier-manager';\n\n// Provide a singleton manager for each of the options. (If we extend this to\n// many more options in the future, we can revisit, but for now this means we\n// only ever allocate two managers.)\nconst EAGER_MANAGER = new FunctionBasedModifierManager({\n eager: true\n});\nconst LAZY_MANAGER = new FunctionBasedModifierManager({\n eager: false\n});\n\n// This type exists to provide a non-user-constructible, non-subclassable\n// type representing the conceptual \"instance type\" of a function modifier.\n// The abstract field of type `never` prevents subclassing in userspace of\n// the value returned from `modifier()`. By extending `Modifier`, any\n// augmentations of the `Modifier` type performed by tools like Glint will\n// also apply to function-based modifiers as well.\n\n// This provides a type whose only purpose here is to represent the runtime\n// type of a function-based modifier: a virtually opaque item. The fact that it's\n// a bare constructor type allows `modifier()` to preserve type parameters from\n// a generic function it's passed, and by making it abstract and impossible to\n// subclass (see above) we prevent users from attempting to instantiate the return\n// value from a `modifier()` call.\n\n/**\n * The (optional) return type for a modifier which needs to perform some kind of\n * cleanup or teardown -- for example, removing an event listener from an\n * element besides the one passed into the modifier.\n */\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, and if any of them changes, the function\n * will run again.\n *\n * **Note:** this will rerun if any of its arguments change, *whether or not you\n * access them*. This is legacy behavior and you should switch to using the\n * `{ eager: false }` variant, which has normal auto-tracking semantics.\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @deprecated Until 4.0. Calling `modifier()` without an options argument is\n * deprecated. It is supported until 4.0 so that existing modifiers can be\n * migrated individually. Please update your function-based modifiers to pass\n * `{ eager: false }`.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, and if any of them changes, the function\n * will run again.\n *\n * **Note:** this will rerun if any of its arguments change, *whether or not you\n * access them*. This is legacy behavior and you should switch to using the\n * `{ eager: false }` variant, which has normal auto-tracking semantics.\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @deprecated Until 4.0. Calling `modifier()` with `{ eager: true }` is\n * deprecated. It is supported until 4.0 so that existing modifiers can be\n * migrated individually. Please update your function-based modifiers to pass\n * `{ eager: false }`.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n * @param options Configuration for the modifier.\n */\n// This overload allows users to provide a `Signature` type explicitly at the\n// modifier definition site, e.g. `modifier((el, pos, named) => {...})`.\n// **Note:** this overload must appear second, since TS' inference engine will\n// not correctly infer the type of `S` here from the types on the supplied\n// callback.\n\n// This is the runtime signature; it performs no inference whatsover and just\n// uses the simplest version of the invocation possible since, for the case of\n// setting it on the modifier manager, we don't *need* any of that info, and\n// the two previous overloads capture all invocations from a type perspective.\nexport default function modifier(fn, options = {\n eager: true\n}) {\n deprecate(`ember-modifier (for ${fn.name ?? fn} at ${new Error().stack}): creating a function-based modifier without options is deprecated and will be removed at v4.0`, options !== undefined, {\n id: 'ember-modifier.function-based-options',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n deprecate(`ember-modifier (for ${fn.name ?? fn} at ${new Error().stack}): creating a function-based modifier with \\`{ eager: true }\\` is deprecated and will be removed at v4.0`, options?.eager === false, {\n id: 'ember-modifier.function-based-options',\n for: 'ember-modifier',\n since: {\n available: '3.2.0',\n enabled: '3.2.0'\n },\n until: '4.0.0'\n });\n\n // SAFETY: the cast here is a *lie*, but it is a useful one. The actual return\n // type of `setModifierManager` today is `void`; we pretend it actually\n // returns an opaque `Modifier` type so that we can provide a result from this\n // type which is useful to TS-aware tooling (e.g. Glint).\n return setModifierManager(() => options.eager ? EAGER_MANAGER : LAZY_MANAGER, fn);\n}\n\n/**\n * @internal\n */\n\n/**\n * @deprecated Instead of defining a function to match this type, simply define\n * a function-based modifier either using a `Signature` or by defining the\n * types on the callback passed to the `modifier`.\n */","import { A } from '@ember/array';\nimport ContainerDebugAdapter from '@ember/debug/container-debug-adapter';\nimport { ModuleRegistry } from './index';\nimport { getOwner } from '@ember/application';\n\nfunction getPod(type, key, prefix) {\n let match = key.match(new RegExp('^/?' + prefix + '/(.+)/' + type + '$'));\n if (match !== null) {\n return match[1];\n }\n}\n\n/*\n * This module defines a subclass of Ember.ContainerDebugAdapter that adds\n * support for resolving from modules.\n *\n */\n\n/* eslint-disable ember/no-classic-classes */\nexport default ContainerDebugAdapter.extend({\n _moduleRegistry: null,\n\n init() {\n this._super(...arguments);\n this.namespace = getOwner(this).lookup('application:main');\n\n if (!this._moduleRegistry) {\n this._moduleRegistry = new ModuleRegistry();\n }\n },\n\n /**\n The container of the application being debugged.\n This property will be injected\n on creation.\n\n @property container\n @default null\n */\n\n /**\n The resolver instance of the application\n being debugged. This property will be injected\n on creation.\n\n @property resolver\n @default null\n */\n\n /**\n Returns true if it is possible to catalog a list of available\n classes in the resolver for a given type.\n\n @method canCatalogEntriesByType\n @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n @return {boolean} whether a list is available for this type.\n */\n canCatalogEntriesByType(type) {\n if (type === 'model') {\n return true;\n }\n return this._super(...arguments);\n },\n\n /**\n Returns the available classes a given type.\n\n @method catalogEntriesByType\n @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n @return {Array} An array of classes.\n */\n catalogEntriesByType(type) {\n let moduleNames = this._moduleRegistry.moduleNames();\n let types = A();\n\n let prefix = this.namespace.modulePrefix;\n\n for (let i = 0, l = moduleNames.length; i < l; i++) {\n let key = moduleNames[i];\n\n if (key.indexOf(type) !== -1) {\n // Check if it's a pod module\n let name = getPod(type, key, this.namespace.podModulePrefix || prefix);\n if (!name) {\n // Not pod\n name = key.split(type + 's/').pop();\n\n // Support for different prefix (such as ember-cli addons).\n // Uncomment the code below when\n // https://github.com/ember-cli/ember-resolver/pull/80 is merged.\n\n //let match = key.match('^/?(.+)/' + type);\n //if (match && match[1] !== prefix) {\n // Different prefix such as an addon\n //name = match[1] + '@' + name;\n //}\n }\n types.addObject(name);\n }\n }\n return types;\n },\n});\n","export default class Cache {\n constructor(limit, func, store) {\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.size = 0;\n this.misses = 0;\n this.hits = 0;\n this.store = store || new Map();\n }\n get(key) {\n let value = this.store.get(key);\n if (this.store.has(key)) {\n this.hits++;\n return this.store.get(key);\n } else {\n this.misses++;\n value = this.set(key, this.func(key));\n }\n return value;\n }\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n return value;\n }\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n}\n","/* eslint-disable no-useless-escape */\nimport Cache from './cache';\nlet STRINGS = {};\nexport function setStrings(strings) {\n STRINGS = strings;\n}\nexport function getStrings() {\n return STRINGS;\n}\nexport function getString(name) {\n return STRINGS[name];\n}\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DASHERIZE_CACHE = new Cache(1000, (key) =>\n decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-')\n);\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\nconst CLASSIFY_CACHE = new Cache(1000, (str) => {\n const replace1 = (_match, _separator, chr) =>\n chr ? `_${chr.toUpperCase()}` : '';\n const replace2 = (_match, initialChar, _separator, chr) =>\n initialChar + (chr ? chr.toUpperCase() : '');\n const parts = str.split('/');\n for (let i = 0; i < parts.length; i++) {\n parts[i] = parts[i]\n .replace(STRING_CLASSIFY_REGEXP_1, replace1)\n .replace(STRING_CLASSIFY_REGEXP_2, replace2);\n }\n return parts\n .join('/')\n .replace(STRING_CLASSIFY_REGEXP_3, (match /*, separator, chr */) =>\n match.toUpperCase()\n );\n});\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new Cache(1000, (str) =>\n str\n .replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2')\n .replace(STRING_UNDERSCORE_REGEXP_2, '_')\n .toLowerCase()\n);\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\nconst DECAMELIZE_CACHE = new Cache(1000, (str) =>\n str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase()\n);\n/**\n Converts a camelized string into all lower case separated by underscores.\n\n ```javascript\n import { decamelize } from '@ember/string';\n\n decamelize('innerHTML'); // 'inner_html'\n decamelize('action_name'); // 'action_name'\n decamelize('css-class-name'); // 'css-class-name'\n decamelize('my favorite items'); // 'my favorite items'\n ```\n\n @method decamelize\n @param {String} str The string to decamelize.\n @return {String} the decamelized string.\n @public\n*/\nexport function decamelize(str) {\n return DECAMELIZE_CACHE.get(str);\n}\n/**\n Replaces underscores, spaces, or camelCase with dashes.\n\n ```javascript\n import { dasherize } from '@ember/string';\n\n dasherize('innerHTML'); // 'inner-html'\n dasherize('action_name'); // 'action-name'\n dasherize('css-class-name'); // 'css-class-name'\n dasherize('my favorite items'); // 'my-favorite-items'\n dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'\n ```\n\n @method dasherize\n @param {String} str The string to dasherize.\n @return {String} the dasherized string.\n @public\n*/\nexport function dasherize(str) {\n return STRING_DASHERIZE_CACHE.get(str);\n}\n/**\n Returns the UpperCamelCase form of a string.\n\n ```javascript\n import { classify } from '@ember/string';\n\n classify('innerHTML'); // 'InnerHTML'\n classify('action_name'); // 'ActionName'\n classify('css-class-name'); // 'CssClassName'\n classify('my favorite items'); // 'MyFavoriteItems'\n classify('private-docs/owner-invoice'); // 'PrivateDocs/OwnerInvoice'\n ```\n\n @method classify\n @param {String} str the string to classify\n @return {String} the classified string\n @public\n*/\nexport function classify(str) {\n return CLASSIFY_CACHE.get(str);\n}\n/**\n More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n form of a string.\n\n ```javascript\n import { underscore } from '@ember/string';\n\n underscore('innerHTML'); // 'inner_html'\n underscore('action_name'); // 'action_name'\n underscore('css-class-name'); // 'css_class_name'\n underscore('my favorite items'); // 'my_favorite_items'\n underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'\n ```\n\n @method underscore\n @param {String} str The string to underscore.\n @return {String} the underscored string.\n @public\n*/\nexport function underscore(str) {\n return UNDERSCORE_CACHE.get(str);\n}\n","/* globals requirejs, require */\n\nimport { assert, deprecate, warn } from '@ember/debug';\nimport EmberObject from '@ember/object';\nimport { dasherize, classify, underscore } from './string';\nimport { DEBUG } from '@glimmer/env';\nimport classFactory from './utils/class-factory';\n\nimport { getOwner } from '@ember/owner';\n\nif (typeof requirejs.entries === 'undefined') {\n requirejs.entries = requirejs._eak_seen;\n}\n\nexport class ModuleRegistry {\n constructor(entries) {\n this._entries = entries || requirejs.entries;\n }\n moduleNames() {\n return Object.keys(this._entries);\n }\n has(moduleName) {\n return moduleName in this._entries;\n }\n get(...args) {\n return require(...args);\n }\n}\n\n/**\n * This module defines a subclass of Ember.DefaultResolver that adds two\n * important features:\n *\n * 1) The resolver makes the container aware of es6 modules via the AMD\n * output. The loader's _moduleEntries is consulted so that classes can be\n * resolved directly via the module loader, without needing a manual\n * `import`.\n * 2) is able to provide injections to classes that implement `extend`\n * (as is typical with Ember).\n */\nclass Resolver extends EmberObject {\n static moduleBasedResolver = true;\n moduleBasedResolver = true;\n\n _deprecatedPodModulePrefix = false;\n _normalizeCache = Object.create(null);\n\n /**\n A listing of functions to test for moduleName's based on the provided\n `parsedName`. This allows easy customization of additional module based\n lookup patterns.\n\n @property moduleNameLookupPatterns\n @returns {Ember.Array}\n */\n moduleNameLookupPatterns = [\n this.podBasedModuleName,\n this.podBasedComponentsInSubdir,\n this.mainModuleName,\n this.defaultModuleName,\n this.nestedColocationComponentModuleName,\n ];\n\n constructor() {\n super(...arguments);\n\n if (!this._moduleRegistry) {\n this._moduleRegistry = new ModuleRegistry();\n }\n\n this.pluralizedTypes = this.pluralizedTypes || Object.create(null);\n\n if (!this.pluralizedTypes.config) {\n this.pluralizedTypes.config = 'config';\n }\n }\n\n makeToString(factory, fullName) {\n return '' + this.namespace.modulePrefix + '@' + fullName + ':';\n }\n\n shouldWrapInClassFactory(/* module, parsedName */) {\n return false;\n }\n\n parseName(fullName) {\n if (fullName.parsedName === true) {\n return fullName;\n }\n\n let prefix, type, name;\n let fullNameParts = fullName.split('@');\n\n if (fullNameParts.length === 3) {\n if (fullNameParts[0].length === 0) {\n // leading scoped namespace: `@scope/pkg@type:name`\n prefix = `@${fullNameParts[1]}`;\n let prefixParts = fullNameParts[2].split(':');\n type = prefixParts[0];\n name = prefixParts[1];\n } else {\n // interweaved scoped namespace: `type:@scope/pkg@name`\n prefix = `@${fullNameParts[1]}`;\n type = fullNameParts[0].slice(0, -1);\n name = fullNameParts[2];\n }\n\n if (type === 'template:components') {\n name = `components/${name}`;\n type = 'template';\n }\n } else if (fullNameParts.length === 2) {\n let prefixParts = fullNameParts[0].split(':');\n\n if (prefixParts.length === 2) {\n if (prefixParts[1].length === 0) {\n type = prefixParts[0];\n name = `@${fullNameParts[1]}`;\n } else {\n prefix = prefixParts[1];\n type = prefixParts[0];\n name = fullNameParts[1];\n }\n } else {\n let nameParts = fullNameParts[1].split(':');\n\n prefix = fullNameParts[0];\n type = nameParts[0];\n name = nameParts[1];\n }\n\n if (type === 'template' && prefix.lastIndexOf('components/', 0) === 0) {\n name = `components/${name}`;\n prefix = prefix.slice(11);\n }\n } else {\n fullNameParts = fullName.split(':');\n type = fullNameParts[0];\n name = fullNameParts[1];\n }\n\n let fullNameWithoutType = name;\n let namespace = this.namespace;\n let root = namespace;\n\n return {\n parsedName: true,\n fullName: fullName,\n prefix: prefix || this.prefix({ type: type }),\n type: type,\n fullNameWithoutType: fullNameWithoutType,\n name: name,\n root: root,\n resolveMethodName: 'resolve' + classify(type),\n };\n }\n\n resolveOther(parsedName) {\n assert('`modulePrefix` must be defined', this.namespace.modulePrefix);\n\n let normalizedModuleName = this.findModuleName(parsedName);\n\n if (normalizedModuleName) {\n let defaultExport = this._extractDefaultExport(\n normalizedModuleName,\n parsedName\n );\n\n if (defaultExport === undefined) {\n throw new Error(\n ` Expected to find: '${parsedName.fullName}' within '${normalizedModuleName}' but got 'undefined'. Did you forget to 'export default' within '${normalizedModuleName}'?`\n );\n }\n\n if (this.shouldWrapInClassFactory(defaultExport, parsedName)) {\n defaultExport = classFactory(defaultExport);\n }\n\n return defaultExport;\n }\n }\n\n normalize(fullName) {\n return (\n this._normalizeCache[fullName] ||\n (this._normalizeCache[fullName] = this._normalize(fullName))\n );\n }\n\n resolve(fullName) {\n let parsedName = this.parseName(fullName);\n let resolveMethodName = parsedName.resolveMethodName;\n let resolved;\n\n if (typeof this[resolveMethodName] === 'function') {\n resolved = this[resolveMethodName](parsedName);\n }\n\n if (resolved == null) {\n resolved = this.resolveOther(parsedName);\n }\n\n return resolved;\n }\n\n _normalize(fullName) {\n // A) Convert underscores to dashes\n // B) Convert camelCase to dash-case, except for components (their\n // templates) and helpers where we want to avoid shadowing camelCase\n // expressions\n // C) replace `.` with `/` in order to make nested controllers work in the following cases\n // 1. `needs: ['posts/post']`\n // 2. `{{render \"posts/post\"}}`\n // 3. `this.render('posts/post')` from Route\n\n let split = fullName.split(':');\n if (split.length > 1) {\n let type = split[0];\n\n if (\n type === 'component' ||\n type === 'helper' ||\n type === 'modifier' ||\n (type === 'template' && split[1].indexOf('components/') === 0)\n ) {\n return type + ':' + split[1].replace(/_/g, '-');\n } else {\n return type + ':' + dasherize(split[1].replace(/\\./g, '/'));\n }\n } else {\n return fullName;\n }\n }\n\n pluralize(type) {\n return (\n this.pluralizedTypes[type] || (this.pluralizedTypes[type] = type + 's')\n );\n }\n\n podBasedLookupWithPrefix(podPrefix, parsedName) {\n let fullNameWithoutType = parsedName.fullNameWithoutType;\n\n if (parsedName.type === 'template') {\n fullNameWithoutType = fullNameWithoutType.replace(/^components\\//, '');\n }\n\n return podPrefix + '/' + fullNameWithoutType + '/' + parsedName.type;\n }\n\n podBasedModuleName(parsedName) {\n let podPrefix =\n this.namespace.podModulePrefix || this.namespace.modulePrefix;\n\n return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n }\n\n podBasedComponentsInSubdir(parsedName) {\n let podPrefix =\n this.namespace.podModulePrefix || this.namespace.modulePrefix;\n podPrefix = podPrefix + '/components';\n\n if (\n parsedName.type === 'component' ||\n /^components/.test(parsedName.fullNameWithoutType)\n ) {\n return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n }\n }\n\n resolveEngine(parsedName) {\n let engineName = parsedName.fullNameWithoutType;\n let engineModule = engineName + '/engine';\n\n if (this._moduleRegistry.has(engineModule)) {\n return this._extractDefaultExport(engineModule);\n }\n }\n\n resolveRouteMap(parsedName) {\n let engineName = parsedName.fullNameWithoutType;\n let engineRoutesModule = engineName + '/routes';\n\n if (this._moduleRegistry.has(engineRoutesModule)) {\n let routeMap = this._extractDefaultExport(engineRoutesModule);\n\n assert(\n `The route map for ${engineName} should be wrapped by 'buildRoutes' before exporting.`,\n routeMap.isRouteMap\n );\n\n return routeMap;\n }\n }\n\n resolveTemplate(parsedName) {\n return this.resolveOther(parsedName);\n }\n\n mainModuleName(parsedName) {\n if (parsedName.fullNameWithoutType === 'main') {\n // if router:main or adapter:main look for a module with just the type first\n return parsedName.prefix + '/' + parsedName.type;\n }\n }\n\n defaultModuleName(parsedName) {\n return (\n parsedName.prefix +\n '/' +\n this.pluralize(parsedName.type) +\n '/' +\n parsedName.fullNameWithoutType\n );\n }\n\n nestedColocationComponentModuleName(parsedName) {\n if (parsedName.type === 'component') {\n return (\n parsedName.prefix +\n '/' +\n this.pluralize(parsedName.type) +\n '/' +\n parsedName.fullNameWithoutType +\n '/index'\n );\n }\n }\n\n prefix(parsedName) {\n let tmpPrefix = this.namespace.modulePrefix;\n\n if (this.namespace[parsedName.type + 'Prefix']) {\n tmpPrefix = this.namespace[parsedName.type + 'Prefix'];\n }\n\n return tmpPrefix;\n }\n\n findModuleName(parsedName, loggingDisabled) {\n let moduleNameLookupPatterns = this.moduleNameLookupPatterns;\n let moduleName;\n\n for (\n let index = 0, length = moduleNameLookupPatterns.length;\n index < length;\n index++\n ) {\n let item = moduleNameLookupPatterns[index];\n\n let tmpModuleName = item.call(this, parsedName);\n\n // allow treat all dashed and all underscored as the same thing\n // supports components with dashes and other stuff with underscores.\n if (tmpModuleName) {\n tmpModuleName = this.chooseModuleName(tmpModuleName, parsedName);\n }\n\n if (tmpModuleName && this._moduleRegistry.has(tmpModuleName)) {\n moduleName = tmpModuleName;\n }\n\n if (!loggingDisabled) {\n this._logLookup(moduleName, parsedName, tmpModuleName);\n }\n\n if (moduleName) {\n return moduleName;\n }\n }\n }\n\n chooseModuleName(moduleName, parsedName) {\n let underscoredModuleName = underscore(moduleName);\n\n if (\n moduleName !== underscoredModuleName &&\n this._moduleRegistry.has(moduleName) &&\n this._moduleRegistry.has(underscoredModuleName)\n ) {\n throw new TypeError(\n `Ambiguous module names: '${moduleName}' and '${underscoredModuleName}'`\n );\n }\n\n if (this._moduleRegistry.has(moduleName)) {\n return moduleName;\n } else if (this._moduleRegistry.has(underscoredModuleName)) {\n return underscoredModuleName;\n }\n // workaround for dasherized partials:\n // something/something/-something => something/something/_something\n let partializedModuleName = moduleName.replace(/\\/-([^/]*)$/, '/_$1');\n\n if (this._moduleRegistry.has(partializedModuleName)) {\n deprecate(\n 'Modules should not contain underscores. ' +\n 'Attempted to lookup \"' +\n moduleName +\n '\" which ' +\n 'was not found. Please rename \"' +\n partializedModuleName +\n '\" ' +\n 'to \"' +\n moduleName +\n '\" instead.',\n false,\n {\n id: 'ember-resolver.underscored-modules',\n until: '3.0.0',\n for: 'ember-resolver',\n since: '0.1.0',\n }\n );\n\n return partializedModuleName;\n }\n\n if (DEBUG) {\n let isCamelCaseHelper =\n parsedName.type === 'helper' && /[a-z]+[A-Z]+/.test(moduleName);\n if (isCamelCaseHelper) {\n this._camelCaseHelperWarnedNames =\n this._camelCaseHelperWarnedNames || [];\n let alreadyWarned =\n this._camelCaseHelperWarnedNames.indexOf(parsedName.fullName) > -1;\n if (!alreadyWarned && this._moduleRegistry.has(dasherize(moduleName))) {\n this._camelCaseHelperWarnedNames.push(parsedName.fullName);\n warn(\n 'Attempted to lookup \"' +\n parsedName.fullName +\n '\" which ' +\n 'was not found. In previous versions of ember-resolver, a bug would have ' +\n 'caused the module at \"' +\n dasherize(moduleName) +\n '\" to be ' +\n 'returned for this camel case helper name. This has been fixed. ' +\n 'Use the dasherized name to resolve the module that would have been ' +\n 'returned in previous versions.',\n false,\n { id: 'ember-resolver.camelcase-helper-names', until: '3.0.0' }\n );\n }\n }\n }\n }\n\n // used by Ember.DefaultResolver.prototype._logLookup\n lookupDescription(fullName) {\n let parsedName = this.parseName(fullName);\n\n let moduleName = this.findModuleName(parsedName, true);\n\n return moduleName;\n }\n\n // only needed until 1.6.0-beta.2 can be required\n _logLookup(found, parsedName, description) {\n let owner = getOwner(this);\n let env = owner?.resolveRegistration?.('config:environment');\n if (!env?.LOG_MODULE_RESOLVER && !parsedName.root.LOG_RESOLVER) {\n return;\n }\n\n let padding;\n let symbol = found ? '[✓]' : '[ ]';\n\n if (parsedName.fullName.length > 60) {\n padding = '.';\n } else {\n padding = new Array(60 - parsedName.fullName.length).join('.');\n }\n\n if (!description) {\n description = this.lookupDescription(parsedName);\n }\n\n /* eslint-disable no-console */\n if (console && console.info) {\n console.info(symbol, parsedName.fullName, padding, description);\n }\n }\n\n knownForType(type) {\n let moduleKeys = this._moduleRegistry.moduleNames();\n\n let items = Object.create(null);\n for (let index = 0, length = moduleKeys.length; index < length; index++) {\n let moduleName = moduleKeys[index];\n let fullname = this.translateToContainerFullname(type, moduleName);\n\n if (fullname) {\n items[fullname] = true;\n }\n }\n\n return items;\n }\n\n translateToContainerFullname(type, moduleName) {\n let prefix = this.prefix({ type });\n\n // Note: using string manipulation here rather than regexes for better performance.\n // pod modules\n // '^' + prefix + '/(.+)/' + type + '$'\n let podPrefix = prefix + '/';\n let podSuffix = '/' + type;\n let start = moduleName.indexOf(podPrefix);\n let end = moduleName.indexOf(podSuffix);\n\n if (\n start === 0 &&\n end === moduleName.length - podSuffix.length &&\n moduleName.length > podPrefix.length + podSuffix.length\n ) {\n return type + ':' + moduleName.slice(start + podPrefix.length, end);\n }\n\n // non-pod modules\n // '^' + prefix + '/' + pluralizedType + '/(.+)$'\n let pluralizedType = this.pluralize(type);\n let nonPodPrefix = prefix + '/' + pluralizedType + '/';\n\n if (\n moduleName.indexOf(nonPodPrefix) === 0 &&\n moduleName.length > nonPodPrefix.length\n ) {\n return type + ':' + moduleName.slice(nonPodPrefix.length);\n }\n }\n\n _extractDefaultExport(normalizedModuleName) {\n let module = this._moduleRegistry.get(\n normalizedModuleName,\n null,\n null,\n true /* force sync */\n );\n\n if (module && module['default']) {\n module = module['default'];\n }\n\n return module;\n }\n}\n\nexport default Resolver;\n","export default function classFactory(klass) {\n return {\n create(injections) {\n if (typeof klass.extend === 'function') {\n return klass.extend(injections);\n } else {\n return klass;\n }\n },\n };\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { get } from '@ember/object';\n\nexport default class MediaHelper extends Helper {\n @service() media;\n\n constructor() {\n super(...arguments);\n\n this.media.on('mediaChanged', () => {\n this.recompute();\n });\n }\n\n compute([prop]) {\n return get(this, `media.${prop}`);\n }\n}\n","import ResponsiveInitializer from 'ember-responsive/initializers/responsive';\nexport default ResponsiveInitializer;\n","/**\n * Stub function that is `matchMedia` API compatible but always returns\n * `false`. Useful for server-side environments like FastBoot where there\n * is no viewport.\n */\nexport default function() {\n return {\n matches: false\n };\n}\n","import Media from 'ember-responsive/services/media';\nexport default Media;\n","import Ember from 'ember';\nimport { tracked } from '@glimmer/tracking'\nimport { run, once } from '@ember/runloop';\nimport { set, defineProperty } from '@ember/object';\nimport Service from '@ember/service';\nimport { classify, dasherize } from '@ember/string';\nimport nullMatchMedia from '../null-match-media';\nimport { getOwner } from '@ember/application'\nimport Evented from '@ember/object/evented';\nimport { dependentKeyCompat } from '@ember/object/compat';\n\n/**\n* Handles detecting and responding to media queries.\n*\n* **Adding media query matchers**\n*\n* The first step to using the class is to add media queries that you\n* want it to listen to. Each media query has a name that you can\n* use to reference it by.\n*\n* ```javascript\n* media = Ember.Responsive.Media.create();\n* media.match('mobile', '(max-width: 767px)');\n* media.match('desktop', '(min-width: 768px)');\n* ```\n*\n* **Testing the media query matchers**\n*\n* Now that you've added a few matchers, you can access those media queries as\n* if they were properties on your object. The nice thing is that whenever the\n* media queries change, this class will automatically update the relevant\n* properties (and so will the rest of your application, thanks to the power\n* of two-way data-binding).\n*\n* ```javascript\n* media = Ember.Responsive.Media.create();\n* media.match('mobile', '(max-width: 767px)');\n* media.match('desktop', '(min-width: 768px)');\n*\n* // There are convenient \"isser\" properties defined...\n* if (media.get('isMobile')) {\n* console.log('mobile!');\n* }\n*\n* // As well as access to the matchMedia API...\n* if (media.get('desktop.matches')) {\n* console.log('desktop!');\n* }\n* ```\n*\n* **Retrieving a list of matching media queries**\n*\n* It's also nice to be able to see which media queries are matching, since\n* some applications might have many matches at the same time.\n*\n* ```javascript\n* media = Ember.Responsive.Media.create();\n* media.match('desktop', 'all');\n* media.match('mobile', 'all');\n*\n* console.log(media.matches);\n* // => Ember.Set(['desktop', 'mobile']);\n* ```\n*\n* This class can also return that list as a string of dasherized class names,\n* which is useful for placing on your app's rootElement. By default, these\n* class names are prefixed with `media-`, so as not to clash with any other\n* classes your app might use.\n*\n* ```javascript\n* App.ApplicationView = Ember.View.extend({\n* classNameBindings: ['media.classNames']\n* });\n* ```\n*\n* @module ember-responsive\n* @namespace Ember.Responsive\n* @class Media\n* @extends Ember.Object\n*/\nexport default class MediaService extends Service.extend(Evented) {\n // Ember only sets Ember.testing when tests are starting\n // eslint-disable-next-line ember/no-ember-testing-in-module-scope\n _mocked = Ember.testing;\n _mockedBreakpoint = 'desktop';\n\n /**\n * @property _matches\n * @type Array\n */\n @tracked _matches;\n\n /**\n * A set of matching matchers.\n *\n * @property matches\n * @type Array\n */\n get matches() {\n if (this._matches) {\n return this._matches\n }\n\n return (Ember.testing && this._mocked) ? [this._mockedBreakpoint] : [];\n }\n\n set matches(value) {\n this._matches = value;\n }\n\n /**\n * A hash of listeners indexed by their matcher's names\n *\n * @property\n * @type Object\n */\n listeners = {};\n\n /**\n * A hash of matchers by breakpoint name\n */\n matchers = {};\n\n /**\n * The matcher to use for testing media queries.\n *\n * @property matcher\n * @type matchMedia\n * @default window.matchMedia\n * @private\n */\n mql = detectMatchMedia();\n\n /**\n * Initialize the service based on the breakpoints config\n *\n * @method init\n *\n */\n constructor() {\n super(...arguments);\n\n const breakpoints = getOwner(this).lookup('breakpoints:main');\n if (breakpoints) {\n Object.keys(breakpoints).forEach((name) => {\n const cpName = `is${classify(name)}`;\n defineProperty(\n this,\n cpName,\n dependentKeyCompat({\n get() {\n return this.matches.indexOf(name) > -1;\n },\n })\n );\n\n defineProperty(\n this,\n name,\n dependentKeyCompat({\n get() {\n return this[cpName];\n },\n })\n );\n\n this.match(name, breakpoints[name]);\n });\n }\n }\n\n /**\n * A string composed of all the matching matchers' names, turned into\n * friendly, dasherized class-names that are prefixed with `media-`.\n *\n * @property classNames\n * @type string\n */\n get classNames() {\n return this.matches.map(function(name) {\n return `media-${dasherize(name)}`;\n }).join(' ');\n }\n\n _triggerMediaChanged() {\n this.trigger('mediaChanged', {});\n }\n\n _triggerEvent() {\n once(this, this._triggerMediaChanged);\n }\n\n /**\n * Adds a new matcher to the list.\n *\n * After this method is called, you will be able to access the result\n * of the matcher as a property on this object.\n *\n * **Adding a new matcher**\n *\n * ```javascript\n * media = Ember.Responsive.Media.create();\n * media.match('all', 'all');\n * media.get('all');\n * // => instanceof window.matchMedia\n * media.get('all.matches');\n * // => true\n * ```\n *\n * @param string name The name of the matcher\n * @param string query The media query to match against\n * @method match\n */\n match(name, query) {\n // see https://github.com/ember-cli/eslint-plugin-ember/pull/272\n if (Ember.testing && this._mocked) {\n return;\n }\n\n const mql = this.mql;\n const matcher = mql(query);\n\n const listener = (matcher) => {\n if (this.isDestroyed) {\n return;\n }\n\n set(this, `matchers.${name}`, matcher);\n\n if (matcher.matches) {\n this.matches = Array.from(new Set([...this.matches, name]));\n } else {\n this.matches = Array.from(new Set(this.matches.filter(key => key !== name)));\n }\n\n this._triggerEvent();\n };\n this.listeners[name] = listener;\n\n if (matcher.addListener) {\n matcher.addListener(function(matcher){\n run(null, listener, matcher);\n });\n }\n listener(matcher);\n }\n}\n\nfunction detectMatchMedia() {\n if (typeof window === 'object' && window.matchMedia) {\n return window.matchMedia;\n }\n\n return nullMatchMedia;\n}\n","/**\n * Ember responsive initializer\n *\n * Supports auto injecting media service app-wide.\n * Generated by the ember-responsive addon.\n */\nexport function initialize(application) {\n application.registerOptionsForType('breakpoints', { instantiate: false });\n}\n\nexport default {\n name: 'ember-responsive-breakpoints',\n initialize\n};\n","const ENTER_KEY = 'Enter';\nconst ESCAPE_KEY = 'Escape';\nconst SPACE_KEY = 'Space';\nconst ARROW_KEYS = {\n LEFT: 'ArrowLeft',\n UP: 'ArrowUp',\n RIGHT: 'ArrowRight',\n DOWN: 'ArrowDown'\n};\nexport const ENTER_KEY_CODE = 13;\nexport const ESCAPE_KEY_CODE = 27;\nexport const SPACE_KEY_CODE = 32;\nexport const ARROW_KEY_CODES = {\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40\n};\nfunction createKeyTest(key, keyCode) {\n return function isKey(event) {\n return event.key === key || event.keyCode === keyCode;\n };\n}\nexport const isEnterKey = createKeyTest(ENTER_KEY, ENTER_KEY_CODE);\nexport const isEscapeKey = createKeyTest(ESCAPE_KEY, ESCAPE_KEY_CODE);\nexport const isSpaceKey = createKeyTest(SPACE_KEY, SPACE_KEY_CODE);\nexport const isLeftArrowKey = createKeyTest(ARROW_KEYS.LEFT, ARROW_KEY_CODES.LEFT);\nexport const isUpArrowKey = createKeyTest(ARROW_KEYS.UP, ARROW_KEY_CODES.UP);\nexport const isRightArrowKey = createKeyTest(ARROW_KEYS.RIGHT, ARROW_KEY_CODES.RIGHT);\nexport const isDownArrowKey = createKeyTest(ARROW_KEYS.DOWN, ARROW_KEY_CODES.DOWN);","export const defaultA11yAnnouncementConfig = {\n ACTIVATE({\n a11yItemName,\n index,\n maxLength,\n direction\n }) {\n let message = `${a11yItemName} at position, ${index + 1} of ${maxLength}, is activated to be repositioned.`;\n if (direction === 'y') {\n message += 'Press up and down keys to change position,';\n } else {\n message += 'Press left and right keys to change position,';\n }\n message += ' Space to confirm new position, Escape to cancel.';\n return message;\n },\n MOVE({\n a11yItemName,\n index,\n maxLength,\n delta\n }) {\n return `${a11yItemName} is moved to position, ${index + 1 + delta} of ${maxLength}. Press Space to confirm new position, Escape to cancel.`;\n },\n CONFIRM({\n a11yItemName\n }) {\n return `${a11yItemName} is successfully repositioned.`;\n },\n CANCEL({\n a11yItemName\n }) {\n return `Cancelling ${a11yItemName} repositioning`;\n }\n};","var _dec, _dec2, _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n/* eslint-disable ember/no-computed-properties-in-native-classes */\n/* eslint-disable ember/no-incorrect-calls-with-inline-anonymous-functions */\nimport Modifier from 'ember-modifier';\nimport { action, computed, set } from '@ember/object';\nimport { isDownArrowKey, isEnterKey, isEscapeKey, isLeftArrowKey, isRightArrowKey, isSpaceKey, isUpArrowKey } from '../utils/keyboard';\nimport { ANNOUNCEMENT_ACTION_TYPES } from '../utils/constant';\nimport { defaultA11yAnnouncementConfig } from '../utils/defaults';\nimport { next, schedule, scheduleOnce, later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { registerDestructor, isDestroyed } from '@ember/destroyable';\nconst NO_MODEL = {};\n\n/**\n * Modifier to apply a11y support to a group container for the Sortable component\n *\n * @param {String} [a11yItemName] A name for each model, used for creating more meaningful a11y announcements.\n * @param {Object} [a11yAnnouncementConfig] A map of action to function to build meaningful a11y announcements.\n * @param {String} [itemVisualClass] A class for styling visual indicators on the yielded `sortable-item`.\n * @param {Object} [handleVisualClass] An object for styling visual indicators on the yielded `sortable-handle` on different `move`.\n * @param {Function} [onChange] An optional callback for when position rearrangements are confirmed.\n *\n * @module drag-drop/draggable-group\n * @example\n *
    \n * {{#each model.items as |item|}}\n *
  1. \n * {{item.name}}\n * \n *
  2. \n * {{/each}}\n *
\n */\nlet SortableGroupModifier = (_dec = service('ember-sortable-internal-state'), _dec2 = computed('direction', 'sortedItems'), _class = class SortableGroupModifier extends Modifier {\n /** End of keyboard utils */\n\n get disabled() {\n return this.named.disabled || false;\n }\n\n /** Start of a11y properties */\n /**\n * @property an object containing different classes for visual indicators\n * @type {Object}\n * @default null\n * @example\n * {\n * UP: 'up'\n * DOWN: 'down',\n * LEFT: 'left',\n * RIGHT: 'right',\n * }\n */\n get handleVisualClass() {\n return this.named.handleVisualClass || NO_MODEL;\n }\n\n /**\n * @property an object containing functions for producing screen reader announcements\n * @type {Object}\n * @example\n * {\n * MOVE: function() {},\n * ACTIVATE: function() {},\n * CONFIRM: function() {},\n * CANCEL: function() {},\n * }\n */\n get a11yAnnouncementConfig() {\n return this.named.a11yAnnouncementConfig || defaultA11yAnnouncementConfig;\n }\n get itemVisualClass() {\n return this.named.itemVisualClass || 'is-activated';\n }\n get a11yItemName() {\n return this.named.a11yItemName || 'item';\n }\n /** End of a11y properties */\n\n /**\n * Make sure that we cancel any ongoing keyboard operation when the focus is lost from the handle.\n * Because this can be fired pre-maturely, effectively cancelling before other keyboard operations,\n * we need to wait until other operations are completed, so this will cancel properly.\n *\n * @param {Event} event a DOM event.\n */\n focusOut() {\n if (!this.isRetainingFocus && !this._isElementWithinHandle(document.activeElement)) {\n this.cancelKeyboardSelection();\n }\n }\n\n /**\n * Explanation\n * 1. `KeyboardReorderMode` is disabled: users can activate it via ENTER or SPACE.\n * 2. `KeyboardReorderMode` is enabled: users can reorder via UP or DOWN arrow keys. TODO: Expand to more keys, e.g LEFT, RIGHT\n * 3. `KeyboardReorderMode` is enabled: users can finalize/save the reordering via ENTER or SPACE.\n * 4. `KeyboardReorderMode` is enabled: users can discard the reordering via ESC.\n *\n * @param {Event} event a DOM event\n */\n keyDown(event) {\n if (!this.isKeyDownEnabled) {\n return;\n }\n\n // Note: If handle is specified, we need to target the keyDown on the handle\n const isKeyboardReorderModeEnabled = this.isKeyboardReorderModeEnabled;\n const _selectedItem = this._selectedItem;\n if (!isKeyboardReorderModeEnabled && (isEnterKey(event) || isSpaceKey(event))) {\n this._prepareKeyboardReorderMode();\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.ACTIVATE);\n this._updateItemVisualIndicators(_selectedItem, true);\n this._updateHandleVisualIndicators(_selectedItem, true);\n this.isRetainingFocus = true;\n scheduleOnce('render', () => {\n this.element.focus();\n this.isRetainingFocus = false;\n });\n\n // Prevent the default scroll\n event.preventDefault();\n return;\n }\n if (isKeyboardReorderModeEnabled) {\n this._handleKeyboardReorder(event);\n event.preventDefault();\n }\n }\n\n /**\n * Checks if the given element is a child of a handle.\n *\n * @param {Element} element a DOM element.\n */\n _isElementWithinHandle(element) {\n return element.closest(`[data-sortable-handle]`);\n }\n\n /**\n * Moves an sortedItem from one index to another index, effectively performing an reorder.\n *\n * @param {Integer} fromIndex the original index\n * @param {Integer} toIndex the new index\n */\n _move(fromIndex, toIndex) {\n const direction = this.direction;\n const sortedItems = this.sortedItems;\n const item = sortedItems[fromIndex];\n const nextItem = sortedItems[toIndex];\n\n // switch direction values to notify sortedItems to update, so it sorts by direction.\n let value;\n const dimension = direction === 'y' ? 'height' : 'width';\n // DOWN or RIGHT\n if (toIndex > fromIndex) {\n value = item[direction];\n set(item, direction, nextItem[direction] + (nextItem[dimension] - item[dimension]));\n set(nextItem, direction, value);\n // UP or LEFT\n } else {\n value = nextItem[direction];\n set(nextItem, direction, item[direction] + (item[dimension] - nextItem[dimension]));\n set(item, direction, value);\n }\n }\n\n /**\n * Handles all of the keyboard operations, such as\n * 1. Keyboard navigation for UP, DOWN, LEFT, RIGHT\n * 2. Confirming reorder\n * 3. Discard reorder\n * 4. Also handles refocusing the element that triggered the interaction.\n *\n * @param {Event} event a DOM event.\n */\n _handleKeyboardReorder(event) {\n const direction = this.direction;\n const selectedItem = this._selectedItem;\n if (direction === 'y' && isDownArrowKey(event)) {\n this.moveItem(selectedItem, 1);\n } else if (direction === 'y' && isUpArrowKey(event)) {\n this.moveItem(selectedItem, -1);\n } else if (direction === 'x' && isLeftArrowKey(event)) {\n this.moveItem(selectedItem, -1);\n } else if (direction === 'x' && isRightArrowKey(event)) {\n this.moveItem(selectedItem, 1);\n } else if (isEnterKey(event) || isSpaceKey(event)) {\n // confirm will reset the selectedItem, so caching it here before we remove it.\n const itemElement = selectedItem.element;\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.CONFIRM);\n this.confirmKeyboardSelection();\n this.isRetainingFocus = true;\n scheduleOnce('render', () => this._focusItem(itemElement));\n } else if (isEscapeKey(event)) {\n // cancel will reset the selectedItem, so caching it here before we remove it.\n const _selectedItemElement = selectedItem.element;\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.CANCEL);\n this.cancelKeyboardSelection();\n this.isRetainingFocus = true;\n scheduleOnce('render', () => {\n const moves = this.moves;\n if (moves && moves.length > 0) {\n const sortedItems = this.sortedItems;\n const itemElement = sortedItems[moves[0].fromIndex].element;\n this._focusItem(itemElement);\n } else {\n this._focusItem(_selectedItemElement);\n }\n this.isRetainingFocus = false;\n });\n }\n }\n\n /**\n * Moves the item to its new position and adds the move to our history.\n *\n * @param {SortableItemModifier} item the item to be moved.\n * @param {Integer} delta how much to move index-wise.\n */\n moveItem(item, delta) {\n const sortedItems = this.sortedItems;\n const moves = this.moves;\n const sortedIndex = sortedItems.indexOf(item);\n const newSortedIndex = sortedIndex + delta;\n\n // If out of bounds, we don't do anything.\n if (newSortedIndex < 0 || newSortedIndex >= sortedItems.length) {\n return;\n }\n this._announceAction(ANNOUNCEMENT_ACTION_TYPES.MOVE, delta);\n // Guarantees that the before the UI is fully rendered before we move again.\n scheduleOnce('render', () => {\n this._move(sortedIndex, newSortedIndex);\n this._updateHandleVisualIndicators(item, true);\n moves.push([sortedIndex, newSortedIndex]);\n });\n }\n\n /**\n * Handles all the necessary operations needed for cancelling the current keyboard selection.\n * 1. Disables keyboard reorder mode.\n * 2. Undo all of the tracked moves.\n * 3. Tears down the application container, so we are not focus locked within the application.\n * 4. Resets the current selected item.\n */\n cancelKeyboardSelection() {\n const _selectedItem = this._selectedItem;\n this._disableKeyboardReorderMode();\n // Revert the process by reversing the move.\n const moves = this.moves;\n while (moves.length > 0) {\n const move = moves.pop();\n this._move(move[1], move[0]);\n }\n this._tearDownA11yApplicationContainer();\n this._updateItemVisualIndicators(_selectedItem, false);\n this._updateHandleVisualIndicators(_selectedItem, false);\n this._resetItemSelection();\n }\n\n /**\n * Handles all th necessary operations needed for confirming the current keyboard selection.\n * 1. Disables keyboard reorder mode.\n * 2. Tears down the application container, so we are not focus locked within the container.\n * 3. Make sure to update and sync all the internal items and UI.\n * 4. Triggers the `onChange` action if provided.\n * 5. Resets the currently selected item.\n */\n confirmKeyboardSelection() {\n const _selectedItem = this._selectedItem;\n this.moves = [];\n this._disableKeyboardReorderMode();\n this._tearDownA11yApplicationContainer();\n set(_selectedItem, 'wasDropped', true);\n this.commit();\n this._updateItemVisualIndicators(_selectedItem, false);\n this._updateHandleVisualIndicators(_selectedItem, false);\n this._resetItemSelection();\n }\n\n /**\n * Announces the message constructed from `a11yAnnouncementConfig`.\n *\n * @param {String} type the action type.\n * @param {Number} delta how much distance (item-wise) is being moved.\n */\n _announceAction(type, delta = null) {\n const a11yAnnouncementConfig = this.a11yAnnouncementConfig;\n const a11yItemName = this.a11yItemName;\n if (!a11yItemName || !(type in a11yAnnouncementConfig)) {\n return;\n }\n const sortedItems = this.sortedItems;\n const _selectedItem = this._selectedItem;\n const index = sortedItems.indexOf(_selectedItem);\n const announcer = this.announcer;\n const config = {\n a11yItemName,\n index: index,\n maxLength: sortedItems.length,\n direction: this.direction,\n delta\n };\n const message = a11yAnnouncementConfig[type](config);\n announcer.textContent = message;\n\n // Reset the message after the message is announced.\n later(() => {\n announcer.textContent = '';\n }, 1000);\n }\n\n /**\n * Reset the selected item.\n */\n _resetItemSelection() {\n this._selectedItem = null;\n }\n\n /**\n * Updates the selected item's visual indicators.\n *\n * @param {SortableItemModifier} item the selected item.\n * @param {Boolean} isActive to activate or deactivate the class.\n */\n _updateItemVisualIndicators(item, isActive) {\n const itemVisualClass = this.itemVisualClass;\n if (!itemVisualClass || !item) {\n return;\n }\n if (isActive) {\n item.element.classList.add(itemVisualClass);\n } else {\n item.element.classList.remove(itemVisualClass);\n }\n }\n\n /**\n * Updates the selected item's handle's visual indicators\n *\n * @param {SortableItemModifier} item the selected item.\n * @param {boolean} isUpdate to update or not update.\n */\n _updateHandleVisualIndicators(item, isUpdate) {\n const handleVisualClass = this.handleVisualClass;\n if (handleVisualClass === NO_MODEL || !item) {\n return;\n }\n const sortedItems = this.sortedItems;\n const direction = this.direction;\n const index = sortedItems.indexOf(item);\n const handle = item.element.querySelector('[data-sortable-handle');\n const visualHandle = handle ? handle : item.element;\n const visualKeys = direction === 'y' ? ['UP', 'DOWN'] : ['LEFT', 'RIGHT'];\n visualKeys.forEach(visualKey => {\n visualHandle.classList.remove(handleVisualClass[visualKey]);\n });\n if (!isUpdate) {\n return;\n }\n if (index > 0) {\n visualHandle.classList.add(handleVisualClass[visualKeys[0]]);\n }\n if (index < sortedItems.length - 1) {\n visualHandle.classList.add(handleVisualClass[visualKeys[1]]);\n }\n }\n\n /**\n * Sets focus on the current item or its handle.\n *\n * @param {Element} itemElement an DOM element representing an sortable-item.\n */\n _focusItem(itemElement) {\n const handle = itemElement.querySelector('[data-sortable-handle]');\n if (handle) {\n handle.focus();\n } else {\n // The consumer did not use a handle, so we set focus back to the item.\n itemElement.focus();\n }\n }\n\n /**\n * Enables keyboard reorder mode.\n */\n _enableKeyboardReorderMode() {\n this.isKeyboardReorderModeEnabled = true;\n }\n\n /**\n * Disables keyboard reorder mode\n */\n _disableKeyboardReorderMode() {\n this.isKeyboardReorderModeEnabled = false;\n }\n\n /**\n * Sets up the group as an application and make it programmatically focusable.\n */\n _setupA11yApplicationContainer() {\n this.element.setAttribute('role', 'application');\n this.element.tabIndex = -1;\n }\n\n /**\n * Tears down the `role=application` container.\n */\n _tearDownA11yApplicationContainer() {\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabIndex');\n }\n _prepareKeyboardReorderMode() {\n this._enableKeyboardReorderMode();\n this._setupA11yApplicationContainer();\n }\n\n // Begin of API\n\n /**\n @property direction\n @type string\n @default y\n */\n get direction() {\n return this.named.direction || 'y';\n }\n\n /**\n Called when order of items has been changed\n @property onChange\n @type Function\n @param {Object} groupModel group model (omitted if not set)\n @param {Object[]} newModel models in their new order\n @param {Object} itemModel model just dragged\n @default null\n */\n get onChange() {\n return this.named.onChange;\n }\n /**\n * This is the group name used to keep groups separate if there are more than one on the screen at a time.\n * If no group is assigned a default is used\n *\n * @default \"_EmberSortableGroup\"\n * @returns {*|string}\n */\n get groupName() {\n return this.named.groupName || '_EmberSortableGroup';\n }\n\n /**\n This is an array of SortableItemModifiers\n @property items\n @type SortableItemModifier[]\n */\n get items() {\n return this._groupDef.items;\n }\n set(items) {\n this._groupDef.items = items;\n }\n\n /**\n * Announcer element\n *\n * @type {Element}\n */\n\n /**\n Position for the first item.\n If spacing is present, first item's position will have to change as well.\n @property firstItemPosition\n @type Number\n */\n get firstItemPosition() {\n const direction = this.direction;\n const sortedItems = this.sortedItems;\n return sortedItems[0][`${direction}`] - sortedItems[0].spacing;\n }\n\n /**\n An array of DOM elements.\n @property sortedItems\n @type SortableItemModifier[]\n */\n get sortedItems() {\n const direction = this.direction;\n return this.items.sort((a, b) => a[direction] - b[direction]);\n }\n\n /**\n * Enables keyboard navigation\n */\n activateKeyDown(selectedItem) {\n this._selectedItem = selectedItem;\n this.isKeyDownEnabled = true;\n }\n\n /**\n * Disables keyboard navigation\n * Currently used to handle keydown events bubbling up from\n * elements that aren't meant to invoke keyboard navigation\n * by ignoring them.\n */\n deactivateKeyDown() {\n this.isKeyDownEnabled = false;\n }\n\n /**\n Register the group with this Sortable.\n @method registerGroup\n @param {SortableGroupModifier} group\n */\n registerGroup(group) {\n this._group = group;\n }\n\n /**\n De-register the group with this Sortable.\n @method deregisterGroup\n @param {SortableGroupModifier} group\n */\n deregisterGroup(group) {\n if (this._group === group) {\n this._group = null;\n }\n }\n\n /**\n Prepare for sorting.\n Main purpose is to stash the current firstItemPosition so\n we don’t incur expensive re-layouts.\n @method _prepare\n */\n prepare() {\n this._firstItemPosition = this.firstItemPosition;\n }\n\n /**\n Update item positions (relatively to the first element position).\n @method update\n */\n update() {\n let sortedItems = this.sortedItems;\n // Position of the first element\n let position = this._firstItemPosition;\n\n // Just in case we haven’t called prepare first.\n if (position === undefined) {\n position = this.firstItemPosition;\n }\n sortedItems.forEach(item => {\n let dimension;\n let direction = this.direction;\n if (!isDestroyed(item) && !item.isDragging) {\n set(item, direction, position);\n }\n\n // add additional spacing around active element\n if (item.isBusy) {\n position += item.spacing * 2;\n }\n if (direction === 'x') {\n dimension = 'width';\n }\n if (direction === 'y') {\n dimension = 'height';\n }\n position += item[dimension];\n });\n }\n\n /**\n @method _commit\n */\n commit() {\n const items = this.sortedItems;\n const itemModels = items.map(item => item.model);\n const draggedItem = items.find(item => item.wasDropped);\n let draggedModel;\n if (draggedItem) {\n draggedItem.wasDropped = false; // Reset\n draggedModel = draggedItem.model;\n }\n this._updateItems();\n this._onChange(itemModels, draggedModel);\n }\n _onChange(itemModels, draggedModel) {\n if (this.onChange) {\n this.onChange(itemModels, draggedModel);\n }\n }\n\n /**\n * Keeps the UI in sync with actual changes.\n * Needed for drag and keyboard operations.\n */\n _updateItems() {\n const items = this.sortedItems;\n delete this._firstItemPosition;\n schedule('render', () => {\n items.forEach(item => item.freeze());\n });\n schedule('afterRender', () => {\n items.forEach(item => item.reset());\n });\n next(() => {\n schedule('render', () => {\n items.forEach(item => item.thaw());\n });\n });\n }\n _createAnnouncer() {\n const announcer = document.createElement('span');\n announcer.setAttribute('aria-live', 'polite');\n announcer.classList.add('visually-hidden');\n return announcer;\n }\n\n // end of API\n\n addEventListener() {\n this.element.addEventListener('keydown', this.keyDown);\n this.element.addEventListener('focusout', this.focusOut);\n }\n removeEventListener() {\n this.element.removeEventListener('keydown', this.keyDown);\n this.element.removeEventListener('focusout', this.focusOut);\n }\n constructor(owner, args) {\n super(owner, args);\n /** Primary keyboard utils */\n // Tracks the currently selected item\n _defineProperty(this, \"_selectedItem\", null);\n // Tracks the current move\n _defineProperty(this, \"move\", null);\n _defineProperty(this, \"moves\", []);\n // Tracks the status of keyboard reorder mode\n _defineProperty(this, \"isKeyboardReorderModeEnabled\", false);\n _defineProperty(this, \"isKeyDownEnabled\", false);\n // Tracks if we're still performing a programmatic focus.\n _defineProperty(this, \"isRetainingFocus\", false);\n _initializerDefineProperty(this, \"sortableService\", _descriptor, this);\n _defineProperty(this, \"announcer\", null);\n _defineProperty(this, \"element\", void 0);\n _defineProperty(this, \"didSetup\", false);\n registerDestructor(this, cleanup);\n }\n modify(element, _positional, named) {\n this.element = element;\n this.named = named;\n this.removeEventListener();\n if (!this.didSetup) {\n this._groupDef = this.sortableService.fetchGroup(this.groupName);\n this.announcer = this._createAnnouncer();\n this.element.insertAdjacentElement('afterend', this.announcer);\n this.sortableService.registerGroup(this.groupName, this);\n this.didSetup = true;\n }\n if (this.disabled) {\n return;\n }\n this.addEventListener();\n }\n}, _applyDecoratedDescriptor(_class.prototype, \"focusOut\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"focusOut\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"keyDown\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"keyDown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelKeyboardSelection\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelKeyboardSelection\"), _class.prototype), _descriptor = _applyDecoratedDescriptor(_class.prototype, \"sortableService\", [_dec], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _applyDecoratedDescriptor(_class.prototype, \"firstItemPosition\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"firstItemPosition\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"activateKeyDown\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"activateKeyDown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deactivateKeyDown\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"deactivateKeyDown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"registerGroup\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"registerGroup\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deregisterGroup\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"deregisterGroup\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"prepare\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"prepare\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"update\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"update\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"commit\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"commit\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_onChange\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"_onChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"_createAnnouncer\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"_createAnnouncer\"), _class.prototype), _class);\nexport { SortableGroupModifier as default };\n/**\n *\n * @param {SortableGroupModifier} instance\n */\nfunction cleanup(instance) {\n // todo cleanup the announcer\n if (instance.announcer.parentNode) {\n instance.announcer.parentNode.removeChild(instance.announcer);\n }\n instance.removeEventListener();\n instance.sortableService.deregisterGroup(instance.groupName, instance);\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Modifier from 'ember-modifier';\n\n/**\n * Modifier to to mark the handle of an item. If this is not supplied the item will be the handle\n *\n * @module drag-drop/draggable-group\n * @example*\n *
    \n * {{#each model.items as |item|}}\n *
  1. \n * {{item.name}}\n * \n *
  2. \n * {{/each}}\n *
\n */\nexport default class SortableHandleModifier extends Modifier {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"didSetup\", false);\n }\n modify(element /*, positional, named*/) {\n if (!this.didSetup) {\n // take the model and look up the registered element, the tell that element you are the handle\n element.dataset.sortableHandle = true;\n element.tabIndex = '0';\n element.setAttribute('role', 'button');\n this.didSetup = true;\n }\n }\n}","/**\n Gets the y offset for a given event.\n Work for touch and mouse events.\n @method getY\n @return {Number}\n @private\n*/\nexport function getY(event) {\n let touches = event.changedTouches;\n let touch = touches && touches[0];\n if (touch) {\n return touch.screenY;\n } else {\n return event.clientY;\n }\n}\n\n/**\n Gets the x offset for a given event.\n @method getX\n @return {Number}\n @private\n*/\nexport function getX(event) {\n let touches = event.changedTouches;\n let touch = touches && touches[0];\n if (touch) {\n return touch.screenX;\n } else {\n return event.clientX;\n }\n}","export default class ScrollContainer {\n constructor(element) {\n this.isWindow = element === document;\n this.element = this.isWindow ? document.documentElement : element;\n if (this.isWindow) {\n this.top = 0;\n this.left = 0;\n this.width = document.documentElement.clientWidth;\n this.height = document.documentElement.clientHeight;\n } else {\n // Absolute position in document\n let {\n top,\n left\n } = this.element.getBoundingClientRect();\n this.top = top;\n this.left = left;\n // Viewport size of the container element\n this.width = parseFloat(getComputedStyle(this.element).width);\n this.height = parseFloat(getComputedStyle(this.element).height);\n }\n // Total size of the container element (including scrollable part)\n this.scrollWidth = this.element.scrollWidth;\n this.scrollHeight = this.element.scrollHeight;\n // Max scroll pos\n this.maxScrollTop = this.scrollHeight - this.height;\n this.maxScrollLeft = this.scrollWidth - this.width;\n }\n get bottom() {\n return this.top + this.height;\n }\n get right() {\n return this.left + this.width;\n }\n scrollTop(value) {\n if (value) {\n value = Math.max(0, Math.min(this.maxScrollTop, value));\n this.element.scrollTop = value;\n return value;\n }\n return this.element.scrollTop;\n }\n scrollLeft(value) {\n if (value) {\n value = Math.max(0, Math.min(this.maxScrollLeft, value));\n this.element.scrollLeft = value;\n return value;\n }\n return this.element.scrollLeft;\n }\n}","/**\n Gets a numeric border-spacing values for a given element.\n\n @method getBorderSpacing\n @param {Element} element\n @return {Object}\n @private\n*/\nexport function getBorderSpacing(el) {\n let css = getComputedStyle(el).borderSpacing; // '0px 0px'\n let [horizontal, vertical] = css.split(' ');\n return {\n horizontal: parseFloat(horizontal),\n vertical: parseFloat(vertical)\n };\n}","import Ember from 'ember';\nimport { registerWaiter } from '@ember/test';\n\n// this ensures that if @ember/test-waiters exists in multiple places in the\n// build output we will still use a single map of waiters (there really should\n// only be one of them, or else `settled` will not work at all)\nconst WAITERS = function () {\n const HAS_SYMBOL = typeof Symbol !== 'undefined';\n let symbolName = 'TEST_WAITERS';\n let symbol = HAS_SYMBOL ? Symbol.for(symbolName) : symbolName;\n let global = getGlobal();\n let waiters = global[symbol];\n if (waiters === undefined) {\n waiters = global[symbol] = new Map();\n }\n return waiters;\n}();\nfunction indexable(input) {\n return input;\n}\nfunction getGlobal() {\n // eslint-disable-next-line node/no-unsupported-features/es-builtins\n if (typeof globalThis !== 'undefined') return indexable(globalThis);\n if (typeof self !== 'undefined') return indexable(self);\n if (typeof window !== 'undefined') return indexable(window);\n if (typeof global !== 'undefined') return indexable(global);\n throw new Error('unable to locate global object');\n}\n/**\n * Backwards compatibility with legacy waiters system.\n *\n * We want to always register a waiter using the legacy waiter system, as right\n * now if consumers are not on the right version of @ember/test-helpers, using\n * this addon will result in none of these waiters waiting.\n */\n// eslint-disable-next-line ember/new-module-imports\n\nif (Ember.Test) {\n registerWaiter(() => !hasPendingWaiters());\n}\n/**\n * Registers a waiter.\n *\n * @public\n * @param waiter {Waiter} A test waiter instance\n */\n\nexport function register(waiter) {\n WAITERS.set(waiter.name, waiter);\n}\n/**\n * Un-registers a waiter.\n *\n * @public\n * @param waiter {Waiter} A test waiter instance\n */\n\nexport function unregister(waiter) {\n WAITERS.delete(waiter.name);\n}\n/**\n * Gets an array of all waiters current registered.\n *\n * @public\n * @returns {Waiter[]}\n */\n\nexport function getWaiters() {\n let result = [];\n WAITERS.forEach(value => {\n result.push(value);\n });\n return result;\n}\n/**\n * Clears all waiters.\n *\n * @private\n */\n\nexport function _reset() {\n for (let waiter of getWaiters()) {\n waiter.isRegistered = false;\n }\n WAITERS.clear();\n}\n/**\n * Gets the current state of all waiters. Any waiters whose\n * `waitUntil` method returns false will be considered `pending`.\n *\n * @returns {PendingWaiterState} An object containing a count of all waiters\n * pending and a `waiters` object containing the name of all pending waiters\n * and their debug info.\n */\n\nexport function getPendingWaiterState() {\n let result = {\n pending: 0,\n waiters: {}\n };\n WAITERS.forEach(waiter => {\n if (!waiter.waitUntil()) {\n result.pending++;\n let debugInfo = waiter.debugInfo();\n result.waiters[waiter.name] = debugInfo || true;\n }\n });\n return result;\n}\n/**\n * Determines if there are any pending waiters.\n *\n * @returns {boolean} `true` if there are pending waiters, otherwise `false`.\n */\n\nexport function hasPendingWaiters() {\n let state = getPendingWaiterState();\n return state.pending > 0;\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { warn } from '@ember/debug';\nimport Token from './token';\nimport { register } from './waiter-manager';\nconst WAITER_NAME_PATTERN = /^[^:]*:?.*/;\nlet WAITER_NAMES = DEBUG ? new Set() : undefined;\nexport function _resetWaiterNames() {\n WAITER_NAMES = new Set();\n}\nfunction getNextToken() {\n return new Token();\n}\nclass TestWaiterImpl {\n constructor(name, nextToken) {\n _defineProperty(this, \"isRegistered\", false);\n _defineProperty(this, \"items\", new Map());\n _defineProperty(this, \"completedOperationsForTokens\", new WeakMap());\n _defineProperty(this, \"completedOperationsForPrimitives\", new Map());\n this.name = name; // @ts-ignore\n\n this.nextToken = nextToken || getNextToken;\n }\n beginAsync(token = this.nextToken(), label) {\n this._register();\n if (this.items.has(token)) {\n throw new Error(`beginAsync called for ${token} but it is already pending.`);\n }\n let error = new Error();\n this.items.set(token, {\n get stack() {\n return error.stack;\n },\n label\n });\n return token;\n }\n endAsync(token) {\n if (!this.items.has(token) && !this._getCompletedOperations(token).has(token)) {\n throw new Error(`testWaiter.endAsync called with no preceding testWaiter.beginAsync call.\n Test waiter calls should always be paired. This can occur when a test waiter's paired calls are invoked in a non-deterministic order.\n\n See https://github.com/emberjs/ember-test-waiters#keep-beginasyncendasync-in-same-block-scope for more information.`);\n }\n this.items.delete(token); // Mark when a waiter operation has completed so we can distinguish\n // whether endAsync is being called before a prior beginAsync call above.\n\n this._getCompletedOperations(token).set(token, true);\n }\n waitUntil() {\n return this.items.size === 0;\n }\n debugInfo() {\n let result = [];\n this.items.forEach(value => {\n result.push(value);\n });\n return result;\n }\n reset() {\n this.items.clear();\n }\n _register() {\n if (!this.isRegistered) {\n register(this);\n this.isRegistered = true;\n }\n }\n _getCompletedOperations(token) {\n let type = typeof token;\n let isFunction = type === 'function';\n let isObject = token !== null && type === 'object';\n let isPrimitive = !isFunction && !isObject;\n return isPrimitive ? this.completedOperationsForPrimitives : this.completedOperationsForTokens;\n }\n}\nclass NoopTestWaiter {\n constructor(name) {\n this.name = name;\n }\n beginAsync() {\n return this;\n }\n endAsync() {}\n waitUntil() {\n return true;\n }\n debugInfo() {\n return [];\n }\n reset() {}\n}\n/**\n * Builds and returns a test waiter. The type of the\n * returned waiter is dependent on whether the app or\n * addon is in `DEBUG` mode or not.\n *\n * @public\n *\n * @param name {string} The name of the test waiter\n * @returns {TestWaiter}\n *\n * @example\n *\n * import Component from '@ember/component';\n * import { buildWaiter } from '@ember/test-waiters';\n *\n * if (DEBUG) {\n * let waiter = buildWaiter('friend-waiter');\n * }\n *\n * export default class Friendz extends Component {\n * didInsertElement() {\n * let token = waiter.beginAsync(this);\n *\n * someAsyncWork().then(() => {\n * waiter.endAsync(token);\n * });\n * }\n * }\n */\n\nexport default function buildWaiter(name) {\n if (DEBUG) {\n warn(`The waiter name '${name}' is already in use`, !WAITER_NAMES.has(name), {\n id: '@ember/test-waiters.duplicate-waiter-name'\n });\n WAITER_NAMES.add(name);\n }\n if (!DEBUG) {\n return new NoopTestWaiter(name);\n } else {\n warn(`You must provide a name that contains a descriptive prefix separated by a colon.\n\n Example: ember-fictitious-addon:some-file\n\n You passed: ${name}`, WAITER_NAME_PATTERN.test(name), {\n id: '@ember/test-waiters.invalid-waiter-name'\n });\n return new TestWaiterImpl(name);\n }\n}","import { DEBUG } from '@glimmer/env';\nimport buildWaiter from './build-waiter';\nconst PROMISE_WAITER = buildWaiter('@ember/test-waiters:promise-waiter');\n/**\n * A convenient utility function to simplify waiting for a promise.\n *\n * @public\n * @param promise {Promise | RSVP.Promise} The promise to track async operations for\n * @param label {string} An optional string to identify the promise\n *\n * @example\n *\n * import Component from '@ember/component';\n * import { waitForPromise } from '@ember/test-waiters';\n *\n * export default class Friendz extends Component {\n * didInsertElement() {\n * waitForPromise(new Promise(resolve => {\n * doSomeWork();\n * resolve();\n * }));\n * }\n * }\n */\n\nexport default function waitForPromise(promise, label) {\n let result = promise;\n if (DEBUG) {\n PROMISE_WAITER.beginAsync(promise, label);\n result = promise.then(value => {\n PROMISE_WAITER.endAsync(promise);\n return value;\n }, error => {\n PROMISE_WAITER.endAsync(promise);\n throw error;\n });\n }\n return result;\n}","import { DEBUG } from '@glimmer/env';\nimport waitForPromise from './wait-for-promise';\nimport buildWaiter from './build-waiter';\nexport default function waitFor(...args) {\n let isFunction = args.length < 3;\n if (isFunction) {\n let [fn, label] = args;\n return wrapFunction(fn, label);\n } else {\n let [,, descriptor, label] = args;\n if (!DEBUG) {\n return descriptor;\n }\n let fn = descriptor.value;\n descriptor.value = wrapFunction(fn, label);\n return descriptor;\n }\n}\nfunction wrapFunction(fn, label) {\n if (!DEBUG) {\n return fn;\n }\n return function (...args) {\n let result = fn.call(this, ...args);\n if (isThenable(result)) {\n return waitForPromise(result, label);\n } else if (isGenerator(result)) {\n return waitForGenerator(result, label);\n } else {\n return result;\n }\n };\n}\nfunction isThenable(maybePromise) {\n let type = typeof maybePromise;\n return (maybePromise !== null && type === 'object' || type === 'function') && typeof maybePromise.then === 'function';\n}\nfunction isGenerator(maybeGenerator) {\n // Because we don't have Symbol.iterator in IE11\n return typeof maybeGenerator.next === 'function' && typeof maybeGenerator.return === 'function' && typeof maybeGenerator.throw === 'function';\n}\nconst GENERATOR_WAITER = buildWaiter('@ember/test-waiters:generator-waiter');\nfunction waitForGenerator(generator, label) {\n GENERATOR_WAITER.beginAsync(generator, label);\n let isWaiting = true;\n function stopWaiting() {\n if (isWaiting) {\n GENERATOR_WAITER.endAsync(generator);\n isWaiting = false;\n }\n }\n return {\n next(...args) {\n let hasErrored = true;\n try {\n let val = generator.next(...args);\n hasErrored = false;\n if (val.done) {\n stopWaiting();\n }\n return val;\n } finally {\n // If generator.next() throws, we need to stop waiting. But if we catch\n // and re-throw exceptions, it could move the location from which the\n // uncaught exception is thrown, interfering with the developer\n // debugging experience if they have break-on-exceptions enabled. So we\n // use a boolean flag and a finally block to emulate a catch block.\n if (hasErrored) {\n stopWaiting();\n }\n }\n },\n return(...args) {\n stopWaiting();\n return generator.return(...args);\n },\n throw(...args) {\n stopWaiting();\n return generator.throw(...args);\n }\n };\n}","var _dec, _class, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n/* eslint-disable ember/no-computed-properties-in-native-classes */\nimport Modifier from 'ember-modifier';\nimport { Promise, defer } from 'rsvp';\nimport { action, set } from '@ember/object';\nimport { DRAG_ACTIONS, ELEMENT_CLICK_ACTION, END_ACTIONS } from '../utils/constant';\nimport { run, throttle, bind, scheduleOnce, later } from '@ember/runloop';\nimport { DEBUG } from '@glimmer/env';\nimport { getX, getY } from '../utils/coordinate';\nimport ScrollContainer from '../system/scroll-container';\nimport scrollParent from '../system/scroll-parent';\nimport { getBorderSpacing } from '../utils/css-calculation';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { inject as service } from '@ember/service';\nimport { assert, deprecate } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { isTesting } from '@embroider/macros';\nconst sortableItemWaiter = buildWaiter('sortable-item-waiter');\n\n/**\n * Modifier to mark an element as an item to be reordered\n *\n * @param {Object} model The model that this item will represent\n * @param {boolean} [disabled=false] Set to true to make this item not sortable\n * @param {Function} [onDragStart] An optional callback for when dragging starts.\n * @param {Function} [onDragStop] An optional callback for when dragging stops.\n *\n * @module drag-drop/draggable-group\n * @example\n *
    \n * {{#each model.items as |item|}}\n *
  1. \n * {{item.name}}\n * \n *
  2. \n * {{/each}}\n *
\n */\nlet SortableItemModifier = (_dec = service('ember-sortable-internal-state'), _class = class SortableItemModifier extends Modifier {\n /**\n * The SortableGroupModifier this item belongs to. Assigned by the group\n * when it inspects all the items in the list\n *\n * @type SortableGroupModifier\n */\n get sortableGroup() {\n if (this._sortableGroup === undefined) {\n this._sortableGroup = this.sortableService.fetchGroup(this.groupName);\n assert(`No sortable group named ${this.groupName} found. Please check that the groups and items have the same groupName`, this._sortableGroup !== undefined);\n }\n return this._sortableGroup.groupModifier;\n }\n get model() {\n return this.named.model;\n }\n get direction() {\n return this.sortableGroup?.direction;\n }\n get groupDisabled() {\n return this.sortableGroup?.disabled;\n }\n\n /**\n * This is the group name used to keep groups separate if there are more than one on the screen at a time.\n * If no group is assigned a default is used\n *\n * @default \"_EmberSortableGroup\"\n * @returns {*|string}\n */\n get groupName() {\n return this.named.groupName || '_EmberSortableGroup';\n }\n\n /**\n The frequency with which the group is informed\n that an update is required.\n @property updateInterval\n @type Number\n @default 125\n */\n get updateInterval() {\n return this.named.updateInterval || 125;\n }\n\n /**\n Additional spacing between active item and the rest of the elements.\n @property spacing\n @type Number\n @default 0[px]\n */\n get spacing() {\n return this.named.spacing || 0;\n }\n\n /**\n Removes the ability for the current item to be sorted\n @property disabled\n @type boolean\n @default false\n */\n get isDisabled() {\n deprecate('\"isDraggingDisabled\" is deprecated. Please migrate to \"disabled\" named argument', !('isDraggingDisabled' in this.named), {\n id: 'ember-sortable.is-dragging-disabled',\n url: 'https://github.com/adopted-ember-addons/ember-sortable#readme',\n until: '3.0.0',\n for: 'ember-sortable',\n since: {\n available: '2.2.6',\n enabled: '2.2.6'\n }\n });\n return this.groupDisabled || this.named.disabled || this.named.isDraggingDisabled || false;\n }\n\n /**\n Selector for the element to use as handle.\n 1. By default, we will hook it the yielded sortable-handle.\n 2. If you don't use the sortable-handle, the entire element will be used as the handle.\n 3. In very rare situations, if you want to use a handle, but not the sortable-handle,\n you can override this class with your own handle's selector. This behavior will be\n synonymous with v1\n @property handle\n @type String\n @default \"[data-sortable-handle]\"\n */\n get handle() {\n return this.named.handle || '[data-sortable-handle]';\n }\n /**\n * Tolerance, in pixels, for when sorting should start.\n * If specified, sorting will not start until after mouse\n * is dragged beyond distance. Can be used to allow for clicks\n * on elements within a handle.\n *\n * @property distance\n * @type Integer\n * @default 0\n */\n get distance() {\n return this.named.distance || 0;\n }\n\n /**\n * True if the item is currently being dragged.\n *\n * @property isDragging\n * @type boolean\n * @default false\n * @protected\n */\n\n get isDragging() {\n return this._isDragging;\n }\n set isDragging(value) {\n if (value) {\n this.element.classList.add('is-dragging');\n } else {\n this.element.classList.remove('is-dragging');\n }\n this._isDragging = value;\n }\n\n /**\n Action that fires when the item starts being dragged.\n @property onDragStart\n @type Function\n @param {Object} item model\n @default null\n */\n get onDragStart() {\n return this.named.onDragStart || (item => item);\n }\n\n /**\n Action that fires when the item stops being dragged.\n @property onDragStop\n @type Function\n @param {Object} item model\n @default null\n */\n get onDragStop() {\n return this.named.onDragStop || (item => item);\n }\n\n /**\n True if the item is currently dropping.\n @property isDropping\n @type Boolean\n @default false\n */\n\n get isDropping() {\n return this._isDropping;\n }\n set isDropping(value) {\n if (value) {\n this.element.classList.add('is-dropping');\n } else {\n this.element.classList.remove('is-dropping');\n }\n this._isDropping = value;\n }\n\n /**\n True if the item was dropped during the interaction\n @property wasDropped\n @type Boolean\n @default false\n */\n\n /**\n @property isBusy\n @type Boolean\n */\n get isBusy() {\n return this.isDragging || this.isDropping;\n }\n\n /**\n @property disableCheckScrollBounds\n */\n get disableCheckScrollBounds() {\n return this.named.disableCheckScrollBounds != undefined ? this.named.disableCheckScrollBounds : isTesting();\n }\n\n /**\n @method mouseDown\n */\n mouseDown(event) {\n if (event.which !== 1) {\n return;\n }\n if (event.ctrlKey) {\n return;\n }\n this._primeDrag(event);\n }\n keyDown(event) {\n if (this.isDisabled) {\n return;\n }\n this.setupHandleElement();\n\n // If the event is coming from within the item, we do not want to activate keyboard reorder mode.\n if (event.target === this.handleElement || event.target === this.element) {\n this.sortableGroup.activateKeyDown(this);\n } else {\n this.sortableGroup.deactivateKeyDown();\n }\n }\n\n /**\n @method touchStart\n */\n touchStart(event) {\n this._primeDrag(event);\n }\n\n /**\n @method freeze\n */\n freeze() {\n let el = this.element;\n if (!el) {\n return;\n }\n el.style.transition = 'none';\n }\n\n /**\n @method reset\n */\n reset() {\n let el = this.element;\n if (!el) {\n return;\n }\n delete this._y;\n delete this._x;\n el.style.transform = '';\n }\n\n /**\n @method thaw\n */\n thaw() {\n let el = this.element;\n if (!el) {\n return;\n }\n el.style.transition = '';\n }\n\n /**\n * Setup event listeners for drag and drop\n *\n * @method _primeDrag\n * @param {Event} startEvent JS Event object\n * @private\n */\n _primeDrag(startEvent) {\n if (this.isDisabled) {\n return;\n }\n if (this.handleElement && !startEvent.target.closest(this.handle)) {\n return;\n }\n startEvent.preventDefault();\n startEvent.stopPropagation();\n this._prepareDragListener = bind(this, this._prepareDrag, startEvent);\n DRAG_ACTIONS.forEach(event => window.addEventListener(event, this._prepareDragListener));\n this._cancelStartDragListener = () => {\n DRAG_ACTIONS.forEach(event => window.removeEventListener(event, this._prepareDragListener));\n };\n const selfCancellingCallback = () => {\n END_ACTIONS.forEach(event => window.removeEventListener(event, selfCancellingCallback));\n this._cancelStartDragListener();\n };\n END_ACTIONS.forEach(event => window.addEventListener(event, selfCancellingCallback));\n }\n\n /**\n * Prepares for the drag event\n *\n * @method _prepareDrag\n * @param {Event} startEvent JS Event object\n * @param {Event} event JS Event object\n * @private\n */\n _prepareDrag(startEvent, event) {\n let distance = this.distance;\n let dx = Math.abs(getX(startEvent) - getX(event));\n let dy = Math.abs(getY(startEvent) - getY(event));\n if (distance <= dx || distance <= dy) {\n DRAG_ACTIONS.forEach(event => window.removeEventListener(event, this._prepareDragListener));\n this._startDrag(startEvent);\n }\n }\n\n /**\n * Start dragging & setup more event listeners\n *\n * @method _startDrag\n * @param {Event} event JS Event object\n * @private\n */\n _startDrag(event) {\n if (this.isBusy) {\n return;\n }\n let drag = this._makeDragHandler(event);\n let dragThrottled = ev => throttle(this, drag, ev, 16, false);\n let drop = () => {\n DRAG_ACTIONS.forEach(event => window.removeEventListener(event, dragThrottled));\n END_ACTIONS.forEach(event => window.removeEventListener(event, drop));\n run(() => {\n this._drop();\n });\n };\n DRAG_ACTIONS.forEach(event => window.addEventListener(event, dragThrottled));\n END_ACTIONS.forEach(event => window.addEventListener(event, drop));\n this.sortableGroup.prepare();\n set(this, 'isDragging', true);\n this.onDragStart(this.model);\n this._scrollOnEdges(drag);\n }\n\n /**\n The maximum scroll speed when dragging element.\n @property maxScrollSpeed\n @default 20\n */\n\n _scrollOnEdges(drag) {\n let groupDirection = this.direction;\n let element = this.element;\n let scrollContainer = new ScrollContainer(scrollParent(element));\n let itemContainer = {\n width: parseInt(getComputedStyle(element).width, 10),\n get height() {\n return parseInt(getComputedStyle(element).height, 10);\n },\n get left() {\n return element.getBoundingClientRect().left;\n },\n get right() {\n return this.left + this.width;\n },\n get top() {\n return element.getBoundingClientRect().top;\n },\n get bottom() {\n return this.top + this.height;\n }\n };\n let leadingEdgeKey, trailingEdgeKey, scrollKey, pageKey;\n if (groupDirection === 'x') {\n leadingEdgeKey = 'left';\n trailingEdgeKey = 'right';\n scrollKey = 'scrollLeft';\n pageKey = 'pageX';\n } else {\n leadingEdgeKey = 'top';\n trailingEdgeKey = 'bottom';\n scrollKey = 'scrollTop';\n pageKey = 'pageY';\n }\n let createFakeEvent = () => {\n if (this._pageX == null && this._pageY == null) {\n return;\n }\n return {\n pageX: this._pageX,\n pageY: this._pageY,\n clientX: this._pageX,\n clientY: this._pageY\n };\n };\n\n // Set a trigger padding that will start scrolling\n // the box when the item reaches within padding pixels\n // of the edge of the scroll container.\n let checkScrollBounds = () => {\n let leadingEdge = itemContainer[leadingEdgeKey];\n let trailingEdge = itemContainer[trailingEdgeKey];\n let scroll = scrollContainer[scrollKey]();\n let delta = 0;\n if (trailingEdge >= scrollContainer[trailingEdgeKey]) {\n delta = trailingEdge - scrollContainer[trailingEdgeKey];\n } else if (leadingEdge <= scrollContainer[leadingEdgeKey]) {\n delta = leadingEdge - scrollContainer[leadingEdgeKey];\n }\n if (delta !== 0) {\n let speed = this.maxScrollSpeed;\n delta = Math.min(Math.max(delta, -1 * speed), speed);\n delta = scrollContainer[scrollKey](scroll + delta) - scroll;\n let event = createFakeEvent();\n if (event) {\n if (scrollContainer.isWindow) {\n event[pageKey] += delta;\n }\n run(() => drag(event));\n }\n }\n if (this.isDragging) {\n requestAnimationFrame(checkScrollBounds);\n }\n };\n if (!this.disableCheckScrollBounds) {\n requestAnimationFrame(checkScrollBounds);\n }\n }\n\n /**\n @method _makeDragHandler\n @param {Event} startEvent\n @return {Function}\n @private\n */\n _makeDragHandler(startEvent) {\n const groupDirection = this.direction;\n let dragOrigin;\n let elementOrigin;\n let scrollOrigin;\n let parentElement = this.element.parentNode;\n if (groupDirection === 'x') {\n dragOrigin = getX(startEvent);\n elementOrigin = this.x;\n scrollOrigin = parentElement.getBoundingClientRect().left;\n return event => {\n this._pageX = getX(event);\n let dx = this._pageX - dragOrigin;\n let scrollX = parentElement.getBoundingClientRect().left;\n let x = elementOrigin + dx + (scrollOrigin - scrollX);\n this._drag(x);\n };\n }\n if (groupDirection === 'y') {\n dragOrigin = getY(startEvent);\n elementOrigin = this.y;\n scrollOrigin = parentElement.getBoundingClientRect().top;\n return event => {\n this._pageY = getY(event);\n let dy = this._pageY - dragOrigin;\n let scrollY = parentElement.getBoundingClientRect().top;\n let y = elementOrigin + dy + (scrollOrigin - scrollY);\n this._drag(y);\n };\n }\n }\n\n /**\n @method _scheduleApplyPosition\n @private\n */\n _scheduleApplyPosition() {\n scheduleOnce('render', this, '_applyPosition');\n }\n\n /**\n @method _applyPosition\n @private\n */\n _applyPosition() {\n if (!this.element || !this.element) {\n return;\n }\n const groupDirection = this.direction;\n if (groupDirection === 'x') {\n let x = this.x;\n let dx = x - this.element.offsetLeft + parseFloat(getComputedStyle(this.element).marginLeft);\n this.element.style.transform = `translateX(${dx}px)`;\n }\n if (groupDirection === 'y') {\n let y = this.y;\n let dy = y - this.element.offsetTop;\n this.element.style.transform = `translateY(${dy}px)`;\n }\n }\n\n /**\n @method _drag\n @private\n */\n _drag(dimension) {\n if (!this.isDragging) {\n return;\n }\n let updateInterval = this.updateInterval;\n const groupDirection = this.direction;\n if (groupDirection === 'x') {\n this.x = dimension;\n }\n if (groupDirection === 'y') {\n this.y = dimension;\n }\n throttle(this, this.sortableGroup.update, updateInterval);\n }\n\n /**\n @method _drop\n @private\n */\n _drop() {\n if (!this.element) {\n return;\n }\n let transitionPromise = this._waitForTransition();\n this._preventClick();\n set(this, 'isDragging', false);\n set(this, 'isDropping', true);\n this.sortableGroup.update();\n transitionPromise.then(() => this._complete());\n }\n\n /**\n @method _preventClick\n @private\n */\n _preventClick() {\n const selfCancellingCallback = event => {\n this.element.removeEventListener(ELEMENT_CLICK_ACTION, selfCancellingCallback);\n this._preventClickHandler(event);\n };\n this.element.addEventListener(ELEMENT_CLICK_ACTION, selfCancellingCallback);\n }\n\n /**\n @method _preventClickHandler\n @private\n */\n _preventClickHandler(e) {\n e.stopPropagation();\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n /**\n @method _waitForTransition\n @private\n @return Promise\n */\n _waitForTransition() {\n let waiterToken;\n if (DEBUG) {\n waiterToken = sortableItemWaiter.beginAsync();\n }\n let transitionPromise;\n if (this.isAnimated) {\n const deferred = defer();\n this.element.addEventListener('transitionend', deferred.resolve);\n transitionPromise = deferred.promise.finally(() => {\n this.element.removeEventListener('transitionend', deferred.resolve);\n });\n } else {\n const duration = this.isAnimated ? this.transitionDuration : 200;\n transitionPromise = new Promise(resolve => later(resolve, duration));\n }\n if (DEBUG) {\n transitionPromise = transitionPromise.finally(() => {\n sortableItemWaiter.endAsync(waiterToken);\n });\n }\n return transitionPromise;\n }\n\n /**\n @method _complete\n @private\n */\n _complete() {\n this.onDragStop(this.model);\n set(this, 'isDropping', false);\n set(this, 'wasDropped', true);\n this.sortableGroup.commit();\n }\n get isAnimated() {\n if (!this.element) {\n return undefined;\n }\n let el = this.element;\n let transitionProperty = getComputedStyle(el).transitionProperty;\n return /all|transform/.test(transitionProperty) && this.transitionDuration > 0;\n }\n\n /**\n The current transition duration in milliseconds.\n @property transitionDuration\n @type Number\n */\n get transitionDuration() {\n let el = this.element;\n let rule = getComputedStyle(el).transitionDuration;\n let match = rule.match(/([\\d.]+)([ms]*)/);\n if (match) {\n let value = parseFloat(match[1]);\n let unit = match[2];\n if (unit === 's') {\n value = value * 1000;\n }\n return value;\n }\n return 0;\n }\n\n /**\n Horizontal position of the item.\n @property x\n @type Number\n */\n get x() {\n if (this._x === undefined) {\n let marginLeft = parseFloat(getComputedStyle(this.element).marginLeft);\n this._x = this.element.scrollLeft + this.element.offsetLeft - marginLeft;\n }\n return this._x;\n }\n set x(value) {\n if (value !== this._x) {\n this._x = value;\n this._scheduleApplyPosition();\n }\n }\n\n /**\n Vertical position of the item relative to its offset parent.\n @property y\n @type Number\n */\n get y() {\n if (this._y === undefined) {\n this._y = this.element.offsetTop;\n }\n return this._y;\n }\n set y(value) {\n if (value !== this._y) {\n this._y = value;\n this._scheduleApplyPosition();\n }\n }\n\n /**\n Width of the item.\n @property height\n @type Number\n */\n get width() {\n let el = this.element;\n let width = el.offsetWidth;\n let elStyles = getComputedStyle(el);\n width += parseInt(elStyles.marginLeft) + parseInt(elStyles.marginRight); // equal to jQuery.outerWidth(true)\n\n width += getBorderSpacing(el).horizontal;\n return width;\n }\n\n /**\n Height of the item including margins.\n @property height\n @type Number\n */\n get height() {\n let el = this.element;\n let height = el.offsetHeight;\n let marginBottom = parseFloat(getComputedStyle(el).marginBottom);\n height += marginBottom;\n height += getBorderSpacing(el).vertical;\n return height;\n }\n addEventListener() {\n this.element.addEventListener('keydown', this.keyDown);\n this.element.addEventListener('mousedown', this.mouseDown);\n this.element.addEventListener('touchstart', this.touchStart);\n this.listenersRegistered = true;\n }\n removeEventListener() {\n this.element.removeEventListener('keydown', this.keyDown);\n this.element.removeEventListener('mousedown', this.mouseDown);\n this.element.removeEventListener('touchstart', this.touchStart);\n this.listenersRegistered = false;\n }\n setupHandleElement() {\n this.handleElement = this.element.querySelector(this.handle);\n if (this.handleElement) {\n this.handleElement.style['touch-action'] = 'none';\n } else {\n this.element.style['touch-action'] = 'none';\n }\n }\n constructor(owner, args) {\n super(owner, args);\n _defineProperty(this, \"className\", 'sortable-item');\n _initializerDefineProperty(this, \"sortableService\", _descriptor, this);\n _defineProperty(this, \"_sortableGroup\", void 0);\n _defineProperty(this, \"handleElement\", void 0);\n _defineProperty(this, \"_isDragging\", false);\n _defineProperty(this, \"_isDropping\", false);\n _defineProperty(this, \"wasDropped\", false);\n _defineProperty(this, \"maxScrollSpeed\", 20);\n _defineProperty(this, \"element\", void 0);\n _defineProperty(this, \"didSetup\", false);\n /**\n * tracks if event listeners have been registered. Registering event handlers is unnecessary if item is disabled.\n */\n _defineProperty(this, \"listenersRegistered\", false);\n registerDestructor(this, cleanup);\n }\n modify(element, _positional, named) {\n this.element = element;\n this.named = named;\n this.element.classList.add(this.className);\n\n // Instead of using `event.preventDefault()` in the 'primeDrag' event,\n // (doesn't work in Chrome 56), we set touch-action: none as a workaround.\n this.setupHandleElement();\n if (!this.didSetup) {\n this.element.dataset.sortableItem = true;\n this.sortableService.registerItem(this.groupName, this);\n this.didSetup = true;\n }\n if (this.named.disabled && this.listenersRegistered) {\n this.removeEventListener();\n } else if (!this.named.disabled && !this.listenersRegistered) {\n this.addEventListener();\n }\n }\n}, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"sortableService\", [_dec], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _applyDecoratedDescriptor(_class.prototype, \"mouseDown\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"mouseDown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"keyDown\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"keyDown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"touchStart\", [action], Object.getOwnPropertyDescriptor(_class.prototype, \"touchStart\"), _class.prototype), _class);\nexport { SortableItemModifier as default };\n/**\n *\n * @param {SortableItemModifier} instance\n */\nfunction cleanup(instance) {\n instance.removeEventListener();\n instance.sortableService.deregisterItem(instance.groupName, instance);\n}","function getParentElements(element) {\n const parentsArray = [];\n if (!element) {\n return parentsArray;\n }\n let currentParent = element.parentElement;\n while (currentParent !== null) {\n parentsArray.push(currentParent);\n currentParent = currentParent.parentElement;\n }\n return parentsArray;\n}\nexport default function (element) {\n let position = getComputedStyle(element).position;\n let excludeStaticParent = position === 'absolute';\n let scrollParent = getParentElements(element).filter(function (parent) {\n let parentElemStyles = getComputedStyle(parent);\n if (excludeStaticParent && parentElemStyles.position === 'static') {\n return false;\n }\n let {\n overflow,\n overflowX,\n overflowY\n } = parentElemStyles;\n return /(auto|scroll)/.test(overflow + overflowX + overflowY);\n })[0];\n if (!scrollParent || scrollParent === document.body) {\n scrollParent = document;\n }\n return position === 'fixed' || scrollParent;\n}","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Service from '@ember/service';\nexport default class EmberSortableService extends Service {\n constructor(...args) {\n super(...args);\n /**\n * Internal State for any groups currently in DOM\n *\n * {\n * groupName: {\n * groupModifier: object,\n * items: []\n * }\n * }\n * @type {{}}\n */\n _defineProperty(this, \"groups\", {});\n }\n /**\n * Register a new group with the service\n *\n * @param {String} groupName\n * @param {SortableGroupModifier} groupModifier\n */\n registerGroup(groupName, groupModifier) {\n if (this.groups[groupName] === undefined) {\n this.groups[groupName] = {\n groupModifier: groupModifier,\n items: []\n };\n } else {\n this.groups[groupName].groupModifier = groupModifier;\n }\n }\n\n /**\n * De-register a group with the service\n *\n * @param {String} groupName\n */\n deregisterGroup(groupName) {\n delete this.groups[groupName];\n }\n\n /**\n * Register an item with this group\n *\n * @method registerItem\n * @param {String} groupName\n * @param {SortableItemModifier} item\n */\n registerItem(groupName, item) {\n let groupDef = this.fetchGroup(groupName);\n let items = groupDef.items;\n if (items.indexOf(item) === -1) {\n items = [...items, item];\n }\n groupDef.items = items;\n }\n\n /**\n De-register an item with this group.\n @method deregisterItem\n @param groupName\n @param item\n */\n deregisterItem(groupName, item) {\n let groupDef = this.fetchGroup(groupName);\n let items = groupDef.items;\n const index = items.indexOf(item);\n if (index !== -1) {\n let newItems = [...items.slice(0, index), ...items.slice(index + 1)];\n groupDef.items = newItems;\n }\n }\n\n /**\n * Fetch a group definition\n *\n * @param {String} groupName\n * @returns {*}\n */\n fetchGroup(groupName) {\n if (this.groups[groupName] === undefined) {\n this.registerGroup(groupName, undefined);\n }\n return this.groups[groupName];\n }\n}","export const DRAG_ACTIONS = ['mousemove', 'touchmove'];\nexport const ELEMENT_CLICK_ACTION = 'click';\nexport const END_ACTIONS = ['click', 'mouseup', 'touchend'];\nexport const ANNOUNCEMENT_ACTION_TYPES = {\n ACTIVATE: 'ACTIVATE',\n MOVE: 'MOVE',\n CONFIRM: 'CONFIRM',\n CANCEL: 'CANCEL'\n};","import { helper } from '@ember/component/helper';\nimport truthConvert from '../utils/truth-convert';\n\nexport function and(params) {\n for (let i=0, len=params.length; i right;\n}\n\nexport default helper(gt);\n","import { helper } from '@ember/component/helper';\n\nexport function gte([left, right], hash) {\n if (hash.forceNumber) {\n if (typeof left !== 'number') { left = Number(left); }\n if (typeof right !== 'number') { right = Number(right); }\n }\n return left >= right;\n}\n\nexport default helper(gte);\n","import { helper } from '@ember/component/helper';\nimport { isArray as emberIsArray } from '@ember/array';\n\nexport function isArray(params) {\n for (let i=0, len=params.length; i {\n if (this.isDestroyed) {\n return;\n }\n this._element = this._wormholeHeadNode.parentNode;\n if (!this._element) {\n throw new Error('The head node of a wormhole must be attached to the DOM');\n }\n this._appendToDestination();\n });\n },\n willDestroyElement: function () {\n // not called in fastboot\n this._super(...arguments);\n let {\n _wormholeHeadNode,\n _wormholeTailNode\n } = this;\n schedule('render', () => {\n this._removeRange(_wormholeHeadNode, _wormholeTailNode);\n });\n },\n _destinationDidChange: observer('_destination', function () {\n var destinationElement = this.get('_destination');\n if (destinationElement !== this._wormholeHeadNode.parentNode) {\n schedule('render', this, '_appendToDestination');\n }\n }),\n _appendToDestination() {\n var destinationElement = this.get('_destination');\n if (!destinationElement) {\n var destinationElementId = this.get('destinationElementId');\n if (destinationElementId) {\n throw new Error(`ember-wormhole failed to render into '#${destinationElementId}' because the element is not in the DOM`);\n }\n throw new Error('ember-wormhole failed to render content because the destinationElementId was set to an undefined or falsy value.');\n }\n let startingActiveElement = getActiveElement();\n this._appendRange(destinationElement, this._wormholeHeadNode, this._wormholeTailNode);\n let resultingActiveElement = getActiveElement();\n if (startingActiveElement && resultingActiveElement !== startingActiveElement) {\n startingActiveElement.focus();\n }\n },\n _appendRange(destinationElement, firstNode, lastNode) {\n while (firstNode) {\n destinationElement.insertBefore(firstNode, null);\n firstNode = firstNode !== lastNode ? lastNode.parentNode.firstChild : null;\n }\n },\n _removeRange(firstNode, lastNode) {\n var node = lastNode;\n do {\n var next = node.previousSibling;\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n if (node === firstNode) {\n break;\n }\n }\n node = next;\n } while (node);\n }\n});","let definedSeries = {\n E6: { precision: 2, values: [1, 1.5, 2.2, 3.3, 4.7, 6.8, 10] },\n E12: { precision: 2, values: [1, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2, 10] },\n E24: {\n precision: 2,\n values: [\n 1, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2, 2.2, 2.4, 2.7, 3, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1,\n 10,\n ],\n },\n E48: {\n precision: 3,\n values: [\n 1, 1.05, 1.1, 1.15, 1.21, 1.27, 1.33, 1.4, 1.47, 1.54, 1.62, 1.69, 1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49,\n 2.61, 2.74, 2.87, 3.01, 3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36, 5.62, 5.9, 6.19,\n 6.49, 6.81, 7.15, 7.5, 7.87, 8.25, 8.66, 9.09, 9.53, 10,\n ],\n },\n E96: {\n precision: 3,\n values: [\n 1, 1.02, 1.05, 1.07, 1.1, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.3, 1.33, 1.37, 1.4, 1.43, 1.47, 1.5, 1.54, 1.58,\n 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2, 2.05, 2.1, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49,\n 2.55, 2.61, 2.67, 2.74, 2.8, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.4, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92,\n 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.9, 6.04, 6.19,\n 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.5, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76,\n 10,\n ],\n },\n};\n\n/**\n * getSeriesValuesBetween - Get the values in the specified series between the two specified values\n *\n * @param {number} min - the minimum value of the range\n * @param {number} max - the maximum value of the range\n * @param {string} series - which series to use\n * @returns {number[] | undefined } - the array of values in the specified series between the two limits supplied. Undefined if there are parameter errors.\n */\nexport function getSeriesValuesBetween(\n min, //: number,\n max, //: number,\n series // : \"E6\" | \"E12\" | \"E24\" | \"E96\"\n) {\n // : number[] | undefined\n if (!definedSeries[series]) {\n return;\n }\n let minS = normalizeToPreferredSeries(min, series, { forceRoundDirection: 'up' });\n let maxS = normalizeToPreferredSeries(max, series, { forceRoundDirection: 'down' });\n\n return generateSeries(minS, maxS, definedSeries[series]);\n}\n\n/**\n * normalizeToPreferredSeries - normalize a value to the nearest value in a defined series\n *\n * @param {number} idealValue - the raw value to be normalized\n * @param {string} series - the series to which to normalize it\n * @param {object} options - optional features -\n * forceRoundDirection: \"up\", \"down\", \"closest\"\n * @returns {number | undefined} - the normalized value. Undefined if there are parameter errors.\n */\n\nexport function normalizeToPreferredSeries(\n idealValue, //: number,\n series, //: \"E6\" | \"E12\" | \"E24\" | \"E48\" | \"E96\",\n options // { forceRoundDirection: \"up\" |\"down\" | \"closest\" },\n) {\n // : number | undefined;\n if (!definedSeries[series]) return;\n\n let preferredSeries = definedSeries[series].values;\n let forceRoundDirection = options\n ? options.forceRoundDirection\n ? options.forceRoundDirection\n : 'closest'\n : 'closest';\n\n let scientificNotation = idealValue.toExponential().toString();\n var indexOfE = scientificNotation.indexOf('e');\n let exponent = scientificNotation.slice(indexOfE, scientificNotation.length);\n let desiredValue = parseFloat(scientificNotation.slice(0, indexOfE));\n\n let nominalValue = desiredValue;\n for (var i = 0; i < preferredSeries.length; i++) {\n if (preferredSeries[i] <= desiredValue && desiredValue < preferredSeries[i + 1]) {\n var distanceBelow = desiredValue / preferredSeries[i];\n var distanceAbove = preferredSeries[i + 1] / desiredValue;\n\n if (forceRoundDirection === 'down' && distanceAbove > 1) {\n nominalValue = preferredSeries[i];\n } else if (forceRoundDirection === 'up' && distanceBelow > 1) {\n nominalValue = preferredSeries[i + 1];\n }\n //round to closest\n else {\n if (distanceBelow < distanceAbove) {\n nominalValue = preferredSeries[i];\n } else if (distanceAbove < distanceBelow) {\n nominalValue = preferredSeries[i + 1];\n }\n }\n\n break;\n }\n }\n nominalValue = nominalValue.toString() + exponent;\n return parseFloat(nominalValue);\n}\n\nfunction generateSeries(min, max, series) {\n let [minIndex, minPower] = placeInSeries(min, series);\n let [maxIndex, maxPower] = placeInSeries(max, series);\n\n let index = minIndex;\n let power = minPower;\n let multiplier = 10 ** power;\n let values = [];\n while (power < maxPower || index <= maxIndex) {\n values.push(series.values[index] * multiplier);\n index++;\n if ((index >= series.values.length - 1 && power < maxPower) || index >= series.values.length) {\n index = 0;\n power++;\n multiplier = 10 ** power;\n }\n }\n return values;\n}\n\nlet placeInSeries = function (value, series) {\n let log = Math.log10(value);\n let power = Math.floor(log);\n let fraction = log - power;\n let fractionalValue = 10 ** fraction;\n let index = -1;\n for (let i = 0; i < series.values.length; i++) {\n if (Math.abs(series.values[i] - fractionalValue) < 0.01) {\n index = i;\n break;\n }\n }\n return [index, power];\n};\n","import {\n NEARLY_INFINITY as NINF,\n INFINITY as INF,\n governingComponentCalculators,\n responseCalculators,\n componentCalculators,\n specsCalculatorsFromComponents,\n} from './internals.js';\nimport * as ESeries from './e-series.js';\n\nexport const NEARLY_INFINITY = NINF; /* Provided for backwards-compatibility support. DO NOT USE. */\nexport const INFINITY = INF;\n\n/******************** Export E series functions. These could theoretically be their own library ***************/\nexport function getSeriesValuesBetween(\n min, //: number,\n max, //: number,\n series // : \"E6\" | \"E12\" | \"E24\" | \"E96\"\n) {\n return ESeries.getSeriesValuesBetween(min, max, series);\n}\n\nexport function normalizeToPreferredSeries(\n idealValue, //: number,\n series, //: \"E6\" | \"E12\" | \"E24\" | \"E48\" | \"E96\",\n options // { forceRoundDirection: \"up\" |\"down\" | \"closest\" },\n) {\n return ESeries.normalizeToPreferredSeries(idealValue, series, options);\n}\n\n// Vestigial method to support migration over time of implementation naming\nlet canonicalizeImplementation = function (suppliedImplementation) {\n let result = suppliedImplementation;\n return result;\n};\n\n/**\n * getGoverningCapacitorLimits - Get the minimum and maximum feasible values for the governing capacitor of the filter with the specified properties\n *\n * @param {\"lowpass\"|\"bandpass\"|\"highpass|\"lowpassV2\"} type - The type of filter\n * @param {\"passive\" | \"firstOrder\" | \"multipleFeedback\" | \"sallenKey\" | \"inductor\" | \"inductorPassive\" | \"passiveFirstOrder\" | \"activeFirstOrder\" | \"passiveInductor\" | \"activeInductor\" } implementation - The filter implementation used\n * @param {number} fp - The corner frequency of the filter (Hz)\n * @param {number} gain - The gain of the filter (V/V)\n * @param {number} q - The q of the filter - ignored on passive and firstOrder filters\n * @returns {ComponentRange | undefined} - The range of component values {min, max} - undefined if there are parameter errors\n */\nexport function getGoverningCapacitorLimits(\n type, //: \"lowpass\"|\"bandpass\"|\"highpass\"|\"lowpassV2\",\n implementation, //: \"multipleFeedback\" | \"sallenKey\" | \"passiveFirstOrder\" | \"activeFirstOrder\" | \"passiveInductor\" | \"activeInductor\",\n fp, //: number // Hz\n gain, //: number // V/V\n q //: number // unitless - not used on passive and firstOrder\n) {\n //: ComponentRange\n //const RMIN = 1;\n const RFLOADMIN = 20;\n const RLOADMIN = 50;\n const RMAX = 10e6;\n const CMIN = 10e-12;\n const CMAX = 10e-6;\n const LMIN = 1e-9;\n const LMAX = 33e-6;\n let minGov;\n\n let _implementation = canonicalizeImplementation(implementation);\n\n if ((_implementation === 'activeInductor' || _implementation === 'passiveInductor') && type === 'bandpass') {\n minGov = [CMIN * 2];\n } else {\n minGov = [CMIN];\n }\n let maxGov = [CMAX];\n if (!governingComponentCalculators['singleEnded'][_implementation]) {\n return;\n }\n if (!governingComponentCalculators['singleEnded'][_implementation][type]) {\n return;\n }\n let getCapacitor = governingComponentCalculators['singleEnded'][_implementation][type];\n for (let part of ['R1', 'R2', 'R5', 'R1pR2', 'R2pR5']) {\n if (getCapacitor[part]) {\n let mintype = RLOADMIN;\n if (\n (_implementation === 'activeInductor' && part === 'R1') ||\n (_implementation === 'passiveInductor' && part === 'R1')\n ) {\n mintype = RFLOADMIN;\n }\n //TODO: Enumerate the resistors of various implementations that can afford to use RMIN_NONLOAD\n let capacitor1 = getCapacitor[part](mintype, fp, q, gain);\n let capacitor2 = getCapacitor[part](RMAX, fp, q, gain);\n if (capacitor1 && capacitor2) {\n if (capacitor1 < capacitor2) {\n minGov.push(capacitor1);\n maxGov.push(capacitor2);\n } else {\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n }\n }\n }\n for (let part of ['C1', 'C2', 'C3']) {\n if (getCapacitor[part]) {\n let capacitor1 = getCapacitor[part](CMIN, fp, q, gain);\n let capacitor2 = getCapacitor[part](CMAX, fp, q, gain);\n if (capacitor1 < capacitor2) {\n minGov.push(capacitor1);\n maxGov.push(capacitor2);\n } else {\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n }\n }\n for (let part of ['L1']) {\n if (getCapacitor[part]) {\n let capacitor1 = getCapacitor[part](LMIN, fp, q, gain);\n let capacitor2 = getCapacitor[part](LMAX, fp, q, gain);\n if (capacitor1 < capacitor2) {\n minGov.push(capacitor1);\n maxGov.push(capacitor2);\n } else {\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n }\n }\n\n return { min: Math.max(...minGov), max: Math.min(...maxGov) };\n}\n/**\n * getGoverningComponentLimitsDiffGround - Get the minimum and maximum feasible values for the governing capacitor of the filter with the specified properties\n *\n * @param {\"lowpass\"|\"bandpass\"|\"highpass\"} type - The type of filter\n * @param {\"multipleFeedback\" | \"passiveFirstOrder\" | \"activeFirstOrder\" | \"passiveInductor\"} implementation - The filter implementation used\n * @param {number} fp - The corner frequency of the filter (Hz)\n * @param {number} gain - The gain of the filter (V/V)\n * @param {number} q - The q of the filter - ignored on passive and active firstOrder filters\n * @param {number} crossedValue - input of crossed capacitor (normally c3) or crossed resistor (normally r3)\n * @returns {ComponentRange | undefined} - The range of component values {min, max} - undefined if there are parameter errors\n */\nexport function getGoverningComponentLimitsDiffGround(\n type, //: \"lowpass\"|\"bandpass\"|\"highpass\",\n implementation, //: \"multipleFeedback\" | \"passiveFirstOrder\" | \"activeFirstOrder\" | \"passiveInductor\",\n fp, //: number // Hz\n gain, //: number // V/V\n q, //: number // unitless - not used on passive and active firstOrder\n crossedValue // : number // F - input of crossed capacitor (normally c3) or Ohms - input of crossed resistor (normally r3), leave undefined if no crossed component\n) {\n //: ComponentRange\n //const RMIN = 1;\n const RFLOADMIN = 20;\n const RLOADMIN = 50;\n const RMAX = 10e6;\n const CMIN = 10e-12;\n const CMAX = 10e-6;\n const LMIN = 1e-9;\n const LMAX = 33e-6;\n let minGov, maxGov;\n let _implementation = canonicalizeImplementation(implementation);\n\n if (!governingComponentCalculators['differential']) {\n return;\n }\n if (!governingComponentCalculators['differential'][_implementation]) {\n return;\n }\n if (!governingComponentCalculators['differential'][_implementation][type]) {\n return;\n }\n if (!governingComponentCalculators['differential'][_implementation][type]['crossed']) {\n return;\n }\n if (_implementation === 'passiveInductor' && type === 'bandpass') {\n minGov = [CMIN * 2];\n maxGov = [CMAX];\n } else if (_implementation === 'passiveFirstOrder' && type === 'highpass') {\n minGov = [RLOADMIN];\n maxGov = [RMAX];\n } else {\n minGov = [CMIN];\n maxGov = [CMAX];\n }\n if (_implementation === 'passiveFirstOrder' && type === 'highpass') {\n let getResistor = governingComponentCalculators['differential'][_implementation][type]['grounded'];\n let resistor1 = getResistor['C1'](CMIN, fp, q, gain, INF); // should always be the max gov\n let resistor2 = getResistor['C1'](CMAX, fp, q, gain, INF); // should always be the min gov\n maxGov.push(resistor1);\n minGov.push(resistor2);\n resistor1 = getResistor['C1'](CMIN, fp, q, gain, crossedValue); // should always be the max gov\n resistor2 = getResistor['C1'](CMAX, fp, q, gain, crossedValue); // should always be the min gov\n resistor1 < 0 ? maxGov.push(RMAX) : maxGov.push(resistor1);\n minGov.push(resistor2);\n } else {\n let getCapacitor = governingComponentCalculators['differential'][_implementation][type]['grounded'];\n\n for (let part of ['R1', 'R2', 'R5', 'R1pR2', 'R2pR5']) {\n if (getCapacitor[part]) {\n let mintype = RLOADMIN;\n if (_implementation === 'passiveInductor' && part === 'R1') {\n mintype = RFLOADMIN;\n }\n if ((_implementation === 'passiveFirstOrder' && type === 'lowpass') || _implementation === 'passiveInductor') {\n let capacitor1 = getCapacitor[part](mintype, fp, q, gain, 0);\n let capacitor2 = getCapacitor[part](RMAX, fp, q, gain, 0);\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n //TODO: Enumerate the resistors of various implementations that can afford to use RMIN_NONLOAD\n let capacitor1 = getCapacitor[part](mintype, fp, q, gain, crossedValue);\n let capacitor2 = getCapacitor[part](RMAX, fp, q, gain, crossedValue);\n if (capacitor1 && capacitor2) {\n if (capacitor1 < capacitor2) {\n minGov.push(capacitor1);\n maxGov.push(capacitor2);\n } else {\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n }\n }\n }\n for (let part of ['C1', 'C2', 'C3']) {\n if (getCapacitor[part]) {\n let capacitor1 = getCapacitor[part](CMIN, fp, q, gain, crossedValue);\n let capacitor2 = getCapacitor[part](CMAX, fp, q, gain, crossedValue);\n if (capacitor1 < capacitor2) {\n minGov.push(capacitor1);\n maxGov.push(capacitor2);\n } else {\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n }\n }\n for (let part of ['L1', 'L3']) {\n if (getCapacitor[part]) {\n if ((_implementation === 'passiveFirstOrder' && type === 'lowpass') || _implementation === 'passiveInductor') {\n let capacitor1 = getCapacitor[part](LMIN, fp, q, gain, 0);\n let capacitor2 = getCapacitor[part](LMAX, fp, q, gain, 0);\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n let capacitor1 = getCapacitor[part](LMIN, fp, q, gain, crossedValue);\n let capacitor2 = getCapacitor[part](LMAX, fp, q, gain, crossedValue);\n if (capacitor1 < capacitor2) {\n minGov.push(capacitor1);\n maxGov.push(capacitor2);\n } else {\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n }\n }\n }\n\n return { min: Math.max(...minGov), max: Math.min(...maxGov) };\n}\n\n/**\n * getGoverningComponentLimitsDiffCross - Get the minimum and maximum feasible values for the governing capacitor of the filter with the specified properties\n *\n * @param {\"lowpass\"|\"bandpass\"|\"highpass\"} type - The type of filter\n * @param {\"multipleFeedback\" | \"passiveFirstOrder\" | \"activeFirstOrder\" | \"passiveInductor\"} implementation - The filter implementation used\n * @param {number} fp - The corner frequency of the filter (Hz)\n * @param {number} gain - The gain of the filter (V/V)\n * @param {number} q - The q of the filter - ignored on firstOrder filters\n * @param {number} groundedValue - F - input ground capacitors or ohms - input ground resistors\n * @returns {ComponentRange | undefined} - The range of component values {min, max} - undefined if there are parameter errors\n */\nexport function getGoverningComponentLimitsDiffCross(\n type, //: \"lowpass\"|\"bandpass\"|\"highpass\",\n implementation, //: \"multipleFeedback\" | \"passiveFirstOrder\" | \"activeFirstOrder\" | \"passiveInductor\",\n fp, //: number // Hz\n gain, //: number // V/V\n q, //: number // unitless - not used on passive and active firstOrder\n groundedValue //: number // F - input ground capacitors or ohms - input ground resistors\n) {\n //: ComponentRange\n //const RMIN = 1;\n const RFLOADMIN = 20;\n const RLOADMIN = 50;\n const RMAX = 10e6;\n const CMIN = 10e-12;\n const CMAX = 10e-6;\n const LMIN = 1e-9;\n const LMAX = 33e-6;\n let minGov, maxGov;\n let _implementation = canonicalizeImplementation(implementation);\n\n if (!governingComponentCalculators['differential']) {\n return;\n }\n if (!governingComponentCalculators['differential'][_implementation]) {\n return;\n }\n if (!governingComponentCalculators['differential'][_implementation][type]) {\n return;\n }\n if (!governingComponentCalculators['differential'][_implementation][type]['crossed']) {\n return;\n }\n if (_implementation === 'passiveInductor' && type === 'bandpass') {\n minGov = [CMIN * 2];\n maxGov = [CMAX];\n } else if (_implementation === 'passiveFirstOrder' && type === 'highpass') {\n minGov = [RLOADMIN];\n maxGov = [RMAX];\n } else {\n minGov = [CMIN];\n maxGov = [CMAX];\n }\n if (_implementation === 'passiveFirstOrder' && type === 'highpass') {\n let getResistor = governingComponentCalculators['differential'][_implementation][type]['grounded'];\n let resistor1 = getResistor['C1'](CMIN, fp, q, gain, INF); // should always be the max gov\n let resistor2 = getResistor['C1'](CMAX, fp, q, gain, INF); // should always be the min gov\n maxGov.push(resistor1);\n minGov.push(resistor2);\n resistor1 = getResistor['C1'](CMIN, fp, q, gain, groundedValue); // should always be the max gov\n resistor2 = getResistor['C1'](CMAX, fp, q, gain, groundedValue); // should always be the min gov\n resistor1 < 0 ? maxGov.push(RMAX) : maxGov.push(resistor1);\n minGov.push(resistor2);\n } else {\n let getCapacitor = governingComponentCalculators['differential'][_implementation][type]['crossed'];\n for (let part of ['R1', 'R2', 'R5', 'R1pR2', 'R2pR5']) {\n if (getCapacitor[part]) {\n let mintype = RLOADMIN;\n if (_implementation === 'passiveInductor' && part === 'R1') {\n mintype = RFLOADMIN;\n }\n //TODO: Enumerate the resistors of various implementations that can afford to use RMIN_NONLOAD\n if ((_implementation === 'passiveFirstOrder' && type === 'lowpass') || _implementation === 'passiveInductor') {\n let capacitor1 = getCapacitor[part](mintype, fp, q, gain, 0);\n let capacitor2 = getCapacitor[part](RMAX, fp, q, gain, 0);\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n let capacitor1 = getCapacitor[part](mintype, fp, q, gain, groundedValue);\n let capacitor2 = getCapacitor[part](RMAX, fp, q, gain, groundedValue);\n if (capacitor1 && capacitor2) {\n if (capacitor1 < capacitor2) {\n minGov.push(capacitor1);\n maxGov.push(capacitor2);\n } else {\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n }\n }\n }\n for (let part of ['C1', 'C2', 'C3']) {\n if (getCapacitor[part]) {\n let capacitor1 = getCapacitor[part](CMIN, fp, q, gain, groundedValue);\n let capacitor2 = getCapacitor[part](CMAX, fp, q, gain, groundedValue);\n if (capacitor1 < capacitor2) {\n minGov.push(capacitor1);\n maxGov.push(capacitor2);\n } else {\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n }\n }\n for (let part of ['L1', 'L3']) {\n if (getCapacitor[part]) {\n if ((_implementation === 'passiveFirstOrder' && type === 'lowpass') || _implementation === 'passiveInductor') {\n let capacitor1 = getCapacitor[part](LMIN, fp, q, gain, 0);\n let capacitor2 = getCapacitor[part](LMAX, fp, q, gain, 0);\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n let capacitor1 = getCapacitor[part](LMIN, fp, q, gain, groundedValue);\n let capacitor2 = getCapacitor[part](LMAX, fp, q, gain, groundedValue);\n if (capacitor1 < capacitor2) {\n minGov.push(capacitor1);\n maxGov.push(capacitor2);\n } else {\n maxGov.push(capacitor1);\n minGov.push(capacitor2);\n }\n }\n }\n }\n return { min: Math.max(...minGov), max: Math.min(...maxGov) };\n}\n\n/**\n * getAbstractFilterResponse - Get the response (magnitude and phase) of the filter with the specified properties\n *\n * @param {\"lowpass\" | \"bandpass\" | \"highpass\"} type - The type of filter\n * @param { 1 | 2} order - The order of filter\n * @param {number} fp - The filter frequency (Hz)\n * @param {number} gain - The filter gain (V/V)\n * @param {number} q - The q of the filter - ignored on passive and active firstOrder filters\n * @param {number[]} frequencies - Frequencies at which to deliver response (Hz)\n * @returns {FilterResponse[] | undefined} - The response at each of the supplied frequencies. Undefined if parameter checking fails.\n */\nexport function getAbstractFilterResponse(\n type, // : \"lowpass\" | \"bandpass\" | \"highpass\",\n order, // : 1 | 2,\n fp, // : number, // Hz\n gain, // : number, // V/V\n q, // : number, // unitless - not used on passive and active firstOrder\n frequencies //: number[] // Hz\n) {\n // : FilterResponse[] | undefined\n // Parameter checking\n if (\n typeof responseCalculators[type] === 'undefined' ||\n (order !== 1 && order !== 2) ||\n typeof responseCalculators[type][order - 1] === 'undefined' ||\n typeof fp !== 'number' ||\n !isFinite(fp) ||\n fp != fp || //safer equivalent to isNan(fp)\n typeof gain !== 'number' ||\n !isFinite(gain) ||\n gain != gain ||\n typeof q !== 'number' ||\n !isFinite(q) ||\n q != q ||\n !Array.isArray(frequencies)\n ) {\n return;\n }\n // Let's get to it...\n return frequencies.map((frequency) => {\n let complexGain = responseCalculators[type][order - 1](fp, gain, q, frequency);\n let magnitude = Math.sqrt(complexGain.real * complexGain.real + complexGain.imaginary * complexGain.imaginary);\n let phase = Math.atan2(complexGain.imaginary, complexGain.real);\n return {\n magnitudeVV: magnitude,\n magnitudedB: 20 * Math.log10(magnitude),\n phaseRadians: phase,\n phaseDegrees: (phase * 180) / Math.PI,\n };\n });\n}\n\n/**\n * getMovingAverageFilterResponse - Get the response (magnitude and phase) for a moving average (boxcar) lowpass filter\n * Math from: https://dsp.stackexchange.com/questions/28296/phase-response-of-moving-average-filter-how-to-interpret\n * @param {number} numberOfTaps - The length of the boxcar filter\n * @param {number} sampleRate - Sampling rate of digital data (sps)\n * @param {number[]} frequencies - Frequencies at which to deliver response (Hz)\n * @returns {FilterResponse[] | undefined} - The response at each of the supplied frequencies. Undefined if parameter checking fails.\n */\nexport function getMovingAverageFilterResponse(\n numberOfTaps, //number of taps: 2 to infinity\n sampleRate, //Sampling rate of digital data // sps\n frequencies //: number[] // Hz\n) {\n if (numberOfTaps <= 1 || sampleRate <= 0 || !Array.isArray(frequencies)) {\n return undefined;\n }\n\n //Delay of filter in seconds.\n //Imagine you are sitting at the output of the bitstream with a computer that can do math infinitely fast. So you only have to wait on the samples, not on the math.\n //Let's say you want a 1 tap filter. i.e. no filter at all. You return the sample you just got. There is no delay at all.\n //Now let's say you want a 5 tap filter. You need to average the sample you just got with the 2 previous samples as well as the two samples to come. So the time you need to wait is 2 samples worth.\n //Extrapolating to any odd filter, the time you need to wait is (numberOfTaps - 1) / 2.\n //Now let's say you want a six tap filter. Timewise, the average output lands exactly in the middle of your sample 3 and sample 4. So at that point in time, you need to wait 2.5 more samples before you have all the data you need.\n //So math still works for even case, but you are no longer synchronized with the original digital bit stream clock (you are half a sample off).\n let delayOfFilterInSamplePeriods = (-1 * (numberOfTaps - 1)) / 2;\n let delayOfFilterInSeconds = delayOfFilterInSamplePeriods / sampleRate;\n\n return frequencies.map((f) => {\n let normalizedFrequency = (Math.PI * f) / sampleRate;\n let magnitude = Math.abs(\n Math.sin(numberOfTaps * normalizedFrequency) / (numberOfTaps * Math.sin(normalizedFrequency))\n );\n //Delay of filter as a fraction of the frequency's period\n let delayAsFractionOfPeriod = delayOfFilterInSeconds * f;\n return {\n magnitudeVV: magnitude,\n magnitudedB: 20 * Math.log10(magnitude),\n phaseRadians: delayAsFractionOfPeriod * 2 * Math.PI,\n phaseDegrees: delayAsFractionOfPeriod * 360,\n };\n });\n}\n\n/**\n * calculateFilterComponents - Calculate the passive components required to implement the specified filter.\n *\n * @param {\"lowpass\"|\"bandpass\"|\"highpass\"|\"lowpassV2\"} type\n * @param {\"multipleFeedback\" | \"sallenKey\" | \"passiveFirstOrder\" | \"activeFirstOrder\" | \"passiveInductor\" | \"activeInductor\"} implementation\n * @param {number} fp - Filter frequency (Hz)\n * @param {number} gain - Filter gain (V/V)\n * @param {number} q - Filter q - not used on passive and active firstOrder\n * @param {number} cGov - Governing capacitor - C1, except C2 in multipleFeedback highpass (F)\n * @param {number} rGainOrCCross - Total gain resistance - R3+R4 (Ω) or crossover capacitor / resistor for differential circuits (typically C3 or R3)\n * @param {\"singleEnded\" | \"differential\"} input - default \"singleEnded\"\n * @param {'E6' | 'E12' | 'E24' | 'E48' | 'E96'} capESeries - The eSeries of the capacitor slider. Ignored for everything except Sallen Key Lowpass.\n * @returns {FilterPassives | undefined} The set of passive values. Values unused in the circuit are returned as undefined. Undefined if there are parameter errors.\n */\nexport function calculateFilterComponents(\n type, //: \"lowpass\"|\"bandpass\"|\"highpass\"|\"lowpassV2\",\n implementation, //: \"multipleFeedback\" | \"sallenKey\" | \"passiveFirstOrder\" | \"activeFirstOrder\" | \"passiveInductor\" | \"activeInductor\",\n fp, //: number // Hz\n gain, //: number // V/V\n q, //: number // unitless - not used on passive and active firstOrder\n cGov, //: number // F - governing capacitor (typically C1) or ohms - governing resistor (R1 in differential passive highpass)\n rGainOrCCross, //: number // Ω - total gain resistance (R3+R4) or crossover capacitor / resistor for differential circuits (typically C3)\n input = 'singleEnded', //: \"singleEnded\" | \"differential\" // default \"singleEnded\",\n capESeries //: 'E6' | 'E12' | 'E24' | 'E48' | 'E96', only used for Sallen Key Lowpass\n) {\n let _implementation = canonicalizeImplementation(implementation);\n\n if (!componentCalculators[input]) {\n return;\n }\n if (!componentCalculators[input][_implementation]) {\n return;\n }\n if (!componentCalculators[input][_implementation][type]) {\n return;\n }\n if (gain === 0) {\n throw 'Gain must be non-zero';\n }\n\n let comps = componentCalculators[input][_implementation][type](cGov, fp, q, gain, rGainOrCCross, capESeries);\n\n return {\n r1: comps.r1,\n r2: comps.r2,\n r3: comps.r3,\n r4: comps.r4,\n r5: comps.r5,\n c1: comps.c1,\n c2: comps.c2,\n c3: comps.c3,\n l1: comps.l1,\n\n r6: comps.r6,\n r7: comps.r7,\n r8: comps.r8,\n r11: comps.r11,\n r12: comps.r12,\n r15: comps.r15,\n c4: comps.c4,\n c11: comps.c11,\n c12: comps.c12,\n c13: comps.c13,\n l2: comps.l2,\n l3: comps.l3,\n };\n}\n\n/**\n * stageSpecsFromComponents - Get the stage gain, fp, q, fz based on circuit components, filter type and filter implementation\n *\n * @param {\"lowpass\"|\"bandpass\"|\"highpass\"} type - The type of filter\n * @param {\"sallenKey\" | \"multipleFeedback\" | \"activeFirstOrder\" | \"activeInductor\" } implementation - The filter implementation used\n * @param {FilterPassives} filterComponents - Set of resistors, capacitors and inductors\n * @param {number} opAmpGBW - GBW. Value taken from the selected opAmp\n * @returns {FilterStageSpecs | undefined} - Filter stage type, order, gain, fp, fz, q\n */\n\nexport function stageSpecsFromComponents(\n type, //: \"lowpass\"|\"bandpass\"|\"highpass\"\n implementation, //: \"multipleFeedback\" | \"sallenKey\" | \"activeFirstOrder\" | \"activeInductor\",\n filterComponents, // Set of resistors, capacitors and inductors\n opAmpGBW, // Gain bandwidth of the opamp of the circuit\n input = 'singleEnded'\n) {\n if (!specsCalculatorsFromComponents[input]) {\n return;\n }\n if (!specsCalculatorsFromComponents[input][implementation]) {\n return;\n }\n if (!specsCalculatorsFromComponents[input][implementation][type]) {\n return;\n }\n\n let specs = specsCalculatorsFromComponents[input][implementation][type](filterComponents, opAmpGBW);\n\n if (!specs) {\n return;\n }\n\n return {\n order: specs.order,\n fp: specs.fp, //pole frequency\n q: specs.q, //peaking\n fz: specs.fz, //zero frequency\n gain: specs.gain, //in V/V\n type: type,\n };\n}\n","/**\nComplex math library. Started by Collaborative Consulting and ADI in 2012. Heavily modified by Matt Duff in 2019.\n\n\nThis library has three sections:\n1) Basic math: \nIncludes plus, mult, divide and their Destroy versions. The \"Destroy\" versions reuse the input variable to\navoid creating a new object and are therefore considerably faster. However they destroy the input variable, so have\nto be used quite carefully. \nOur basic math functions are used at the lowest level of our simulations, and are run thousands of times. \nIt is critical that these functions run quickly. In 2019, we compared our add, multiply and divide to to the open source complex library, Complex.js. This library came out after\nwe had created this homemade one. Performance of this homemade library compared favorably to that library. See ARNA-3487 for more details.\n\n*/\n\n/**\n@author Created by : Archita Ghosh on behalf of Collaborative Consulting and ADI.\n@function Complex \n@param {int} real part of the complex number which is in the form of a+ib.\n@param {int} imaginary part of the complex number.\n@returns A complex number in the form of a+ib.\n@description This function creates a complex number.\nThe parameters to this function are real part and the imaginary part.\n*/\nfunction Complex(real, imaginary) {\n this.real = real;\n this.imaginary = imaginary;\n}\n\n//Does Filter Wizard use this???\n/**\n@description The constants converted into complex numbers which are used in the algorithm\n*/\n/*\nComplex[\"0\"] = new Complex(0, 0);\nComplex[\"1\"] = new Complex(1, 0);\nComplex[\"I\"] = new Complex(0, 1, 1, Math.PI / 2);\nComplex[\"PI\"] = new Complex(Math.PI, 0, Math.PI, 0);\nComplex[\"E\"] = new Complex(Math.E, 0, Math.E, 0);\n*/\n\n/******************************************* Basic Math Functions ******************************************************/\n\n/**\n@function plus\n@returns summation of two complex numbers.\n@description This function takes as a parameter another complex number and returns a sum of two complex number\n@example Let the first complex number be x+iy and second complex number be a+ib.\nThe result of (x+iy).plus(a+ib) = (x+a) +i(y+b)\n*/\n\nComplex.prototype.plus = function (c) {\n return new Complex(this.real + c.real, this.imaginary + c.imaginary);\n};\n\n/*This addition function is much faster than the regular plus function, because it reuses the incoming variable instead of creating a new return variable.\nHowever it destroys the original value in the variable in the process, so this function should be used with care.*/\nComplex.prototype.plusDestroy = function (c) {\n var realPart = c.real;\n var imagPart = c.imaginary;\n c.real = this.real + realPart;\n c.imaginary = this.imaginary + imagPart;\n return c;\n};\n\n/**\n@function subs\n@returns substraction of two complex numbers.\n@description This function takes as a parameter another complex number and returns a substraction of two complex number\n@example Let the first complex number be x+iy and second complex number be a+ib.\nThe result of (x+iy).subs(a+ib) = (x-a) +i(y-b)\n*/\n\nComplex.prototype.subs = function (c) {\n return new Complex(this.real - c.real, this.imaginary - c.imaginary);\n};\n\n/*This addition function is much faster than the regular subs function, because it reuses the incoming variable instead of creating a new return variable.\nHowever it destroys the original value in the variable in the process, so this function should be used with care.*/\nComplex.prototype.subsDestroy = function (c) {\n var realPart = c.real;\n var imagPart = c.imaginary;\n c.real = this.real - realPart;\n c.imaginary = this.imaginary - imagPart;\n return c;\n};\n\n/**\n@function mult\n@returns multiplication of two complex numbers.\n@description This function takes as a parameter another complex number and returns a multiplication of two complex number\n@example Let the first complex number be x+iy and second complex number be a+ib.\nThe result of (x+iy).mult(a+ib) = (x*a)-(y*b) + i(y*a)+(b*x)\n*/\n\nComplex.prototype.mult = function (c) {\n var realPart = c.real;\n var imagPart = c.imaginary;\n return new Complex(\n realPart * this.real - imagPart * this.imaginary,\n this.imaginary * realPart + imagPart * this.real\n );\n};\n\n/*This multiply function is much faster than the regular mult function, because it reuses the incoming variable instead of creating a new return variable.\nHowever it destroys the value of the original variable in the process, so this function should be used with care.*/\nComplex.prototype.multDestroy = function (c) {\n var realPart = c.real;\n var imagPart = c.imaginary;\n c.real = realPart * this.real - imagPart * this.imaginary;\n c.imaginary = this.imaginary * realPart + imagPart * this.real;\n\n return c;\n};\n\n/**\n@function divide\n@returns division of two complex numbers.\n@description This function takes as a parameter another complex number and returns a division of two complex number\nIn April 2019 we updated this version to use one divide instead of 2, giving it a speed boost. See ARNA-3487 for details.\n */\nComplex.prototype.divide = function (c) {\n //multiply top and bottom by complex conjugate\n var numer_real = c.real * this.real + this.imaginary * c.imaginary;\n var numer_imag = c.real * this.imaginary - c.imaginary * this.real;\n var denom_real = c.real * c.real + c.imaginary * c.imaginary;\n if (denom_real === 0) {\n return new Complex(Infinity, 0);\n }\n if (denom_real === Infinity) {\n return new Complex(0, 0);\n }\n var denom_real_invert = 1 / denom_real;\n return new Complex(numer_real * denom_real_invert, numer_imag * denom_real_invert);\n};\n\n/**\n@function divideDestroy\n@returns division of two complex numbers.\n@description This function takes as a parameter another complex number and returns a division of two complex number. \nIt reuses the input variable. Because it does not have to create a new object, it's considerably faster than the\nregular divide function, but also more dangerous, as the input variable is destroyed.\n\nIn April 2019 we updated this version to use one divide instead of 2, giving it a speed boost. See ARNA-3487 for details.\n */\nComplex.prototype.divideDestroy = function (c) {\n //multiply top and bottom by complex conjugate\n var numer_real = c.real * this.real + this.imaginary * c.imaginary;\n var numer_imag = c.real * this.imaginary - c.imaginary * this.real;\n var denom_real = c.real * c.real + c.imaginary * c.imaginary;\n if (denom_real === 0) {\n c.real = Infinity;\n c.imaginary = 0;\n return c;\n }\n if (denom_real === Infinity) {\n c.real = 0;\n c.imaginary = 0;\n return c;\n }\n var denom_real_invert = 1 / denom_real;\n c.real = numer_real * denom_real_invert;\n c.imaginary = numer_imag * denom_real_invert;\n return c;\n};\n\n/**\n@function invert\n@returns multiplicative inverse of input\n@description Inverts a complex number (1/x). \n */\nComplex.prototype.reciprocal = function () {\n let denom_real = this.real * this.real + this.imaginary * this.imaginary;\n if (denom_real === 0) {\n return new Complex(Infinity, 0);\n }\n if (denom_real === Infinity) {\n return new Complex(0, 0);\n }\n var denominator_inverted = 1 / denom_real;\n return new Complex(this.real * denominator_inverted, -1 * this.imaginary * denominator_inverted);\n};\n\n/**\n@function invertDestroy\n@returns multiplicative inverse of input\n@description Inverts a complex number (1/x). Because it does not have to create a new object, it's considerably faster than the\nregular invert function, but also more dangerous, as the input variable is destroyed.\n\nComplex.prototype.invertDestroy = function () {\n var denominator_inverted = 1/(this.real * this.real + this.imaginary * this.imaginary);\n this.real = this.real * denominator_inverted;\n this.imaginary = -1 * this.imaginary * denominator_inverted;\n return this;\n}\n/*\n\n\n/**\n@function negate\n@returns multiplicative inverse of input\n@description Inverts a complex number (1/x). \n */\nComplex.prototype.negate = function () {\n return new Complex(this.real * -1, this.imaginary * -1);\n};\n\n/**\n@function negateDestroy\n@returns multiplicative inverse of input\n@description Inverts a complex number (1/x). Because it does not have to create a new object, it's considerably faster than the\nregular invert function, but also more dangerous, as the input variable is destroyed.\n */\nComplex.prototype.negateDestroy = function () {\n this.real = this.real * -1;\n this.imaginary = this.imaginary * -1;\n return this;\n};\n\n/**\n@function parallel\n@returns parallel combination of two complex numbers\n@description parallel combination of two complex numbers\n */\nComplex.prototype.parallel = function (z2) {\n let z1 = this;\n let numerator = z1.mult(z2);\n let denominator = z1.plus(z2);\n return numerator.divideDestroy(denominator);\n};\n\n/**\n@function magnitude\n@returns magnitude of a complex number\n@description This function calculates and returns the magnitude of the complex number.\n@example Let the complex number be x+iy \nThe result of (x+iy).magnitude() = sqrt(x*x +y*y)\n*/\nComplex.prototype.magnitude = function () {\n return Math.sqrt(this.real * this.real + this.imaginary * this.imaginary);\n};\n\n/**\n@function phaseRadians\n@returns phase of complex number in radians\n@description This function calculates and returns the phase of the complex number in radians.\n*/\nComplex.prototype.phaseRadians = function () {\n return Math.atan2(this.imaginary, this.real);\n};\n\n/**\n@function phaseRadians\n@returns phase of complex number in degrees\n@description This function calculates and returns the phase of the complex number in degrees.\n*/\nComplex.prototype.phaseDegrees = function () {\n let phaseRadians = this.phaseRadians();\n return phaseRadians * (180 / Math.PI);\n};\n\n/**\n@function arctan\n@param a complex number.\n@returns inverse tangent of a complex number\n@description This function takes as a parameter another complex number and returns an inverse tangent of a complex number\n*/\n// Complex.prototype.arctan = function (c) {\n// var i = Complex.I;\n// return i.mult(Complex.log(i.plus(c).divide(i.subs(c)))).divide(new Complex(2, 0, 2, 0));\n// }\n\n/**\n@function floor\n@param a complex number.\n@returns floor value of a complex number.\n@description This function takes as a parameter another complex number and returns a floor value of a complex number.\n*/\n// Complex.prototype.floor = function (c) {\n// return new Complex(Math.floor(c.real), Math.floor(c.imaginary));\n// }\n\n/**\n@function log\n@param a complex number.\n@returns log of a complex numbers.\n@description This function takes as a parameter another complex number and returns a log of the complex number\n*/\n// Complex.prototype.log = function (c) {\n// return new Complex(Math.log(c.real), c.t + 2 * Math.PI * Math.floor(-c.t / (2 * Math.PI) + 1 / 2));\n// }\n\nexport function createComplex(real, imaginary) {\n return new Complex(real, imaginary);\n}\n\n//Make scalar value complex. Handy for use with optional values, where you aren't sure if they are undefined\nexport function complexify(scalarValue) {\n if (scalarValue != undefined) {\n return new Complex(scalarValue, 0);\n } else {\n return undefined;\n }\n}\n\n/**\n@function complexNumberRaisedToPower\n@param complex number, integer power\n@returns complexNumber\n*/\nexport function complexNumberRaisedToPower(c, n) {\n var modC, theta, retComplex, realPart, imaginaryPart, modCpowern;\n\n // |x+iy| = Math.sqrt(x^2 + y^2) = |z|\n modC = Math.sqrt(c.real * c.real + c.imaginary * c.imaginary);\n\n // |x+iy|^n = |z|^n\n modCpowern = Math.pow(modC, n);\n\n //theta=tan^(-1)(y/x)>\n theta = Math.atan2(c.imaginary, c.real);\n\n //|z|^n * cos(n* theta)\n realPart = modCpowern * Math.cos(n * theta);\n\n //|z|^n * sin(n* theta)\n imaginaryPart = modCpowern * Math.sin(n * theta);\n\n //zn = rn(cos(ntheta)+i sin(ntheta))\n retComplex = new Complex(realPart, imaginaryPart);\n\n return retComplex;\n}\n\n//Returns the transfer function of a divider. Z1 is on top. Z2 is on bottom.\nexport function divider(z1, z2) {\n let denominator = createComplex(z1.real + z2.real, z1.imaginary + z2.imaginary);\n let divider = z2.divideDestroy(denominator);\n return divider;\n}\n\n//Given an array of scalar numbers, convert into an array of complex numbers\nexport function arrayCreate(scalarArray) {\n let complexArray = [];\n for (let i = 0; i < scalarArray.length; i++) {\n complexArray[i] = new Complex(scalarArray[i], 0);\n }\n return complexArray;\n}\n\n//Given an array of complex numbers, returns a scalar array of the magnitudes in V/V\nexport function arrayMagnitude(complexArray) {\n let scalarArray = [];\n for (let i = 0; i < complexArray.length; i++) {\n scalarArray[i] = complexArray[i].magnitude();\n }\n return scalarArray;\n}\n\n//Given an array of complex numbers, returns a scalar array of the phases in degrees\nexport function arrayPhaseDegrees(complexArray) {\n let phaseRadians = arrayPhaseRadians(complexArray);\n let phaseDegrees = [];\n for (let i = 0; i < phaseRadians.length; i++) {\n phaseDegrees[i] = phaseRadians[i] * (180 / Math.PI);\n }\n return phaseDegrees;\n}\n\n//Given an array of complex numbers, returns a scalar array of the phases in radians\nexport function arrayPhaseRadians(complexArray) {\n let wrappedPhase = [];\n for (let i = 0; i < complexArray.length; i++) {\n wrappedPhase[i] = complexArray[i].phaseRadians();\n }\n let unwrappedPhase = unwrap(wrappedPhase);\n return unwrappedPhase;\n}\n\n//Given an two arrays of complex numbers of the same length, multiply each element in first array by corresponding\n//element in the second array\nexport function arrayMultiply(complexArray1, complexArray2) {\n let product = [];\n for (let i = 0; i < complexArray1.length; i++) {\n product[i] = complexArray1[i].mult(complexArray2[i]);\n }\n return product;\n}\n\n//Given an two arrays of complex numbers of the same length, create impedance divider with each element in first array\n//and corresponding element in the second array\nexport function arrayDivider(complexArray1, complexArray2) {\n let divider = [];\n for (let i = 0; i < complexArray1.length; i++) {\n divider[i] = this.divider(complexArray1[i], complexArray2[i]);\n }\n return divider;\n}\n\n//Unwraps phase array so that phase can continue to grow rather than being constrained between -PI and PI radians\n//For example. The following sequence:\n// 2PI/3, -2PI/3, 0, 2PI/3\n// will be turned into\n// 2PI/3, 4PI/3, 6PI/3, 8PI/3\nfunction unwrap(phaseArray) {\n var halfcircle = Math.PI,\n fullcircle = 2 * Math.PI;\n\n var length = phaseArray.length;\n for (var n = 1; n <= length - 1; n++) {\n var phase_diff = phaseArray[n] - phaseArray[n - 1];\n if (phase_diff > halfcircle) {\n for (var k = n; k <= length - 1; k++) {\n phaseArray[k] = phaseArray[k] - fullcircle;\n }\n }\n if (phase_diff < -halfcircle) {\n for (var j = n; j <= length - 1; j++) {\n phaseArray[j] = phaseArray[j] + fullcircle;\n }\n }\n }\n\n return phaseArray;\n}\n","import * as Complex from './complex.js';\nimport * as ESeries from './e-series.js';\n\n// Library internals - used by exported methods of index.js to do the bulk of the work\n\nexport const NEARLY_INFINITY = 1e66;\nexport const INFINITY = 1e66;\n\n//Computes the theoretical response of an ideal filter at 1 frequency\n//Give it the natural frequency, gain, q, order, type, and a frequency. It will return then return the filter's magnitude at that frequency.\nexport let responseCalculators = {\n lowpass: [\n // first is first-order filter, second is for second-order filter - using array here lets us index by numeric (order-1).\n function (fp, gain, q, f) {\n let complexGain = Complex.createComplex(gain, 0);\n return complexGain.divide(Complex.createComplex(1, f / fp));\n },\n function (fp, gain, q, f) {\n let complexGain = Complex.createComplex(gain, 0);\n return complexGain.divide(Complex.createComplex((fp * fp - f * f) / (fp * fp), (f * fp) / q / (fp * fp)));\n },\n ],\n highpass: [\n function (fp, gain, q, f) {\n let complexGain = Complex.createComplex(gain, 0);\n return Complex.createComplex(0, (complexGain.real * f) / fp).divide(Complex.createComplex(1, f / fp));\n },\n function (fp, gain, q, f) {\n let complexGain = Complex.createComplex(gain, 0);\n return complexGain.divide(Complex.createComplex((fp * fp - f * f) / (-1 * f * f), (f * fp) / q / (-1 * f * f)));\n },\n ],\n bandpass: [\n undefined,\n function (fp, gain, q, f) {\n let complexGain = Complex.createComplex(gain, 0);\n return complexGain\n .mult(Complex.createComplex(0, (f * fp) / q))\n .divide(Complex.createComplex(fp * fp - f * f, (f * fp) / q));\n },\n ],\n};\n\n//calculates corresponding cGov for a given component. We use this to determine the min and max cGov for each components, which then allows us to\n//determine the allowed cGov for the entire circuit\n//exported only for internals consistency testing - not for public consumption\nexport let governingComponentCalculators = {\n singleEnded: {\n passiveFirstOrder: {\n lowpass: {\n // Governing component whose value is being returned: C1\n R1: function (r1, stageFp) {\n return 1 / (stageFp * 2 * Math.PI * r1);\n },\n },\n highpass: {\n // Governing component whose value is being returned: C1\n R1: function (r1, stageFp /*, stageQ, gain*/) {\n return 1 / (stageFp * 2 * Math.PI * r1);\n },\n },\n },\n activeFirstOrder: {\n lowpass: {\n // Governing component whose value is being returned: C1\n R1: function (r1, stageFp, _stageQ, gain) {\n if (gain > 0) {\n return 1 / (stageFp * 2 * Math.PI * r1);\n } else {\n return 1 / (stageFp * 2 * Math.PI * r1 * Math.abs(gain));\n }\n },\n R2: function (r2, stageFp /*, stageQ, gain*/) {\n //This should only trigger for negative gain cases, as positive gain should not ever have R2\n return 1 / (stageFp * 2 * Math.PI * r2);\n },\n },\n highpass: {\n // Governing component whose value is being returned: C1\n R1: function (r1, stageFp /*, stageQ, gain*/) {\n return 1 / (stageFp * 2 * Math.PI * r1);\n },\n R2: function (r2, stageFp, _stageQ, gain) {\n if (gain > 0) {\n return undefined;\n } else {\n return 1 / (stageFp * 2 * Math.PI * (r2 / Math.abs(gain)));\n }\n },\n },\n },\n passiveInductor: {\n lowpass: {\n // Governing component whose value is being returned: C1\n R1: function (r1, stageFp, stageQ /* gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * stageQ * r1);\n },\n L1: function (l1, stageFp /*, stageQ, gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * w0 * l1);\n },\n },\n bandpass: {\n // Governing component whose value is being returned: C1\n R1: function (r1, stageFp, stageQ /*, gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return stageQ / (w0 * r1);\n },\n L1: function (l1, stageFp /*, _stageQ, gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * w0 * l1);\n },\n },\n },\n activeInductor: {\n lowpass: {\n // Governing component whose value is being returned: C1\n R1: function (r1, stageFp, stageQ /* gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * stageQ * r1);\n },\n L1: function (l1, stageFp /*, stageQ, gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * w0 * l1);\n },\n },\n // highpass: {\n // r1: function (cGov, stageFp, stageQ, gain, rGain) {\n // let w0 = stageFp * 2 * Math.PI;\n // return 1 / (w0 * stageQ * cGov);\n // },\n // l1: function (cGov, stageFp, stageQ, gain, rGain) {\n // let w0 = stageFp * 2 * Math.PI;\n // return 1 / (w0 * w0 * cGov);\n // }\n // }\n bandpass: {\n // Governing component whose value is being returned: C1\n R1: function (r1, stageFp, stageQ /*, gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return stageQ / (w0 * r1);\n },\n L1: function (l1, stageFp /*, _stageQ, gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * w0 * l1);\n },\n },\n },\n multipleFeedback: {\n lowpass: {\n // Governing component whose value is being returned: C2\n C1: function (c1, stageFp, stageQ, gain) {\n let alpha = 1 / stageQ;\n return c1 / ((4 / (alpha * alpha)) * (gain + 1));\n },\n R2pR5: function (parallelR2R5, stageFp, stageQ, gain) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n return alpha / (2 * w0 * parallelR2R5 * (gain + 2));\n },\n R1: function (r1, stageFp, stageQ, gain) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n return alpha / (2 * gain * w0 * r1);\n },\n R2: function (r2, stageFp, stageQ, gain) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n return alpha / (2 * (gain + 1) * w0 * r2);\n },\n R5: function (r5, stageFp, stageQ /*, gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n return alpha / (2 * w0 * r5);\n },\n },\n highpass: {\n // Governing component whose value is being returned: C1\n C2: function (c2 /*, stageFp, stageQ, gain*/) {\n return c2;\n },\n C3: function (c3, stageFp, stageQ, gain) {\n return c3 * gain;\n },\n R1pR2: function (parallelR1R2, stageFp, stageQ, gain) {\n let alpha = 1 / stageQ;\n let w0 = stageFp * 2 * Math.PI;\n let gx = 2 + 1 / gain;\n return 1 / (w0 * parallelR1R2 * (gx / alpha + alpha / (gain * gx)));\n },\n R1: function (r1, stageFp, stageQ, gain) {\n let alpha = 1 / stageQ;\n let w0 = stageFp * 2 * Math.PI;\n let gx = 2 + 1 / gain;\n return alpha / (w0 * r1 * gx);\n },\n R2: function (r2, stageFp, stageQ, gain) {\n let alpha = 1 / stageQ;\n let w0 = stageFp * 2 * Math.PI;\n let gx = 2 + 1 / gain;\n return (gain * gx) / (alpha * w0 * r2);\n },\n },\n bandpass: {\n // Governing component whose value is being returned: C1\n //TODO - Breakdown bandpassMFBFeedback into what each component needs\n C2: function (c2 /*, stageFp, stageQ, gain*/) {\n return c2;\n },\n R1pR2: function (parallelR1R2, stageFp, stageQ, gain) {\n let w0 = stageFp * 2 * Math.PI;\n let { q0 } = _bandpassMFBFeedback(stageQ, gain);\n return 1 / (2 * q0 * w0 * parallelR1R2);\n },\n R1: function (r1, stageFp, stageQ, gain) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (2 * q0 * r1 * w0 * b);\n },\n R2: function (r2, stageFp, stageQ, gain) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (1 - b) > 10e6 ? undefined : 1 / (2 * q0 * r2 * w0 * (1 - b));\n },\n R5: function (r5, stageFp, stageQ, gain) {\n let { q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n return (2 * q0) / (w0 * r5);\n },\n },\n },\n sallenKey: {\n // Governing component whose value is being returned: C1\n lowpassV2: {\n C2: function (c2, stageFp, stageQ, gain) {\n let ratios = _sallenKeyLPFResAndCapRatios(gain, stageQ, 1, 'ideal');\n //capRatio is C1/C2:\n return ratios.capRatio * c2;\n },\n R1pR2: function (parallelR1R2, stageFp, stageQ, gain) {\n let ratios = _sallenKeyLPFResAndCapRatios(gain, stageQ, 1, 'ideal');\n let r1 = (parallelR1R2 * (1 + ratios.resRatio)) / ratios.resRatio;\n let r2 = r1 * ratios.resRatio;\n let squareRootOfC1C2 = 1 / (2 * Math.PI * Math.sqrt(r1 * r2) * stageFp);\n let c1 = Math.sqrt(ratios.capRatio * squareRootOfC1C2 * squareRootOfC1C2);\n return c1;\n },\n R1: function (r1, stageFp, stageQ, gain) {\n //Get rough draft\n let ratios = _sallenKeyLPFResAndCapRatios(gain, stageQ, 1, 'ideal');\n let r2 = r1 * ratios.resRatio;\n let squareRootOfC1C2 = 1 / (2 * Math.PI * Math.sqrt(r1 * r2) * stageFp);\n let c1 = Math.sqrt(ratios.capRatio * squareRootOfC1C2 * squareRootOfC1C2);\n return c1;\n },\n R2: function (r2, stageFp, stageQ, gain) {\n let ratios = _sallenKeyLPFResAndCapRatios(gain, stageQ, 1, 'ideal');\n let r1 = r2 / ratios.resRatio;\n let squareRootOfC1C2 = 1 / (2 * Math.PI * Math.sqrt(r1 * r2) * stageFp);\n let c1 = Math.sqrt(ratios.capRatio * squareRootOfC1C2 * squareRootOfC1C2);\n return c1;\n },\n },\n //This was the original algorithm to calculate Sallen Key components. It prioritized low noise gain over everything else.\n //Unfortunately it resulted wide R1/R2 spacing at low gains and low Q's: i.e. the most common settings. For example for\n //Gain=1, Q=0.707, R2/R1 = 17.9.\n //This wide spacing meant that in order for a customer to have decent input impedance (high enough R1), then R2 had to be quite\n //large, resulting in a worse noise result than if we had slightly worse noise gain, but closer resistor spacing.\n lowpass: {\n // Governing component whose value is being returned: C1\n C2: function (c2, stageFp, stageQ, gain) {\n if (stageQ * stageQ * (gain * gain - 8 * gain + 16) < 2 || gain > 4) {\n return c2;\n } else if (13 * stageQ - 10 * stageQ * gain > Math.sqrt(20)) {\n let a = 4;\n let b = 4 * (1 - gain) - 1 / (stageQ * stageQ);\n let d = (1 - gain) * (1 - gain);\n let capacitorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n return c2 / capacitorRatio;\n } else {\n return c2 * 10;\n }\n },\n R1pR2: function (parallelR1R2, stageFp, stageQ, gain) {\n if (stageQ * stageQ * (gain * gain - 8 * gain + 16) < 2 || gain > 4) {\n let a = 1;\n let b = 2 * (2 - gain) - 1 / (stageQ * stageQ);\n let d = (2 - gain) * (2 - gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let sq = Math.sqrt(resistorRatio);\n return 1 / (2 * Math.PI * stageFp * parallelR1R2 * (sq + 1 / sq));\n } else if (13 * stageQ - 10 * stageQ * gain > Math.sqrt(20)) {\n let a = 4;\n let b = 4 * (1 - gain) - 1 / (stageQ * stageQ);\n let d = (1 - gain) * (1 - gain);\n let capacitorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n return 1 / (4 * Math.PI * stageFp * parallelR1R2 * Math.sqrt(capacitorRatio));\n } else {\n let a = 1;\n let b = 2 * (11 - 10 * gain) - 10 / (stageQ * stageQ);\n let d = (11 - 10 * gain) * (11 - 10 * gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let sq = Math.sqrt(resistorRatio);\n return 1 / (2 * Math.PI * stageFp * parallelR1R2 * Math.sqrt(1 / 10) * (sq + 1 / sq));\n }\n },\n R1: function (r1, stageFp, stageQ, gain) {\n if (stageQ * stageQ * (gain * gain - 8 * gain + 16) < 2 || gain > 4) {\n let a = 1;\n let b = 2 * (2 - gain) - 1 / (stageQ * stageQ);\n let d = (2 - gain) * (2 - gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * r1);\n return rMultAvg / Math.sqrt(resistorRatio);\n } else if (13 * stageQ - 10 * stageQ * gain > Math.sqrt(20)) {\n let a = 4;\n let b = 4 * (1 - gain) - 1 / (stageQ * stageQ);\n let d = (1 - gain) * (1 - gain);\n let capacitorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n return 1 / (2 * Math.PI * stageFp * r1 * Math.sqrt(capacitorRatio));\n } else {\n let a = 1;\n let b = 2 * (11 - 10 * gain) - 10 / (stageQ * stageQ);\n let d = (11 - 10 * gain) * (11 - 10 * gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * r1 * Math.sqrt(0.1));\n return rMultAvg / Math.sqrt(resistorRatio);\n }\n },\n R2: function (r2, stageFp, stageQ, gain) {\n if (stageQ * stageQ * (gain * gain - 8 * gain + 16) < 2 || gain > 4) {\n let a = 1;\n let b = 2 * (2 - gain) - 1 / (stageQ * stageQ);\n let d = (2 - gain) * (2 - gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * r2);\n return rMultAvg * Math.sqrt(resistorRatio);\n } else if (13 * stageQ - 10 * stageQ * gain > Math.sqrt(20)) {\n let a = 4;\n let b = 4 * (1 - gain) - 1 / (stageQ * stageQ);\n let d = (1 - gain) * (1 - gain);\n let capacitorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n return 1 / (2 * Math.PI * stageFp * r2 * Math.sqrt(capacitorRatio));\n } else {\n let a = 1;\n let b = 2 * (11 - 10 * gain) - 10 / (stageQ * stageQ);\n let d = (11 - 10 * gain) * (11 - 10 * gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * r2 * Math.sqrt(0.1));\n return rMultAvg * Math.sqrt(resistorRatio);\n }\n },\n },\n highpass: {\n // Governing component whose value is being returned: C1\n C2: function (c2 /*, stageFp, stageQ, gain, rGain*/) {\n return c2;\n },\n R1pR2: function (parallelR1R2, stageFp, stageQ, gain) {\n var k = gain < 1.0001 ? 1.0001 : gain;\n var a = stageQ * stageQ * (1 - k) * (1 - k);\n var b = 4 * stageQ * stageQ * (1 - k) - 1;\n var c = 4 * stageQ * stageQ;\n let resistorRatio = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n return 1 / (2 * Math.PI * stageFp * parallelR1R2 * (Math.sqrt(resistorRatio) + 1 / Math.sqrt(resistorRatio)));\n },\n R1: function (r1, stageFp, stageQ, gain) {\n var k = gain < 1.0001 ? 1.0001 : gain;\n var a = stageQ * stageQ * (1 - k) * (1 - k);\n var b = 4 * stageQ * stageQ * (1 - k) - 1;\n var c = 4 * stageQ * stageQ;\n let resistorRatio = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n let resistorBaseValue = 1 / (2 * Math.PI * stageFp * r1);\n return resistorBaseValue / Math.sqrt(resistorRatio);\n },\n R2: function (r2, stageFp, stageQ, gain) {\n var k = gain < 1.0001 ? 1.0001 : gain;\n var a = stageQ * stageQ * (1 - k) * (1 - k);\n var b = 4 * stageQ * stageQ * (1 - k) - 1;\n var c = 4 * stageQ * stageQ;\n let resistorRatio = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n let resistorBaseValue = 1 / (2 * Math.PI * stageFp * r2);\n return resistorBaseValue * Math.sqrt(resistorRatio);\n },\n },\n },\n },\n differential: {\n passiveFirstOrder: {\n lowpass: {\n grounded: {\n // Governing component whose value is being returned: C1 and C2\n R1: function (r1, stageFp, _stageQ, gain, crossedValue) {\n let equivC = 1 / (stageFp * 2 * Math.PI * 2 * r1);\n return 2 * (equivC - crossedValue);\n },\n },\n crossed: {\n // Governing component whose value is being returned: C3\n R1: function (r1, stageFp, _stageQ, gain, groundedValue) {\n let equivC = 1 / (stageFp * 2 * Math.PI * 2 * r1);\n return equivC - groundedValue / 2;\n },\n },\n },\n highpass: {\n grounded: {\n // Governing component whose value is being returned: R1 and R2\n C1: function (c1, stageFp, stageQ, gain, crossedValue) {\n let equivR = 2 / (stageFp * 2 * Math.PI * c1);\n return -1 / (2 / crossedValue - 2 / equivR);\n },\n },\n crossed: {\n // Governing component whose value is being returned: R3\n C1: function (c1, stageFp, stageQ, gain, groundedValue) {\n let equivR = 2 / (stageFp * 2 * Math.PI * c1);\n return -1 / (1 / (2 * groundedValue) - 1 / equivR);\n },\n },\n },\n },\n activeFirstOrder: {\n lowpass: {\n grounded: {\n // Governing component whose value is being returned: C1 and C2\n R1: function (r1, stageFp, _stageQ, gain) {\n return 1 / (stageFp * 2 * Math.PI * r1 * Math.abs(gain));\n },\n R2: function (r2, stageFp /*, stageQ, gain*/) {\n return 1 / (stageFp * 2 * Math.PI * r2);\n },\n },\n crossed: {\n // Governing component whose value is being returned: NA\n R1: function () {\n return undefined;\n },\n R2: function () {\n return undefined;\n },\n },\n },\n highpass: {\n grounded: {\n // Governing component whose value is being returned: C1 and C2\n R1: function (r1, stageFp /*, stageQ, gain*/) {\n return 1 / (stageFp * 2 * Math.PI * r1);\n },\n R2: function (r2, stageFp, _stageQ, gain) {\n return Math.abs(gain) / (stageFp * 2 * Math.PI * r2);\n },\n },\n crossed: {\n // Governing component whose value is being returned: NA\n R1: function () {\n return undefined;\n },\n R2: function () {\n return undefined;\n },\n },\n },\n },\n multipleFeedback: {\n lowpass: {\n grounded: {\n // Governing component whose value is being returned: C2 and C12\n C1: function (c1, stageFp, stageQ, gain) {\n let alpha = 1 / stageQ;\n return c1 / ((4 / (alpha * alpha)) * (gain + 1));\n },\n R2pR5: function (parallelR2R5, stageFp, stageQ, gain) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n return alpha / (2 * w0 * parallelR2R5 * (gain + 2));\n },\n R1: function (r1, stageFp, stageQ, gain) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n return alpha / (2 * gain * w0 * r1);\n },\n R2: function (r2, stageFp, stageQ, gain) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n return alpha / (2 * (gain + 1) * w0 * r2);\n },\n R5: function (r5, stageFp, stageQ /*, gain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n return alpha / (2 * w0 * r5);\n },\n },\n crossed: {\n // Governing component whose value is being returned: NA\n C1: function () {\n return undefined;\n },\n R2pR5: function () {\n return undefined;\n },\n R1: function () {\n return undefined;\n },\n R2: function () {\n return undefined;\n },\n R5: function () {\n return undefined;\n },\n },\n },\n highpass: {\n grounded: {\n // Governing component whose value is being returned: C1 and C11\n C2: function (c2 /*, stageFp, stageQ, gain*/) {\n return c2;\n },\n C3: function (c3, stageFp, stageQ, gain) {\n return c3 * gain;\n },\n R1pR2: function (parallelR1R2, stageFp, stageQ, gain) {\n let alpha = 1 / stageQ;\n let w0 = stageFp * 2 * Math.PI;\n let gx = 2 + 1 / gain;\n return 1 / (w0 * parallelR1R2 * (gx / alpha + alpha / (gain * gx)));\n },\n R1: function (r1, stageFp, stageQ, gain) {\n let alpha = 1 / stageQ;\n let w0 = stageFp * 2 * Math.PI;\n let gx = 2 + 1 / gain;\n return alpha / (w0 * r1 * gx);\n },\n R2: function (r2, stageFp, stageQ, gain) {\n let alpha = 1 / stageQ;\n let w0 = stageFp * 2 * Math.PI;\n let gx = 2 + 1 / gain;\n return (gain * gx) / (alpha * w0 * r2);\n },\n },\n crossed: {\n // Governing component whose value is being returned: NA\n C2: function () {\n return undefined;\n },\n C3: function () {\n return undefined;\n },\n R1pR2: function () {\n return undefined;\n },\n R1: function () {\n return undefined;\n },\n R2: function () {\n return undefined;\n },\n },\n },\n bandpass: {\n grounded: {\n // Governing component whose value is being returned: C1 and C11\n C2: function (c2 /*, stageFp, stageQ, gain*/) {\n return c2;\n },\n R1pR2: function (parallelR1R2, stageFp, stageQ, gain) {\n let w0 = stageFp * 2 * Math.PI;\n let { q0 } = _bandpassMFBFeedback(stageQ, gain);\n return 1 / (2 * q0 * w0 * parallelR1R2);\n },\n R1: function (r1, stageFp, stageQ, gain) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (2 * q0 * r1 * w0 * b);\n },\n R2: function (r2, stageFp, stageQ, gain) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (1 - b) > 10e6 ? undefined : 1 / (2 * q0 * r2 * w0 * (1 - b));\n },\n R5: function (r5, stageFp, stageQ, gain) {\n let { q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n return (2 * q0) / (w0 * r5);\n },\n },\n //TODO - Breakdown bandpassMFBFeedback into what each component needs\n crossed: {\n // Governing component whose value is being returned: NA\n C2: function () {\n return undefined;\n },\n R1pR2: function () {\n return undefined;\n },\n R1: function () {\n return undefined;\n },\n R2: function () {\n return undefined;\n },\n R5: function () {\n return undefined;\n },\n },\n },\n },\n passiveInductor: {\n lowpass: {\n grounded: {\n // Governing component whose value is being returned: C1 and C2\n R1: function (r1, stageFp, stageQ, gain, crossedValue) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = 1 / (w0 * stageQ * 2 * r1);\n return 2 * (equivC - crossedValue);\n },\n L1: function (l1, stageFp, stageQ, gain, crossedValue) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = 1 / (w0 * w0 * 2 * l1);\n return 2 * (equivC - crossedValue);\n },\n },\n crossed: {\n // Governing component whose value is being returned: C3\n R1: function (r1, stageFp, stageQ, gain, groundedValue) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = 1 / (w0 * stageQ * 2 * r1);\n return equivC - groundedValue / 2;\n },\n L1: function (l1, stageFp, stageQ, gain, groundedValue) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = 1 / (w0 * w0 * 2 * l1);\n return equivC - groundedValue / 2;\n },\n },\n },\n bandpass: {\n grounded: {\n // Governing component whose value is being returned: C1 and C2\n R1: function (r1, stageFp, stageQ, gain, crossedValue) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = stageQ / (w0 * 2 * r1);\n return 2 * (equivC - crossedValue);\n },\n L3: function (l3, stageFp, _stageQ, gain, crossedValue) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = 1 / (w0 * w0 * l3);\n return 2 * (equivC - crossedValue);\n },\n },\n crossed: {\n // Governing component whose value is being returned: C3\n R1: function (r1, stageFp, stageQ, gain, groundedValue) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = stageQ / (w0 * 2 * r1);\n return equivC - groundedValue / 2;\n },\n L3: function (l3, stageFp, _stageQ, gain, groundedValue) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = 1 / (w0 * w0 * l3);\n return equivC - groundedValue / 2;\n },\n },\n },\n },\n },\n};\n\n//exported only for internals consistency testing - not for public consumption\nexport let individualComponentCalculators = {\n singleEnded: {\n passiveFirstOrder: {\n lowpass: {\n r1: function (cGov, stageFp /*,_stageQ, gain , _rGain*/) {\n return 1 / (stageFp * 2 * Math.PI * cGov);\n },\n },\n highpass: {\n r1: function (cGov, stageFp /*, stageQ, gain, rGain*/) {\n return 1 / (stageFp * 2 * Math.PI * cGov);\n },\n },\n },\n activeFirstOrder: {\n lowpass: {\n r1: function (cGov, stageFp, _stageQ, gain /*, _rGain*/) {\n let rGov = 1 / (stageFp * 2 * Math.PI * cGov);\n if (gain > 0) {\n return rGov;\n } else {\n return rGov / Math.abs(gain);\n }\n },\n r2: function (cGov, stageFp, _stageQ, gain /*, _rGain*/) {\n if (gain > 0) {\n return undefined;\n } else {\n return 1 / (stageFp * 2 * Math.PI * cGov);\n }\n },\n r3: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR3(gain, rGain);\n },\n r4: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR4(gain, rGain);\n },\n },\n highpass: {\n r1: function (cGov, stageFp /*, stageQ, gain, rGain*/) {\n return 1 / (stageFp * 2 * Math.PI * cGov);\n },\n r2: function (cGov, stageFp, _stageQ, gain /*, _rGain*/) {\n if (gain > 0) {\n return undefined;\n } else {\n return Math.abs(gain) / (stageFp * 2 * Math.PI * cGov);\n }\n },\n r3: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR3(gain, rGain);\n },\n r4: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR4(gain, rGain);\n },\n },\n },\n activeInductor: {\n lowpass: {\n r1: function (cGov, stageFp, stageQ /*, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * stageQ * cGov);\n },\n r3: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR3(gain, rGain);\n },\n r4: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR4(gain, rGain);\n },\n l1: function (cGov, stageFp /*, stageQ, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * w0 * cGov);\n },\n },\n // highpass: {\n // r1: function (cGov, stageFp, stageQ, gain, rGain) {\n // let w0 = stageFp * 2 * Math.PI;\n // return 1 / (w0 * stageQ * cGov);\n // },\n // r3: function (cGov, stageFp, stageQ, gain, rGain) {\n // return determineR3(gain, rGain);\n // },\n // r4: function (cGov, stageFp, stageQ, gain, rGain) {\n // return determineR4(gain, rGain);\n // },\n // l1: function (cGov, stageFp, stageQ, gain, rGain) {\n // let w0 = stageFp * 2 * Math.PI;\n // return 1 / (w0 * w0 * cGov);\n // }\n // }\n bandpass: {\n r1: function (cGov, stageFp, stageQ /*, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return stageQ / (w0 * cGov);\n },\n r3: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR3(gain, rGain);\n },\n r4: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR4(gain, rGain);\n },\n l1: function (cGov, stageFp /*, stageQ, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * w0 * cGov);\n },\n },\n },\n multipleFeedback: {\n lowpass: {\n c1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let alpha = 1 / stageQ;\n return (4 / (alpha * alpha)) * (gain + 1) * cGov;\n },\n r1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n return alpha / (2 * gain * kVar);\n },\n r2: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n return alpha / (2 * (gain + 1) * kVar);\n },\n r3: function (/*cGov, stageFp, stageQ, gain, rGain*/) {\n return 0;\n },\n r4: function (/*cGov, stageFp, stageQ, gain, rGain*/) {\n return INFINITY;\n },\n r5: function (cGov, stageFp, stageQ /*, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n return alpha / (2 * kVar);\n },\n },\n highpass: {\n c2: function (cGov /*, stageFp, stageQ, gain, rGain*/) {\n return cGov;\n },\n c3: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n return cGov / gain;\n },\n r1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let alpha = 1 / stageQ;\n let kVar = stageFp * 2 * Math.PI * cGov;\n return alpha / (kVar * (2 + 1 / gain));\n },\n r2: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let alpha = 1 / stageQ;\n let kVar = stageFp * 2 * Math.PI * cGov;\n return (gain * (2 + 1 / gain)) / (alpha * kVar);\n },\n r3: function (/*cGov, stageFp, stageQ, gain, rGain*/) {\n return 0;\n },\n r4: function (/*cGov, stageFp, stageQ, gain, rGain*/) {\n return INFINITY;\n },\n },\n bandpass: {\n //TODO - Breakdown bandpassMFBFeedback into what each component needs\n c2: function (cGov /*, stageFp, stageQ, gain, rGain*/) {\n return cGov;\n },\n r1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n let r1PlusR2 = 1 / (2 * q0 * cGov * w0);\n return r1PlusR2 / b;\n },\n r2: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n let r1PlusR2 = 1 / (2 * q0 * cGov * w0);\n let r2 = r1PlusR2 / (1 - b);\n r2 = r2 > 1e11 ? INFINITY : r2;\n return r2;\n },\n r3: function (cGov, stageFp, stageQ, gain, rGain) {\n let { g } = _bandpassMFBFeedback(stageQ, gain);\n return _determineR3(g, rGain);\n },\n r4: function (cGov, stageFp, stageQ, gain, rGain) {\n let { g } = _bandpassMFBFeedback(stageQ, gain);\n return _determineR4(g, rGain);\n },\n r5: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let { q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n return (2 * q0) / w0 / cGov;\n },\n },\n },\n passiveInductor: {\n lowpass: {\n r1: function (cGov, stageFp, stageQ /*, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * stageQ * cGov);\n },\n l1: function (cGov, stageFp /*, stageQ, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * w0 * cGov);\n },\n },\n // highpass: {\n // r1: function (cGov, stageFp, stageQ, gain, rGain) {\n // let w0 = stageFp * 2 * Math.PI;\n // return 1 / (w0 * stageQ * cGov);\n // },\n // r3: function (cGov, stageFp, stageQ, gain, rGain) {\n // return determineR3(gain, rGain);\n // },\n // r4: function (cGov, stageFp, stageQ, gain, rGain) {\n // return determineR4(gain, rGain);\n // },\n // l1: function (cGov, stageFp, stageQ, gain, rGain) {\n // let w0 = stageFp * 2 * Math.PI;\n // return 1 / (w0 * w0 * cGov);\n // }\n // }\n bandpass: {\n r1: function (cGov, stageFp, stageQ /*, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return stageQ / (w0 * cGov);\n },\n l1: function (cGov, stageFp /*, stageQ, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n return 1 / (w0 * w0 * cGov);\n },\n },\n },\n sallenKey: {\n lowpassV2: {\n c2: function (cGov, stageFp, stageQ, gain, capESeries /*, rGain*/) {\n let ratios = _sallenKeyLPFResAndCapRatios(gain, stageQ, 1, capESeries);\n //capRatio = C1/C2\n return cGov / ratios.capRatio;\n },\n r1: function (cGov, stageFp, stageQ, gain, capESeries /*, rGain*/) {\n let ratios = _sallenKeyLPFResAndCapRatios(gain, stageQ, 1, capESeries);\n let c1 = cGov;\n let c2 = cGov / ratios.capRatio;\n let squareRootOfR1R2 = 1 / (2 * Math.PI * Math.sqrt(c1 * c2) * stageFp);\n let r2 = Math.sqrt(ratios.resRatio * squareRootOfR1R2 * squareRootOfR1R2);\n let r1 = r2 / ratios.resRatio;\n return r1;\n },\n r2: function (cGov, stageFp, stageQ, gain, capESeries /*, rGain*/) {\n let ratios = _sallenKeyLPFResAndCapRatios(gain, stageQ, 1, capESeries);\n let c1 = cGov;\n let c2 = cGov / ratios.capRatio;\n let squareRootOfR1R2 = 1 / (2 * Math.PI * Math.sqrt(c1 * c2) * stageFp);\n let r2 = Math.sqrt(ratios.resRatio * squareRootOfR1R2 * squareRootOfR1R2);\n return r2;\n },\n r3: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR3(gain, rGain);\n },\n r4: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR4(gain, rGain);\n },\n },\n //This was the original algorithm to calculate Sallen Key components. It prioritized low noise gain over everything else.\n //Unfortunately it resulted wide R1/R2 spacing at low gains and low Q's: i.e. the most common settings. For example for\n //Gain=1, Q=0.707, R2/R1 = 17.9.\n //This wide spacing meant that in order for a customer to have decent input impedance (high enough R1), then R2 had to be quite\n //large, resulting in a worse noise result than if we had slightly worse noise gain, but closer resistor spacing.\n lowpass: {\n c2: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n if (stageQ * stageQ * (gain * gain - 8 * gain + 16) < 2 || gain > 4) {\n return cGov;\n } else if (13 * stageQ - 10 * stageQ * gain > Math.sqrt(20)) {\n let a = 4;\n let b = 4 * (1 - gain) - 1 / (stageQ * stageQ);\n let d = (1 - gain) * (1 - gain);\n let capacitorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n return cGov * capacitorRatio;\n } else {\n return cGov / 10;\n }\n },\n r1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n if (stageQ * stageQ * (gain * gain - 8 * gain + 16) < 2 || gain > 4) {\n let a = 1;\n let b = 2 * (2 - gain) - 1 / (stageQ * stageQ);\n let d = (2 - gain) * (2 - gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * cGov);\n return rMultAvg / Math.sqrt(resistorRatio);\n } else if (13 * stageQ - 10 * stageQ * gain > Math.sqrt(20)) {\n let a = 4;\n let b = 4 * (1 - gain) - 1 / (stageQ * stageQ);\n let d = (1 - gain) * (1 - gain);\n let capacitorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n return 1 / (2 * Math.PI * stageFp * cGov * Math.sqrt(capacitorRatio));\n } else {\n let a = 1;\n let b = 2 * (11 - 10 * gain) - 10 / (stageQ * stageQ);\n let d = (11 - 10 * gain) * (11 - 10 * gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * cGov * Math.sqrt(0.1));\n return rMultAvg / Math.sqrt(resistorRatio);\n }\n },\n r2: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n if (stageQ * stageQ * (gain * gain - 8 * gain + 16) < 2 || gain > 4) {\n let a = 1;\n let b = 2 * (2 - gain) - 1 / (stageQ * stageQ);\n let d = (2 - gain) * (2 - gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * cGov);\n return rMultAvg * Math.sqrt(resistorRatio);\n } else if (13 * stageQ - 10 * stageQ * gain > Math.sqrt(20)) {\n let a = 4;\n let b = 4 * (1 - gain) - 1 / (stageQ * stageQ);\n let d = (1 - gain) * (1 - gain);\n let capacitorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n return 1 / (2 * Math.PI * stageFp * cGov * Math.sqrt(capacitorRatio));\n } else {\n let a = 1;\n let b = 2 * (11 - 10 * gain) - 10 / (stageQ * stageQ);\n let d = (11 - 10 * gain) * (11 - 10 * gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * cGov * Math.sqrt(0.1));\n return rMultAvg * Math.sqrt(resistorRatio);\n }\n },\n r3: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR3(gain, rGain);\n },\n r4: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR4(gain, rGain);\n },\n },\n highpass: {\n c2: function (cGov /*, stageFp, stageQ, gain, rGain*/) {\n return cGov;\n },\n r1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n var k = gain < 1.0001 ? 1.0001 : gain;\n var a = stageQ * stageQ * (1 - k) * (1 - k);\n var b = 4 * stageQ * stageQ * (1 - k) - 1;\n var c = 4 * stageQ * stageQ;\n let resistorRatio = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n let resistorBaseValue = 1 / (2 * Math.PI * stageFp * cGov);\n return resistorBaseValue / Math.sqrt(resistorRatio);\n },\n r2: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n var k = gain < 1.0001 ? 1.0001 : gain;\n var a = stageQ * stageQ * (1 - k) * (1 - k);\n var b = 4 * stageQ * stageQ * (1 - k) - 1;\n var c = 4 * stageQ * stageQ;\n let resistorRatio = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n let resistorBaseValue = 1 / (2 * Math.PI * stageFp * cGov);\n return resistorBaseValue * Math.sqrt(resistorRatio);\n },\n r3: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR3(gain, rGain);\n },\n r4: function (cGov, stageFp, stageQ, gain, rGain) {\n return _determineR4(gain, rGain);\n },\n },\n },\n },\n differential: {\n passiveFirstOrder: {\n lowpass: {\n r1: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let equivC = cGov / 2 + rGainOrCCross;\n return 1 / (2 * Math.PI * stageFp * 2 * equivC);\n },\n r2: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let equivC = cGov / 2 + rGainOrCCross;\n return 1 / (2 * Math.PI * stageFp * 2 * equivC);\n },\n },\n highpass: {\n c1: function (rGov, stageFp, stageQ, gain, rGainOrRCross) {\n let equivR = 1 / (1 / (2 * rGov) + 1 / rGainOrRCross);\n return 2 / (2 * Math.PI * stageFp * equivR);\n },\n c2: function (rGov, stageFp, stageQ, gain, rGainOrRCross) {\n let equivR = 1 / (1 / (2 * rGov) + 1 / rGainOrRCross);\n return 2 / (2 * Math.PI * stageFp * equivR);\n },\n },\n },\n activeFirstOrder: {\n lowpass: {\n r1: function (cGov, stageFp, _stageQ, gain) {\n return 1 / (2 * Math.PI * stageFp * cGov * gain);\n },\n r2: function (cGov, stageFp /*, _stageQ, gain*/) {\n return 1 / (2 * Math.PI * stageFp * cGov);\n },\n r3: function (cGov, stageFp, _stageQ, gain) {\n return 1 / (2 * Math.PI * stageFp * cGov * gain);\n },\n r4: function (cGov, stageFp /*, _stageQ, gain*/) {\n return 1 / (2 * Math.PI * stageFp * cGov);\n },\n },\n highpass: {\n r1: function (cGov, stageFp /*, _stageQ , gain*/) {\n return 1 / (2 * Math.PI * stageFp * cGov);\n },\n r2: function (cGov, stageFp, _stageQ, gain) {\n return gain / (2 * Math.PI * stageFp * cGov);\n },\n r3: function (cGov, stageFp /*, _stageQ, gain*/) {\n return 1 / (2 * Math.PI * stageFp * cGov);\n },\n r4: function (cGov, stageFp, _stageQ, gain) {\n return gain / (2 * Math.PI * stageFp * cGov);\n },\n },\n },\n multipleFeedback: {\n lowpass: {\n c1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let alpha = 1 / stageQ;\n return (4 / (alpha * alpha)) * (gain + 1) * cGov;\n },\n r1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n return alpha / (2 * gain * kVar);\n },\n r2: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n return alpha / (2 * (gain + 1) * kVar);\n },\n r5: function (cGov, stageFp, stageQ /*, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n return alpha / (2 * kVar);\n },\n c11: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let alpha = 1 / stageQ;\n return (4 / (alpha * alpha)) * (gain + 1) * cGov;\n },\n r11: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n return alpha / (2 * gain * kVar);\n },\n r12: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n return alpha / (2 * (gain + 1) * kVar);\n },\n r15: function (cGov, stageFp, stageQ /*, gain, rGain*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n return alpha / (2 * kVar);\n },\n },\n highpass: {\n c2: function (cGov /*, stageFp, stageQ, gain, rGain*/) {\n return cGov;\n },\n c3: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n return cGov / gain;\n },\n r1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let alpha = 1 / stageQ;\n let kVar = stageFp * 2 * Math.PI * cGov;\n return alpha / (kVar * (2 + 1 / gain));\n },\n r2: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let alpha = 1 / stageQ;\n let kVar = stageFp * 2 * Math.PI * cGov;\n return (gain * (2 + 1 / gain)) / (alpha * kVar);\n },\n c12: function (cGov /*, stageFp, stageQ, gain, rGain*/) {\n return cGov;\n },\n c13: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n return cGov / gain;\n },\n r11: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let alpha = 1 / stageQ;\n let kVar = stageFp * 2 * Math.PI * cGov;\n return alpha / (kVar * (2 + 1 / gain));\n },\n r12: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let alpha = 1 / stageQ;\n let kVar = stageFp * 2 * Math.PI * cGov;\n return (gain * (2 + 1 / gain)) / (alpha * kVar);\n },\n },\n bandpass: {\n //TODO - Breakdown bandpassMFBFeedback into what each component needs\n c2: function (cGov /*, stageFp, stageQ, gain, rGain*/) {\n return cGov;\n },\n r1: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n let r1PlusR2 = 1 / (2 * q0 * cGov * w0);\n return r1PlusR2 / b;\n },\n r2: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n let r1PlusR2 = 1 / (2 * q0 * cGov * w0);\n let r2 = r1PlusR2 / (1 - b);\n r2 = r2 > 1e11 ? INFINITY : r2;\n return r2;\n },\n r5: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let { q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n return (2 * q0) / w0 / cGov;\n },\n c12: function (cGov /*, stageFp, stageQ, gain, rGain*/) {\n return cGov;\n },\n r11: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n let r1PlusR2 = 1 / (2 * q0 * cGov * w0);\n return r1PlusR2 / b;\n },\n r12: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n let r1PlusR2 = 1 / (2 * q0 * cGov * w0);\n let r2 = r1PlusR2 / (1 - b);\n r2 = r2 > 1e11 ? INFINITY : r2;\n return r2;\n },\n r15: function (cGov, stageFp, stageQ, gain /*, rGain*/) {\n let { q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n return (2 * q0) / w0 / cGov;\n },\n },\n },\n passiveInductor: {\n lowpass: {\n r1: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = cGov / 2 + rGainOrCCross;\n return 1 / (w0 * stageQ * 2 * equivC);\n },\n r2: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = cGov / 2 + rGainOrCCross;\n return 1 / (w0 * stageQ * 2 * equivC);\n },\n l1: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = cGov / 2 + rGainOrCCross;\n return 1 / (w0 * w0 * 2 * equivC);\n },\n l2: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = cGov / 2 + rGainOrCCross;\n return 1 / (w0 * w0 * 2 * equivC);\n },\n },\n // highpass: {\n // r1: function (cGov, stageFp, stageQ, gain, rGain) {\n // let w0 = stageFp * 2 * Math.PI;\n // return 1 / (w0 * stageQ * cGov);\n // },\n // r3: function (cGov, stageFp, stageQ, gain, rGain) {\n // return determineR3(gain, rGain);\n // },\n // r4: function (cGov, stageFp, stageQ, gain, rGain) {\n // return determineR4(gain, rGain);\n // },\n // l1: function (cGov, stageFp, stageQ, gain, rGain) {\n // let w0 = stageFp * 2 * Math.PI;\n // return 1 / (w0 * w0 * cGov);\n // }\n // }\n bandpass: {\n r1: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = cGov / 2 + rGainOrCCross;\n return stageQ / (w0 * 2 * equivC);\n },\n r2: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = cGov / 2 + rGainOrCCross;\n return stageQ / (w0 * 2 * equivC);\n },\n l3: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = cGov / 2 + rGainOrCCross;\n return 1 / (w0 * w0 * equivC);\n },\n },\n },\n },\n};\n\nexport let componentCalculators = {\n singleEnded: {\n passiveFirstOrder: {\n lowpass: function (cGov, stageFp /*, stageQ, gain, rGainOrCCross*/) {\n let rGov = 1 / (stageFp * 2 * Math.PI * cGov);\n return { c1: cGov, r1: rGov };\n },\n highpass: function (cGov, stageFp /*, stageQ, gain, rGainOrCCross*/) {\n let rGov = 1 / (stageFp * 2 * Math.PI * cGov);\n return { c1: cGov, r1: rGov };\n },\n },\n activeFirstOrder: {\n lowpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let rGov = 1 / (stageFp * 2 * Math.PI * cGov);\n if (gain > 0) {\n let { r3, r4 } = _determineGainResistors(rGainOrCCross, gain);\n return { c1: cGov, r1: rGov, r3, r4 };\n } else {\n return { c1: cGov, r1: rGov / Math.abs(gain), r2: rGov };\n }\n },\n highpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let rGov = 1 / (stageFp * 2 * Math.PI * cGov);\n if (gain > 0) {\n let { r3, r4 } = _determineGainResistors(rGainOrCCross, gain);\n return { c1: cGov, r1: rGov, r3, r4 };\n } else {\n return { c1: cGov, r1: rGov, r2: rGov * Math.abs(gain) };\n }\n },\n },\n passiveInductor: {\n lowpass: function (cGov, stageFp, stageQ /*, gain, rGainOrCCross*/) {\n let w0 = stageFp * 2 * Math.PI;\n let r1 = 1 / (w0 * stageQ * cGov);\n let l1 = 1 / (w0 * w0 * cGov);\n return { c1: cGov, r1, l1 };\n },\n // highpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n // let w0 = stageFp * 2 * Math.PI;\n // let r1 = 1 / (w0 * stageQ * cGov);\n // let l1 = 1 / (w0 * w0 * cGov)\n // return {c1: cGov, r1, l1};\n // },\n bandpass: function (cGov, stageFp, stageQ /*, gain, rGainOrCCross*/) {\n let w0 = stageFp * 2 * Math.PI;\n let r1 = stageQ / (w0 * cGov);\n let l1 = 1 / (w0 * w0 * cGov);\n return { c1: cGov, r1, l1 };\n },\n },\n activeInductor: {\n lowpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let { r3, r4 } = _determineGainResistors(rGainOrCCross, gain);\n let w0 = stageFp * 2 * Math.PI;\n let r1 = 1 / (w0 * stageQ * cGov);\n let l1 = 1 / (w0 * w0 * cGov);\n return { c1: cGov, r1, r3, r4, l1 };\n },\n // highpass: function (cGov, stageFp, stageQ, gain, rGain) {\n // let w0 = stageFp * 2 * Math.PI;\n // let r1 = 1 / (w0 * stageQ * cGov);\n // let l1 = 1 / (w0 * w0 * cGov)\n // return {c1: cGov, r1, l1};\n // },\n bandpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let { r3, r4 } = _determineGainResistors(rGainOrCCross, gain);\n let w0 = stageFp * 2 * Math.PI;\n let r1 = stageQ / (w0 * cGov);\n let l1 = 1 / (w0 * w0 * cGov);\n return { c1: cGov, r1, r3, r4, l1 };\n },\n },\n multipleFeedback: {\n // Weirdness - cGov for this circuit is c2, FW implementation starts with initial value and uses E24 to bias all the values.\n lowpass: function (cGov, stageFp, stageQ, gain /*, rGainOrCCross*/) {\n let { r3, r4 } = { r3: 0, r4: INFINITY };\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n let c1 = (4 / (alpha * alpha)) * (gain + 1) * cGov;\n let r1 = alpha / (2 * gain * kVar);\n let r2 = alpha / (2 * (gain + 1) * kVar);\n let r5 = alpha / (2 * kVar);\n return { c1, c2: cGov, r1, r2, r3, r4, r5 };\n },\n highpass: function (cGov, stageFp, stageQ, gain /*, rGainOrCCross*/) {\n let { r3, r4 } = { r3: 0, r4: INFINITY };\n let c2 = cGov;\n let c3 = cGov / gain;\n\n let alpha = 1 / stageQ;\n let kVar = stageFp * 2 * Math.PI * cGov;\n\n let r1 = alpha / (kVar * (2 + 1 / gain));\n let r2 = (gain * (2 + 1 / gain)) / (alpha * kVar);\n return { c1: cGov, c2, c3, r1, r2, r3, r4 };\n },\n bandpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let { b, q0, g } = _bandpassMFBFeedback(stageQ, gain);\n let { r3, r4 } = _determineGainResistors(rGainOrCCross, g);\n let w0 = stageFp * 2 * Math.PI;\n let r1PlusR2 = 1 / (2 * q0 * cGov * w0);\n let c2 = cGov;\n let r1 = r1PlusR2 / b;\n let r2 = r1PlusR2 / (1 - b);\n let r5 = (2 * q0) / (w0 * cGov);\n r2 = r2 > 1e11 ? INFINITY : r2;\n //TODO: Derive R3 and R4 from rgain & gain=1/k\n return { c1: cGov, c2, r1, r2, r3, r4, r5 };\n },\n },\n sallenKey: {\n highpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let { r3, r4 } = _determineGainResistors(rGainOrCCross, gain);\n var k = gain < 1.0001 ? 1.0001 : gain;\n var a = stageQ * stageQ * (1 - k) * (1 - k);\n var b = 4 * stageQ * stageQ * (1 - k) - 1;\n var c = 4 * stageQ * stageQ;\n let resistorRatio = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n let resistorBaseValue = 1 / (2 * Math.PI * stageFp * cGov);\n let c2 = cGov;\n let r1 = resistorBaseValue / Math.sqrt(resistorRatio);\n let r2 = resistorBaseValue * Math.sqrt(resistorRatio);\n return { c1: cGov, c2, r1, r2, r3, r4 };\n },\n lowpassV2: function (cGov, stageFp, stageQ, gain, rGainOrCCross, capESeries) {\n let { r3, r4 } = _determineGainResistors(rGainOrCCross, gain);\n let ratios = _sallenKeyLPFResAndCapRatios(gain, stageQ, cGov, capESeries);\n let c1 = cGov;\n let c2 = cGov / ratios.capRatio;\n let squareRootOfR1R2 = 1 / (2 * Math.PI * Math.sqrt(c1 * c2) * stageFp);\n let r2 = Math.sqrt(ratios.resRatio * squareRootOfR1R2 * squareRootOfR1R2);\n let r1 = r2 / ratios.resRatio;\n return { c1, c2, r1, r2, r3, r4 };\n },\n //This was the original algorithm to calculate Sallen Key components. It prioritized low noise gain over everything else.\n //Unfortunately it resulted wide R1/R2 spacing at low gains and low Q's: i.e. the most common settings. For example for\n //Gain=1, Q=0.707, R2/R1 = 17.9.\n //This wide spacing meant that in order for a customer to have decent input impedance (high enough R1), then R2 had to be quite\n //large, resulting in a worse noise result than if we had slightly worse noise gain, but closer resistor spacing.\n lowpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let { r3, r4 } = _determineGainResistors(rGainOrCCross, gain);\n if (stageQ * stageQ * (gain * gain - 8 * gain + 16) < 2 || gain > 4) {\n //This case covers when result.r1/result.r2 < 1/2 with caps equal. In this case we'll set caps equal.\n let a = 1;\n let b = 2 * (2 - gain) - 1 / (stageQ * stageQ);\n let d = (2 - gain) * (2 - gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * cGov);\n let c2 = cGov;\n let r1 = rMultAvg / Math.sqrt(resistorRatio);\n let r2 = rMultAvg * Math.sqrt(resistorRatio);\n return { c1: cGov, c2, r1, r2, r3, r4 };\n } else if (13 * stageQ - 10 * stageQ * gain > Math.sqrt(20)) {\n // else if result.r1/result.r2 > 1/2 with result.c1 = 10xC2, then set result.r1=result.r2\n let a = 4;\n let b = 4 * (1 - gain) - 1 / (stageQ * stageQ);\n let d = (1 - gain) * (1 - gain);\n let capacitorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let c2 = cGov * capacitorRatio;\n let r2 = 1 / (2 * Math.PI * stageFp * cGov * Math.sqrt(capacitorRatio));\n let r1 = r2;\n return { c1: cGov, c2, r1, r2, r3, r4 };\n } else {\n // if the other two conditions are not met, this means result.r1/result.r2 should be less 1/2 with result.c1 = 10xC2\n let a = 1;\n let b = 2 * (11 - 10 * gain) - 10 / (stageQ * stageQ);\n let d = (11 - 10 * gain) * (11 - 10 * gain);\n let resistorRatio = (-b + Math.sqrt(b * b - 4 * a * d)) / (2 * a);\n let rMultAvg = 1 / (2 * Math.PI * stageFp * cGov * Math.sqrt(0.1));\n let c2 = cGov / 10;\n let r1 = rMultAvg / Math.sqrt(resistorRatio);\n let r2 = rMultAvg * Math.sqrt(resistorRatio);\n return { c1: cGov, c2, r1, r2, r3, r4 };\n }\n },\n },\n },\n differential: {\n passiveFirstOrder: {\n lowpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let equivC = cGov / 2 + rGainOrCCross;\n let rGov = 1 / (stageFp * 2 * Math.PI * 2 * equivC);\n return { c1: cGov, c2: cGov, c3: rGainOrCCross, r1: rGov, r2: rGov };\n },\n highpass: function (rGov, stageFp, stageQ, gain, rGainOrRCross) {\n // Confusing naming - rGov and rGainOrRCross passed in would be the function's cGov and rGainOrCCross\n let equivR = 1 / (1 / (2 * rGov) + 1 / rGainOrRCross);\n let cGov = 2 / (stageFp * 2 * Math.PI * equivR);\n return { c1: cGov, c2: cGov, r1: rGov, r2: rGov, r3: rGainOrRCross };\n },\n },\n activeFirstOrder: {\n lowpass: function (cGov, stageFp, stageQ, gain /*, rGainOrCCross*/) {\n let rGov = 1 / (stageFp * 2 * Math.PI * cGov);\n return { c1: cGov, c2: cGov, r1: rGov / gain, r2: rGov, r3: rGov / gain, r4: rGov };\n },\n highpass: function (cGov, stageFp, stageQ, gain /*rGainOrCCross*/) {\n let rGov = 1 / (stageFp * 2 * Math.PI * cGov);\n return { c1: cGov, c2: cGov, r1: rGov, r2: rGov * gain, r3: rGov, r4: rGov * gain };\n },\n },\n multipleFeedback: {\n // Weirdness - cGov for this circuit is c2, FW implementation starts with initial value and uses E24 to bias all the values.\n lowpass: function (cGov, stageFp, stageQ, gain /*, rGainOrCCross*/) {\n let w0 = stageFp * 2 * Math.PI;\n let alpha = 1 / stageQ;\n let kVar = w0 * cGov;\n let c1 = (4 / (alpha * alpha)) * (gain + 1) * cGov;\n let r1 = alpha / (2 * gain * kVar);\n let r2 = alpha / (2 * (gain + 1) * kVar);\n let r5 = alpha / (2 * kVar);\n return { c1, c2: cGov, c11: c1, c12: cGov, r1, r2, r5, r11: r1, r12: r2, r15: r5 };\n },\n highpass: function (cGov, stageFp, stageQ, gain /*, rGainOrCCross*/) {\n let c2 = cGov;\n let c3 = cGov / gain;\n\n let alpha = 1 / stageQ;\n let kVar = stageFp * 2 * Math.PI * cGov;\n\n let r1 = alpha / (kVar * (2 + 1 / gain));\n let r2 = (gain * (2 + 1 / gain)) / (alpha * kVar);\n return { c1: cGov, c2, c3, c11: cGov, c12: c2, c13: c3, r1, r2, r11: r1, r12: r2 };\n },\n bandpass: function (cGov, stageFp, stageQ, gain /*, rGainOrCCross*/) {\n let { b, q0 } = _bandpassMFBFeedback(stageQ, gain);\n let w0 = stageFp * 2 * Math.PI;\n let r1PlusR2 = 1 / (2 * q0 * cGov * w0);\n let c2 = cGov;\n let r1 = r1PlusR2 / b;\n let r2 = r1PlusR2 / (1 - b);\n let r5 = (2 * q0) / (w0 * cGov);\n r2 = r2 > 1e11 ? INFINITY : r2;\n //TODO: Derive R3 and R4 from rgain & gain=1/k\n return { c1: cGov, c2, c11: cGov, c12: c2, r1, r2, r5, r11: r1, r12: r2, r15: r5 };\n },\n },\n passiveInductor: {\n lowpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = cGov / 2 + rGainOrCCross;\n let rGov = 1 / (w0 * stageQ * 2 * equivC);\n let lGov = 1 / (w0 * w0 * 2 * equivC);\n return { c1: cGov, c2: cGov, c3: rGainOrCCross, r1: rGov, r2: rGov, l1: lGov, l2: lGov };\n },\n // highpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n // let w0 = stageFp * 2 * Math.PI;\n // let r1 = 1 / (w0 * stageQ * cGov);\n // let l1 = 1 / (w0 * w0 * cGov)\n // return {c1: cGov, r1, l1};\n // },\n bandpass: function (cGov, stageFp, stageQ, gain, rGainOrCCross) {\n let w0 = stageFp * 2 * Math.PI;\n let equivC = cGov / 2 + rGainOrCCross;\n let rGov = stageQ / (w0 * 2 * equivC);\n let lGov = 1 / (w0 * w0 * equivC);\n return { c1: cGov, c2: cGov, c3: rGainOrCCross, r1: rGov, r2: rGov, l3: lGov };\n },\n },\n },\n};\n\nexport let specsCalculatorsFromComponents = {\n singleEnded: {\n activeInductor: {\n lowpass: function (filterComponents /*, opAmpGBW*/) {\n if (!filterComponents) {\n return;\n }\n if (filterComponents.r1 && filterComponents.c1 && filterComponents.l1) {\n const r3 = filterComponents.r3 ?? 1e66;\n const r4 = filterComponents.r4 ?? 0;\n return {\n order: 2,\n fp: Math.sqrt(1 / (filterComponents.c1 * filterComponents.l1)) / (Math.PI * 2), //pole frequency\n q: (1 / filterComponents.r1) * Math.sqrt(filterComponents.l1 / filterComponents.c1), //peaking\n fz: 0, //zero frequency\n gain: 1 + r4 / r3, //in V/V\n };\n }\n return;\n },\n highpass: function (filterComponents /*, opAmpGBW*/) {\n if (!filterComponents) {\n return;\n }\n if (filterComponents.r1 && filterComponents.c1 && filterComponents.l1) {\n const r3 = filterComponents.r3 ?? 1e66;\n const r4 = filterComponents.r4 ?? 0;\n return {\n order: 2,\n fp: Math.sqrt(1 / (filterComponents.c1 * filterComponents.l1)) / (Math.PI * 2), //pole frequency\n q: (1 / filterComponents.r1) * Math.sqrt(filterComponents.l1 / filterComponents.c1), //peaking\n fz: 0, //zero frequency\n gain: 1 + r4 / r3, //in V/V\n };\n }\n return;\n },\n bandpass: function (filterComponents /*, opAmpGBW*/) {\n if (!filterComponents) {\n return;\n }\n if (filterComponents.r1 && filterComponents.c1 && filterComponents.l1) {\n const r3 = filterComponents.r3 ?? 1e66;\n const r4 = filterComponents.r4 ?? 0;\n return {\n order: 2,\n fp: Math.sqrt(1 / (filterComponents.c1 * filterComponents.l1)) / (Math.PI * 2), //pole frequency\n q: filterComponents.r1 * Math.sqrt(filterComponents.c1 / filterComponents.l1), //peaking\n fz: 0, //zero frequency\n gain: 1 + r4 / r3, //in V/V\n };\n }\n return;\n },\n },\n activeFirstOrder: {\n lowpass: function (filterComponents /*, opAmpGBW*/) {\n if (!filterComponents) {\n return;\n }\n if (filterComponents.r1 && filterComponents.c1) {\n const r3 = filterComponents.r3 ?? 1e66;\n const r4 = filterComponents.r4 ?? 0;\n return {\n order: 1,\n fp: 1 / (Math.PI * 2 * filterComponents.r1 * filterComponents.c1), //pole frequency\n q: 0, //peaking\n fz: 0, //zero frequency\n gain: 1 + r4 / r3, //in V/V\n };\n }\n return;\n },\n highpass: function (filterComponents /*, opAmpGBW*/) {\n if (!filterComponents) {\n return;\n }\n if (filterComponents.r1 && filterComponents.c1) {\n const r3 = filterComponents.r3 ?? 1e66;\n const r4 = filterComponents.r4 ?? 0;\n return {\n order: 1,\n fp: 1 / (Math.PI * 2 * filterComponents.r1 * filterComponents.c1), //pole frequency\n q: 0, //peaking\n fz: 0, //zero frequency\n gain: 1 + r4 / r3, //in V/V\n };\n }\n return;\n },\n },\n multipleFeedback: {\n lowpass: function (filterComponents, opAmpGBW) {\n if (\n filterComponents.c1 &&\n filterComponents.c2 &&\n filterComponents.r1 &&\n filterComponents.r2 &&\n filterComponents.r5\n ) {\n const gain = filterComponents.r5 / filterComponents.r1;\n const sqrtTerm = Math.sqrt(\n filterComponents.r2 * filterComponents.r5 * filterComponents.c1 * filterComponents.c2\n );\n const gbwMod = Math.sqrt(\n 1 + (gain * gain) / (2 * Math.PI * filterComponents.r2 * filterComponents.c2 * opAmpGBW)\n );\n return {\n order: 2,\n fp: 1 / (2 * Math.PI * sqrtTerm) / gbwMod, //pole frequency\n q:\n (1 /\n (((1 / filterComponents.c1) *\n (1 / filterComponents.r1 + 1 / filterComponents.r2 + 1 / filterComponents.r5)) /\n (1 / sqrtTerm))) *\n gbwMod, //peaking\n fz: 0, //zero frequency\n gain: gain, //in V/V\n };\n }\n return;\n },\n highpass: function (filterComponents /*, opAmpGBW*/) {\n if (\n filterComponents.c1 &&\n filterComponents.c2 &&\n filterComponents.c3 &&\n filterComponents.r1 &&\n filterComponents.r2\n ) {\n const sqrtTerm = Math.sqrt(\n filterComponents.r1 * filterComponents.r2 * filterComponents.c2 * filterComponents.c3\n );\n return {\n order: 2,\n fp: 1 / (2 * Math.PI * sqrtTerm), //pole frequency\n q:\n 1 /\n ((filterComponents.c1 + filterComponents.c2 + filterComponents.c3) /\n (filterComponents.c2 * filterComponents.c3 * filterComponents.r2 * (1 / sqrtTerm))), //peaking\n fz: 0, //zero frequency\n gain: filterComponents.c1 / filterComponents.c3, //in V/V\n };\n }\n return;\n },\n bandpass: function (filterComponents, opAmpGBW) {\n if (\n filterComponents.c1 &&\n filterComponents.c2 &&\n filterComponents.r1 &&\n filterComponents.r2 &&\n filterComponents.r5\n ) {\n const r3 = filterComponents.r3 ?? 0;\n const r4 = filterComponents.r4 ?? 1e66;\n const resOne = 1 / (1 / filterComponents.r1 + 1 / filterComponents.r2);\n const resTwo = filterComponents.r5;\n const w0 = 1 / Math.sqrt(resOne * resTwo * filterComponents.c1 * filterComponents.c2);\n const fp = w0 / 2 / Math.PI;\n const q0 = (1 / 2) * Math.sqrt(resTwo / resOne);\n const a = resOne / filterComponents.r1;\n const gain0 = ((1 / 2) * a * resTwo) / resOne;\n let q;\n let gain;\n let k;\n let alpha;\n if (r4 > 1e20) {\n q = q0;\n gain = gain0;\n k = 0;\n } else {\n k = r3 / (r3 + r4);\n alpha = k / (1 - k);\n q = q0 / (1 - 2 * alpha * q0 * q0);\n gain = (gain0 * q) / q0 / (1 - k);\n }\n const epsilon = ((2 * q0) / (opAmpGBW / fp)) * (1 / ((1 - k) * (1 - k)));\n const errorplusOne = Math.sqrt(1 + epsilon);\n return {\n order: 2,\n fp: fp / errorplusOne, //pole frequency\n q: q / errorplusOne, //peaking\n fz: 0, //zero frequency\n gain: gain, //in V/V\n };\n }\n return;\n },\n },\n sallenKey: {\n lowpass: function (filterComponents, opAmpGBW) {\n if (!filterComponents) {\n return;\n }\n if (filterComponents.r1 && filterComponents.r2 && filterComponents.c1 && filterComponents.c2) {\n const r3 = filterComponents.r3 ?? 1e66;\n const r4 = filterComponents.r4 ?? 0;\n const gain = 1 + r4 / r3;\n const sqrtTerm = Math.sqrt(\n filterComponents.r1 * filterComponents.r2 * filterComponents.c1 * filterComponents.c2\n );\n const d1 = filterComponents.r1 * filterComponents.c2;\n const d2 = filterComponents.r2 * filterComponents.c2;\n const d3 = filterComponents.r1 * filterComponents.c1;\n const gbwMod = Math.sqrt(\n 1 + (gain * gain) / (2 * Math.PI * filterComponents.r2 * filterComponents.c2 * opAmpGBW)\n );\n return {\n order: 2,\n fp: 1 / (2 * Math.PI * sqrtTerm) / gbwMod, //pole frequency\n q: (sqrtTerm / (d1 + d2 + d3 * (1 - gain))) * gbwMod, //peaking\n fz: 0, //zero frequency\n gain: gain, //in V/V\n };\n }\n return;\n },\n highpass: function (filterComponents /*, opAmpGBW*/) {\n if (!filterComponents) {\n return;\n }\n if (filterComponents.r1 && filterComponents.r2 && filterComponents.c1 && filterComponents.c2) {\n const r3 = filterComponents.r3 ?? 1e66;\n const r4 = filterComponents.r4 ?? 0;\n const gain = 1 + r4 / r3;\n const sqrtTerm = Math.sqrt(\n filterComponents.r1 * filterComponents.r2 * filterComponents.c1 * filterComponents.c2\n );\n const d1 = filterComponents.r1 * filterComponents.c2;\n const d2 = filterComponents.r2 * filterComponents.c2;\n const d3 = filterComponents.r1 * filterComponents.c1;\n return {\n order: 2,\n fp: 1 / (2 * Math.PI * sqrtTerm), //pole frequency\n q: sqrtTerm / (d1 + d3 + d2 * (1 - gain)), //peaking\n fz: 0, //zero frequency\n gain: gain, //in V/V\n };\n }\n return;\n },\n },\n },\n differential: {},\n};\n\n/*\nlet _fromR3 = function(r3, gain) {\n if (gain >= 1.0001) {\n return r3 * gain;\n } else if (gain < 1.0001 && gain > 0.9999) {\n return INFINITY; //case of no resistor\n } else {\n return;\n }\n}\nlet _fromR4 = function(r4, gain) {\n if (gain >= 1.0001) {\n return r4 * (gain + 1);\n } else if (gain < 1.0001 && gain > 0.9999) {\n return INFINITY; //case of no resistor\n } else {\n return;\n }\n}\n*/\nlet _determineR3 = function (gain, rGain) {\n const RSMALL_COMP_LIMIT = 1;\n if (gain >= 1.0001) {\n let r3 = rGain / gain;\n if (r3 < RSMALL_COMP_LIMIT) {\n r3 = RSMALL_COMP_LIMIT;\n }\n return r3;\n } else if (gain < 1.0001 && gain > 0.9999) {\n return INFINITY; //case of no resistor\n } else {\n return;\n }\n};\nlet _determineR4 = function (gain, rGain) {\n const RSMALL_COMP_LIMIT = 1;\n if (gain >= 1.0001) {\n let r3 = rGain / gain;\n let r4 = r3 / gain;\n //make sure r3 value stays reasonable (at least 1 ohm)\n if (r3 < RSMALL_COMP_LIMIT) {\n r4 = (r4 * RSMALL_COMP_LIMIT) / r3;\n }\n return r4;\n } else if (gain < 1.0001 && gain > 0.9999) {\n return 0;\n } else {\n //error gain should never be less than 1\n return;\n }\n};\n\nlet _determineGainResistors = function (r3plusr4, gain) {\n const RSMALL_COMP_LIMIT = 1;\n var r3, r4;\n\n if (gain >= 1.0001) {\n r3 = r3plusr4 / gain;\n r4 = r3plusr4 - r3;\n //make sure r3 value stays reasonable (at least 1 ohm)\n if (r3 < RSMALL_COMP_LIMIT) {\n r4 = (r4 * RSMALL_COMP_LIMIT) / r3;\n r3 = RSMALL_COMP_LIMIT;\n }\n } else if (gain < 1.0001 && gain > 0.9999) {\n r3 = INFINITY; //case of no resistor\n r4 = 0;\n } else {\n //error gain should never be less than 1\n r3 = 0;\n r4 = INFINITY;\n }\n\n return { r3: r3, r4: r4 };\n};\n\nlet _bandpassMFBFeedback = function (stageQ, gain) {\n let a = gain / (2 * stageQ * stageQ);\n if (stageQ < 10 && a < 1) {\n return { q0: stageQ, b: a, g: 0 };\n } else {\n {\n //According to Van Valkenburg textbook, this is close to an optimal at 1.5,\n //Paul Fleischer paper indicates something slightly higher might be better\n //Yet my experiments indicate higher numbers are better still for lowest tolerance issues.\n //Only reason I haven't set it higher is because the ratio between R1 and R2 gets to be really big. Choosing 5 keeps the ratio at 100.\n var qHat = 5;\n let q0 = 0;\n if (a < 1) {\n q0 = qHat;\n } else {\n let aMax = 0.9999999999;\n q0 =\n (-(aMax + gain) + Math.sqrt((aMax + gain) * (aMax + gain) - 8 * aMax * aMax * stageQ * stageQ)) /\n (-4 * aMax * stageQ);\n }\n let alpha = (1 / (2 * q0 * q0)) * (1 - q0 / stageQ);\n let k = alpha / (1 + alpha);\n let h = gain * (q0 / stageQ) * (1 - k);\n let b = h / 2 / (q0 * q0);\n return { q0: q0, b: b, g: 1 / k };\n }\n }\n};\n\n/*************************************** Sallen Key Lowpass Formulas *********************/\n//All of these formulas come from resolving the Q formula:\n// Q = sqrt(R1 R2 C1 C2) / (R1C2 + R2C2 + R1C1 (1-K))\n// down to something with resRatio = R2/R1, and capRatio = C1/C2\n// Q = sqrt(capRatio * resRatio) / (1 + resRatio + capRatio(1-K))\n\n//Computes Q for a Sallen Key Lowpass, given a resistor ratio (R2/R1), capacitor ratio (C1/C2), and gain (1+R4/R3)\nfunction _sallenKeyLowPassQ(resRatio, capRatio, gain) {\n let numerator = Math.sqrt(resRatio * capRatio);\n let denominator = 1 + resRatio + capRatio * (1 - gain);\n if (denominator <= 0) {\n return INFINITY;\n } else {\n return numerator / denominator;\n }\n}\n\n//Computes resistor ratio (R2/R1) for a Sallen Key Lowpass, given a capacitor ratio (C1/C2), gain (1+R4/R3), and Q\n//The ugly math comes from solving our standard formula:\n// Q = sqrt(capRatio * resRatio) / (1 + resRatio + capRatio(1-K))\n// for resRatio. (I used Wolfram Alpha to do it for me.)\nfunction _sallenKeyLowPassResistorRatio(capRatio, gain, q) {\n let capRatioSquared = capRatio * capRatio;\n let qSquared = q * q;\n let underSquareRoot = 4 * capRatioSquared * qSquared * (gain - 1) + capRatioSquared - 4 * qSquared * capRatio;\n if (underSquareRoot < 0) {\n return NaN;\n }\n let numerator = 2 * capRatio * qSquared * (gain - 1) + capRatio - 2 * qSquared + Math.sqrt(underSquareRoot);\n let denominator = 2 * qSquared;\n\n if (denominator <= 0) {\n return NaN;\n } else {\n return numerator / denominator;\n }\n}\n\n//Computes capacitor ratio (C1/C2) for a Sallen Key Lowpass, given a resistor ratio (R2/R1), gain (1+R4/R3), and Q\n//The ugly math comes from solving our standard formula:\n// Q = sqrt(capRatio * resRatio) / (1 + resRatio + capRatio(1-K))\n// for capRatio. (I used Wolfram Alpha to do it for me.)\nfunction _sallenKeyLowPassCapacitorRatio(resRatio, gain, q) {\n let resRatioSquared = resRatio * resRatio;\n let qSquared = q * q;\n let answer;\n if (gain === 1) {\n let numerator = qSquared * (resRatioSquared + 2 * resRatio + 1);\n let denominator = resRatio;\n answer = numerator / denominator;\n } else {\n let underSquareRoot =\n 4 * resRatioSquared * qSquared * (gain - 1) + resRatioSquared - 4 * qSquared * resRatio * (gain - 1);\n if (underSquareRoot < 0) {\n return NaN;\n }\n let numerator = 2 * qSquared * (gain - 1) * (resRatio + 1) + resRatio + underSquareRoot;\n let denominator = 2 * qSquared * (gain * gain - 2 * gain + 1);\n answer = numerator / denominator;\n }\n\n if (answer <= 0) {\n return NaN;\n } else {\n return answer;\n }\n}\n\n// Calculates a good resistor and capacitor ratio (C1/C2) for a given Q and gain\n// If it's possible to get a resistor ratio between 1 & 12 when caps are equal, do that.\n// If it's possible to get a resistor ration between 1 & 6 when capratio is 10, do that.\n// Otherwise return solution where:\n// a) cap ratio allows for a perfect E series match\n// b) resistor ratio is close to 2\n// capESeries options: 'E6' | 'E12' | 'E24' | 'E48' | 'E96', 'ideal'\nfunction _sallenKeyLPFResAndCapRatios(gain, q, c1, capESeries) {\n //First check if we can get matched capacitors with a 1x to 12x resistor ratio\n //We let the resistor ratio go all the way up to 12x in this case because\n //C1 wants to be the same or smaller than C2 only at high gains, which is also means high sensitivity\n //Designs where C1=C2 have lower capacitor mismatch sensitivity than those where C1= qWith12ResRatio) {\n let resRatio = _sallenKeyLowPassResistorRatio(capRatio, gain, q);\n return {\n resRatio: resRatio,\n capRatio: capRatio,\n };\n }\n\n //Now do the same, but with capratio of 10 and up to a resistor ratio of 6\n capRatio = 10;\n qWithMatchedRs = _sallenKeyLowPassQ(0.95, capRatio, gain);\n let qWith6ResRatio = _sallenKeyLowPassQ(6, capRatio, gain);\n if (q <= qWithMatchedRs && q >= qWith6ResRatio) {\n let resRatio = _sallenKeyLowPassResistorRatio(capRatio, gain, q);\n return {\n resRatio: resRatio,\n capRatio: capRatio,\n };\n }\n\n //Otherwise find a solution where resRatio is close to 2 and we can get a good capacitor E series match\n let resRatioRoughDraft = 2;\n let capRatioRoughDraft = _sallenKeyLowPassCapacitorRatio(resRatioRoughDraft, gain, q);\n if (capESeries === 'ideal') {\n return {\n resRatio: resRatioRoughDraft,\n capRatio: capRatioRoughDraft,\n };\n }\n //Assume C1 is already normalized to the preferred series\n let c2RoughDraft = c1 / capRatioRoughDraft;\n if (capESeries === undefined) {\n //Default e series matches Filter Wizard's RC slider granularity\n capESeries = 'E24';\n }\n //Figure out C2 in the ESeries that gets us closest to the desired cap ratio\n let c2 = ESeries.normalizeToPreferredSeries(c2RoughDraft, capESeries);\n capRatio = c1 / c2;\n //Now recalculate resistor ratio with the cap ratio we just found. Resistor ratio will no longer be exactly 2 - that's fine.\n //If resistors were able to be ideal values, then our Q will be exact for the given E series capacitors.\n //Of course resistors have their own E series, but generally it's more granular than the caps, so we have a better shot at\n //getting the desired Q value.\n let resRatio = _sallenKeyLowPassResistorRatio(capRatio, gain, q);\n return {\n resRatio: resRatio,\n capRatio: capRatio,\n };\n}\n","//import e from 'express';\n\nlet ampStatus = {\n preRelease: '1',\n notRecommendedForNewDesigns: '4',\n lastTimeBuy: '5',\n obsolete: '6',\n};\n\nexport function reasonsOpampMarginal(limits, opAmp, applyAdditionalCriteria) {\n let reasons = [];\n let recommendedGBW = limits.maxGbw;\n let recommendedRoutOverGBW = limits.minROutOverGBW;\n let maxiBias = limits.minIBias;\n\n if (recommendedGBW > parseFloat(opAmp.gbw)) {\n reasons.push({ messageId: 'gbw-low' });\n }\n\n if (opAmp.status === ampStatus.preRelease) {\n reasons.push({ messageId: 'prerelease' });\n } else if (opAmp.status === ampStatus.notRecommendedForNewDesigns) {\n reasons.push({ messageId: 'not-recommended-new-designs' });\n } else if (opAmp.status === ampStatus.lastTimeBuy) {\n reasons.push({ messageId: 'last-time-buy' });\n }\n\n let routOverGBW = parseFloat(opAmp.rOut) / parseFloat(opAmp.gbw);\n if (recommendedRoutOverGBW < routOverGBW || polesZeroesMarginal(limits, opAmp)) {\n reasons.push({ messageId: 'rout-high' });\n }\n\n if (opAmp.iBias > maxiBias) {\n reasons.push({ messageId: 'ibias_high' });\n }\n\n if (typeof applyAdditionalCriteria === 'function') {\n if (applyAdditionalCriteria(opAmp) === 'allowed') {\n reasons.push({ messageId: 'caller-request' });\n }\n }\n\n return reasons;\n}\n\n// The following function flags opamps with poles that are too close to the frequency range of interest.\n// Poles near the operating region can result in strange response curves.\nexport function polesZeroesMarginal(limits, opAmp) {\n let result = false;\n const FUDGE_FACTOR = 10;\n if ('polesZeroes' in opAmp) {\n let minPole = opAmp.polesZeroes.p.find((value) => {\n return value > 10;\n });\n result = (opAmp.rOut * FUDGE_FACTOR) / minPole > limits.minROutOverGBW;\n }\n return result;\n}\n\nexport function reasonsOpampNotAllowed(posVS, negVS, limits, rcLimitsError, opAmp, applyAdditionalCriteria) {\n let minGbwAllowed = limits.maxGbw;\n let maxRoutoverGBW = limits.minROutOverGBW;\n let maxiBias = limits.minIBias;\n let minSlewRate = limits.maxSlewRate;\n let stabilityGain = limits.minSpecialGain;\n\n let reasons = [];\n let refV = negVS === 0 ? posVS / 2 : 0;\n let supplySpan = posVS - negVS;\n\n if (opAmp.partNumber === null || opAmp.partNumber === '') {\n reasons.push({ messageId: 'blank-opamp-name' });\n reasons.push({ messageId: 'not-available-in-database' });\n } else {\n if (rcLimitsError) {\n reasons.push({ messageId: 'components-out-of-range' });\n }\n if (opAmp.status === ampStatus.obsolete) {\n reasons.push({ messageId: 'obsolete' });\n }\n if (\n (opAmp.feedbackMethod && opAmp.feedbackMethod.indexOf('Current') > -1) ||\n (opAmp.architecture && opAmp.architecture.indexOf('Current Feedback') > -1)\n ) {\n reasons.push({ messageId: 'current-feedback-unsupported' });\n }\n if (parseFloat(opAmp.minStableGain) > stabilityGain) {\n if (!!opAmp.spiceModels && opAmp.spiceModels.compPin) {\n reasons.push({ messageId: 'under-min-stable-gain-no-cap', value: opAmp.minStableGain });\n } else {\n reasons.push({ messageId: 'under-min-stable-gain', value: opAmp.minStableGain });\n }\n }\n if (minGbwAllowed > parseFloat(opAmp.gbw)) {\n reasons.push({ messageId: 'gbw-too-low' });\n }\n\n if (supplySpan < parseFloat(opAmp.minSupplyVoltage)) {\n reasons.push({ messageId: 'supply-voltage-low' });\n } else if (supplySpan > parseFloat(opAmp.maxSupplyVoltage)) {\n reasons.push({ messageId: 'supply-voltage-high' });\n }\n if (opAmp.rOut && parseFloat(opAmp.rOut) > 0) {\n let routOverGBW = parseFloat(opAmp.rOut) / parseFloat(opAmp.gbw);\n if (maxRoutoverGBW < routOverGBW) {\n reasons.push({ messageId: 'output-impedence-high' });\n }\n } else if (!opAmp.rOut || parseFloat(opAmp.rOut) === 0) {\n let proxyRout = 0.3 / parseFloat(opAmp.supplyCurrent);\n if (maxRoutoverGBW < proxyRout / parseFloat(opAmp.gbw)) {\n reasons.push({ messageId: 'output-impedence-high' });\n }\n }\n if (parseFloat(opAmp.slewRate) < minSlewRate) {\n reasons.push({ messageId: 'slew-rate-low' });\n }\n // We'll require at least -100mV input and output headroom\n if (reasons.length === 0) {\n if (posVS - parseFloat(opAmp.inHeadroomPlus) - 0.1 <= refV) {\n reasons.push({ messageId: 'not-enough-positive-input-range' });\n } else if (posVS - parseFloat(opAmp.outHeadroomPlus) - 0.1 <= refV) {\n reasons.push({ messageId: 'not-enough-positive-output-range' });\n } else if (negVS - parseFloat(opAmp.inHeadroomMinus) + 0.1 >= refV) {\n reasons.push({ messageId: 'not-enough-negative-input-range' });\n } else if (negVS - parseFloat(opAmp.outHeadroomMinus) + 0.1 >= refV) {\n reasons.push({ messageId: 'not-enough-negative-output-range' });\n }\n }\n // Keep output voltage from getting too big with interaction of bias current and input resistors\n if (parseFloat(opAmp.iBias) > maxiBias) {\n reasons.push({ messageId: 'ibias_high' });\n }\n }\n\n if (typeof applyAdditionalCriteria === 'function') {\n if (applyAdditionalCriteria(opAmp) === 'notAllowed') {\n reasons.push({ messageId: 'caller-request' });\n }\n }\n\n return reasons;\n}\n","export function getPowerRecommendedOpAmpRequirementSpec(stopbandFrequency) {\n var specs = {\n fMultiplier: 50, //bigger is more strict: used for highpass\n allowedError: 0.05, //smaller is more strict: used lowpass and bandpass\n rOutFreqMultiplier: 3, //rout shouldn't come into play until 3x stopband\n inductorMultiplier: 5,\n dcOutputVoltageFromIBias: 0.2,\n stopbandFrequency: stopbandFrequency,\n };\n\n var result = adjustOpAmpRequirementSpecs(specs, stopbandFrequency);\n\n return result;\n}\n\nexport function getNoiseAndVoltageRangeOpAmpRequirementSpec(stopbandFrequency) {\n var specs = {\n fMultiplier: 200, //bigger is more strict: used for highpass\n allowedError: 0.02, //smaller is more strict: used lowpass and bandpass\n rOutFreqMultiplier: 5, //rout shouldn't come into play until 5x stopband\n dcOutputVoltageFromIBias: 0.2,\n stopbandFrequency: stopbandFrequency,\n inductorMultiplier: 4,\n };\n\n var result = adjustOpAmpRequirementSpecs(specs, stopbandFrequency);\n\n return result;\n}\n\nexport function getAllowedOpAmpRequirementSpec(stopbandFrequency) {\n var specs = {\n fMultiplier: 5, //bigger is more strict: used for highpass\n allowedError: 0.2, //Don't make this 0.5 or larger. In high speed cases, gets multiplied by 2, then low pass first order chokes when 1 or higher.\n rOutFreqMultiplier: 1, //rout shouldn't come into play until 1x stopband\n inductorMultiplier: 3,\n dcOutputVoltageFromIBias: 5,\n stopbandFrequency: stopbandFrequency,\n };\n\n var result = adjustOpAmpRequirementSpecs(specs, stopbandFrequency);\n\n return result;\n}\n\nfunction adjustOpAmpRequirementSpecs(specs, stopbandFrequency) {\n /*If getting to top end of tool, allow more leeway*/\n if (stopbandFrequency > 1e6 && stopbandFrequency < 10e6) {\n specs.fMultiplier = specs.fMultiplier / 1.5;\n specs.allowedError = specs.allowedError * 1.5;\n specs.rOutFreqMultiplier = specs.rOutFreqMultiplier / 2;\n }\n if (stopbandFrequency >= 10e6) {\n specs.fMultiplier = specs.fMultiplier / 5;\n specs.allowedError = specs.allowedError * 2; //Be careful making this higher than 2. If allowedError * this number >= 1, then low pass first order chokes.\n specs.rOutFreqMultiplier = specs.rOutFreqMultiplier / 10;\n }\n\n return specs;\n}\n","const resistorNoiseBase = 4.07e-9;\n\nexport function getNoiseOpAmpTopPick(opAmpsList, noiseResistance) {\n var result = null;\n var opAmps = [];\n if (opAmpsList.length === 1) {\n opAmps.push(opAmpsList[0]);\n } else {\n opAmps = _getLowNoiseOpAmps(opAmpsList, noiseResistance);\n }\n\n if (opAmps.length > 1) {\n result = _getLowestPowerOpAmpFromList(opAmps);\n } else {\n result = opAmps[0];\n }\n\n return result;\n}\n\nexport function getPowerOpAmpTopPick(opAmpsList) {\n var result = null;\n if (opAmpsList.length === 1) {\n result = opAmpsList[0];\n } else {\n result = _getLowestPowerOpAmpFromList(opAmpsList);\n }\n\n return result;\n}\n\nexport function getVoltageRangeOpAmpTopPick(opAmpsList, totalGain, vsMinus, vsPlus) {\n var result = null;\n if (opAmpsList.length === 1) {\n result = opAmpsList[0];\n } else {\n result = _getBiggestRoomFromList(opAmpsList, vsPlus, vsMinus, totalGain);\n }\n\n return result;\n}\n\n// Noise\nfunction _getLowNoiseOpAmps(opAmpsList, noiseResistance) {\n var rNoise = Math.sqrt(noiseResistance / 1000) * resistorNoiseBase;\n var lowNoiseOpAmps = opAmpsList.filter((item) => {\n let vNoise = item.vNoise;\n let iNoiseV = noiseResistance * item.iNoise;\n let opAmpNoise = Math.sqrt(vNoise * vNoise + iNoiseV * iNoiseV);\n return 2.5 * opAmpNoise < rNoise;\n });\n\n if (lowNoiseOpAmps.length === 0) {\n let opAmpNoiseArray = opAmpsList.map((item) => {\n let vNoise = item.vNoise;\n let iNoiseV = noiseResistance * item.iNoise;\n let opAmpNoise = Math.sqrt(vNoise * vNoise + iNoiseV * iNoiseV);\n return opAmpNoise;\n });\n\n let lowestNoise = Math.min.apply(Math, opAmpNoiseArray);\n for (let i = opAmpNoiseArray.length - 1; i >= 0; i--) {\n if (opAmpNoiseArray[i] === lowestNoise) {\n lowNoiseOpAmps.push(opAmpsList[i]);\n break;\n }\n }\n }\n\n return lowNoiseOpAmps;\n}\n\n// Power\nfunction _getLowestPowerOpAmpFromList(opAmpsList) {\n var lowestSupplyCurrent = opAmpsList.length > 1 ? opAmpsList[0].supplyCurrent : null;\n var currentAmp = null;\n var result = null;\n\n for (var i = 0; i < opAmpsList.length; i++) {\n currentAmp = opAmpsList[i];\n\n if (currentAmp.supplyCurrent < lowestSupplyCurrent || currentAmp.supplyCurrent === lowestSupplyCurrent) {\n lowestSupplyCurrent = currentAmp.supplyCurrent;\n result = currentAmp;\n }\n }\n\n return result;\n}\n\n// Voltage Range\nfunction _getBiggestRoomFromList(opAmpsList, vsPlus, vsMinus, totalGain) {\n if (opAmpsList.length === 0) {\n return null;\n }\n\n var firstOpAmpInputRoom = _getInputRoom(vsPlus, vsMinus, opAmpsList[0]);\n var firstOpAmpOutputRoom = _getOutputRoom(vsPlus, vsMinus, opAmpsList[0]);\n var biggestRoom = Math.min(firstOpAmpInputRoom, firstOpAmpOutputRoom / totalGain);\n var currentAmp = null;\n var result = null;\n for (var i = 0; i < opAmpsList.length; i++) {\n currentAmp = opAmpsList[i];\n\n var inputRoom = _getInputRoom(vsPlus, vsMinus, opAmpsList[i]);\n var outputRoom = _getOutputRoom(vsPlus, vsMinus, opAmpsList[i]);\n var room = Math.min(inputRoom, outputRoom / totalGain);\n\n if (room >= biggestRoom) {\n biggestRoom = room;\n result = currentAmp;\n }\n }\n\n return result;\n}\n\nfunction _getInputRoom(vsPlus, vsMinus, opAmp) {\n var refV = 0;\n if (vsMinus === 0) {\n refV = vsPlus / 2;\n }\n\n var posInRoom = vsPlus - opAmp.inHeadroomPlus - refV;\n var negInRoom = refV - vsMinus + opAmp.inHeadroomMinus;\n return Math.min(posInRoom, negInRoom);\n}\n\nfunction _getOutputRoom(vsPlus, vsMinus, opAmp) {\n var refV = 0;\n if (vsMinus === 0) {\n refV = vsPlus / 2;\n }\n\n var posOutRoom = vsPlus - opAmp.outHeadroomPlus - refV;\n var negOutRoom = refV - vsMinus + opAmp.outHeadroomMinus;\n return Math.min(posOutRoom, negOutRoom);\n}\n","import { INFINITY as INF } from './internals';\nimport { reasonsOpampMarginal, reasonsOpampNotAllowed } from './opamp-ratings';\nimport {\n getPowerRecommendedOpAmpRequirementSpec,\n getNoiseAndVoltageRangeOpAmpRequirementSpec,\n getAllowedOpAmpRequirementSpec,\n} from './limit-specs';\nimport { getNoiseOpAmpTopPick, getPowerOpAmpTopPick, getVoltageRangeOpAmpTopPick } from './opamp-top-pick';\n\nexport const INFINITY = INF;\n\nexport function evaluateOpAmps(opAmps, circuits, vsPlus, vsMinus, optimization, stopbandFrequency) {\n var recommendationSpec =\n optimization === 'power'\n ? getPowerRecommendedOpAmpRequirementSpec(stopbandFrequency)\n : getNoiseAndVoltageRangeOpAmpRequirementSpec(stopbandFrequency);\n var allowedSpec = getAllowedOpAmpRequirementSpec(stopbandFrequency);\n var recommendedLimits = _getOverallLimits(circuits, recommendationSpec);\n var allowedLimits = _getOverallLimits(circuits, allowedSpec);\n\n return opAmps.map((amp) => {\n let reasonsNotAllowed = reasonsOpampNotAllowed(vsPlus, vsMinus, allowedLimits, false, amp);\n let reasonsMarginal = reasonsNotAllowed.length === 0 ? reasonsOpampMarginal(recommendedLimits, amp) : [];\n return reasonsNotAllowed.length > 0\n ? { partNumber: amp.partNumber, status: 'notAllowed', reasons: reasonsNotAllowed }\n : reasonsMarginal.length > 0\n ? { partNumber: amp.partNumber, status: 'allowed', reasons: reasonsMarginal }\n : { partNumber: amp.partNumber, status: 'recommended', reasons: [] };\n });\n}\n\nexport function getAppropriateOpAmps(\n opAmps,\n circuits,\n vsPlus,\n vsMinus,\n optimization,\n stopbandFrequency,\n applyAdditionalCriteria\n) {\n var recommendationSpec =\n optimization === 'power'\n ? getPowerRecommendedOpAmpRequirementSpec(stopbandFrequency)\n : getNoiseAndVoltageRangeOpAmpRequirementSpec(stopbandFrequency);\n var allowedSpec = getAllowedOpAmpRequirementSpec(stopbandFrequency);\n var recommendedLimits = _getOverallLimits(circuits, recommendationSpec);\n var allowedLimits = _getOverallLimits(circuits, allowedSpec);\n\n var root10 = Math.sqrt(10);\n var initialMaxCurrent = optimization === 'noise' ? 5e-3 : 10e-6;\n\n // Before we iterate, restrict the list to parts we can even consider\n const allowedList = opAmps.filter((amp) => {\n // Criterion: the circuit must work\n let reasonsNotAllowed = reasonsOpampNotAllowed(vsPlus, vsMinus, allowedLimits, false, amp, applyAdditionalCriteria);\n return reasonsNotAllowed.length === 0;\n });\n\n const recommendedList = allowedList.filter((amp) => {\n // Criterion: the circuit must work under recommended conditions\n let reasonsMarginal = reasonsOpampMarginal(recommendedLimits, amp, applyAdditionalCriteria);\n return reasonsMarginal.length === 0;\n });\n\n //Handy debug code\n // prettier-ignore\n // {\n // const originalListPartNumbers = opAmps.map(function (element) {// eslint-disable-line no-unused-vars\n // return element.partNumber;\n // });\n // const allowedListPartNumbers = allowedList.map(function(element){ // eslint-disable-line no-unused-vars\n // return element.partNumber;\n // });\n // const recommendedListPartNumbers = recommendedList.map(function(element){ // eslint-disable-line no-unused-vars\n // return element.partNumber;\n // });\n // const sortedRecommendedListBySupplyCurrent = [...recommendedList];\n // sortedRecommendedListBySupplyCurrent.sort((a,b) => {\n // return a.supplyCurrent - b.supplyCurrent;\n // });\n // const sortedRecommendedListCurrents = sortedRecommendedListBySupplyCurrent.map(function(element){ // eslint-disable-line no-unused-vars\n // return element.supplyCurrent;\n // });\n // const sortedRecommendedListPartNumbers = sortedRecommendedListBySupplyCurrent.map(function(element){ // eslint-disable-line no-unused-vars\n // return element.partNumber;\n // });\n // const dummyVariableForBreakpoint = 0; // eslint-disable-line no-unused-vars\n // }\n //End debug code\n\n let opampList = [];\n // Will start with small current range, then gradually increase current range until we find op amps that meet the criteria\n for (\n let minCurrent = 0, maxCurrent = initialMaxCurrent;\n maxCurrent <= 0.1 && opampList.length === 0; // Assume we have no parts with supply current > 100 mA\n minCurrent = maxCurrent, maxCurrent = root10 * maxCurrent\n ) {\n opampList = recommendedList.filter((amp) => {\n return (\n amp.supplyCurrent !== null && amp.supplyCurrent <= maxCurrent && amp.supplyCurrent > minCurrent && !amp.nonPick\n );\n });\n }\n\n return opampList;\n}\n\nexport function getTopOpAmp(\n opAmps,\n circuits,\n vsPlus,\n vsMinus,\n optimization,\n noiseResistance,\n totalGain,\n stopbandFrequency,\n applyAdditionalCriteria\n) {\n var result = null;\n let opAmpsList = getAppropriateOpAmps(\n opAmps,\n circuits,\n vsPlus,\n vsMinus,\n optimization,\n stopbandFrequency,\n applyAdditionalCriteria\n );\n\n switch (optimization) {\n case 'noise':\n result = getNoiseOpAmpTopPick(opAmpsList, noiseResistance);\n break;\n case 'power':\n result = getPowerOpAmpTopPick(opAmpsList);\n break;\n case 'voltageRange':\n result = getVoltageRangeOpAmpTopPick(opAmpsList, totalGain, vsMinus, vsPlus);\n break;\n }\n\n return result;\n}\n\nfunction _getOverallLimits(circuits, opAmpRequirementSpec) {\n var circuitLimits = [];\n for (let i = 0; i < circuits.length; i++) {\n circuitLimits.push(_getCircuitIdealOpAmp(circuits[i], opAmpRequirementSpec));\n }\n\n var result = {\n maxGbw: Math.max.apply(\n Math,\n circuitLimits.map((item) => {\n return item.gbw;\n })\n ),\n minIBias: Math.min.apply(\n Math,\n circuitLimits.map((item) => {\n return item.iBias;\n })\n ),\n minROutOverGBW: Math.min.apply(\n Math,\n circuitLimits.map((item) => {\n return item.rOutOverGBW;\n })\n ),\n minSpecialGain: Math.min.apply(\n Math,\n circuitLimits.map((item) => {\n return item.specialGain;\n })\n ),\n maxSlewRate: Math.max.apply(\n Math,\n circuitLimits.map((item) => {\n return item.slewRate;\n })\n ),\n };\n\n return result;\n}\n\nfunction _getCircuitIdealOpAmp(circuit, opAmpRequirementSpec) {\n var limits = {};\n switch (circuit.type) {\n case 'bandpass':\n if (circuit.implementation == 'multipleFeedback') {\n limits = _getMultipleFeedbackBandpassIdealOpAmp(circuit, opAmpRequirementSpec);\n } else if (circuit.implementation == 'activeInductor') {\n limits = _getInductorBandPassIdealOpAmp(circuit, opAmpRequirementSpec);\n }\n break;\n case 'highpass':\n if (circuit.implementation == 'multipleFeedback') {\n limits = _getMultipleFeedbackHighPassIdealOpAmp(circuit, opAmpRequirementSpec);\n } else if (circuit.implementation == 'activeFirstOrder') {\n limits = _getFirstOrderHighPassIdealOpAmp(circuit, opAmpRequirementSpec);\n } else if (circuit.implementation == 'sallenKey') {\n limits = _getSallenKeyHighPassIdealOpAmp(circuit, opAmpRequirementSpec);\n } else if (circuit.implementation == 'activeInductor') {\n limits = _getInductorHighPassIdealOpAmp(circuit, opAmpRequirementSpec);\n }\n break;\n case 'lowpass':\n if (circuit.implementation == 'multipleFeedback') {\n limits = _getMultipleFeedbackLowPassIdealOpAmp(circuit, opAmpRequirementSpec);\n } else if (circuit.implementation == 'activeFirstOrder') {\n limits = _getFirstOrderLowPassIdealOpAmp(circuit, opAmpRequirementSpec);\n } else if (circuit.implementation == 'sallenKey') {\n limits = _getSallenKeyLowPassIdealOpAmp(circuit, opAmpRequirementSpec);\n } else if (circuit.implementation == 'activeInductor') {\n limits = _getInductorLowPassIdealOpAmp(circuit, opAmpRequirementSpec);\n }\n break;\n }\n\n return limits;\n}\n\nfunction _getMultipleFeedbackBandpassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var iBiasResistance = circuit.r5;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / circuit.gain;\n\n var allowedError = opAmpRequirementSpec.allowedError;\n var fb = _bandpassMFBFeedbackForRecommendations(circuit.q, circuit.gain);\n var epsilon = (allowedError + 1) * (allowedError + 1) - 1;\n var gbw = ((2 * fb.q0) / (epsilon / circuit.fp)) * (1 / ((1 - fb.k) * (1 - fb.k)));\n\n var rOutOverGbw = INF;\n var rOut = rOutOverGbw * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: INF,\n specialGain: 1,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nfunction _getInductorBandPassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var gbw = opAmpRequirementSpec.inductorMultiplier * circuit.fp * circuit.gain;\n\n if (circuit.fp * circuit.gain > 100e6) {\n gbw = gbw / 2;\n }\n\n var iBiasResistance = 0;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / circuit.gain;\n var specialGain = 1 + circuit.r4 / circuit.r3;\n var rOutOverGBW = INF;\n var rOut = rOutOverGBW * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: rOutOverGBW,\n specialGain: specialGain,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nfunction _getMultipleFeedbackHighPassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var iBiasResistance = circuit.r2;\n var gain = circuit.c1 / circuit.c3;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / gain;\n\n var specialGain = 1 + circuit.c1 / circuit.c3;\n var gbw = opAmpRequirementSpec.fMultiplier * circuit.fp * gain * Math.max(circuit.q, 1);\n var rOutOverGbw = INF;\n var rOut = rOutOverGbw * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: INF,\n specialGain: specialGain,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nfunction _getFirstOrderHighPassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var gbw = opAmpRequirementSpec.fMultiplier * circuit.fp * circuit.gain;\n\n var iBiasResistance = circuit.r1;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / circuit.gain;\n var specialGain = 1 + circuit.r4 / circuit.r3;\n var rOutOverGBW = INF;\n var rOut = rOutOverGBW * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: rOutOverGBW,\n specialGain: specialGain,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nfunction _getSallenKeyHighPassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var fMultiplier = opAmpRequirementSpec.fMultiplier;\n var gbw = 2 * fMultiplier * circuit.fp * circuit.gain * Math.max(circuit.q, 1);\n\n var iBiasResistance = circuit.r2;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / circuit.gain;\n var specialGain = 1 + circuit.r4 / circuit.r3;\n var rOutOverGBW = INF;\n var rOut = rOutOverGBW * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: rOutOverGBW,\n specialGain: specialGain,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nfunction _getInductorHighPassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var gbw = opAmpRequirementSpec.inductorMultiplier * circuit.fp * circuit.gain;\n\n var iBiasResistance = circuit.r1;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / circuit.gain;\n var specialGain = 1 + circuit.r4 / circuit.r3;\n var rOutOverGBW = INF;\n var rOut = rOutOverGBW * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: rOutOverGBW,\n specialGain: specialGain,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nfunction _getMultipleFeedbackLowPassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var parallelR1R5 = (circuit.r1 * circuit.r5) / (circuit.r1 + circuit.r5);\n var gain = circuit.r5 / circuit.r1;\n var iBiasResistance = circuit.r2 + parallelR1R5;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / gain;\n\n var allowedError = opAmpRequirementSpec.allowedError;\n var numerator =\n circuit.fp * (-2 * circuit.q * gain + Math.sqrt((circuit.c1 * circuit.r5) / (circuit.c2 * circuit.r2)));\n var denominator = 2 * allowedError;\n var gbw = (numerator * gain) / denominator;\n\n var rOutOverGbw = INF;\n var rOut = rOutOverGbw * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: INF,\n specialGain: 1,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nfunction _getFirstOrderLowPassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var attenuation = 1 - opAmpRequirementSpec.allowedError;\n var fCutOff = circuit.fp / Math.sqrt(1 / (attenuation * attenuation) - 1);\n var gbw = fCutOff * circuit.gain;\n\n var iBiasResistance = circuit.r1;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / circuit.gain;\n var specialGain = 1 + circuit.r4 / circuit.r3;\n var rOutOverGBW = INF;\n var rOut = rOutOverGBW * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: rOutOverGBW,\n specialGain: specialGain,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nfunction _getSallenKeyLowPassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var allowedError = opAmpRequirementSpec.allowedError;\n var epsilon = (allowedError + 1) * (allowedError + 1) - 1;\n var numerator = circuit.gain * circuit.gain;\n var denominator = circuit.c2 * circuit.r2 * 2 * Math.PI * epsilon;\n var gbw = numerator / denominator;\n\n var iBiasResistance = circuit.r1 + circuit.r2;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / circuit.gain;\n var specialGain = 1 + circuit.r4 / circuit.r3;\n\n var attenuation =\n (opAmpRequirementSpec.stopbandFrequency / circuit.fp) * (opAmpRequirementSpec.stopbandFrequency / circuit.fp);\n var f = opAmpRequirementSpec.stopbandFrequency * opAmpRequirementSpec.rOutFreqMultiplier;\n var result = ((1 / f) * circuit.r1) / (attenuation - circuit.r1 / circuit.r2 - 1);\n\n if (result < 0) {\n result = INF;\n }\n var rOutOverGBW = result;\n var rOut = rOutOverGBW * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: rOutOverGBW,\n specialGain: specialGain,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nfunction _getInductorLowPassIdealOpAmp(circuit, opAmpRequirementSpec) {\n var gbw = opAmpRequirementSpec.inductorMultiplier * circuit.fp * circuit.gain;\n\n var iBiasResistance = circuit.r1;\n var iBias = opAmpRequirementSpec.dcOutputVoltageFromIBias / iBiasResistance / circuit.gain;\n var specialGain = 1 + circuit.r4 / circuit.r3;\n var rOutOverGBW = INF;\n var rOut = rOutOverGBW * gbw;\n\n return {\n gbw: gbw,\n iBias: iBias,\n rOutOverGBW: rOutOverGBW,\n specialGain: specialGain,\n slewRate: 0,\n rOut: rOut,\n };\n}\n\nlet _bandpassMFBFeedbackForRecommendations = function (stageQ, gain) {\n let a = gain / (2 * stageQ * stageQ);\n if (stageQ < 10 && a < 1) {\n return { q0: stageQ, b: a, k: 0, g: 0 }; // k here is probably very wrong, should be INF?\n } else {\n {\n //According to Van Valkenburg textbook, this is close to an optimal at 1.5,\n //Paul Fleischer paper indicates something slightly higher might be better\n //Yet my experiments indicate higher numbers are better still for lowest tolerance issues.\n //Only reason I haven't set it higher is because the ratio between R1 and R2 gets to be really big. Choosing 5 keeps the ratio at 100.\n var qHat = 5;\n let q0 = 0;\n if (a < 1) {\n q0 = qHat;\n } else {\n let aMax = 0.9999999999;\n q0 =\n (-(aMax + gain) + Math.sqrt((aMax + gain) * (aMax + gain) - 8 * aMax * aMax * stageQ * stageQ)) /\n (-4 * aMax * stageQ);\n }\n let alpha = (1 / (2 * q0 * q0)) * (1 - q0 / stageQ);\n let k = alpha / (1 + alpha);\n let h = gain * (q0 / stageQ) * (1 - k);\n let b = h / 2 / (q0 * q0);\n return { q0: q0, b: b, k: k, g: 1 / k };\n }\n }\n};\n","\n// UMD Module boilerplate\n(function (root, factory) {\n /*global define */\n /*global module */\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.PrecisionStudioMenu = factory();\n }\n}(typeof self !== 'undefined' ? self : this, function () { /* eslint-disable-line no-restricted-globals */\n var SYMBOLTEXT = \n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n\n '';\n\n var DROPDOWN_EN = \n '' +\n '';\n\n var DROPDOWN_JP = \n '' +\n '';\n\n var DROPDOWN_CN = \n '' +\n '';\n\n var DROPDOWN_RU = \n '' +\n '';\n\n var DROPDOWN = {\n en: DROPDOWN_EN,\n jp: DROPDOWN_JP,\n cn: DROPDOWN_CN,\n ru: DROPDOWN_RU\n }\n \n var DEFAULT_TOOL_URLS = {\n PrecisionStudioUrl: \"https://tools.analog.com/{pstd-locale}/precisionstudio\",\n FilterWizardUrl: \"https://tools.analog.com/{pstd-locale}/filterwizard\",\n AdcDriverUrl: \"https://tools.analog.com/{pstd-locale}/adcdriver/\",\n PhotodiodeUrl: \"https://tools.analog.com/{pstd-locale}/photodiode\",\n DiamondUrl: \"https:/tools.analog.com/{pstd-locale}/diamond\",\n NoiseUrl: \"https://beta-tools.analog.com/noise/\",\n SignalChainDesignerUrl: \"https://beta-tools.analog.com/signalchaindesigner/\",\n SimDDSUrl: \"https://tools.analog.com/{pstd-locale}/simdds\",\n VirtualEvalUrl: \"https://beta-tools.analog.com/virtualeval/#category=2\",\n DACErrorCalculatorUrl: \"https://beta-tools.analog.com/DACErrorBudget/\"\n }\n \n var DEFAULT_OPTIONS = {\n locale: 'en',\n toolurls: DEFAULT_TOOL_URLS\n }\n\n var URL_KEY_MAP = {\n PrecisionStudioUrl: \"pstdUrl\",\n FilterWizardUrl: \"fwUrl\",\n AdcDriverUrl: \"adcUrl\",\n PhotodiodeUrl: \"pdUrl\",\n DiamondUrl: \"dmdUrl\",\n NoiseUrl: \"noiseUrl\",\n SignalChainDesignerUrl: \"scdUrl\",\n SimDDSUrl: \"ddsUrl\",\n VirtualEvalUrl: \"evalUrl\",\n DACErrorCalculatorUrl: \"dacUrl\" \n }\n\n var applyUrlsToMarkup = function(markup, urls, locale) {\n var updatedMarkup = markup;\n for (let name in URL_KEY_MAP) {\n updatedMarkup = updatedMarkup.replace(\n new RegExp('{' + URL_KEY_MAP[name] + '}','gi'), \n (name in urls) ? urls[name] : DEFAULT_TOOL_URLS[name]);\n }\n updatedMarkup = updatedMarkup.replace(/\\{pstd-locale\\}/gi, locale);\n updatedMarkup = updatedMarkup.replace(/\\{pstd-locale-w-ru\\}/gi, locale); //For compatibility with a very short-lived feature from 1.0.0\n return updatedMarkup;\n }\n // This is where the returned class really begins\n\n return /** @class */ (function () {\n function PrecisionStudioMenu(options) {\n var locale = (!!options && !!options.locale && options.locale in DROPDOWN) ? options.locale : DEFAULT_OPTIONS.locale;\n var toolurls = (!!options && !!options.toolurls) ? options.toolurls : DEFAULT_OPTIONS.toolurls;\n this.dropdown = applyUrlsToMarkup(DROPDOWN[locale], toolurls, locale);\n this.focusOutListenerBound = this.focusOutListener.bind(this);\n }\n\n PrecisionStudioMenu.prototype.focusOutListener = function (event) {\n const popover = this.element.querySelector(\".precisionstudiomenu_items\");\n // If focusout bubbled from within popover isn't headed to something else inside popover, hide the popover\n if (event.relatedTarget && !popover.contains(event.relatedTarget)) {\n popover.hidePopover();\n }\n }\n\n PrecisionStudioMenu.prototype.attach = function(element){\n this.element = element;\n // Apply icon catalog\n var tempwrapper = document.createElement(\"div\");\n tempwrapper.innerHTML = SYMBOLTEXT;\n var symbols = tempwrapper.querySelector(\"svg\");\n document.body.insertBefore(symbols, document.body.firstChild);\n\n // Apply dropdown using icons\n element.innerHTML = this.dropdown;\n var dropdown = this.element.querySelector(\".precisionstudiomenu_items\");\n dropdown.addEventListener(\"focusout\", this.focusOutListenerBound);\n\n }\n\n PrecisionStudioMenu.prototype.detach = function(){\n\n if (this.element) {\n // First tear down behavior - no event listener leaks\n var dropdown = this.element.querySelector(\".precisionstudiomenu_items\");\n if (dropdown) {\n dropdown.removeEventListener(\"focusout\", this.focusOutListenerBound);\n }\n // Remove the dropdown\n this.element.innerHTML = \"\";\n\n // Remove the icon catalog \n var iconsNode = document.querySelector(\"#precisionstudio-icons\");\n if (iconsNode) {\n document.body.removeChild(iconsNode);\n }\n\n }\n }\n\n return PrecisionStudioMenu;\n }());\n}));","// Analytics: Delivers events to analytics when interesting behaviors occur\n\nexport interface Logger {\n log(...args: unknown[]): void;\n info(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n error(...args: unknown[]): void;\n time(label?: string): void;\n timeEnd(label?: string): void;\n}\n\ninterface AnalyticsGlobal {\n webData: { toolName: string };\n setWebEvent: (name: string, options: { toolName?: string; event?: string; payload?: string }) => void;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace globalThis {\n // eslint-disable-next-line no-var\n var AnalyticsAL: AnalyticsGlobal | undefined;\n }\n}\n\ninterface QueuedEvent {\n tool: string;\n evt: string;\n data?: string;\n}\n//------------------------ Local non-class functions ---------------------\n\nconst loadScript = (source: string, beforeEl?: Element, async = true, defer = true) => {\n // eslint-disable-next-line no-undef\n return new Promise((resolve, reject) => {\n let script: HTMLScriptElement | undefined = document.createElement('script');\n const scripts = document.getElementsByTagName('script');\n const lastScript = scripts && scripts.length ? scripts[scripts.length - 1] : undefined;\n const prior = beforeEl || lastScript?.nextElementSibling;\n\n script.async = async;\n script.defer = defer;\n\n function onloadHander(this: GlobalEventHandlers, event: Event): void {\n if (script) {\n script.onload = null;\n script = undefined;\n }\n event instanceof AbortSignal ? reject() : resolve('');\n }\n\n script.onload = onloadHander;\n\n script.src = source;\n if (prior) {\n prior.parentNode?.insertBefore(script, prior);\n } else {\n document.getElementsByTagName('body')[0]?.append(script);\n }\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst poll = function (fn: () => any, interval: number, retries: number) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const checkCondition = function (resolve: (result: any) => void, reject: (e: Error) => void) {\n // If the condition is met, we're done!\n const result = fn();\n if (result) {\n resolve(result);\n }\n // If the condition isn't met but the timeout hasn't elapsed, go again\n else if (--retries > 0) {\n setTimeout(checkCondition, interval, resolve, reject);\n }\n // Didn't match and too much time, reject!\n else {\n reject(new Error('timed out for ' + fn));\n }\n };\n\n // eslint-disable-next-line no-undef\n return new Promise(checkCondition);\n};\n\nconst supplyDummySession = function (toolname: string, logger: Logger, message?: string) {\n // Supply placeholder for dummmy analytics for remainder of session\n globalThis.AnalyticsAL = {\n setWebEvent: function () {\n if (message) {\n logger.info(message);\n }\n },\n webData: { toolName: toolname },\n };\n};\n\nconst releaseDummySessionResources = function () {\n globalThis.AnalyticsAL = undefined;\n};\n\nconst analyticsLoaded = function () {\n return typeof globalThis.AnalyticsAL !== 'undefined' && globalThis.AnalyticsAL;\n};\n\nconst CONSOLE_LOGGER: Logger = {\n error(...args) {\n console.error(...args);\n }, // eslint-disable-line no-console\n warn(...args) {\n console.warn(...args);\n }, // eslint-disable-line no-console\n info(...args) {\n console.info(...args);\n }, // eslint-disable-line no-console\n log(...args) {\n console.error(...args);\n }, // eslint-disable-line no-console\n time(...args) {\n console.time(...args);\n }, // eslint-disable-line no-console\n timeEnd(...args) {\n console.timeEnd(...args);\n }, // eslint-disable-line no-console\n};\nconst INTERVAL = 200; //ms\nconst RETRIES = 30;\n// Analytics states\nexport const LOADING = 0;\nexport const ACTIVE = 1;\nexport const ABANDONED = -1;\n\n//-----------------------------Analytics class definition---------------------\n\nexport default class Analytics {\n toolname = '';\n analyticsUrl = '';\n logSuppressions = false;\n usesDummySession = false;\n state = LOADING;\n queue: Array = [];\n logger: Logger = CONSOLE_LOGGER;\n start(\n toolname: string,\n analyticsUrl: string,\n isSSR: boolean,\n isTesting: boolean,\n logSuppressions: boolean,\n logger?: Logger,\n ): void {\n this.toolname = toolname;\n this.logger = logger || this.logger;\n this.logSuppressions = logSuppressions;\n if (isSSR) {\n this.logger.info('Analytics turned off for SSR');\n this.usesDummySession = true;\n supplyDummySession(this.toolname, this.logger);\n this.state = ABANDONED;\n this._trackSessionStart();\n } else if (isTesting) {\n this.logger.info('Analytics turned off in test automation');\n this.usesDummySession = true;\n supplyDummySession(this.toolname, this.logger);\n this.state = ABANDONED;\n this._trackSessionStart();\n } else {\n this.logger.time('analyticsLoadTime');\n loadScript(analyticsUrl)\n .then(() => {\n // Execution of the Analytics URL from Adobe defines a global AnalyticsAL object ... eventually ... in theory\n poll(analyticsLoaded, INTERVAL, RETRIES)\n .then(() => {\n // if statement to satisfy TypeScript\n if (globalThis.AnalyticsAL) {\n this.logger.timeEnd('analyticsLoadTime');\n this.state = ACTIVE;\n globalThis.AnalyticsAL.webData.toolName = this.toolname;\n this._trackSessionStart();\n }\n })\n .catch(() => {\n this.logger.timeEnd('analyticsLoadTime');\n this.state = ABANDONED;\n this.logger.warn(\n `Analytics didn't start after a timeout of roughly ${(INTERVAL * RETRIES) / 1000} seconds.`,\n );\n this.usesDummySession = true;\n supplyDummySession(\n this.toolname,\n this.logger,\n 'Analytics event not delivered - analytics startup timed out',\n );\n this._trackSessionStart();\n });\n })\n .catch((error) => {\n this.logger.timeEnd('analyticsLoadTime');\n this.state = ABANDONED;\n this.logger.warn(`Analytics failed to load for ${location.origin}.`, error);\n this.usesDummySession = true;\n supplyDummySession(\n this.toolname,\n this.logger,\n 'Analytics event not delivered - analytics URL failed to load',\n );\n this._trackSessionStart();\n });\n }\n }\n stop() {\n if (this.usesDummySession) {\n releaseDummySessionResources();\n }\n this.queue = [];\n this.state = LOADING;\n }\n _trackSessionStart() {\n // Track session start\n // if statement to satisfy TypeScript\n if (globalThis.AnalyticsAL) {\n globalThis.AnalyticsAL.setWebEvent('toolStart', { toolName: this.toolname });\n this.logger.info(`ADOBEDTM: ${this.toolname} session start`);\n for (let q = 0, qlen = this.queue.length; q < qlen; q++) {\n const item = this.queue[q];\n if (item) {\n this.setWebEvent(item.tool, item.evt, item.data);\n }\n }\n }\n this.queue = [];\n }\n setWebEvent(toolName: string, eventName: string, eventData?: string) {\n if (this.state == LOADING) {\n this.queue.push({ tool: toolName, evt: eventName, data: eventData });\n } else {\n try {\n if (globalThis.AnalyticsAL) {\n globalThis.AnalyticsAL.setWebEvent('payload', { event: eventName, payload: eventData });\n if (!this.usesDummySession || this.logSuppressions) {\n this.logger.info(`ADOBEDTM: ${this.toolname} [${eventName}]`, eventData);\n }\n }\n } catch (e) {\n this.logger.error(`setWebEvent or subsequent logging failed unexpectedly for ${eventName}`, eventData);\n }\n }\n }\n}\n","import Service from '@ember/service';\nimport Analytics, { LOADING, ACTIVE, ABANDONED } from '../utils/analytics.ts';\nimport type { Logger } from '../utils/analytics';\nexport type { Logger };\n\nexport default class AnalyticsService extends Service {\n analytics: Analytics = new Analytics();\n\n start(\n toolname: string,\n url: string,\n isSSR: boolean,\n isTesting: boolean,\n logSuppressions: boolean,\n logger?: Logger,\n ): void {\n this.analytics.start(toolname, url, isSSR, isTesting, logSuppressions, logger);\n }\n willDestroy(): void {\n this.analytics.stop();\n }\n setWebEvent(toolName: string, eventName: string, eventData?: string): void {\n this.analytics.setWebEvent(toolName, eventName, eventData);\n }\n get isActive(): boolean {\n return this.analytics.state === ACTIVE;\n }\n get isAbandoned(): boolean {\n return this.analytics.state === ABANDONED;\n }\n get isLoading(): boolean {\n return this.analytics.state === LOADING;\n }\n}\ndeclare module '@ember/service' {\n interface Registry {\n 'aditools-analytics': AnalyticsService;\n }\n}\n","/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */\nvar XLSX = {};\nXLSX.version = '0.20.2';\nvar current_codepage = 1200, current_ansi = 1252;\n/*:: declare var cptable:any; */\n/*global cptable:true, window */\nvar $cptable;\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n\t0: 1252, /* ANSI */\n\t1: 65001, /* DEFAULT */\n\t2: 65001, /* SYMBOL */\n\t77: 10000, /* MAC */\n\t128: 932, /* SHIFTJIS */\n\t129: 949, /* HANGUL */\n\t130: 1361, /* JOHAB */\n\t134: 936, /* GB2312 */\n\t136: 950, /* CHINESEBIG5 */\n\t161: 1253, /* GREEK */\n\t162: 1254, /* TURKISH */\n\t163: 1258, /* VIETNAMESE */\n\t177: 1255, /* HEBREW */\n\t178: 1256, /* ARABIC */\n\t186: 1257, /* BALTIC */\n\t204: 1251, /* RUSSIAN */\n\t222: 874, /* THAI */\n\t238: 1250, /* EASTEUROPE */\n\t255: 1252, /* OEM */\n\t69: 6969 /* MISC */\n}/*:any*/);\n\nvar set_ansi = function(cp/*:number*/) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data/*:string*/)/*:Array*/ { var o/*:Array*/ = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16lereadu(data/*:Uint8Array*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data[2*i] + (data[2*i+1]<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data/*:string*/)/*:string*/ {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\n\nfunction set_cptable(cptable) {\n\t$cptable = cptable;\n\tset_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\n\tdebom = function(data/*:string*/) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return $cptable.utils.decode(1200, char_codes(data.slice(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x/*:number*/)/*:string*/ {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn $cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n\t_getansi = function _ga2(x/*:number*/)/*:string*/ {\n\t\treturn $cptable.utils.decode(current_ansi, [x])[0];\n\t};\n\tcpdoit();\n}\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Base64_encode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input.charCodeAt(i++);\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_encode_pass(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input.charCodeAt(i++);\n if (c1 > 255)\n c1 = 95;\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n if (c2 > 255)\n c2 = 95;\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n if (c3 > 255)\n c3 = 95;\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_encode_arr(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input[i++];\n e1 = c1 >> 2;\n c2 = input[i++];\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input[i++];\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_decode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n if (input.slice(0, 5) == \"data:\") {\n var i = input.slice(0, 1024).indexOf(\";base64,\");\n if (i > -1)\n input = input.slice(i + 8);\n }\n input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n for (var i = 0; i < input.length; ) {\n e1 = Base64_map.indexOf(input.charAt(i++));\n e2 = Base64_map.indexOf(input.charAt(i++));\n c1 = e1 << 2 | e2 >> 4;\n o += String.fromCharCode(c1);\n e3 = Base64_map.indexOf(input.charAt(i++));\n c2 = (e2 & 15) << 4 | e3 >> 2;\n if (e3 !== 64) {\n o += String.fromCharCode(c2);\n }\n e4 = Base64_map.indexOf(input.charAt(i++));\n c3 = (e3 & 3) << 6 | e4;\n if (e4 !== 64) {\n o += String.fromCharCode(c3);\n }\n }\n return o;\n}\nvar has_buf = /*#__PURE__*/(function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();\n\nvar Buffer_from = /*#__PURE__*/(function() {\n\tif(typeof Buffer !== 'undefined') {\n\t\tvar nbfs = !Buffer.from;\n\t\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\t\treturn nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t}\n\treturn function() {};\n})();\nvar buf_utf16le = /*#__PURE__*/(function() {\n\tif(typeof Buffer === 'undefined') return false;\n\tvar x = Buffer_from([65,0]);\n\tif(!x) return false;\n\tvar o = x.toString(\"utf16le\");\n\treturn o.length == 1;\n})();\n\n\nfunction new_raw_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s/*:string*/)/*:any*/ {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x/*:string*/)/*:number*/{ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s/*:string*/)/*:any*/ {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data/*:any*/)/*:string*/ {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o/*:Array*/ = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data/*:Array*/)/*:Uint8Array*/ {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array*/ {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n\t/*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\tvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(buf) { return Buffer.isBuffer(buf) ? buf : Buffer_from(buf); })); } : function(bufs) {\n\tif(typeof Uint8Array !== \"undefined\") {\n\t\tvar i = 0, maxlen = 0;\n\t\tfor(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;\n\t\tvar o = new Uint8Array(maxlen);\n\t\tvar len = 0;\n\t\tfor(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {\n\t\t\tlen = bufs[i].length;\n\t\t\tif(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);\n\t\t\telse if(typeof bufs[i] == \"string\") o.set(new Uint8Array(s2a(bufs[i])), maxlen);\n\t\t\telse o.set(new Uint8Array(bufs[i]), maxlen);\n\t\t}\n\t\treturn o;\n\t}\n\treturn [].concat.apply([], bufs.map(function(buf) { return Array.isArray(buf) ? buf : [].slice.call(buf); }));\n};\n\nfunction utf8decode(content/*:string*/) {\n\tvar out = [], widx = 0, L = content.length + 250;\n\tvar o = new_raw_buf(content.length + 255);\n\tfor(var ridx = 0; ridx < content.length; ++ridx) {\n\t\tvar c = content.charCodeAt(ridx);\n\t\tif(c < 0x80) o[widx++] = c;\n\t\telse if(c < 0x800) {\n\t\t\to[widx++] = (192|((c>>6)&31));\n\t\t\to[widx++] = (128|(c&63));\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64;\n\t\t\tvar d = content.charCodeAt(++ridx)&1023;\n\t\t\to[widx++] = (240|((c>>8)&7));\n\t\t\to[widx++] = (128|((c>>2)&63));\n\t\t\to[widx++] = (128|((d>>6)&15)|((c&3)<<4));\n\t\t\to[widx++] = (128|(d&63));\n\t\t} else {\n\t\t\to[widx++] = (224|((c>>12)&15));\n\t\t\to[widx++] = (128|((c>>6)&63));\n\t\t\to[widx++] = (128|(c&63));\n\t\t}\n\t\tif(widx > L) {\n\t\t\tout.push(o.slice(0, widx));\n\t\t\twidx = 0;\n\t\t\to = new_raw_buf(65535);\n\t\t\tL = 65530;\n\t\t}\n\t}\n\tout.push(o.slice(0, widx));\n\treturn bconcat(out);\n}\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/*::\ndeclare type Block = any;\ndeclare type BufArray = {\n\tnewblk(sz:number):Block;\n\tnext(sz:number):Block;\n\tend():any;\n\tpush(buf:Block):void;\n};\n\ntype RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};\n\ntype EvertType = {[string]:string};\ntype EvertNumType = {[string]:number};\ntype EvertArrType = {[string]:Array};\n\ntype StringConv = {(string):string};\n\n*/\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nfunction _strrev(x/*:string*/)/*:string*/ { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = /*#__PURE__*/Math.pow(2,32);\nfunction pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\n/* yes, in 2022 this is still faster than string compare */\nfunction SSF_isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\nvar days/*:Array >*/ = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months/*:Array >*/ = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction SSF_init_table(t/*:any*/) {\n\tif(!t) t = {};\n\tt[0]= 'General';\n\tt[1]= '0';\n\tt[2]= '0.00';\n\tt[3]= '#,##0';\n\tt[4]= '#,##0.00';\n\tt[9]= '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n\treturn t;\n}\n/* repeated to satiate webpack */\nvar table_fmt = {\n\t0: 'General',\n\t1: '0',\n\t2: '0.00',\n\t3: '#,##0',\n\t4: '#,##0.00',\n\t9: '0%',\n\t10: '0.00%',\n\t11: '0.00E+00',\n\t12: '# ?/?',\n\t13: '# ??/??',\n\t14: 'm/d/yy',\n\t15: 'd-mmm-yy',\n\t16: 'd-mmm',\n\t17: 'mmm-yy',\n\t18: 'h:mm AM/PM',\n\t19: 'h:mm:ss AM/PM',\n\t20: 'h:mm',\n\t21: 'h:mm:ss',\n\t22: 'm/d/yy h:mm',\n\t37: '#,##0 ;(#,##0)',\n\t38: '#,##0 ;[Red](#,##0)',\n\t39: '#,##0.00;(#,##0.00)',\n\t40: '#,##0.00;[Red](#,##0.00)',\n\t45: 'mm:ss',\n\t46: '[h]:mm:ss',\n\t47: 'mmss.0',\n\t48: '##0.0E+0',\n\t49: '@',\n\t56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"'\n};\n\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar SSF_default_map = {\n\t5: 37, 6: 38, 7: 39, 8: 40, // 5 -> 37 ... 8 -> 40\n\n\t23: 0, 24: 0, 25: 0, 26: 0, // 23 -> 0 ... 26 -> 0\n\n\t27: 14, 28: 14, 29: 14, 30: 14, 31: 14, // 27 -> 14 ... 31 -> 14\n\n\t50: 14, 51: 14, 52: 14, 53: 14, 54: 14, // 50 -> 14 ... 58 -> 14\n\t55: 14, 56: 14, 57: 14, 58: 14,\n\t59: 1, 60: 2, 61: 3, 62: 4, // 59 -> 1 ... 62 -> 4\n\n\t67: 9, 68: 10, // 67 -> 9 ... 68 -> 10\n\t69: 12, 70: 13, 71: 14, // 69 -> 12 ... 71 -> 14\n\t72: 14, 73: 15, 74: 16, 75: 17, // 72 -> 14 ... 75 -> 17\n\t76: 20, 77: 21, 78: 22, // 76 -> 20 ... 78 -> 22\n\t79: 45, 80: 46, 81: 47, // 79 -> 45 ... 81 -> 47\n\t82: 0 // 82 -> 0 ... 65536 -> 0 (omitted)\n};\n\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar SSF_default_str = {\n\t// 5 -- Currency, 0 decimal, black negative\n\t5: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\n\t// 6 -- Currency, 0 decimal, red negative\n\t6: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\n\t// 7 -- Currency, 2 decimal, black negative\n\t7: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 8 -- Currency, 2 decimal, red negative\n\t8: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 41 -- Accounting, 0 decimal, No Symbol\n\t41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n\n\t// 42 -- Accounting, 0 decimal, $ Symbol\n\t42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n\n\t// 43 -- Accounting, 2 decimal, No Symbol\n\t43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n\n\t// 44 -- Accounting, 2 decimal, $ Symbol\n\t44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction SSF_frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array*/ {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction SSF_normalize_xl_unsafe(v/*:number*/)/*:number*/ {\n\tvar s = v.toPrecision(16);\n\tif(s.indexOf(\"e\") > -1) {\n\t\tvar m = s.slice(0, s.indexOf(\"e\"));\n\t\tm = m.indexOf(\".\") > -1 ? m.slice(0, (m.slice(0,2) == \"0.\" ? 17 : 16)) : (m.slice(0,15) + fill(\"0\", m.length - 15));\n\t\treturn m + s.slice(s.indexOf(\"e\"));\n\t}\n\tvar n = s.indexOf(\".\") > -1 ? s.slice(0, (s.slice(0,2) == \"0.\" ? 17 : 16)) : (s.slice(0,15) + fill(\"0\", s.length - 15));\n\treturn Number(n);\n}\n\nfunction SSF_parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {\n\tif(v > 2958465 || v < 0) return null;\n\tv = SSF_normalize_xl_unsafe(v);\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = SSF_fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n/* exponent >= -9 and <= 9 */\nfunction SSF_strip_decimal(o/*:string*/)/*:string*/ {\n\treturn (o.indexOf(\".\") == -1) ? o : o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)$/, \"$1\");\n}\n\n/* General Exponential always shows 2 digits exp and trims the mantissa */\nfunction SSF_normalize_exp(o/*:string*/)/*:string*/ {\n\tif(o.indexOf(\"E\") == -1) return o;\n\treturn o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/,\"$1E\").replace(/(E[+-])(\\d)$/,\"$10$2\");\n}\n\n/* exponent >= -9 and <= 9 */\nfunction SSF_small_exp(v/*:number*/)/*:string*/ {\n\tvar w = (v<0?12:11);\n\tvar o = SSF_strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\to = v.toPrecision(10); if(o.length <= w) return o;\n\treturn v.toExponential(5);\n}\n\n/* exponent >= 11 or <= -10 likely exponential */\nfunction SSF_large_exp(v/*:number*/)/*:string*/ {\n\tvar o = SSF_strip_decimal(v.toFixed(11));\n\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n}\n\nfunction SSF_general_num(v/*:number*/)/*:string*/ {\n\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\telse if(Math.abs(V) <= 9) o = SSF_small_exp(v);\n\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\telse o = SSF_large_exp(v);\n\n\treturn SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));\n}\n\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tThe longest 32-bit integer text is \"-2147483648\", exactly 11 chars\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction SSF_general(v/*:any*/, opts/*:any*/) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : SSF_general_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return SSF_format(14, datenum(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\n\nfunction SSF_fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if(date < 60) dow = (dow + 6) % 7;\n return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\nfunction SSF_write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n\t\t\t/*::if(!ss0) ss0 = 0; */\n\t\t\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+(ss0 == 0 ? Math.round(val.S+val.u) : val.S); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n\n\n/*jshint -W086 */\n/*jshint +W086 */\nfunction commaify(s/*:string*/)/*:string*/ {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar pct1 = /%/g;\nfunction write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\n\nfunction write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\n\nfunction write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\)[^)]*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str/*:string*/)/*:string*/ {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val/*:number*/, d/*:number*/)/*:number*/ {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val/*:number*/, d/*:number*/)/*:number*/ {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val/*:number*/)/*:string*/ {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(/*::(*/r/*::||[\"\"])*/[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\to = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\t\treturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri*/ {\n\tvar out/*:Array*/ = [];\n\tvar in_str = false/*, cc*/;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\n\nvar SSF_abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\nfunction fmt_is_date(fmt/*:string*/)/*:boolean*/ {\n\tvar i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': if(SSF_isgeneral(fmt, i)) i+= 6; i++; break;\n\t\t\tcase '\"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;\n\t\t\tcase '\\\\': i+=2; break;\n\t\t\tcase '_': i+=2; break;\n\t\t\tcase '@': ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") return true;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n\t\t\t\t++i; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.match(SSF_abstime)) return true;\n\t\t\t\tbreak;\n\t\t\tcase '.':\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\twhile(i < fmt.length && (\"0#?.,E+-%\".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=SSF_parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? fmt.charAt(i+2) : c; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(SSF_abstime)) {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) { ss0=Math.max(ss0,ssm[0].length-1); bt = 4;}\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'e': lst=out[i].t; break;\n\t\t\tcase 'M': lst=out[i].t; if(bt < 2) bt = 2; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tvar _dt;\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tif(dt.H >= 24) { dt.H = 0; ++dt.D; _dt = SSF_parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tswitch(ss0) {\n\t\t\t\tcase 1: dt.u = Math.round(dt.u * 10)/10; break;\n\t\t\t\tcase 2: dt.u = Math.round(dt.u * 100)/100; break;\n\t\t\t\tcase 3: dt.u = Math.round(dt.u * 1000)/1000; break;\n\t\t\t}\n\t\t\tif(dt.u >= 1) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tif(dt.H >= 24) { dt.H = 0; ++dt.D; _dt = SSF_parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\n\t\t\t\t/*::if(!dt) throw \"unreachable\"; */\n\t\t\t\tout[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = SSF_general(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\n\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\": if(v == thresh) return true; break;\n\t\tcase \">\": if(v > thresh) return true; break;\n\t\tcase \"<\": if(v < thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f/*:string*/, v/*:any*/) {\n\tvar fmt = SSF_split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(/\\[[=<>]/) != null || fmt[1].match(/\\[[=<>]/) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction SSF_format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table/*:any*/) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[SSF_default_map[fmt]]) || table_fmt[SSF_default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = SSF_default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(SSF_isgeneral(sfmt,0)) return SSF_general(v, o);\n\tif(v instanceof Date) v = datenum(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(SSF_isgeneral(f[1])) return SSF_general(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction SSF_load(fmt/*:string*/, idx/*:?number*/)/*:number*/ {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tfor(var i = 0; i < 0x0188; ++i) {\n/*::if(typeof idx != 'number') return 0x188; */\n\t\t\tif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tif(idx < 0) idx = 0x187;\n\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\ttable_fmt[idx] = fmt;\n\treturn idx;\n}\nfunction SSF_load_table(tbl/*:SSFTable*/)/*:void*/ {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) SSF_load(tbl[i], i);\n}\n\nfunction make_ssf() {\n\ttable_fmt = SSF_init_table();\n}\n\nvar SSF = {\n\tformat: SSF_format,\n\tload: SSF_load,\n\t_table: table_fmt,\n\tload_table: SSF_load_table,\n\tparse_date_code: SSF_parse_date_code,\n\tis_date: fmt_is_date,\n\tget_table: function get_table() { return SSF._table = table_fmt; }\n};\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n}/*:any*/);\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {\n\tvar fmt = typeof dateNF == \"number\" ? table_fmt[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\tdateNFregex.lastIndex = 0;\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array*/)/*:string*/ {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tdateNFregex.lastIndex = 0;\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\n/* table of bad formats written by third-party tools */\nvar bad_formats = {\n\t\"d.m\": \"d\\\\.m\" // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd\".\"m' or 'd\\\\.m'\n};\n\nfunction SSF__load(fmt, idx) {\n\treturn SSF_load(bad_formats[fmt] || fmt, idx);\n}\n\n/*::\ndeclare var ReadShift:any;\ndeclare var CheckField:any;\ndeclare var prep_blob:any;\ndeclare var __readUInt32LE:any;\ndeclare var __readInt32LE:any;\ndeclare var __toBuffer:any;\ndeclare var __utf16le:any;\ndeclare var bconcat:any;\ndeclare var s2a:any;\ndeclare var chr0:any;\ndeclare var chr1:any;\ndeclare var has_buf:boolean;\ndeclare var new_buf:any;\ndeclare var new_raw_buf:any;\ndeclare var new_unsafe_buf:any;\ndeclare var Buffer_from:any;\n*/\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/*::\ntype SectorEntry = {\n\tname?:string;\n\tnodes?:Array;\n\tdata:RawBytes;\n};\ntype SectorList = {\n\t[k:string|number]:SectorEntry;\n\tname:?string;\n\tfat_addrs:Array;\n\tssz:number;\n}\ntype CFBFiles = {[n:string]:CFBEntry};\n*/\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32 = /*#__PURE__*/(function() {\nvar CRC32 = {};\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table()/*:any*/ {\n\tvar c = 0, table/*:Array*/ = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table/*:Array*/ = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' && typeof table.subarray == \"function\" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4];\nvar T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B/*:Uint8Array|Array*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\nreturn CRC32;\n})();\n/* [MS-CFB] v20171201 */\nvar CFB = /*#__PURE__*/(function _CFB(){\nvar exports/*:CFBModule*/ = /*::(*/{}/*:: :any)*/;\nexports.version = '1.2.2';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l/*:string*/, r/*:string*/)/*:number*/ {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms/*:number*/ = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd/*:number*/ = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob/*:CFBlob*/)/*:any*/ {\n\tprep_blob(blob, 0);\n\tvar o = /*::(*/{}/*:: :any)*/;\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t} break;\n\t\t\t/* ZIP64 Extended Information Field */\n\t\t\tcase 0x0001: {\n\t\t\t\tvar sz1 = blob.read_shift(4), sz2 = blob.read_shift(4);\n\t\t\t\tp.usz = (sz2 * Math.pow(2,32) + sz1);\n\t\t\t\tsz1 = blob.read_shift(4); sz2 = blob.read_shift(4);\n\t\t\t\tp.csz = (sz2 * Math.pow(2,32) + sz1);\n\t\t\t\t// NOTE: volume fields are skipped\n\t\t\t} break;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs/*:: = require('fs'); */;\nfunction get_fs() { return fs || (fs = _fs); }\nfunction parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs/*:Array*/ = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob/*:CFBlob*/ = /*::(*/file.slice(0,512)/*:: :any)*/;\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = /*::(*/file.slice(0,ssz)/*:: :any)*/; prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header/*:RawBytes*/ = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt/*:number*/ = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors/*:Array*/ = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list/*:SectorList*/ = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nif(dir_start < sector_list.length) sector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files/*:CFBFiles*/ = {}, Paths/*:Array*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver/*:number*/ = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array*/ {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors/*:Array*/ = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array*/, Paths/*:Array*/)/*:void*/ {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad/*:Array*/ = [], q/*:Array*/ = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0)/*:any*/);\n\treturn (bconcat(o).slice(0, entry.size)/*:any*/);\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array*/, ssz/*:number*/, fat_addrs)/*:void*/ {\n\tvar q/*:number*/ = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tif(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors/*:Array*/, start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/, chkd/*:?Array*/)/*:SectorEntry*/ {\n\tvar buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors/*:Array*/, dir_start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/)/*:SectorList*/ {\n\tvar sl = sectors.length, sector_list/*:SectorList*/ = ([]/*:any*/);\n\tvar chkd/*:Array*/ = [], buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]/*:Array*/);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr/*:number*/ = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}/*:SectorEntry*/);\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array*/, Paths/*:Array*/, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob/*:CFBlob*/ = /*::(*/sector.slice(i, i+128)/*:: :any)*/;\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o/*:CFBEntry*/ = ({\n\t\t\tname: name,\n\t\t\ttype: blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL: blob.read_shift(4, 'i'),\n\t\t\tR: blob.read_shift(4, 'i'),\n\t\t\tC: blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size)/*:any*/);\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename/*:string*/, options/*:CFBReadOpts*/) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {\n\tvar type = options && options.type;\n\tif(!type) {\n\t\tif(has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n\t}\n\tswitch(type || \"base64\") {\n\t\tcase \"file\": /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */return read_file(blob, options);\n\t\tcase \"base64\": /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */return parse(s2a(Base64_decode(blob)), options);\n\t\tcase \"binary\": /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */return parse(s2a(blob), options);\n\t}\n\treturn parse(/*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */blob, options);\n}\n\nfunction init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 }/*:any*/);\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }/*:any*/));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\t// Track which names exist\n\tvar fullPaths = Object.create ? Object.create(null) : {};\n\tvar data/*:Array<[string, CFBEntry]>*/ = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tfullPaths[cfb.FullPaths[i]] = true;\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = fullPaths[dad];\n\t\twhile(!s) {\n\t\t\twhile(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);\n\n\t\t\tdata.push([dad, ({\n\t\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\t\ttype: 1,\n\t\t\t\tclsid: HEADER_CLSID,\n\t\t\t\tct: now, mt: now,\n\t\t\t\tcontent: null\n\t\t\t}/*:any*/)]);\n\n\t\t\t// Add name to set\n\t\t\tfullPaths[dad] = true;\n\n\t\t\tdad = dirname(data[i][0]);\n\t\t\ts = fullPaths[dad];\n\t\t}\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name = filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar _opts = options || {};\n\t/* MAD is order-sensitive, skip rebuild and sort */\n\tif(_opts.fileType == 'mad') return write_mad(cfb, _opts);\n\trebuild_cfb(cfb);\n\tswitch(_opts.fileType) {\n\t\tcase 'zip': return write_zip(cfb, _opts);\n\t\t//case 'mad': return write_mad(cfb, _opts);\n\t}\n\tvar L = (function(cfb/*:CFBContainer*/)/*:Array*/{\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w/*:number*/)/*:void*/ {\n\t\tfor(T += w; i> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm/*:string*/ = (i === 0 && _opts.root) || file.name;\n\t\tif(_nm.length > 31) {\n\t\t\tconsole.error(\"Name \" + _nm + \" will be truncated to \" + _nm.slice(0,31));\n\t\t\t_nm = _nm.slice(0, 31);\n\t\t}\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 511) & -512;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size > 0 && file.size < 0x1000) {\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 63) & -64;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tif (has_buf) {\n\t\to.l = o.length;\n\t} else {\n\t\t// When using Buffer, already 0-filled\n\t\twhile(o.l < o.length) o.write_shift(1, 0);\n\t}\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {\n\tvar UCFullPaths/*:Array*/ = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths/*:Array*/ = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k/*:boolean*/ = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath/*:string*/ = path.toUpperCase();\n\tvar w/*:number*/ = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*:CFBWriteOpts*/)/*:void*/ {\n\tget_fs();\n\tvar o = _write(cfb, options);\n\t/*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\tfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o/*:RawBytes*/)/*:string*/ {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type || \"buffer\") {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o/*:any*/)); return o;\n\t\tcase \"binary\": return typeof o == \"string\" ? o : a2s(o);\n\t\tcase \"base64\": return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\t\tcase \"buffer\": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\t\t\t/* falls through */\n\t\tcase \"array\": return typeof o == \"string\" ? s2a(o) : o;\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 , 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ];\n\n/* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\nvar DST_LN = [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* helpers for unaligned bit writes */\nfunction write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;\n\tif(w <= 5) buf[h] |= (v & 7) << w;\n\telse {\n\t\tbuf[h] |= (v << w) & 0xFF;\n\t\tbuf[h+1] = (v&7) >> (8-w);\n\t}\n\treturn bl + 3;\n}\n\nfunction write_bits_1(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv = (v&1) << w;\n\tbuf[h] |= v;\n\treturn bl + 1;\n}\nfunction write_bits_8(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v;\n\treturn bl + 8;\n}\nfunction write_bits_16(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v & 0xFF;\n\tbuf[h+2] = v >>> 8;\n\treturn bl + 16;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz/*:number*/) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < L; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<*/ = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens/*:Array*/ = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();var _deflateRaw = /*#__PURE__*/(function _deflateRawIIFE() {\n\tvar DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n\tvar j = 0, k = 0;\n\tfor(; j < DST_LN.length - 1; ++j) {\n\t\tfor(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;\n\t}\n\tfor(;k < 32768; ++k) DST_LN_RE[k] = 29;\n\n\tvar LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\tfor(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n\t\tfor(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;\n\t}\n\n\tfunction write_stored(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t}\n\n\t/* Fixed Huffman */\n\tfunction write_huff_fixed(data, out) {\n\t\tvar bl = 0;\n\t\tvar boff = 0;\n\t\tvar addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\t\twhile(boff < data.length) {\n\t\t\tvar L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);\n\n\t\t\t/* write a stored block for short data */\n\t\t\tif(L < 10) {\n\t\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\t\t\t\tif(bl & 7) bl += 8 - (bl & 7);\n\t\t\t\tout.l = (bl / 8) | 0;\n\t\t\t\tout.write_shift(2, L);\n\t\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t\t\tbl = out.l * 8;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\t\t\tvar hash = 0;\n\t\t\twhile(L-- > 0) {\n\t\t\t\tvar d = data[boff];\n\t\t\t\thash = ((hash << 5) ^ d) & 0x7FFF;\n\n\t\t\t\tvar match = -1, mlen = 0;\n\n\t\t\t\tif((match = addrs[hash])) {\n\t\t\t\t\tmatch |= boff & ~0x7FFF;\n\t\t\t\t\tif(match > boff) match -= 0x8000;\n\t\t\t\t\tif(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;\n\t\t\t\t}\n\n\t\t\t\tif(mlen > 2) {\n\t\t\t\t\t/* Copy Token */\n\t\t\t\t\td = LEN_LN_RE[mlen];\n\t\t\t\t\tif(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;\n\t\t\t\t\telse {\n\t\t\t\t\t\twrite_bits_8(out, bl, 3);\n\t\t\t\t\t\tbl += 5;\n\t\t\t\t\t\twrite_bits_8(out, bl, bitswap8[d-23]>>5);\n\t\t\t\t\t\tbl += 3;\n\t\t\t\t\t}\n\t\t\t\t\tvar len_eb = (d < 8) ? 0 : ((d - 4)>>2);\n\t\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, mlen - LEN_LN[d]);\n\t\t\t\t\t\tbl += len_eb;\n\t\t\t\t\t}\n\n\t\t\t\t\td = DST_LN_RE[boff - match];\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]>>3);\n\t\t\t\t\tbl -= 3;\n\n\t\t\t\t\tvar dst_eb = d < 4 ? 0 : (d-2)>>1;\n\t\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, boff - match - DST_LN[d]);\n\t\t\t\t\t\tbl += dst_eb;\n\t\t\t\t\t}\n\t\t\t\t\tfor(var q = 0; q < mlen; ++q) {\n\t\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t\thash = ((hash << 5) ^ data[boff]) & 0x7FFF;\n\t\t\t\t\t\t++boff;\n\t\t\t\t\t}\n\t\t\t\t\tL-= mlen - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* Literal Token */\n\t\t\t\t\tif(d <= 143) d = d + 48;\n\t\t\t\t\telse bl = write_bits_1(out, bl, 1);\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]);\n\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t++boff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbl = write_bits_8(out, bl, 0) - 1;\n\t\t}\n\t\tout.l = ((bl + 7)/8)|0;\n\t\treturn out.l;\n\t}\n\treturn function _deflateRaw(data, out) {\n\t\tif(data.length < 8) return write_stored(data, out);\n\t\treturn write_huff_fixed(data, out);\n\t};\n})();\n\nfunction _deflate(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n}\n/* modified inflate function also moves original read head */\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff/*:number*/) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<*/ = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz/*:number*/) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(sz > 0) {\n\t\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\t\twhile(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else if((header >> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\tif(usz) return [outbuf, (boff+7)>>>3];\n\treturn [outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tvar blob/*:CFBlob*/ = /*::(*/file/*:: :any)*/;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(/*::(*/blob.slice(blob.l+namelen, blob.l+namelen+efsz)/*:: :any)*/);\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\t/* ZIP64 lengths */\n\t\tif(EF && EF[0x0001]) {\n\t\t\tif((EF[0x0001]||{}).usz) usz = EF[0x0001].usz;\n\t\t\tif((EF[0x0001]||{}).csz) csz = EF[0x0001].csz;\n\t\t}\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*/, o/*:CFBContainer*/, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(/*::(*/blob.slice(blob.l, blob.l + efsz)/*:: :any)*/);\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif((ef[0x0001]||{}).usz) _usz = ef[0x0001].usz;\n\t\tif((ef[0x0001]||{}).csz) _csz = ef[0x0001].csz;\n\t\tif(EF) {\n\t\t\tif((EF[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t\t\tif((EF[0x0001]||{}).usz) _usz = ef[0x0001].usz;\n\t\t\tif((EF[0x0001]||{}).csz) _csz = ef[0x0001].csz;\n\t\t}\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break; // TODO: scan for magic number\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\t//var _crc32 = CRC32.buf(data, 0);\n\t//if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o/*:CFBlob*/ = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = typeof fi.content == \"string\" ? CRC32.bstr(fi.content, 0) : CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);\n\n\t\tvar outbuf = typeof fi.content == \"string\" ? s2a(fi.content) : fi.content/*::||[]*/;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4, (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4, (flags & 8) ? 0 : /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: extra fields? */\n\n\t\t/* TODO: encryption header ? */\n\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out/*:any*/)), bconcat(cdirs), o]/*:any*/));\n}\nvar ContentTypeMap = ({\n\t\"htm\": \"text/html\",\n\t\"xml\": \"text/xml\",\n\n\t\"gif\": \"image/gif\",\n\t\"jpg\": \"image/jpeg\",\n\t\"png\": \"image/png\",\n\n\t\"mso\": \"application/x-mso\",\n\t\"thmx\": \"application/vnd.ms-officetheme\",\n\t\"sh33tj5\": \"application/octet-stream\"\n}/*:any*/);\n\nfunction get_content_type(fi/*:CFBEntry*/, fp/*:string*/)/*:string*/ {\n\tif(fi.ctype) return fi.ctype;\n\n\tvar ext = fi.name || \"\", m = ext.match(/\\.([^\\.]+)$/);\n\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n\tif(fp) {\n\t\tm = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n\t\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\t}\n\n\treturn \"application/octet-stream\";\n}\n\n/* 76 character chunks TODO: intertwine encoding */\nfunction write_base64_76(bstr/*:string*/)/*:string*/ {\n\tvar data = Base64_encode(bstr);\n\tvar o = [];\n\tfor(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));\n\treturn o.join(\"\\r\\n\") + \"\\r\\n\";\n}\n\n/*\nRules for QP:\n\t- escape =## applies for all non-display characters and literal \"=\"\n\t- space or tab at end of line must be encoded\n\t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n\t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n\nTODO: Some files from word appear to write line extensions with bare equals:\n\n```\n*/ = [], split = encoded.split(\"\\r\\n\");\n\tfor(var si = 0; si < split.length; ++si) {\n\t\tvar str = split[si];\n\t\tif(str.length == 0) { o.push(\"\"); continue; }\n\t\tfor(var i = 0; i < str.length;) {\n\t\t\tvar end = 76;\n\t\t\tvar tmp = str.slice(i, i + end);\n\t\t\tif(tmp.charAt(end - 1) == \"=\") end --;\n\t\t\telse if(tmp.charAt(end - 2) == \"=\") end -= 2;\n\t\t\telse if(tmp.charAt(end - 3) == \"=\") end -= 3;\n\t\t\ttmp = str.slice(i, i + end);\n\t\t\ti += end;\n\t\t\tif(i < str.length) tmp += \"=\";\n\t\t\to.push(tmp);\n\t\t}\n\t}\n\n\treturn o.join(\"\\r\\n\");\n}\nfunction parse_quoted_printable(data/*:Array*/)/*:RawBytes*/ {\n\tvar o = [];\n\n\t/* unify long lines */\n\tfor(var di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\twhile(di <= data.length && line.charAt(line.length - 1) == \"=\") line = line.slice(0, line.length - 1) + data[++di];\n\t\to.push(line);\n\t}\n\n\t/* decode */\n\tfor(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });\n\treturn s2a(o.join(\"\\r\\n\"));\n}\n\n\nfunction parse_mime(cfb/*:CFBContainer*/, data/*:Array*/, root/*:string*/)/*:void*/ {\n\tvar fname = \"\", cte = \"\", ctype = \"\", fdata;\n\tvar di = 0;\n\tfor(;di < 10; ++di) {\n\t\tvar line = data[di];\n\t\tif(!line || line.match(/^\\s*$/)) break;\n\t\tvar m = line.match(/^([^:]*?):\\s*([^\\s].*)$/);\n\t\tif(m) switch(m[1].toLowerCase()) {\n\t\t\tcase \"content-location\": fname = m[2].trim(); break;\n\t\t\tcase \"content-type\": ctype = m[2].trim(); break;\n\t\t\tcase \"content-transfer-encoding\": cte = m[2].trim(); break;\n\t\t}\n\t}\n\t++di;\n\tswitch(cte.toLowerCase()) {\n\t\tcase 'base64': fdata = s2a(Base64_decode(data.slice(di).join(\"\"))); break;\n\t\tcase 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;\n\t\tdefault: throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n\t}\n\tvar file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});\n\tif(ctype) file.ctype = ctype;\n}\n\nfunction parse_mad(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tif(a2s(file.slice(0,13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n\tvar root = (options && options.root || \"\");\n\t// $FlowIgnore\n\tvar data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n\tvar di = 0, row = \"\";\n\n\t/* if root is not specified, scan for the common prefix */\n\tfor(di = 0; di < data.length; ++di) {\n\t\trow = data[di];\n\t\tif(!/^Content-Location:/i.test(row)) continue;\n\t\trow = row.slice(row.indexOf(\"file\"));\n\t\tif(!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n\t\tif(row.slice(0, root.length) == root) continue;\n\t\twhile(root.length > 0) {\n\t\t\troot = root.slice(0, root.length - 1);\n\t\t\troot = root.slice(0, root.lastIndexOf(\"/\") + 1);\n\t\t\tif(row.slice(0,root.length) == root) break;\n\t\t}\n\t}\n\n\tvar mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n\tif(!mboundary) throw new Error(\"MAD cannot find boundary\");\n\tvar boundary = \"--\" + (mboundary[1] || \"\");\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o);\n\tvar start_di, fcnt = 0;\n\tfor(di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\tif(line !== boundary && line !== boundary + \"--\") continue;\n\t\tif(fcnt++) parse_mime(o, data.slice(start_di, di), root);\n\t\tstart_di = di;\n\t}\n\treturn o;\n}\n\nfunction write_mad(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:string*/ {\n\tvar opts = options || {};\n\tvar boundary = opts.boundary || \"SheetJS\";\n\tboundary = '------=' + boundary;\n\n\tvar out = [\n\t\t'MIME-Version: 1.0',\n\t\t'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"',\n\t\t'',\n\t\t'',\n\t\t''\n\t];\n\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tfor(var i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length);\n\t\tfi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\n\t\t/* Normalize filename */\n\t\tfp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function(c) {\n\t\t\treturn \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n\t\t}).replace(/[\\u0080-\\uFFFF]/g, function(u) {\n\t\t\treturn \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n\t\t});\n\n\t\t/* Extract content as binary string */\n\t\tvar ca = fi.content;\n\t\t// $FlowIgnore\n\t\tvar cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n\n\t\t/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\t\tvar dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;\n\t\tfor(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n\t\tvar qp = dispcnt >= L * 4 / 5;\n\n\t\tout.push(boundary);\n\t\tout.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n\t\tout.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n\t\tout.push('Content-Type: ' + get_content_type(fi, fp));\n\t\tout.push('');\n\n\t\tout.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n\t}\n\tout.push(boundary + '--\\r\\n');\n\treturn out.join(\"\\r\\n\");\n}\nfunction cfb_new(opts/*:?any*/)/*:CFBContainer*/ {\n\tvar o/*:CFBContainer*/ = ({}/*:any*/);\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBytes*/, opts/*:?any*/)/*:CFBEntry*/ {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath/*:string*/ = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2}/*:any*/);\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\n\t/*:: if(!file) throw new Error(\"unreachable\"); */\n\tfile.content = (content/*:any*/);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nvar _fs;\nfunction set_fs(fs) { _fs = fs; }\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tif(typeof Deno !== 'undefined') {\n\t\t/* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */\n\t\tif(enc && typeof payload == \"string\") switch(enc) {\n\t\t\tcase \"utf8\": payload = new TextEncoder(enc).encode(payload); break;\n\t\t\tcase \"binary\": payload = s2ab(payload); break;\n\t\t\t/* TODO: binary equivalent */\n\t\t\tdefault: throw new Error(\"Unsupported encoding \" + enc);\n\t\t}\n\t\treturn Deno.writeFileSync(fname, payload);\n\t}\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\n\t/*:: declare var IE_SaveFile: any; */\n\tif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\n\t\t/*:: declare var navigator: any; */\n\t\tif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n\t\t/*:: declare var saveAs: any; */\n\t\tif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\n\t\t\t/*:: declare var chrome: any; */\n\t\t\tif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true });\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\t\t\t\ta.download = fname; a.href = url; document.body.appendChild(a); a.click();\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */ document.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t} else if(typeof URL !== 'undefined' && !URL.createObjectURL && typeof chrome === 'object') {\n\t\t\t/* manifest v3 extensions -- no URL.createObjectURL */\n\t\t\tvar b64 = \"data:application/octet-stream;base64,\" + Base64_encode_arr(new Uint8Array(blobify(data)));\n\t\t\treturn chrome.downloads.download({ url: b64, filename: fname, saveAs: true });\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || e.message.indexOf(\"onstruct\") == -1) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path/*:string*/) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\tif(typeof Deno !== 'undefined') return Deno.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || e.message.indexOf(\"onstruct\") == -1) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o/*:any*/)/*:Array*/ {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj/*:any*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj/*:any*/)/*:EvertNumType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj/*:any*/)/*:EvertArrType*/ {\n\tvar o/*:EvertArrType*/ = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar dnthresh = /*#__PURE__*/Date.UTC(1899, 11, 30, 0, 0, 0); // -2209161600000\nvar dnthresh1 = /*#__PURE__*/Date.UTC(1899, 11, 31, 0, 0, 0); // -2209075200000\nvar dnthresh2 = /*#__PURE__*/Date.UTC(1904, 0, 1, 0, 0, 0); // -2209075200000\nfunction datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tvar res = (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n\tif(date1904) { res -= 1462; return res < -1402 ? res - 1 : res; }\n\treturn res < 60 ? res - 1 : res;\n}\nfunction numdate(v/*:number*/)/*:Date|number*/ {\n\tif(v >= 60 && v < 61) return v;\n\tvar out = new Date();\n\tout.setTime((v>60 ? v : (v+1)) * 24 * 60 * 60 * 1000 + dnthresh);\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\n/* Blame https://bugs.chromium.org/p/v8/issues/detail?id=7863 for the regexide */\nvar pdre1 = /^(\\d+):(\\d+)(:\\d+)?(\\.\\d+)?$/; // HH:MM[:SS[.UUU]]\nvar pdre2 = /^(\\d+)-(\\d+)-(\\d+)$/; // YYYY-mm-dd\nvar pdre3 = /^(\\d+)-(\\d+)-(\\d+)[T ](\\d+):(\\d+)(:\\d+)?(\\.\\d+)?$/; // YYYY-mm-dd(T or space)HH:MM[:SS[.UUU]], sans \"Z\"\n/* parses a date string as a UTC date */\nfunction parseDate(str/*:string*/, date1904/*:boolean*/)/*:Date*/ {\n\tif(str instanceof Date) return str;\n\tvar m = str.match(pdre1);\n\tif(m) return new Date((date1904 ? dnthresh2 : dnthresh1) + ((parseInt(m[1], 10)*60 + parseInt(m[2], 10))*60 + (m[3] ? parseInt(m[3].slice(1), 10) : 0))*1000 + (m[4] ? parseInt((m[4]+\"000\").slice(1,4), 10) : 0));\n\tm = str.match(pdre2);\n\tif(m) return new Date(Date.UTC(+m[1], +m[2]-1, +m[3], 0, 0, 0, 0));\n\t/* TODO: 1900-02-29T00:00:00.000 should return a flag to treat as a date code (affects xlml) */\n\tm = str.match(pdre3);\n\tif(m) return new Date(Date.UTC(+m[1], +m[2]-1, +m[3], +m[4], +m[5], ((m[6] && parseInt(m[6].slice(1), 10))|| 0), ((m[7] && parseInt((m[7] + \"0000\").slice(1,4), 10))||0)));\n\tvar d = new Date(str);\n\treturn d;\n}\n\nfunction cc2str(arr/*:Array*/, debomit)/*:string*/ {\n\tif(has_buf && Buffer.isBuffer(arr)) {\n\t\tif(debomit && buf_utf16le) {\n\t\t\t// TODO: temporary patch\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString(\"utf16le\"));\n\t\t\tif(arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString(\"binary\")));\n\t\t}\n\t\treturn arr.toString(\"binary\");\n\t}\n\n\tif(typeof TextDecoder !== \"undefined\") try {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder(\"utf-16le\").decode(arr.slice(2)));\n\t\t\tif(arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder(\"utf-16be\").decode(arr.slice(2)));\n\t\t}\n\t\tvar rev = {\n\t\t\t\"\\u20ac\": \"\\x80\", \"\\u201a\": \"\\x82\", \"\\u0192\": \"\\x83\", \"\\u201e\": \"\\x84\",\n\t\t\t\"\\u2026\": \"\\x85\", \"\\u2020\": \"\\x86\", \"\\u2021\": \"\\x87\", \"\\u02c6\": \"\\x88\",\n\t\t\t\"\\u2030\": \"\\x89\", \"\\u0160\": \"\\x8a\", \"\\u2039\": \"\\x8b\", \"\\u0152\": \"\\x8c\",\n\t\t\t\"\\u017d\": \"\\x8e\", \"\\u2018\": \"\\x91\", \"\\u2019\": \"\\x92\", \"\\u201c\": \"\\x93\",\n\t\t\t\"\\u201d\": \"\\x94\", \"\\u2022\": \"\\x95\", \"\\u2013\": \"\\x96\", \"\\u2014\": \"\\x97\",\n\t\t\t\"\\u02dc\": \"\\x98\", \"\\u2122\": \"\\x99\", \"\\u0161\": \"\\x9a\", \"\\u203a\": \"\\x9b\",\n\t\t\t\"\\u0153\": \"\\x9c\", \"\\u017e\": \"\\x9e\", \"\\u0178\": \"\\x9f\"\n\t\t};\n\t\tif(Array.isArray(arr)) arr = new Uint8Array(arr);\n\t\treturn new TextDecoder(\"latin1\").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function(c) { return rev[c] || c; });\n\t} catch(e) {}\n\n\tvar o = [], i = 0;\n\t// this cascade is for the browsers and runtimes of antiquity (and for modern runtimes that lack TextEncoder)\n\ttry {\n\t\tfor(i = 0; i < arr.length - 65536; i+=65536) o.push(String.fromCharCode.apply(0, arr.slice(i, i + 65536)));\n\t\to.push(String.fromCharCode.apply(0, arr.slice(i)));\n\t} catch(e) { try {\n\t\t\tfor(; i < arr.length - 16384; i+=16384) o.push(String.fromCharCode.apply(0, arr.slice(i, i + 16384)));\n\t\t\to.push(String.fromCharCode.apply(0, arr.slice(i)));\n\t\t} catch(e) {\n\t\t\tfor(; i != arr.length; ++i) o.push(String.fromCharCode(arr[i]));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction dup(o/*:any*/)/*:any*/ {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s/*:string*/)/*:number*/ {\n\tvar v/*:number*/ = Number(s);\n\tif(!isNaN(v)) return isFinite(v) ? v : NaN;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(]([^()]*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\n\n/* NOTE: Chrome rejects bare times like 1:23 PM */\nvar FDRE1 = /^(0?\\d|1[0-2])(?:|:([0-5]?\\d)(?:|(\\.\\d+)(?:|:([0-5]?\\d))|:([0-5]?\\d)(|\\.\\d+)))\\s+([ap])m?$/;\nvar FDRE2 = /^([01]?\\d|2[0-3])(?:|:([0-5]?\\d)(?:|(\\.\\d+)(?:|:([0-5]?\\d))|:([0-5]?\\d)(|\\.\\d+)))$/;\nvar FDISO = /^(\\d+)-(\\d+)-(\\d+)[T ](\\d+):(\\d+)(:\\d+)(\\.\\d+)?[Z]?$/; // YYYY-mm-dd(T or space)HH:MM:SS[.UUU][Z]\n\n/* TODO: 1904 adjustment */\nvar utc_append_works = new Date(\"6/9/69 00:00 UTC\").valueOf() == -17798400000;\nfunction fuzzytime1(M) /*:Date*/ {\n\tif(!M[2]) return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), 0, 0, 0));\n\tif(M[3]) {\n\t\t\tif(M[4]) return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], +M[4], parseFloat(M[3])*1000));\n\t\t\telse return new Date(Date.UTC(1899,11,31,(M[7] == \"p\" ? 12 : 0), +M[1], +M[2], parseFloat(M[3])*1000));\n\t}\n\telse if(M[5]) return new Date(Date.UTC(1899,11,31, (+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1000 : 0));\n\telse return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], 0, 0));\n}\nfunction fuzzytime2(M) /*:Date*/ {\n\tif(!M[2]) return new Date(Date.UTC(1899,11,31,+M[1], 0, 0, 0));\n\tif(M[3]) {\n\t\t\tif(M[4]) return new Date(Date.UTC(1899,11,31,+M[1], +M[2], +M[4], parseFloat(M[3])*1000));\n\t\t\telse return new Date(Date.UTC(1899,11,31,0, +M[1], +M[2], parseFloat(M[3])*1000));\n\t}\n\telse if(M[5]) return new Date(Date.UTC(1899,11,31, +M[1], +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1000 : 0));\n\telse return new Date(Date.UTC(1899,11,31,+M[1], +M[2], 0, 0));\n}\nvar lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\nfunction fuzzydate(s/*:string*/)/*:Date*/ {\n\t// See issue 2863 -- this is technically not supported in Excel but is otherwise useful\n\tif(FDISO.test(s)) return s.indexOf(\"Z\") == -1 ? local_to_utc(new Date(s)) : new Date(s);\n\tvar lower = s.toLowerCase();\n\tvar lnos = lower.replace(/\\s+/g, \" \").trim();\n\tvar M = lnos.match(FDRE1);\n\tif(M) return fuzzytime1(M);\n\tM = lnos.match(FDRE2);\n\tif(M) return fuzzytime2(M);\n\tM = lnos.match(pdre3);\n\tif(M) return new Date(Date.UTC(+M[1], +M[2]-1, +M[3], +M[4], +M[5], ((M[6] && parseInt(M[6].slice(1), 10))|| 0), ((M[7] && parseInt((M[7] + \"0000\").slice(1,4), 10))||0)));\n\tvar o = new Date(utc_append_works && s.indexOf(\"UTC\") == -1 ? s + \" UTC\": s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tif(lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {\n\t\tlower = lower.replace(/[^a-z]/g,\"\").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/,\"\");\n\t\tif(lower.length > 3 && lower_months.indexOf(lower) == -1) return n;\n\t} else if(lower.replace(/[ap]m?/, \"\").match(/[a-z]/)) return n;\n\tif(y < 0 || y > 8099 || s.match(/[^-0-9:,\\/\\\\\\ ]/)) return n;\n\treturn o;\n}\n\nvar split_regex = /*#__PURE__*/(function() {\n\tvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n\treturn function split_regex(str/*:string*/, re, def/*:string*/)/*:Array*/ {\n\t\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\t\tvar p = str.split(re), o = [p[0]];\n\t\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\t\treturn o;\n\t};\n})();\n\nfunction utc_to_local(utc) {\n\treturn new Date(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate(), utc.getUTCHours(), utc.getUTCMinutes(), utc.getUTCSeconds(), utc.getUTCMilliseconds());\n}\nfunction local_to_utc(local) {\n\treturn new Date(Date.UTC(local.getFullYear(), local.getMonth(), local.getDate(), local.getHours(), local.getMinutes(), local.getSeconds(), local.getMilliseconds()));\n}\n\nfunction remove_doctype(str) {\n\tvar preamble = str.slice(0, 1024);\n\tvar si = preamble.indexOf(\"/g) --> str_match_ng(str, \"\") */\nfunction str_match_ng(str, s, e) {\n var out = [];\n\n var si = str.indexOf(s);\n while(si > -1) {\n var ei = str.indexOf(e, si + s.length);\n\t\tif(ei == -1) break;\n\n\t\tout.push(str.slice(si, ei + e.length));\n\t\tsi = str.indexOf(s, ei + e.length);\n\t}\n\n return out.length > 0 ? out : null;\n}\n\n/* str.replace(//g, \"\") --> str_remove_ng(str, \"\") */\nfunction str_remove_ng(str, s, e) {\n var out = [], last = 0;\n\n var si = str.indexOf(s);\n\tif(si == -1) return str;\n while(si > -1) {\n\t\tout.push(str.slice(last, si));\n var ei = str.indexOf(e, si + s.length);\n\t\tif(ei == -1) break;\n\n\t\tif((si = str.indexOf(s, (last = ei + e.length))) == -1) out.push(str.slice(last));\n\t}\n\n return out.join(\"\");\n}\n\n/* str.match(/]*?>([\\s\\S]*?)/) --> str_match_xml(str, \"tag\") */\nvar xml_boundary = { \" \": 1, \"\\t\": 1, \"\\r\": 1, \"\\n\": 1, \">\": 1 };\nfunction str_match_xml(str, tag) {\n\tvar si = str.indexOf('<' + tag), w = tag.length + 1, L = str.length;\n\twhile(si >= 0 && si <= L - w && !xml_boundary[str.charAt(si + w)]) si = str.indexOf('<' + tag, si+1);\n\tif(si === -1) return null;\n\tvar sf = str.indexOf(\">\", si + tag.length);\n\tif(sf === -1) return null;\n\tvar et = \"\";\n\tvar ei = str.indexOf(et, sf);\n\tif(ei == -1) return null;\n\treturn [str.slice(si, ei + et.length), str.slice(sf + 1, ei)];\n}\n\n/* str.match(/<(?:\\w+:)?tag\\b[^<>]*?>([\\s\\S]*?)<\\/(?:\\w+:)?tag>/) --> str_match_xml(str, \"tag\") */\nvar str_match_xml_ns = /*#__PURE__*/(function() {\n\tvar str_match_xml_ns_cache = {};\n\treturn function str_match_xml_ns(str, tag) {\n\t\tvar res = str_match_xml_ns_cache[tag];\n\t\tif(!res) str_match_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<(?:\\\\w+:)?'+tag+'\\\\b[^<>]*>', \"g\"),\n\t\t\tnew RegExp('', \"g\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m = res[0].exec(str);\n\t\tif(!m) return null;\n\t\tvar si = m.index;\n\t\tvar sf = res[0].lastIndex;\n\t\tres[1].lastIndex = res[0].lastIndex;\n\t\tm = res[1].exec(str);\n\t\tif(!m) return null;\n\t\tvar ei = m.index;\n\t\tvar ef = res[1].lastIndex;\n\t\treturn [str.slice(si, ef), str.slice(sf, ei)];\n\t};\n})();\n\n/* str.match(/<(?:\\w+:)?tag\\b[^<>]*?>([\\s\\S]*?)<\\/(?:\\w+:)?tag>/g) --> str_match_xml_ns_g(str, \"tag\") */\nvar str_match_xml_ns_g = /*#__PURE__*/(function() {\n\tvar str_match_xml_ns_cache = {};\n\treturn function str_match_xml_ns(str, tag) {\n\t\tvar out = [];\n\t\tvar res = str_match_xml_ns_cache[tag];\n\t\tif(!res) str_match_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<(?:\\\\w+:)?'+tag+'\\\\b[^<>]*>', \"g\"),\n\t\t\tnew RegExp('', \"g\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m;\n\t\twhile((m = res[0].exec(str))) {\n\t\t\tvar si = m.index;\n\t\t\tres[1].lastIndex = res[0].lastIndex;\n\t\t\tm = res[1].exec(str);\n\t\t\tif(!m) return null;\n\t\t\tvar ef = res[1].lastIndex;\n\t\t\tout.push(str.slice(si, ef));\n\t\t\tres[0].lastIndex = res[1].lastIndex;\n\t\t}\n\t\treturn out.length == 0 ? null : out;\n\t};\n})();\nvar str_remove_xml_ns_g = /*#__PURE__*/(function() {\n\tvar str_remove_xml_ns_cache = {};\n\treturn function str_remove_xml_ns_g(str, tag) {\n\t\tvar out = [];\n\t\tvar res = str_remove_xml_ns_cache[tag];\n\t\tif(!res) str_remove_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<(?:\\\\w+:)?'+tag+'\\\\b[^<>]*>', \"g\"),\n\t\t\tnew RegExp('', \"g\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m;\n\t\tvar si = 0, ef = 0;\n\t\twhile((m = res[0].exec(str))) {\n\t\t\tsi = m.index;\n\t\t\tout.push(str.slice(ef, si));\n\t\t\tef = si;\n\t\t\tres[1].lastIndex = res[0].lastIndex;\n\t\t\tm = res[1].exec(str);\n\t\t\tif(!m) return null;\n\t\t\tef = res[1].lastIndex;\n\t\t\tres[0].lastIndex = res[1].lastIndex;\n\t\t}\n\t\tout.push(str.slice(ef));\n\t\treturn out.length == 0 ? \"\" : out.join(\"\");\n\t};\n})();\n\n/* str.match(/<(?:\\w+:)?tag\\b[^>]*?>([\\s\\S]*?)<\\/(?:\\w+:)?tag>/gi) --> str_match_xml_ns_ig(str, \"tag\") */\nvar str_match_xml_ig = /*#__PURE__*/(function() {\n\tvar str_match_xml_ns_cache = {};\n\treturn function str_match_xml_ns(str, tag) {\n\t\tvar out = [];\n\t\tvar res = str_match_xml_ns_cache[tag];\n\t\tif(!res) str_match_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<'+tag+'\\\\b[^<>]*>', \"ig\"),\n\t\t\tnew RegExp('', \"ig\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m;\n\t\twhile((m = res[0].exec(str))) {\n\t\t\tvar si = m.index;\n\t\t\tres[1].lastIndex = res[0].lastIndex;\n\t\t\tm = res[1].exec(str);\n\t\t\tif(!m) return null;\n\t\t\tvar ef = res[1].lastIndex;\n\t\t\tout.push(str.slice(si, ef));\n\t\t\tres[0].lastIndex = res[1].lastIndex;\n\t\t}\n\t\treturn out.length == 0 ? null : out;\n\t};\n})();\nfunction getdatastr(data)/*:?string*/ {\n\tif(!data) return null;\n\tif(data.content && data.type) return cc2str(data.content, true);\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file/*:string*/) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase().replace(/[\\/]/g, '\\\\'), g = f.replace(/\\\\/g,'\\/');\n\tfor(var i=0; i\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex1=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?<>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\"<>\\s=]+))*\\s*[\\/\\?]?>/mg, tagregex2 = /<[^<>]*>/g;\nvar tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {\n\tvar z = ({}/*:any*/);\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i].slice(1);\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'"': '\"',\n\t''': \"'\",\n\t'>': '>',\n\t'<': '<',\n\t'&': '&'\n};\nvar rencoding = /*#__PURE__*/evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml/*:StringConv*/ = /*#__PURE__*/(function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\tfunction raw_unescapexml(text/*:string*/)/*:string*/ {\n\t\tvar s = text + '', i = s.indexOf(\"-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn raw_unescapexml(s.slice(0, i)) + s.slice(i+9,j) + raw_unescapexml(s.slice(j+3));\n\t}\n\treturn function unescapexml(text/*:string*/, xlsx/*:boolean*/) {\n\t\tvar out = raw_unescapexml(text);\n\t\treturn xlsx ? out.replace(/\\r\\n/g, \"\\n\") : out;\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f\\uFFFE-\\uFFFF]/g;\nfunction escapexml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"
\").replace(htmlcharegex,function(s) { return \"&#x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"&#x\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr/*:StringConv*/ = /*#__PURE__*/(function() {\n\tvar entregex = /&#(\\d+);/g;\n\tfunction entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str/*:string*/)/*:string*/ { return str.replace(entregex,entrepl); };\n})();\nfunction xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\ \"); }\n\n/* note: xsd:boolean valid values: true / 1 / false / 0 */\nfunction parsexmlbool(value/*:any*/)/*:boolean*/ {\n\tswitch(value) {\n\t\tcase 1: case true: case '1': case 'true': return true;\n\t\tcase 0: case false: case '0': case 'false': return false;\n\t\t//default: throw new Error(\"Invalid xsd:boolean \" + value);\n\t}\n\treturn false;\n}\n\nfunction utf8reada(orig/*:string*/)/*:string*/ {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n}\n\nfunction utf8readb(data) {\n\tvar out = new_raw_buf(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\tfor(i = 0; i < data.length; i+=j) {\n\t\tj = 1;\n\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\telse { j = 4;\n\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t}\n\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t}\n\treturn out.slice(0,k).toString('ucs2');\n}\n\nfunction utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); }\n\nvar utf8corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\nvar utf8read = has_buf && (/*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;\n\nvar utf8write/*:StringConv*/ = has_buf ? function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); } : function(orig/*:string*/)/*:string*/ {\n\tvar out/*:Array*/ = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\nvar htmldecode/*:{(s:string):string}*/ = /*#__PURE__*/(function() {\n\tvar entities/*:Array<[RegExp, string]>*/ = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']\n\t].map(function(x/*:[string, string]*/) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str/*:string*/)/*:string*/ {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/(^|[^\\t\\n\\r ])[\\t\\n\\r ]+$/,\"$1\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\b\\s+ tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^<>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^<\"'>]*)>([\\s\\S]*)*/ {\n\tvar h = parsexmltag(data);\n\n\tvar matches/*:Array*/ = str_match_xml_ns_g(data, h.baseType)||[];\n\tvar res/*:Array*/ = [];\n\tif(matches.length != h.size) {\n\t\tif(opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n\t\treturn res;\n\t}\n\tmatches.forEach(function(x/*:string*/) {\n\t\tvar v = x.replace(vtvregex,\"\").match(vtmregex);\n\t\tif(v) res.push({v:utf8read(v[2]), t:v[1]});\n\t});\n\treturn res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\nfunction writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f + (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + ''; }\n\nfunction wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '';}\n\nfunction write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx/*:?boolean*/)/*:string*/ {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/"/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nfunction xlml_normalize(d)/*:string*/ {\n\tif(has_buf &&/*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n/* UOS uses CJK in tags, ODS uses invalid XML */\nvar xlmlregex = /<([\\/]?)([^\\s?>:\\/\"]+)(?:\\s+[^<>=?\"'\\s]+=\"[^\"]*?\")*\\s*[\\/]?>/mg;\n\nvar XMLNS = ({\n\tCORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n\tCUST_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",\n\tEXT_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n\tCT: 'http://schemas.openxmlformats.org/package/2006/content-types',\n\tRELS: 'http://schemas.openxmlformats.org/package/2006/relationships',\n\tTCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n}/*:any*/);\n\nvar XMLNS_main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o': 'urn:schemas-microsoft-com:office:office',\n\t'x': 'urn:schemas-microsoft-com:office:excel',\n\t'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv': 'http://macVmlSchemaUri',\n\t'v': 'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n}/*:any*/);\nfunction read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar ___toBuffer = function(bufs/*:Array >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0].map(function(x) { return Buffer.isBuffer(x) ? x : Buffer_from(x); })) : ___toBuffer(bufs);} : ___toBuffer;\n\nvar ___utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array*/=[]; for(var i=s; i*/=[]; for(var i=s; i 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpstr = ___lpstr;\n\nvar ___cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __cpstr = ___cpstr;\n\nvar ___lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpwstr = ___lpwstr;\n\nvar ___lpp4 = function lpp4_(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __lpp4 = ___lpp4;\n\nvar ___8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = ___8lpp4;\n\nvar ___double = function(b/*:RawBytes|CFBlob*/, idx/*:number*/) { return read_double_le(b, idx);};\nvar __double = ___double;\n\nvar is_buf = function is_buf_a(a) { return Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n\nif(has_buf/*:: && typeof Buffer !== 'undefined'*/) {\n\t__lpstr = function lpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n}\n\n/* from js-xls */\nfunction cpdoit() {\n\t__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\nif(typeof $cptable !== 'undefined') cpdoit();\n\nvar __readUInt8 = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx]; };\nvar __readUInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {\n\tvar o=\"\", oI/*:: :number = 0*/, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this) && buf_utf16le) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 + __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 + __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof $cptable !== 'undefined') {\n\t\t\t\to = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/ {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\n\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\tfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs' || f == 'cpstr') {\n\t\tif(typeof $cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cpp = $cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cpp[0];\n\t\t\t}\n\t\t\tsize = val.length;\n\t\t} else if(typeof $cptable !== 'undefined' && f == 'cpstr') {\n\t\t\tcpp = $cptable.utils.encode(current_codepage, val);\n\t\t\t/* replace null bytes with _ when relevant */\n if(cpp.length == val.length) for(i = 0; i < val.length; ++i) if(cpp[i] == 0 && val.charCodeAt(i) != 0) cpp[i] = 0x5F;\n if(cpp.length == 2 * val.length) for(i = 0; i < val.length; ++i) if(cpp[2*i] == 0 && cpp[2*i+1] == 0 && val.charCodeAt(i) != 0) cpp[2*i] = 0x5F;\n\t\t\tfor(i = 0; i < cpp.length; ++i) this[this.l + i] = cpp[i];\n\t\t\tsize = cpp.length;\n\t\t} else {\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t\tsize = val.length;\n\t\t}\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tvar end/*:number*/ = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else /*:: if(typeof val === 'number') */ switch(t) {\n\t\tcase 1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase 3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase 4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase 8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos/*:number*/)/*:void*/ {\n\tblob.l = pos;\n\tblob.read_shift = /*::(*/ReadShift/*:: :any)*/;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += length; }\n\nfunction new_buf(sz/*:number*/)/*:Block*/ {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = R.f && R.f(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array()/*:BufArray*/ {\n\tvar bufs/*:Array*/ = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz/*:number*/)/*:Block*/ {\n\t\tvar o/*:Block*/ = (new_buf(sz)/*:any*/);\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf/*:Block*/ = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\t// workaround for new Buffer(3).slice(0,0) bug in bun 0.1.3\n\t\tif(curbuf.l) {\n\t\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\t}\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz/*:number*/)/*:Block*/ {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn bconcat(bufs);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs }/*:any*/);\n}\n\nfunction write_record(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/) {\n\tvar t/*:number*/ = +type, l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(/*:: length != null &&*/length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/)/*:CellAddress*/ {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts)/*:string*/ {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nfunction decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row/*:number*/)/*:string*/ { return \"\" + (row + 1); }\nfunction fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr/*:string*/)/*:Array*/ { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\nfunction decode_cell(cstr/*:string*/)/*:CellAddress*/ {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\nfunction encode_cell(cell/*:CellAddress*/)/*:string*/ {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range/*:string*/)/*:Range*/ {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\n/*# if only one arg, it is assumed to be a Range. If 2 args, both are cell addresses */\nfunction encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:string*/ {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\n/*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n\t\treturn encode_range(cs.s, cs.e);\n\t}\n/*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\tif(typeof cs !== 'string') cs = encode_cell((cs/*:any*/));\n\tif(typeof ce !== 'string') ce = encode_cell((ce/*:any*/));\n/*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n/*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\treturn cs == ce ? cs : cs + \":\" + ce;\n}\nfunction fix_range(a1/*:string*/)/*:string*/ {\n\tvar s = decode_range(a1);\n\treturn \"$\" + encode_col(s.s.c) + \"$\" + encode_row(s.s.r) + \":$\" + encode_col(s.e.c) + \"$\" + encode_row(s.e.r);\n}\n\n// List of invalid characters needs to be tested further\nfunction formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/.test(sname)) return \"'\" + sname.replace(/'/g, \"''\") + \"'\";\n\treturn sname;\n}\n\nfunction safe_decode_range(range/*:string*/)/*:Range*/ {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || cc != 10) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\t++i;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell/*:Cell*/, v/*:any*/) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF_format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF_format((cell.XF||{}).numFmtId||(q ? 14 : 0), q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(cell.t == \"e\") return BErr[cell.v] || cell.v;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_new(opts) {\n\tvar out = {};\n\tvar o = opts || {};\n\tif(o.dense) out[\"!data\"] = [];\n\treturn out;\n}\n\nfunction sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? (_ws[\"!data\"] != null) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws/*:Worksheet*/ = _ws || ({}/*:any*/);\n\tif(dense && !ws[\"!data\"]) ws[\"!data\"] = [];\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);\n\tif(ws[\"!ref\"]){\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = (ws[\"!ref\"] ? _range.e.r + 1 : 0);\n\t} else {\n\t\trange.s.c = range.e.c = range.s.r = range.e.r = 0;\n\t}\n\tvar row = [], seen = false;\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tvar __R = _R + R, __Rstr = \"\" + (__R + 1);\n\t\t//console.log(\"!!\", R, _R, __R);\n\t\tif(dense) {\n\t\t\tif(!ws[\"!data\"][__R]) ws[\"!data\"][__R] = [];\n\t\t\trow = ws[\"!data\"][__R];\n\t\t}\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell/*:Cell*/ = ({v: data[R][C] }/*:any*/);\n\t\t\tvar __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tseen = true;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) {\n\t\t\t\t\tif(cell.f) cell.t = 'n';\n\t\t\t\t\telse if(o.nullError) { cell.t = 'e'; cell.v = 0; }\n\t\t\t\t\telse if(!o.sheetStubs) continue;\n\t\t\t\t\telse cell.t = 'z';\n\t\t\t\t}\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\t\tif(!o.UTC) cell.v = local_to_utc(cell.v);\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF_format(cell.z, datenum(cell.v, o.date1904)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v, o.date1904); cell.w = SSF_format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(row[__C] && row[__C].z) cell.z = row[__C].z;\n\t\t\t\trow[__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_col(__C) + __Rstr/*:any*/;\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(seen && range.s.c < 10400000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_add_aoa(null, data, opts); }\n\nfunction parse_Int32LE(data) {\n\treturn data.read_shift(4, 'i');\n}\nfunction write_UInt32LE(x/*:number*/, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data/*::, length*/)/*:string*/ {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length/*:number*/)/*:XLString*/ {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str }/*:any*/);\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data)/*:any*/ {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell/*:any*/, o/*:?Block*/) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* Short XLSB Cell does not include column */\nfunction parse_XLSBShortCell(data)/*:any*/ {\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) <<16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c:-1, iStyleRef: iStyleRef };\n}\nfunction write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data)/*:number*/ {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, (b[0] & 0xFC), b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data/*:number*/, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data /*::, length*/)/*:Range*/ {\n\tvar cell/*:Range*/ = ({ s: {}, e: {} }/*:any*/);\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r/*:Range*/, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx/*:string*/) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data/*::, length*/) {\n\tif(data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n\treturn data.read_shift(8, 'f');\n}\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data/*::, length*/) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data/*::, length, opts*/) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m/*:number*/ = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n// Note: some tree shakers cannot handle VT_VECTOR | $CONST, hence extra vars\n//var VT_EMPTY = 0x0000;\n//var VT_NULL = 0x0001;\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003;\n//var VT_R4 = 0x0004;\n//var VT_R8 = 0x0005;\n//var VT_CY = 0x0006;\n//var VT_DATE = 0x0007;\n//var VT_BSTR = 0x0008;\n//var VT_ERROR = 0x000A;\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C;\n//var VT_DECIMAL = 0x000E;\n//var VT_I1 = 0x0010;\n//var VT_UI1 = 0x0011;\n//var VT_UI2 = 0x0012;\nvar VT_UI4 = 0x0013;\n//var VT_I8 = 0x0014;\n//var VT_UI8 = 0x0015;\n//var VT_INT = 0x0016;\n//var VT_UINT = 0x0017;\n//var VT_LPSTR = 0x001E;\n//var VT_LPWSTR = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041;\n//var VT_STREAM = 0x0042;\n//var VT_STORAGE = 0x0043;\n//var VT_STREAMED_Object = 0x0044;\n//var VT_STORED_Object = 0x0045;\n//var VT_BLOB_Object = 0x0046;\nvar VT_CF = 0x0047;\n//var VT_CLSID = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\n//var VT_VECTOR = 0x1000;\nvar VT_VECTOR_VARIANT = 0x100C;\nvar VT_VECTOR_LPSTR = 0x101E;\n//var VT_ARRAY = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n\t0x01: { n: 'CodePage', t: VT_I2 },\n\t0x02: { n: 'Category', t: VT_STRING },\n\t0x03: { n: 'PresentationFormat', t: VT_STRING },\n\t0x04: { n: 'ByteCount', t: VT_I4 },\n\t0x05: { n: 'LineCount', t: VT_I4 },\n\t0x06: { n: 'ParagraphCount', t: VT_I4 },\n\t0x07: { n: 'SlideCount', t: VT_I4 },\n\t0x08: { n: 'NoteCount', t: VT_I4 },\n\t0x09: { n: 'HiddenCount', t: VT_I4 },\n\t0x0a: { n: 'MultimediaClipCount', t: VT_I4 },\n\t0x0b: { n: 'ScaleCrop', t: VT_BOOL },\n\t0x0c: { n: 'HeadingPairs', t: VT_VECTOR_VARIANT /* VT_VECTOR | VT_VARIANT */ },\n\t0x0d: { n: 'TitlesOfParts', t: VT_VECTOR_LPSTR /* VT_VECTOR | VT_LPSTR */ },\n\t0x0e: { n: 'Manager', t: VT_STRING },\n\t0x0f: { n: 'Company', t: VT_STRING },\n\t0x10: { n: 'LinksUpToDate', t: VT_BOOL },\n\t0x11: { n: 'CharacterCount', t: VT_I4 },\n\t0x13: { n: 'SharedDoc', t: VT_BOOL },\n\t0x16: { n: 'HyperlinksChanged', t: VT_BOOL },\n\t0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },\n\t0x18: { n: 'DigSig', t: VT_BLOB },\n\t0x1A: { n: 'ContentType', t: VT_STRING },\n\t0x1B: { n: 'ContentStatus', t: VT_STRING },\n\t0x1C: { n: 'Language', t: VT_STRING },\n\t0x1D: { n: 'Version', t: VT_STRING },\n\t0xFF: {},\n\t/* [MS-OLEPS] 2.18 */\n\t0x80000000: { n: 'Locale', t: VT_UI4 },\n\t0x80000003: { n: 'Behavior', t: VT_UI4 },\n\t0x72627262: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n\t0x01: { n: 'CodePage', t: VT_I2 },\n\t0x02: { n: 'Title', t: VT_STRING },\n\t0x03: { n: 'Subject', t: VT_STRING },\n\t0x04: { n: 'Author', t: VT_STRING },\n\t0x05: { n: 'Keywords', t: VT_STRING },\n\t0x06: { n: 'Comments', t: VT_STRING },\n\t0x07: { n: 'Template', t: VT_STRING },\n\t0x08: { n: 'LastAuthor', t: VT_STRING },\n\t0x09: { n: 'RevNumber', t: VT_STRING },\n\t0x0A: { n: 'EditTime', t: VT_FILETIME },\n\t0x0B: { n: 'LastPrinted', t: VT_FILETIME },\n\t0x0C: { n: 'CreatedDate', t: VT_FILETIME },\n\t0x0D: { n: 'ModifiedDate', t: VT_FILETIME },\n\t0x0E: { n: 'PageCount', t: VT_I4 },\n\t0x0F: { n: 'WordCount', t: VT_I4 },\n\t0x10: { n: 'CharCount', t: VT_I4 },\n\t0x11: { n: 'Thumbnail', t: VT_CF },\n\t0x12: { n: 'Application', t: VT_STRING },\n\t0x13: { n: 'DocSecurity', t: VT_I4 },\n\t0xFF: {},\n\t/* [MS-OLEPS] 2.18 */\n\t0x80000000: { n: 'Locale', t: VT_UI4 },\n\t0x80000003: { n: 'Behavior', t: VT_UI4 },\n\t0x72627262: {}\n};\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n\t0x0001: \"US\", // United States\n\t0x0002: \"CA\", // Canada\n\t0x0003: \"\", // Latin America (except Brazil)\n\t0x0007: \"RU\", // Russia\n\t0x0014: \"EG\", // Egypt\n\t0x001E: \"GR\", // Greece\n\t0x001F: \"NL\", // Netherlands\n\t0x0020: \"BE\", // Belgium\n\t0x0021: \"FR\", // France\n\t0x0022: \"ES\", // Spain\n\t0x0024: \"HU\", // Hungary\n\t0x0027: \"IT\", // Italy\n\t0x0029: \"CH\", // Switzerland\n\t0x002B: \"AT\", // Austria\n\t0x002C: \"GB\", // United Kingdom\n\t0x002D: \"DK\", // Denmark\n\t0x002E: \"SE\", // Sweden\n\t0x002F: \"NO\", // Norway\n\t0x0030: \"PL\", // Poland\n\t0x0031: \"DE\", // Germany\n\t0x0034: \"MX\", // Mexico\n\t0x0037: \"BR\", // Brazil\n\t0x003d: \"AU\", // Australia\n\t0x0040: \"NZ\", // New Zealand\n\t0x0042: \"TH\", // Thailand\n\t0x0051: \"JP\", // Japan\n\t0x0052: \"KR\", // Korea\n\t0x0054: \"VN\", // Viet Nam\n\t0x0056: \"CN\", // China\n\t0x005A: \"TR\", // Turkey\n\t0x0069: \"JS\", // Ramastan\n\t0x00D5: \"DZ\", // Algeria\n\t0x00D8: \"MA\", // Morocco\n\t0x00DA: \"LY\", // Libya\n\t0x015F: \"PT\", // Portugal\n\t0x0162: \"IS\", // Iceland\n\t0x0166: \"FI\", // Finland\n\t0x01A4: \"CZ\", // Czech Republic\n\t0x0376: \"TW\", // Taiwan\n\t0x03C1: \"LB\", // Lebanon\n\t0x03C2: \"JO\", // Jordan\n\t0x03C3: \"SY\", // Syria\n\t0x03C4: \"IQ\", // Iraq\n\t0x03C5: \"KW\", // Kuwait\n\t0x03C6: \"SA\", // Saudi Arabia\n\t0x03CB: \"AE\", // United Arab Emirates\n\t0x03CC: \"IL\", // Israel\n\t0x03CE: \"QA\", // Qatar\n\t0x03D5: \"IR\", // Iran\n\t0xFFFF: \"US\" // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = /*#__PURE__*/ rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0x000000, /* 0x40 icvForeground ?? */\n\t0xFFFFFF, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = /*#__PURE__*/dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n\t0x00: \"#NULL!\",\n\t0x07: \"#DIV/0!\",\n\t0x0F: \"#VALUE!\",\n\t0x17: \"#REF!\",\n\t0x1D: \"#NAME?\",\n\t0x24: \"#NUM!\",\n\t0x2A: \"#N/A\",\n\t0x2B: \"#GETTING_DATA\",\n\t0xFF: \"#WTF?\"\n};\n//var RBErr = evert_num(BErr);\nvar RBErr = {\n\t\"#NULL!\": 0x00,\n\t\"#DIV/0!\": 0x07,\n\t\"#VALUE!\": 0x0F,\n\t\"#REF!\": 0x17,\n\t\"#NAME?\": 0x1D,\n\t\"#NUM!\": 0x24,\n\t\"#N/A\": 0x2A,\n\t\"#GETTING_DATA\": 0x2B,\n\t\"#WTF?\": 0xFF\n};\n\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\n\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary */\n/* 14.2 Part Summary */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\": \"workbooks\",\n\t\"application/vnd.ms-excel.addin.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": \"sheets\",\n\t\"application/vnd.ms-excel.worksheet\": \"sheets\",\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Chartsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": \"charts\",\n\t\"application/vnd.ms-excel.chartsheet\": \"charts\",\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.macrosheet+xml\": \"macros\",\n\t\"application/vnd.ms-excel.macrosheet\": \"macros\",\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* Dialogsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": \"dialogs\",\n\t\"application/vnd.ms-excel.dialogsheet\": \"dialogs\",\n\n\t/* Shared Strings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\": \"strs\",\n\t\"application/vnd.ms-excel.sharedStrings\": \"strs\",\n\n\t/* Styles */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": \"styles\",\n\t\"application/vnd.ms-excel.styles\": \"styles\",\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* Comments */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": \"comments\",\n\t\"application/vnd.ms-excel.comments\": \"comments\",\n\t\"application/vnd.ms-excel.threadedcomments+xml\": \"threadedcomments\",\n\t\"application/vnd.ms-excel.person+xml\": \"people\",\n\n\t/* Metadata (Stock/Geography and Dynamic Array) */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"metadata\",\n\t\"application/vnd.ms-excel.sheetMetadata\": \"metadata\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"TODO\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n}/*:any*/);\n\nvar CT_LIST = {\n\tworkbooks: {\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t},\n\tstrs: { /* Shared Strings */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t},\n\tcomments: { /* Comments */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t},\n\tsheets: { /* Worksheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t},\n\tcharts: { /* Chartsheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t},\n\tdialogs: { /* Dialogsheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t},\n\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t},\n\tmetadata: { /* Metadata (Stock/Geography and Dynamic Array) */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sheetMetadata\"\n\t},\n\tstyles: { /* Styles */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t}\n};\n\nfunction new_ct()/*:any*/ {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], threadedcomments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [], metadata: [], people:[],\n\t\tTODO:[], xmlns: \"\" }/*:any*/);\n}\n\nfunction parse_ct(data/*:?string*/) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase ' 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nfunction write_ct(ct, opts, raw)/*:string*/ {\n\tvar type2ct/*{[string]:Array}*/ = evert_arr(ct2type);\n\n\tvar o/*:Array*/ = [], v;\n\n\tif(!raw) {\n\t\to[o.length] = (XML_HEADER);\n\t\to[o.length] = writextag('Types', null, {\n\t\t\t'xmlns': XMLNS.CT,\n\t\t\t'xmlns:xsd': XMLNS.xsd,\n\t\t\t'xmlns:xsi': XMLNS.xsi\n\t\t});\n\t\to = o.concat([\n\t\t\t['xml', 'application/xml'],\n\t\t\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t\t\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t\t\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t\t\t/* from test files */\n\t\t\t['bmp', 'image/bmp'],\n\t\t\t['png', 'image/png'],\n\t\t\t['gif', 'image/gif'],\n\t\t\t['emf', 'image/x-emf'],\n\t\t\t['wmf', 'image/x-wmf'],\n\t\t\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t\t\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t\t\t['pdf', 'application/pdf'],\n\t\t\t['rels', 'application/vnd.openxmlformats-package.relationships+xml']\n\t\t].map(function(x) {\n\t\t\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n\t\t}));\n\t}\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('threadedcomments');\n\tf3('drawings');\n\tf2('metadata');\n\tf3('people');\n\tif(!raw && o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tCMNT: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n\tCORE_PROPS: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n\tEXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n\tCUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',\n\tSST: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n\tSTY: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n\tTHEME: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n\tCHART: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n\tCHARTEX: \"http://schemas.microsoft.com/office/2014/relationships/chartEx\",\n\tCS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n\tWS: [\n\t\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n\t],\n\tDS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",\n\tMS: \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\",\n\tIMG: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n\tDRAW: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n\tXLMETA: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata\",\n\tTCMNT: \"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment\",\n\tPEOPLE: \"http://schemas.microsoft.com/office/2017/10/relationships/person\",\n\tCONN: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}/*:any*/);\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file/*:string*/)/*:string*/ {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data/*:?string*/, currentFilePath/*:string*/) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nfunction add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/)/*:number*/ {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(!rels['!idx']) rels['!idx'] = 1;\n\tif(rId < 0) for(rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trels['!idx'] = rId + 1;\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n var str = xlml_normalize(d);\n var Rn;\n var FEtag;\n while (Rn = xlmlregex.exec(str))\n switch (Rn[3]) {\n case \"manifest\":\n break;\n case \"file-entry\":\n FEtag = parsexmltag(Rn[0], false);\n if (FEtag.path == \"/\" && FEtag.type !== CT_ODS)\n throw new Error(\"This OpenDocument is not a spreadsheet\");\n break;\n case \"encryption-data\":\n case \"algorithm\":\n case \"start-key-generation\":\n case \"key-derivation\":\n throw new Error(\"Unsupported ODS Encryption\");\n default:\n if (opts && opts.WTF)\n throw Rn;\n }\n}\nfunction write_manifest(manifest) {\n var o = [XML_HEADER];\n o.push('\\n');\n o.push(' \\n');\n for (var i = 0; i < manifest.length; ++i)\n o.push(' \\n');\n o.push(\"\");\n return o.join(\"\");\n}\nfunction write_rdf_type(file, res, tag) {\n return [\n ' \\n',\n ' \\n',\n \" \\n\"\n ].join(\"\");\n}\nfunction write_rdf_has(base, file) {\n return [\n ' \\n',\n ' \\n',\n \" \\n\"\n ].join(\"\");\n}\nfunction write_rdf(rdf) {\n var o = [XML_HEADER];\n o.push('\\n');\n for (var i = 0; i != rdf.length; ++i) {\n o.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n o.push(write_rdf_has(\"\", rdf[i][0]));\n }\n o.push(write_rdf_type(\"\", \"Document\", \"pkg\"));\n o.push(\"\");\n return o.join(\"\");\n}\nfunction write_meta_ods(wb, opts) {\n return 'SheetJS ' + XLSX.version + \"\";\n}\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS/*:Array >*/ = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = str_match_xml(data, f[0]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, writextag('cp:coreProperties', null, {\n\t\t//'xmlns': XMLNS.CORE_PROPS,\n\t\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t\t'xmlns:dc': XMLNS.dc,\n\t\t'xmlns:dcterms': XMLNS.dcterms,\n\t\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t})], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t\tif(cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS/*:Array >*/ = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\", \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP/*:string|Array>*/, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (str_match_xml_ns(data, f[0])||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = str_match_xml(data, f[0]);\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nfunction write_ext_props(cp/*::, opts*/)/*:string*/ {\n\tvar o/*:Array*/ = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (writextag('Properties', null, {\n\t\t'xmlns': XMLNS.EXT_PROPS,\n\t\t'xmlns:vt': XMLNS.vt\n\t}));\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"\" + escapexml(s) + \"\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nvar custregex = /<[^<>]+>[^<]*/g;\nfunction parse_cust_props(data/*:string*/, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': name = null; break;\n\t\t\tdefault: if (x.indexOf('');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM;\n\nfunction xlml_set_prop(Props, tag/*:string*/, val) {\n\tif(!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o/*:Array*/ = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops/*::, opts*/) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o/*:Array*/ = [];\n\tif(Props) keys(Props).forEach(function(k) {\n\t\t/*:: if(!Props) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\n\t\t/*:: if(!Custprops) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time/*:string|Date*/) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad/*:?number*/) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\nfunction parse_VtVecLpwstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) {\n\t\tvar start = blob.l;\n\t\tret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,'');\n\t\tif((blob.l - start) & 0x02) blob.l += 2;\n\t}\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar start = blob.l;\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tif(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2;\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob);\n\t\tcase 0x101E /*VT_VECTOR|VT_LPSTR*/:\n\t\tcase 0x101F /*VT_VECTOR|VT_LPWSTR*/:\n\t\t\treturn t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type/*:number*/, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */ p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\n\t\t\t/*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n\t\t\tp = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tif(Props[i][0] == 0 && Props.length > i+1 && Props[i][1] == Props[i+1][1]) continue; // R9\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)/*:number*/);\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\\u0000])\\u0000+$/,\"$1\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\\u0000])\\u0000+$/,\"$1\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ];\nfunction guess_property_type(val/*:any*/)/*:number*/ {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI/*:: || {}*/)[idx]/*:: || {} */;\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\n\t\t\t\t/*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n\t\t\t\tvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({}/*:any*/);\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier }/*:any*/);\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:string|number]:any}*/, entries2/*:?any*/, clsid2/*:?any*/) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"\" + z.t + \"\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob/*::, length, opts*/) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob/*::, length*/) {\n\tvar cAnti = blob.read_shift(2);\n\tvar preamble = \"\"; while(cAnti-- > 0) preamble += \"../\";\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return preamble + ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn preamble + unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob/*::, length*/) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\nfunction write_HyperlinkString(str/*:string*/, o) {\n\tif(!o) o = new_buf(6 + str.length * 2);\n\to.write_shift(4, 1 + str.length);\n\tfor(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length)/*:Hyperlink*/ {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tif((flags & 0x0002) && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n\tvar out = ({Target:target}/*:any*/);\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tif(Target.slice(0,7) == \"file://\") Target = Target.slice(7);\n\tvar hashidx = Target.indexOf(\"#\");\n\tvar F = hashidx > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\twrite_HyperlinkString(Target, out);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n\t\tout.write_shift(4, 2*(Pretarget.length + 1));\n\t\tfor(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t\tif(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): \"\", out);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length - 3 * P + 1);\n\t\tfor(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction parse_LongRGBA(blob/*::, length*/) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob, length, opts)/*:Cell*/ {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ret = ({r:rw, c:col, ixfe:0}/*:any*/);\n\tif(opts && opts.biff == 2 || length == 7) {\n\t\t/* TODO: pass back flags */\n\t\tvar flags = blob.read_shift(1);\n\t\tret.ixfe = flags & 0x3F;\n\t\tblob.l += 2;\n\t\t/*\n\t\tvar ifntifmt = blob.read_shift(1);\n\t\tvar ifmt = ifntifmt & 0x3f, ifnt = ifntifmt >> 6;\n\t\tvar flags3 = blob.read_shift(1);\n\t\t*/\n\t} else ret.ixfe = blob.read_shift(2);\n\treturn ret;\n}\nfunction write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r/*:Range*/, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob/*::, length*/) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n\t0x00: parse_FtSkip, /* FtEnd */\n\t0x04: parse_FtSkip, /* FtMacro */\n\t0x05: parse_FtSkip, /* FtButton */\n\t0x06: parse_FtSkip, /* FtGmo */\n\t0x07: parse_FtCf, /* FtCf */\n\t0x08: parse_FtSkip, /* FtPioGrbit */\n\t0x09: parse_FtSkip, /* FtPictFmla */\n\t0x0A: parse_FtSkip, /* FtCbls */\n\t0x0B: parse_FtSkip, /* FtRbo */\n\t0x0C: parse_FtSkip, /* FtSbs */\n\t0x0D: parse_FtNts, /* FtNts */\n\t0x0E: parse_FtSkip, /* FtSbsFmla */\n\t0x0F: parse_FtSkip, /* FtGboData */\n\t0x10: parse_FtSkip, /* FtEdoData */\n\t0x11: parse_FtSkip, /* FtRboData */\n\t0x12: parse_FtSkip, /* FtCblsData */\n\t0x13: parse_FtSkip, /* FtLbsData */\n\t0x14: parse_FtSkip, /* FtCblsFmla */\n\t0x15: parse_FtCmo\n};\nfunction parse_FtArray(blob, length/*::, ot*/) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts[ft] = FtTab[ft](blob, tgt - blob.l);\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb/*:Workbook*/, t/*:number*/, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s/*:string*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar name = \"\";\n\tif(opts.biff == 4) {\n\t\tname = parse_ShortXLUnicodeString(blob, 0, opts);\n\t\tif(name.length === 0) name = \"Sheet1\";\n\t\treturn { name:name };\n\t}\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tname = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length)/*:SST*/ {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs/*:SST*/ = ([]/*:any*/);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\n\t/*::(*/o/*:: :any)*/.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({}/*:any*/);\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1(/*::opts*/) {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o/*:any*/ = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, length, opts);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:number*/ /*::, opts*/) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, length, opts);\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:number*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i/*:number*/, f/*:string*/, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\nfunction write_BIFF2Format(f/*:string*/) {\n\tvar o = new_buf(1 + f.length);\n\to.write_shift(1, f.length);\n\to.write_shift(f.length, f, \"sbcs\");\n\treturn o;\n}\nfunction write_BIFF4Format(f/*:string*/) {\n\tvar o = new_buf(3 + f.length);\n\to.l += 2;\n\to.write_shift(1, f.length);\n\to.write_shift(f.length, f, \"sbcs\");\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\tvar f = 0;\n\tif(data.numFmtId > 0 && b5) f |= 0x0400;\n\to.write_shift(4, f);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\nfunction parse_BIFF2XF(blob/*::, length, opts*/) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(1); blob.l++; o.flags = blob.read_shift(1);\n\to.numFmtId = o.flags & 0x3F; o.flags>>=6;\n\to.fStyle = 0;\n\to.data = {}; // TODO\n\treturn o;\n}\nfunction write_BIFF2XF(xf) {\n\tvar o = new_buf(4);\n\to.l+=2;\n\to.write_shift(1, xf.numFmtId);\n\to.l++;\n\treturn o;\n}\nfunction write_BIFF3XF(xf) {\n\tvar o = new_buf(12);\n\to.l++;\n\to.write_shift(1, xf.numFmtId);\n\to.l += 10;\n\treturn o;\n}\n/* TODO: check other fields */\nvar write_BIFF4XF = write_BIFF3XF;\nfunction parse_BIFF3XF(blob/*::, length, opts*/) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(1); o.numFmtId = blob.read_shift(1); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\to.data = {}; // TODO\n\treturn o;\n}\nfunction parse_BIFF4XF(blob/*::, length, opts*/) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(1); o.numFmtId = blob.read_shift(1); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\to.data = {}; // TODO\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts/*:Array*/) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opts, t/*:string*/) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opts*/) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t}/*:any*/);\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\t/*jshint -W018 */\n\tvar rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\t/*jshint +W018 */\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: legacy record filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\t/* see issue 2907 */\n\tif(!(opts.biff > 8) && (length == blob[blob.l] + (blob[blob.l+1] == 0x03 ? 1 : 0) + 1)) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 */\nfunction parse_NoteSh(blob, length, opts) {\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\tif(opts && (opts.biff < 8)) {\n\t\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\t\tif(row == 0xFFFF || row == -1) return; // TODO: test continuation\n\t\tvar cch = blob.read_shift(2);\n\t\tvar cmnt = blob.read_shift(Math.min(cch,2048), 'cpstr');\n\t\treturn [{r:row, c:col}, cmnt];\n\t}\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\nfunction write_NOTE_BIFF2(text/*:string*/, R/*:number*/, C/*:number*/, len/*?:number*/) {\n\tvar o = new_buf(6 + (len || text.length));\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, len || text.length);\n\to.write_shift(text.length, text, \"sbcs\");\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length)/*:Array*/ {\n\tvar merges/*:Array*/ = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges/*:Array*/) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = {\n0x08: function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n}\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob)/*:[string|number, string|number]*/ {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}/*:any*/);\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\nfunction write_ColInfo(col, idx) {\n\tvar o = new_buf(12);\n\to.write_shift(2, idx);\n\to.write_shift(2, idx);\n\to.write_shift(2, col.width * 256);\n\to.write_shift(2, 0);\n\tvar f = 0;\n\tif(col.hidden) f |= 1;\n\to.write_shift(1, f);\n\tf = col.level || 0;\n\to.write_shift(1, f);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n/*:number*/) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\nfunction write_BIFF2Cell(out, r/*:number*/, c/*:number*/, ixfe/*:number*/, ifmt/*:number*/) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(1, ixfe||0/* & 0x3F */);\n\tout.write_shift(1, ifmt||0/* & 0x3F */);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 5) opts.biff = 2;\n\tvar cell = parse_XLSCell(blob, 7, opts);\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 7, opts);\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/, ixfe, ifmt) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c, ixfe||0, ifmt||0);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 7, opts);\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/, ixfe/*:number*/, ifmt/*:number*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c, ixfe||0, ifmt||0);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\nfunction parse_BIFF2BOOLERR(blob, length, opts) {\n\tvar bestart = blob.l + 7;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tblob.l = bestart;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF4SheetInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(4);\n\tvar cch = blob.read_shift(1), name = blob.read_shift(cch, \"sbcs\");\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { flags: flags, name:name };\n}var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\nvar DBF = /*#__PURE__*/(function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n\t0x01: 437, 0x02: 850,\n\t0x03: 1252, 0x04: 10000,\n\t0x64: 852, 0x65: 866,\n\t0x66: 865, 0x67: 861,\n\t0x68: 895, 0x69: 620,\n\t0x6A: 737, 0x6B: 857,\n\t0x78: 950, 0x79: 949,\n\t0x7A: 936, 0x7B: 932,\n\t0x7C: 874, 0x7D: 1255,\n\t0x7E: 1256, 0x96: 10007,\n\t0x97: 10029, 0x98: 10006,\n\t0xC8: 1250, 0xC9: 1251,\n\t0xCA: 1254, 0xCB: 1253,\n\n\t/* shapefile DBF extension */\n\t0x00: 20127, 0x08: 865,\n\t0x09: 437, 0x0A: 850,\n\t0x0B: 437, 0x0D: 437,\n\t0x0E: 850, 0x0F: 437,\n\t0x10: 850, 0x11: 437,\n\t0x12: 850, 0x13: 932,\n\t0x14: 850, 0x15: 437,\n\t0x16: 850, 0x17: 865,\n\t0x18: 437, 0x19: 437,\n\t0x1A: 850, 0x1B: 437,\n\t0x1C: 863, 0x1D: 850,\n\t0x1F: 852, 0x22: 852,\n\t0x23: 852, 0x24: 860,\n\t0x25: 850, 0x26: 866,\n\t0x37: 850, 0x40: 852,\n\t0x4D: 936, 0x4E: 949,\n\t0x4F: 950, 0x50: 874,\n\t0x57: 1252, 0x58: 1252,\n\t0x59: 1252, 0x6C: 863,\n\t0x86: 737, 0x87: 852,\n\t0x88: 857, 0xCC: 1257,\n\n\t0xFF: 16969\n};\nvar dbf_reverse_map = evert({\n\t0x01: 437, 0x02: 850,\n\t0x03: 1252, 0x04: 10000,\n\t0x64: 852, 0x65: 866,\n\t0x66: 865, 0x67: 861,\n\t0x68: 895, 0x69: 620,\n\t0x6A: 737, 0x6B: 857,\n\t0x78: 950, 0x79: 949,\n\t0x7A: 936, 0x7B: 932,\n\t0x7C: 874, 0x7D: 1255,\n\t0x7E: 1256, 0x96: 10007,\n\t0x97: 10029, 0x98: 10006,\n\t0xC8: 1250, 0xC9: 1251,\n\t0xCA: 1254, 0xCB: 1253,\n\t0x00: 20127\n});\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts)/*:AOA*/ {\n\tvar out/*:AOA*/ = [];\n\tvar d/*:Block*/ = (new_raw_buf(1)/*:any*/);\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64_decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = !!(ft & 0x88);\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: break; // dBASE II\n\t\tcase 0x03: break; // dBASE III\n\t\tcase 0x30: vfp = true; memo = true; break; // VFP\n\t\tcase 0x31: vfp = true; memo = true; break; // VFP with autoincrement\n\t\t// 0x43 dBASE IV SQL table files\n\t\t// 0x63 dBASE IV SQL system files\n\t\tcase 0x83: break; // dBASE III with memo\n\t\tcase 0x8B: break; // dBASE IV with memo\n\t\tcase 0x8C: l7 = true; break; // dBASE Level 7 with memo\n\t\t// case 0xCB dBASE IV SQL table files with memo\n\t\tcase 0xF5: break; // FoxPro 2.x with memo\n\t\t// case 0xFB FoxBASE\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\n\tvar nrow = 0, fpos = 0x0209;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\td.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(nrow > 1048576) nrow = 1e6;\n\n\tif(ft != 0x02) fpos = d.read_shift(2); // header length\n\tvar rlen = d.read_shift(2); // record length\n\n\tvar /*flags = 0,*/ current_cp = opts.codepage || 1252;\n\tif(ft != 0x02) { // 20 reserved bytes\n\t\td.l+=16;\n\t\t/*flags = */d.read_shift(1);\n\t\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t\t/* codepage present in FoxPro and dBASE Level 7 */\n\t\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\t\td.l+=1;\n\n\t\td.l+=2;\n\t}\n\tif(l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n/*:: type DBFField = { name:string; len:number; type:string; } */\n\tvar fields/*:Array*/ = [], field/*:DBFField*/ = ({}/*:any*/);\n\tvar hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0))));\n\tvar ww = l7 ? 32 : 11;\n\twhile(d.l < hend && d[d.l] != 0x0d) {\n\t\tfield = ({}/*:any*/);\n\t\tfield.name = (typeof $cptable !== \"undefined\" ? $cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)) : a2s(d.slice(d.l, d.l + ww))).replace(/[\\u0000\\r\\n][\\S\\s]*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // Double (VFP) / Binary (dBASE L7)\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General (FoxPro and dBASE L7)\n\t\t\tcase 'P': // Picture (FoxPro and dBASE L7)\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase '+': // Autoincrement (dBASE L7 only)\n\t\t\tcase '0': // _NullFlags (VFP only)\n\t\t\tcase '@': // Timestamp (dBASE L7 only)\n\t\t\tcase 'C': // Character (dBASE II)\n\t\t\tcase 'D': // Date (dBASE III)\n\t\t\tcase 'F': // Float (dBASE IV)\n\t\t\tcase 'I': // Long (VFP and dBASE L7)\n\t\t\tcase 'L': // Logical (dBASE II)\n\t\t\tcase 'M': // Memo (dBASE III)\n\t\t\tcase 'N': // Number (dBASE II)\n\t\t\tcase 'O': // Double (dBASE L7 only)\n\t\t\tcase 'T': // Datetime (VFP only)\n\t\t\tcase 'Y': // Currency (VFP only)\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\td.l = fpos;\n\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) {\n\t\t\t// TODO: record marked as deleted -- create a hidden row?\n\t\t\td.l+=rlen;\n\t\t\tcontinue;\n\t\t}\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = typeof $cptable !== \"undefined\" ? $cptable.utils.decode(current_cp, dd) : a2s(dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\t// NOTE: it is conventional to write ' / / ' for empty dates\n\t\t\t\t\tif(s.trim().length) out[R][C] = s.replace(/([^\\s])\\s+$/,\"$1\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) {\n\t\t\t\t\t\tout[R][C] = new Date(Date.UTC(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8), 0, 0, 0, 0));\n\t\t\t\t\t\tif(!(opts && opts.UTC)) { out[R][C] = utc_to_local(out[R][C]); }\n\t\t\t\t\t}\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.trim().toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase '': case '\\x00': case '?': break;\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N':\n\t\t\t\t\ts = s.replace(/\\u0000/g,\"\").trim();\n\t\t\t\t\t// NOTE: dBASE II interprets \" . \" as 0\n\t\t\t\t\tif(s && s != \".\") out[R][C] = +s || 0; break;\n\t\t\t\tcase '@':\n\t\t\t\t\t// NOTE: dBASE specs appear to be incorrect\n\t\t\t\t\tout[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T': {\n\t\t\t\t\tvar hi = dd.read_shift(4), lo = dd.read_shift(4);\n\t\t\t\t\tif(hi == 0 && lo == 0) break;\n\t\t\t\t\tout[R][C] = new Date((hi - 0x253D8C) * 0x5265C00 + lo);\n\t\t\t\t\tif(!(opts && opts.UTC)) out[R][C] = utc_to_local(out[R][C]);\n\t\t\t\t} break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4 + (dd.read_shift(4, 'i')/1e4)*Math.pow(2,32); break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\topts.DBF = fields;\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\tvar ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);\n\tws[\"!cols\"] = o.DBF.map(function(field) { return {\n\t\twch: field.len,\n\t\tDBF: field\n\t};});\n\tdelete o.DBF;\n\treturn ws;\n}\n\nfunction dbf_to_workbook(buf, opts)/*:Workbook*/ {\n\ttry {\n\t\tvar o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);\n\t\to.bookType = \"dbf\";\n\t\treturn o;\n\t} catch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\tif(!ws[\"!ref\"]) throw new Error(\"Cannot export empty sheet to DBF\");\n\tvar o = opts || {};\n\tvar old_cp = current_codepage;\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa/*:AOA*/ = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1), cols = ws[\"!cols\"] || [];\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(((cols[i]||{}).DBF||{}).name) { headers[i] = cols[i].DBF.name; ++hcnt; continue; }\n\t\tif(headers[i] == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes/*:Array*/ = [];\n\tvar colwidths/*:Array*/ = [];\n\tvar coldecimals/*:Array*/ = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar guess = '', _guess = '', maxlen = 0;\n\t\tvar col/*:Array*/ = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\t/* TODO: cache the values instead of encoding twice */\n\t\t\tmaxlen = Math.max(maxlen, (typeof $cptable !== \"undefined\" && typeof col[j] == \"string\" ? $cptable.utils.encode(current_ansi, col[j]): String(col[j])).length);\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\t//if(guess == 'C') break;\n\t\t}\n\t\tif(maxlen > 250) maxlen = 250;\n\t\t_guess = ((cols[i]||{}).DBF||{}).type;\n\t\t/* TODO: more fine grained control over DBF type resolution */\n\t\tif(_guess == 'C') {\n\t\t\tif(cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;\n\t\t}\n\t\tif(guess == 'B' && _guess == 'N') {\n\t\t\tguess = 'N';\n\t\t\tcoldecimals[i] = cols[i].DBF.dec;\n\t\t\tmaxlen = cols[i].DBF.len;\n\t\t}\n\t\tcolwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : (_RLEN[guess] || 0);\n\t\trlen += colwidths[i];\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\tvar cp = +dbf_reverse_map[/*::String(*/current_codepage/*::)*/] || 0x03;\n\th.write_shift(4, 0x00000000 | (cp<<8));\n\tif(dbf_codepage_map[cp] != +o.codepage) {\n\t\tif(o.codepage) console.error(\"DBF Unsupported codepage \" + current_codepage + \", using 1252\");\n\t\tcurrent_codepage = 1252;\n\t}\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\t/* TODO: test how applications handle non-ASCII field names */\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, coldecimals[i] || 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += (colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j colwidths[j]) _n = _n.slice(0, colwidths[j]); // addresses decimal > width\n\t\t\t\t\tfor(hcnt=0; hcnt < colwidths[j]-_n.length; ++hcnt) rout.write_shift(1, 0x20);\n\t\t\t\t\trout.write_shift(1, _n, \"sbcs\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(!data[i][j]) rout.write_shift(8, \"00000000\", \"sbcs\");\n\t\t\t\t\telse {\n\t\t\t\t\t\trout.write_shift(4, (\"0000\"+data[i][j].getFullYear()).slice(-4), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+(data[i][j].getMonth()+1)).slice(-2), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+data[i][j].getDate()).slice(-2), \"sbcs\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'C':\n\t\t\t\t\tvar _l = rout.l;\n\t\t\t\t\tvar _s = String(data[i][j] != null ? data[i][j] : \"\").slice(0, colwidths[j]);\n\t\t\t\t\trout.write_shift(1, _s, \"cpstr\");\n\t\t\t\t\t_l += colwidths[j] - rout.l;\n\t\t\t\t\tfor(hcnt=0; hcnt < _l; ++hcnt) rout.write_shift(1, 0x20); break;\n\t\t\t}\n\t\t}\n\t\t// data\n\t}\n\tcurrent_codepage = old_cp;\n\tba.next(1).write_shift(1, 0x1A);\n\treturn ba.end();\n}\n\treturn {\n\t\tto_workbook: dbf_to_workbook,\n\t\tto_sheet: dbf_to_sheet,\n\t\tfrom_sheet: sheet_to_dbf\n\t};\n})();\n\nvar SYLK = /*#__PURE__*/(function() {\n\t/* TODO: stress test sequences */\n\tvar sylk_escapes = ({\n\t\tAA:'À', BA:'Á', CA:'Â', DA:195, HA:'Ä', JA:197,\n\t\tAE:'È', BE:'É', CE:'Ê', HE:'Ë',\n\t\tAI:'Ì', BI:'Í', CI:'Î', HI:'Ï',\n\t\tAO:'Ò', BO:'Ó', CO:'Ô', DO:213, HO:'Ö',\n\t\tAU:'Ù', BU:'Ú', CU:'Û', HU:'Ü',\n\t\tAa:'à', Ba:'á', Ca:'â', Da:227, Ha:'ä', Ja:229,\n\t\tAe:'è', Be:'é', Ce:'ê', He:'ë',\n\t\tAi:'ì', Bi:'í', Ci:'î', Hi:'ï',\n\t\tAo:'ò', Bo:'ó', Co:'ô', Do:245, Ho:'ö',\n\t\tAu:'ù', Bu:'ú', Cu:'û', Hu:'ü',\n\t\tKC:'Ç', Kc:'ç', q:'æ', z:'œ', a:'Æ', j:'Œ',\n\t\tDN:209, Dn:241, Hy:255,\n\t\tS:169, c:170, R:174, \"B \":180,\n\t\t0:176, 1:177, 2:178,\n\t\t3:179, 5:181, 6:182,\n\t\t7:183, Q:185, k:186, b:208, i:216, l:222, s:240, y:248,\n\t\t\"!\":161, '\"':162, \"#\":163, \"(\":164, \"%\":165, \"'\":167, \"H \":168,\n\t\t\"+\":171, \";\":187, \"<\":188, \"=\":189, \">\":190, \"?\":191, \"{\":223\n\t}/*:any*/);\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\").replace(\"{\", \"\\\\{\") + \"|\\\\|)\", \"gm\");\n\ttry {\n\t\tsylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\t} catch(e) {}\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* TODO: evert the escape map */\n\tvar encode_sylk_str = function($$) { return $$.replace(/\\n/g, \"\\x1b :\").replace(/\\r/g, \"\\x1b =\"); };\n\t/* https://oss.sheetjs.com/notes/sylk/ for more details */\n\tfunction sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr/*:AOA*/ = [];\n\t\tvar formats/*:Array*/ = [];\n\t\tvar next_cell_format/*:string|null*/ = null;\n\t\tvar sht = {}, rowinfo/*:Array*/ = [], colinfo/*:Array*/ = [], cw/*:Array*/ = [];\n\t\tvar Mval = 0, j;\n\t\tvar wb = { Workbook: { WBProps: {}, Names: [] } };\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': /* workbook options */\n\t\t\tfor(rj=1; rj= 5 or < 0\n\t\t\t\t\tif(d1904 >= 1 && d1904 <= 4) wb.Workbook.WBProps.date1904 = true;\n\t\t\t\t} break;\n\t\t\t} break;\n\t\t\tcase 'W': break; /* window */\n\t\t\tcase 'P':\n\t\t\t\tswitch(record[1].charAt(0)){\n\t\t\t\t\tcase 'P': formats.push(rstr.slice(3).replace(/;;/g, \";\")); break;\n\t\t\t\t} break;\n\t\t\tcase 'NN': { /* defined name */\n\t\t\t\tvar nn = {Sheet: 0};\n\t\t\t\tfor(rj=1; rj -1 && arr[_R][_C];\n\t\t\t\tif(!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n\t\t\t\tformula = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C});\n\t\t\t}\n\t\t\tif(formula) {\n\t\t\t\tif(!arr[R][C]) arr[R][C] = { t: 'n', f: formula };\n\t\t\t\telse arr[R][C].f = formula;\n\t\t\t}\n\t\t\tif(cmnt) {\n\t\t\t\tif(!arr[R][C]) arr[R][C] = { t: 'z' };\n\t\t\t\tarr[R][C].c = [{a:\"SheetJSYLK\", t: cmnt}];\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 'F': /* Format */\n\t\t\tvar F_seen = 0;\n\t\t\tfor(rj=1; rj 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\t// case 'K': // ??\n\t\t\t\t// case 'E': // ??\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tcolinfo.forEach(function(col) { process_col(col); });\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht, wb];\n\t}\n\n\tfunction sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1], wb = aoasht[2];\n\t\tvar _opts = dup(opts); _opts.date1904 = (((wb||{}).Workbook || {}).WBProps || {}).date1904;\n\t\tvar o = aoa_to_sheet(aoa, _opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\tvar outwb = sheet_to_workbook(o, opts);\n\t\tkeys(wb).forEach(function(k) { outwb[k] = wb[k]; });\n\t\toutwb.bookType = \"sylk\";\n\t\treturn outwb;\n\t}\n\n\tfunction write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || BErr[cell.v] || cell.v; break;\n\t\t\tcase 'd': o += datenum(parseDate(cell.v, date1904), date1904); break;\n\t\t\tcase 's': o += '\"' + (cell.v == null ? \"\" : String(cell.v)).replace(/\"/g,\"\").replace(/;/g, \";;\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cmnt_sylk(cmnt/*:Comment*/, R/*:number*/, C/*:number*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";A\";\n\t\t/* TODO: max length? */\n\t\to += encode_sylk_str(cmnt.map(function(c) { return c.t; }).join(\"\"));\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out/*:Array*/, rows/*:Array*/) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/, wb/*:?WorkBook*/)/*:string*/ {\n\t\tif(!opts) opts = {}; opts._formats = [\"General\"];\n\t\t/* TODO: codepage */\n\t\tvar preamble/*:Array*/ = [\"ID;PSheetJS;N;E\"], o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']||\"A1\"), cell/*:Cell*/;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar RS = \"\\r\\n\";\n\t\tvar d1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\n\t\tvar _lastfmt = \"General\";\n\t\tpreamble.push(\"P;PGeneral\");\n\t\t/* Excel has been inconsistent in comment placement */\n\t\tvar R = r.s.r, C = r.s.c, p = [];\n\t\tif(ws[\"!ref\"]) for(R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tif(dense && !ws[\"!data\"][R]) continue;\n\t\t\tp = [];\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcell = dense ? ws[\"!data\"][R][C] : ws[encode_col(C) + encode_row(R)];\n\t\t\t\tif(!cell || !cell.c) continue;\n\t\t\t\tp.push(write_ws_cmnt_sylk(cell.c, R, C));\n\t\t\t}\n\t\t\tif(p.length) o.push(p.join(RS));\n\t\t}\n\t\tif(ws[\"!ref\"]) for(R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tif(dense && !ws[\"!data\"][R]) continue;\n\t\t\tp = [];\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcell = dense ? ws[\"!data\"][R][C] : ws[encode_col(C) + encode_row(R)];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\tif((cell.z||(cell.t == \"d\" ? table_fmt[14] : \"General\")) != _lastfmt) {\n\t\t\t\t\tvar ifmt = opts._formats.indexOf(cell.z);\n\t\t\t\t\tif(ifmt == -1) { opts._formats.push(cell.z); ifmt = opts._formats.length - 1; preamble.push(\"P;P\" + cell.z.replace(/;/g, \";;\")); }\n\t\t\t\t\tp.push(\"F;P\" + ifmt + \";Y\" + (R+1) + \";X\" + (C+1));\n\t\t\t\t}\n\t\t\t\tp.push(write_ws_cell_sylk(cell, ws, R, C, opts, d1904));\n\t\t\t}\n\t\t\to.push(p.join(RS));\n\t\t}\n\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tif(ws[\"!ref\"]) preamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tpreamble.push(\"O;L;D;B\" + (d1904 ? \";V4\" : \"\") + \";K47;G100 0.001\");\n\n\t\tdelete opts._formats;\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = /*#__PURE__*/(function() {\n\tfunction dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri] || \"\";\n\t\t\twhile(((data.match(/[\"]/g)||[]).length & 1) && ri < records.length - 1) data += \"\\n\" + records[++ri];\n\t\t\tdata = data.trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) {\n\t\t\t\t\t\tarr[R][C] = parseDate(value);\n\t\t\t\t\t\tif(!(opts && opts.UTC)) { arr[R][C] = utc_to_local(arr[R][C]); }\n\t\t\t\t\t}\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tdata = data.replace(/\"\"/g, '\"');\n\t\t\t\t\tif(DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\t\tvar o = sheet_to_workbook(dif_to_sheet(str, opts), opts);\n\t\to.bookType = \"dif\";\n\t\treturn o;\n\t}\n\n\tfunction make_value(v/*:number*/, s/*:string*/)/*:string*/ { return \"0,\" + String(v) + \"\\r\\n\" + s; }\n\tfunction make_value_str(s/*:string*/)/*:string*/ { return \"1,0\\r\\n\\\"\" + s.replace(/\"/g,'\"\"') + '\"'; }\n\tfunction sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar _DIF_XL = DIF_XL;\n\t\tif(!ws[\"!ref\"]) throw new Error(\"Cannot export empty sheet to DIF\");\n\t\tvar r = safe_decode_range(ws['!ref']);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar o/*:Array*/ = [\n\t\t\t\"TABLE\\r\\n0,1\\r\\n\\\"sheetjs\\\"\\r\\n\",\n\t\t\t\"VECTORS\\r\\n0,\" + (r.e.r - r.s.r + 1) + \"\\r\\n\\\"\\\"\\r\\n\",\n\t\t\t\"TUPLES\\r\\n0,\" + (r.e.c - r.s.c + 1) + \"\\r\\n\\\"\\\"\\r\\n\",\n\t\t\t\"DATA\\r\\n0,0\\r\\n\\\"\\\"\\r\\n\"\n\t\t];\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar row = dense ? ws[\"!data\"][R] : [];\n\t\t\tvar p = \"-1,0\\r\\nBOT\\r\\n\";\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar cell/*:Cell*/ = dense ? (row && row[C]) : ws[encode_cell({r:R,c:C})];\n\t\t\t\tif(cell == null) { p +=(\"1,0\\r\\n\\\"\\\"\\r\\n\"); continue;}\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(_DIF_XL) {\n\t\t\t\t\t\t\tif(cell.w != null) p +=(\"0,\" + cell.w + \"\\r\\nV\");\n\t\t\t\t\t\t\telse if(cell.v != null) p +=(make_value(cell.v, \"V\")); // TODO: should this call SSF_format?\n\t\t\t\t\t\t\telse if(cell.f != null && !cell.F) p +=(make_value_str(\"=\" + cell.f));\n\t\t\t\t\t\t\telse p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(cell.v == null) p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t\t\t\telse p +=(make_value(cell.v, \"V\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tp +=(cell.v ? make_value(1, \"TRUE\") : make_value(0, \"FALSE\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's':\n\t\t\t\t\t\tp +=(make_value_str((!_DIF_XL || isNaN(+cell.v)) ? cell.v : '=\"' + cell.v + '\"'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tif(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\tif(_DIF_XL) p +=(make_value(cell.w, \"V\"));\n\t\t\t\t\t\telse p +=(make_value_str(cell.w));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t}\n\t\t\t\tp += \"\\r\\n\";\n\t\t\t}\n\t\t\to.push(p);\n\t\t}\n\t\treturn o.join(\"\") + \"-1,0\\r\\nEOD\";\n\t}\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = /*#__PURE__*/(function() {\n\tfunction decode(s/*:string*/)/*:string*/ { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s/*:string*/)/*:string*/ { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o/*:Array*/ = [], oo/*:Array*/ = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = /*#__PURE__*/(function() {\n\tfunction set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:number*/, o/*:any*/) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {\n\t\tvar o = opts || {};\n\t\tvar arr/*:AOA*/ = ([]/*:any*/);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n\t\t0x2C: ',',\n\t\t0x09: \"\\t\",\n\t\t0x3B: ';',\n\t\t0x7C: '|'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n\t\t0x2C: 3,\n\t\t0x09: 2,\n\t\t0x3B: 1,\n\t\t0x7C: 0\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]] || 0x2C;\n\t}\n\n\tfunction dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws/*:Worksheet*/ = ({}/*:any*/);\n\t\tif(o.dense) ws[\"!data\"] = [];\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:0}}/*:any*/);\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t\telse sep = guess_sep(str.slice(0,1024));\n\t\t}\n\t\telse if(o && o.FS) sep = o.FS;\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);\n\t\tvar _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\t/* TODO: fuzzy parsers should pass back assumed number format */\n\t\t\tvar s = str.slice(start, end); if(s.slice(-1) == \"\\r\") s = s.slice(0, -1);\n\t\t\tvar cell = ({}/*:any*/);\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(o.cellText !== false) cell.w = s;\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 's'; cell.f = s.slice(1); cell.v = s; }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; cell.v = v; }\n\t\t\telse if(!isNaN((v = fuzzydate(s)).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\tif(_re && s.match(_re)){ var news=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); v = parseDate(news); if(o && o.UTC === false) v = utc_to_local(v); }\n\t\t\t\telse if(o && o.UTC === false) v = utc_to_local(v);\n\t\t\t\telse if(o.cellText !== false && o.dateNF) cell.w = SSF_format(cell.z, v);\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = v; }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(v); }\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1; startcc = str.charCodeAt(start);\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: if(startcc === 0x22) instr = !instr; break;\n\t\t\tcase 0x0d:\n\t\t\t\tif(instr) break;\n\t\t\t\tif(str.charCodeAt(end+1) == 0x0a) ++end;\n\t\t\t\t/* falls through */\n\t\t\tcase sepcc: case 0x0a: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(opts.FS) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64_decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n\t\t\t\telse if(opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if(opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);\n\t\telse if((opts.type == 'binary') && typeof $cptable !== 'undefined' && opts.codepage) str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar o/*:Array*/ = [];\n\t\tif(!ws[\"!ref\"]) return \"\";\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo/*:Array*/ = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\" \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif((e.message.indexOf(\"SYLK bad record ID\") == -1) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = /*#__PURE__*/(function() {\n\tfunction lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFFFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = R.f && R.f(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d/*:RawData*/, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\t/* NOTE: this list intentionally starts at 1 */\n\tvar LOTUS_DATE_FMTS = [\n\t\t\"mmmm\",\n\t\t\"dd-mmm-yyyy\",\n\t\t\"dd-mmm\",\n\t\t\"mmm-yyyy\",\n\t\t\"@\", // \"text\"?\n\t\t\"mm/dd\",\n\t\t\"hh:mm:ss AM/PM\", // 7\n\t\t\"hh:mm AM/PM\",\n\t\t\"mm/dd/yyyy\",\n\t\t\"mm/dd\",\n\t\t\"hh:mm:ss\",\n\t\t\"hh:mm\" // 12\n\t];\n\n\tfunction lotus_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ({}/*:any*/), n = \"Sheet1\", next_n = \"\", sidx = 0;\n\t\tvar sheets = {}, snames = [], realnames = [], sdata = [];\n\t\tif(o.dense) sdata = s[\"!data\"] = [];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\t\tvar lastcell = {};\n\n\t\tif(d[4] == 0x51 && d[5] == 0x50 && d[6] == 0x57) return qpw_to_workbook_buf(d, opts);\n\t\tif(d[2] == 0x00) {\n\t\t\tif(d[3] == 0x08 || d[3] == 0x09) {\n\t\t\t\tif(d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error(\"Unsupported Works 3 for Mac file\");\n\t\t\t}\n\t\t}\n\n\t\tif(d[2] == 0x02) {\n\t\t\to.Enum = WK1Enum;\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0x00: /* BOF */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0xFF: /* BOF (works 3+) */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\to.works = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0xCC: if(val) next_n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0xDE: next_n = val; break; /* SHEETNAMELP */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\tif((!o.qpro && !o.works || RT == 0x33) && val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);\n\t\t\t\t\tif(o.works || o.works2) val[1].v = val[1].v.replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif((val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || LOTUS_DATE_FMTS[(val[2] & 0x0F)-1] || table_fmt[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].v = numdate(val[1].v); val[1].t = typeof val[1].v == \"number\" ? 'n' : 'd'; }\n\t\t\t\t\t}\n\n\t\t\t\t\tif(o.qpro) {\n\t\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\t\ts = ({}/*:any*/); if(o.dense) sdata = s[\"!data\"] = [];\n\t\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\t\tsidx = val[3]; n = next_n || \"Sheet\" + (sidx + 1); next_n = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar tmpcell = o.dense ? (sdata[val[0].r]||[])[val[0].c] : s[encode_cell(val[0])];\n\t\t\t\t\tif(tmpcell) {\n\t\t\t\t\t\ttmpcell.t = val[1].t; tmpcell.v = val[1].v;\n\t\t\t\t\t\tif(val[1].z != null) tmpcell.z = val[1].z;\n\t\t\t\t\t\tif(val[1].f != null) tmpcell.f = val[1].f;\n\t\t\t\t\t\tlastcell = tmpcell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!sdata[val[0].r]) sdata[val[0].r] = [];\n\t\t\t\t\t\tsdata[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tlastcell = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x5405: o.works2 = true; break;\n\t\t\t\tcase 0x5402: {\n\t\t\t\t\t/* TODO: enumerate all extended number formats */\n\t\t\t\t\tif(val == 0x14a1) {\n\t\t\t\t\t\tlastcell.z = \"hh:mm:ss\";\n\t\t\t\t\t\tif(o.cellDates && lastcell.t == \"n\") {\n\t\t\t\t\t\t\tlastcell.v = numdate(lastcell.v); lastcell.t = typeof lastcell.v == \"number\" ? 'n' : 'd';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t}}, o);\n\t\t} else if(d[2] == 0x1A || d[2] == 0x0E) {\n\t\t\to.Enum = WK3Enum;\n\t\t\tif(d[2] == 0x0E) { o.qpro = true; d.l = 0; }\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0xCC: n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tif(val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t// TODO: R9 appears to encode control codes this way -- verify against other versions\n\t\t\t\t\tval[1].v = val[1].v.replace(/\\x0F./g, function($$) { return String.fromCharCode($$.charCodeAt(1) - 0x20); }).replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\ts = ({}/*:any*/); if(o.dense) sdata = s[\"!data\"] = [];\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!sdata[val[0].r]) sdata[val[0].r] = [];\n\t\t\t\t\t\tsdata[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x1B: /* XFORMAT */\n\t\t\t\t\tif(val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0601: /* SHEETINFOQP */\n\t\t\t\t\trealnames[val[0]] = val[1]; if(val[0] == sidx) n = val[1]; break;\n\t\t\t\tdefault: break;\n\t\t\t}}, o);\n\t\t} else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[next_n || n] = s;\n\t\tsnames.push(next_n || n);\n\t\tif(!realnames.length) return { SheetNames: snames, Sheets: sheets };\n\t\tvar osheets = {}, rnames = [];\n\t\t/* TODO: verify no collisions */\n\t\tfor(var i = 0; i < realnames.length; ++i) if(sheets[snames[i]]) {\n\t\t\trnames.push(realnames[i] || snames[i]);\n\t\t\tosheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];\n\t\t} else {\n\t\t\trnames.push(realnames[i]);\n\t\t\tosheets[realnames[i]] = ({ \"!ref\": \"A1\" });\n\t\t}\n\t\treturn { SheetNames: rnames, Sheets: osheets };\n\t}\n\n\tfunction sheet_to_wk1(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK1 to JS string\");\n\t\tvar ba = buf_array();\n\t\tif(!ws[\"!ref\"]) throw new Error(\"Cannot export empty sheet to WK1\");\n\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar cols = [];\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));\n\t\twrite_biff_rec(ba, 0x06, write_RANGE(range));\n\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\tvar rr = encode_row(R);\n\t\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[cols[C] + rr];\n\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t/* TODO: formula records */\n\t\t\t\tswitch(cell.t) {\n\t\t\t\tcase \"n\":\n\t\t\t\t\tif((cell.v|0)==cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"d\":\n\t\t\t\t\tvar dc = datenum(cell.v);\n\t\t\t\t\tif((dc|0)==dc && dc >= -32768 && dc <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, {t:\"n\", v:dc, z:cell.z || table_fmt[14]}));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, {t:\"n\", v:dc, z:cell.z || table_fmt[14]}));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\twrite_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\tfunction book_to_wk3(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK3 to JS string\");\n\t\tvar ba = buf_array();\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK3(wb));\n\n\t\tfor(var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if((wb.Sheets[wb.SheetNames[i]] || {})[\"!ref\"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));\n\n\t\tvar wsidx = 0;\n\t\tfor(i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\t\tvar dense = ws[\"!data\"] != null;\n\t\t\tvar cols = [];\n\t\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\t\tvar rr = encode_row(R);\n\t\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t\t/* TODO: FORMULA19 NUMBER18 records */\n\t\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\t\twrite_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\t\t/* TODO: max len? */\n\t\t\t\t\t\twrite_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t++wsidx;\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\n\tfunction write_BOF_WK1(v/*:number*/) {\n\t\tvar out = new_buf(2);\n\t\tout.write_shift(2, v);\n\t\treturn out;\n\t}\n\n\tfunction write_BOF_WK3(wb/*:Workbook*/) {\n\t\tvar out = new_buf(26);\n\t\tout.write_shift(2, 0x1000);\n\t\tout.write_shift(2, 0x0004);\n\t\tout.write_shift(4, 0x0000);\n\t\tvar rows = 0, cols = 0, wscnt = 0;\n\t\tfor(var i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar name = wb.SheetNames[i];\n\t\t\tvar ws = wb.Sheets[name];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\t++wscnt;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tif(rows < range.e.r) rows = range.e.r;\n\t\t\tif(cols < range.e.c) cols = range.e.c;\n\t\t}\n\t\tif(rows > 8191) rows = 8191;\n\t\tout.write_shift(2, rows);\n\t\tout.write_shift(1, wscnt);\n\t\tout.write_shift(1, cols);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(1, 0x01);\n\t\tout.write_shift(1, 0x02);\n\t\tout.write_shift(4, 0);\n\t\tout.write_shift(4, 0);\n\t\treturn out;\n\t}\n\n\tfunction parse_RANGE(blob, length, opts) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\tif(length == 8 && opts.qpro) {\n\t\t\to.s.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.s.r = blob.read_shift(2);\n\t\t\to.e.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.e.r = blob.read_shift(2);\n\t\t\treturn o;\n\t\t}\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\tfunction write_RANGE(range) {\n\t\tvar out = new_buf(8);\n\t\tout.write_shift(2, range.s.c);\n\t\tout.write_shift(2, range.s.r);\n\t\tout.write_shift(2, range.e.c);\n\t\tout.write_shift(2, range.e.r);\n\t\treturn out;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\to[3] = blob.read_shift(1);\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else if(opts.works) { // TODO: verify with more complex works3-4 examples\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t\to[2] = blob.read_shift(2);\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction get_wk1_fmt(cell)/*:number*/ {\n\t\t/* TODO: some fuzzy matching on the number format */\n\t\tif(cell.z && fmt_is_date(cell.z)) {\n\t\t\treturn 0xf0 | (LOTUS_DATE_FMTS.indexOf(cell.z) + 1 || 2);\n\t\t}\n\t\treturn 0xFF;\n\t}\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif((opts.vers & 0xFFFE) == 0x5120) { // WQ1 / WQ2\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL(R, C, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(7 + s.length);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, 0x27); // ??\n\t\tfor(var i = 0; i < o.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\tfunction parse_STRING(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\tfunction write_INTEGER(R, C, cell) {\n\t\tvar o = new_buf(7);\n\t\to.write_shift(1, get_wk1_fmt(cell));\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(2, cell.v, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\tfunction write_NUMBER(R, C, cell) {\n\t\tvar o = new_buf(13);\n\t\to.write_shift(1, get_wk1_fmt(cell));\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(8, cell.v, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\twk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction wk1_parse_rc(B, V, col) {\n\t\tvar rel = V & 0x8000;\n\t\tV &= ~0x8000;\n\t\tV = (rel ? B : 0) + ((V >= 0x2000) ? V - 0x4000 : V);\n\t\treturn (rel ? \"\" : \"$\") + (col ? encode_col(V) : encode_row(V));\n\t}\n\t/* var oprec = [\n\t\t8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,\n\t\t3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8\n\t]; */\n\t/* TODO: flesh out */\n\tvar FuncTab = {\n\t\t0x1F: [\"NA\", 0],\n\t\t// 0x20: [\"ERR\", 0],\n\t\t0x21: [\"ABS\", 1],\n\t\t0x22: [\"TRUNC\", 1],\n\t\t0x23: [\"SQRT\", 1],\n\t\t0x24: [\"LOG\", 1],\n\t\t0x25: [\"LN\", 1],\n\t\t0x26: [\"PI\", 0],\n\t\t0x27: [\"SIN\", 1],\n\t\t0x28: [\"COS\", 1],\n\t\t0x29: [\"TAN\", 1],\n\t\t0x2A: [\"ATAN2\", 2],\n\t\t0x2B: [\"ATAN\", 1],\n\t\t0x2C: [\"ASIN\", 1],\n\t\t0x2D: [\"ACOS\", 1],\n\t\t0x2E: [\"EXP\", 1],\n\t\t0x2F: [\"MOD\", 2],\n\t\t// 0x30\n\t\t0x31: [\"ISNA\", 1],\n\t\t0x32: [\"ISERR\", 1],\n\t\t0x33: [\"FALSE\", 0],\n\t\t0x34: [\"TRUE\", 0],\n\t\t0x35: [\"RAND\", 0],\n\t\t0x36: [\"DATE\", 3],\n\t\t// 0x37 NOW\n\t\t// 0x38 PMT\n\t\t// 0x39 PV\n\t\t// 0x3A FV\n\t\t// 0x3B IF\n\t\t// 0x3C DAY\n\t\t// 0x3D MONTH\n\t\t// 0x3E YEAR\n\t\t0x3F: [\"ROUND\", 2],\n\t\t0x40: [\"TIME\", 3],\n\t\t// 0x41 HOUR\n\t\t// 0x42 MINUTE\n\t\t// 0x43 SECOND\n\t\t0x44: [\"ISNUMBER\", 1],\n\t\t0x45: [\"ISTEXT\", 1],\n\t\t0x46: [\"LEN\", 1],\n\t\t0x47: [\"VALUE\", 1],\n\t\t// 0x48: [\"FIXED\", ?? 1],\n\t\t0x49: [\"MID\", 3],\n\t\t0x4A: [\"CHAR\", 1],\n\t\t// 0x4B\n\t\t// 0x4C FIND\n\t\t// 0x4D DATEVALUE\n\t\t// 0x4E TIMEVALUE\n\t\t// 0x4F CELL\n\t\t0x50: [\"SUM\", 69],\n\t\t0x51: [\"AVERAGEA\", 69],\n\t\t0x52: [\"COUNTA\", 69],\n\t\t0x53: [\"MINA\", 69],\n\t\t0x54: [\"MAXA\", 69],\n\t\t// 0x55 VLOOKUP\n\t\t// 0x56 NPV\n\t\t// 0x57 VAR\n\t\t// 0x58 STD\n\t\t// 0x59 IRR\n\t\t// 0x5A HLOOKUP\n\t\t// 0x5B DSUM\n\t\t// 0x5C DAVERAGE\n\t\t// 0x5D DCOUNTA\n\t\t// 0x5E DMIN\n\t\t// 0x5F DMAX\n\t\t// 0x60 DVARP\n\t\t// 0x61 DSTDEVP\n\t\t// 0x62 INDEX\n\t\t// 0x63 COLS\n\t\t// 0x64 ROWS\n\t\t// 0x65 REPEAT\n\t\t0x66: [\"UPPER\", 1],\n\t\t0x67: [\"LOWER\", 1],\n\t\t// 0x68 LEFT\n\t\t// 0x69 RIGHT\n\t\t// 0x6A REPLACE\n\t\t0x6B: [\"PROPER\", 1],\n\t\t// 0x6C CELL\n\t\t0x6D: [\"TRIM\", 1],\n\t\t// 0x6E CLEAN\n\t\t0x6F: [\"T\", 1]\n\t\t// 0x70 V\n\t};\n\tvar BinOpTab = [\n\t\t \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"\", \"+\", \"-\", \"*\", \"/\", \"^\", \"=\", \"<>\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t\"<=\", \">=\", \"<\", \">\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"&\", \"\", \"\", \"\", \"\", \"\", \"\", \"\" // eslint-disable-line no-mixed-spaces-and-tabs\n\t];\n\n\tfunction wk1_fmla_to_csf(blob, o) {\n\t\tprep_blob(blob, 0);\n\t\tvar out = [], argc = 0, R = \"\", C = \"\", argL = \"\", argR = \"\";\n\t\twhile(blob.l < blob.length) {\n\t\t\tvar cc = blob[blob.l++];\n\t\t\tswitch(cc) {\n\t\t\t\tcase 0x00: out.push(blob.read_shift(8, 'f')); break;\n\t\t\t\tcase 0x01: {\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x02: {\n\t\t\t\t\tvar c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tvar r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(c + r + \":\" + C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tif(blob.l < blob.length) { console.error(\"WK1 premature formula end\"); return; }\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x04: out.push(\"(\" + out.pop() + \")\"); break;\n\t\t\t\tcase 0x05: out.push(blob.read_shift(2)); break;\n\t\t\t\tcase 0x06: {\n\t\t\t\t\t/* TODO: text encoding */\n\t\t\t\t\tvar Z = \"\"; while((cc = blob[blob.l++])) Z += String.fromCharCode(cc);\n\t\t\t\t\tout.push('\"' + Z.replace(/\"/g, '\"\"') + '\"');\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x08: out.push(\"-\" + out.pop()); break;\n\t\t\t\tcase 0x17: out.push(\"+\" + out.pop()); break;\n\t\t\t\tcase 0x16: out.push(\"NOT(\" + out.pop() + \")\"); break;\n\n\t\t\t\tcase 0x14: case 0x15: {\n\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\tout.push([\"AND\", \"OR\"][cc - 0x14] + \"(\" + argL + \",\" + argR + \")\");\n\t\t\t\t} break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif(cc < 0x20 && BinOpTab[cc]) {\n\t\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\t\tout.push(argL + BinOpTab[cc] + argR);\n\t\t\t\t\t} else if(FuncTab[cc]) {\n\t\t\t\t\t\targc = FuncTab[cc][1];\n\t\t\t\t\t\tif(argc == 69) argc = blob[blob.l++];\n\t\t\t\t\t\tif(argc > out.length) { console.error(\"WK1 bad formula parse 0x\" + cc.toString(16) + \":|\" + out.join(\"|\") + \"|\"); return; }\n\t\t\t\t\t\tvar args = out.slice(-argc);\n\t\t\t\t\t\tout.length -= argc;\n\t\t\t\t\t\tout.push(FuncTab[cc][0] + \"(\" + args.join(\",\") + \")\");\n\t\t\t\t\t}\n\t\t\t\t\telse if(cc <= 0x07) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x18) return console.error(\"WK1 unsupported op \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x1E) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x73) return console.error(\"WK1 unsupported function opcode \" + cc.toString(16));\n\t\t\t\t\t// possible future functions ??\n\t\t\t\t\telse return console.error(\"WK1 unrecognized opcode \" + cc.toString(16));\n\t\t\t}\n\t\t}\n\t\tif(out.length == 1) o[1].f = \"\" + out[0];\n\t\telse console.error(\"WK1 bad formula parse |\" + out.join(\"|\") + \"|\");\n\t}\n\n\n\tfunction parse_cell_3(blob/*::, length*/) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL_16(R, C, wsidx, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(6 + s.length);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\to.write_shift(1, 0x27);\n\t\tfor(var i = 0; i < s.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 0: v = (v >> 3) * 5000; break;\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 3: v = (v >> 3) / 200; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 5: v = (v >> 3) / 20000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) {\n\t\t\tif(v1 === 0 && v2 === 0xC0000000) { o[1].t = \"e\"; o[1].v = 0x0F; } // ERR -> #VALUE!\n\t\t\telse if(v1 === 0 && v2 === 0xD0000000) { o[1].t = \"e\"; o[1].v = 0x2A; } // NA -> #N/A\n\t\t\telse o[1].v = 0;\n\t\t\treturn o;\n\t\t}\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (1 - s*2) * (v2 * Math.pow(2, e+32) + v1 * Math.pow(2, e));\n\t\treturn o;\n\t}\n\tfunction write_NUMBER_17(R, C, wsidx, v) {\n\t\tvar o = new_buf(14);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\tif(v == 0) {\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(2, 0xFFFF);\n\t\t\treturn o;\n\t\t}\n\t\tvar s = 0, e = 0, v1 = 0, v2 = 0;\n\t\tif(v < 0) { s = 1; v = -v; }\n\t\te = Math.log2(v) | 0;\n\t\tv /= Math.pow(2, e-31);\n\t\tv2 = (v)>>>0;\n\t\tif((v2&0x80000000) == 0) { v/=2; ++e; v2 = v >>> 0; }\n\t\tv -= v2;\n\t\tv2 |= 0x80000000;\n\t\tv2 >>>= 0;\n\t\tv *= Math.pow(2, 32);\n\t\tv1 = v>>>0;\n\t\to.write_shift(4, v1);\n\t\to.write_shift(4, v2);\n\t\te += 0x3FFF + (s ? 0x8000 : 0);\n\t\to.write_shift(2, e);\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: WK3 formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 12);\n\t\tblob.l += length - 12; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETNAMECS(blob, length) {\n\t\treturn blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : \"\";\n\t}\n\n\tfunction parse_SHEETNAMELP(blob, length) {\n\t\tvar len = blob[blob.l++];\n\t\tif(len > length - 1) len = length - 1;\n\t\tvar o = \"\"; while(o.length < len) o += String.fromCharCode(blob[blob.l++]);\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETINFOQP(blob, length, opts) {\n\t\tif(!opts.qpro || length < 21) return;\n\t\tvar id = blob.read_shift(1);\n\t\tblob.l += 17;\n\t\tblob.l += 1; //var len = blob.read_shift(1);\n\t\tblob.l += 2;\n\t\tvar nm = blob.read_shift(length - 21, 'cstr');\n\t\treturn [id, nm];\n\t}\n\n\tfunction parse_XFORMAT(blob, length) {\n\t\tvar o = {}, tgt = blob.l + length;\n\t\twhile(blob.l < tgt) {\n\t\t\tvar dt = blob.read_shift(2);\n\t\t\tif(dt == 0x36b0) {\n\t\t\t\to[dt] = [0, \"\"];\n\t\t\t\to[dt][0] = blob.read_shift(2);\n\t\t\t\twhile(blob[blob.l]) { o[dt][1] += String.fromCharCode(blob[blob.l]); blob.l++; } blob.l++;\n\t\t\t}\n\t\t\t// TODO: 0x3a99 ??\n\t\t}\n\t\treturn o;\n\t}\n\tfunction write_XFORMAT_SHEETNAME(name, wsidx) {\n\t\tvar out = new_buf(5 + name.length);\n\t\tout.write_shift(2, 0x36b0);\n\t\tout.write_shift(2, wsidx);\n\t\tfor(var i = 0; i < name.length; ++i) {\n\t\t\tvar cc = name.charCodeAt(i);\n\t\t\tout[out.l++] = cc > 0x7F ? 0x5F : cc;\n\t\t}\n\t\tout[out.l++] = 0;\n\t\treturn out;\n\t}\n\n\tvar WK1Enum = {\n\t\t0x0000: { n:\"BOF\", f:parseuint16 },\n\t\t0x0001: { n:\"EOF\" },\n\t\t0x0002: { n:\"CALCMODE\" },\n\t\t0x0003: { n:\"CALCORDER\" },\n\t\t0x0004: { n:\"SPLIT\" },\n\t\t0x0005: { n:\"SYNC\" },\n\t\t0x0006: { n:\"RANGE\", f:parse_RANGE },\n\t\t0x0007: { n:\"WINDOW1\" },\n\t\t0x0008: { n:\"COLW1\" },\n\t\t0x0009: { n:\"WINTWO\" },\n\t\t0x000A: { n:\"COLW2\" },\n\t\t0x000B: { n:\"NAME\" },\n\t\t0x000C: { n:\"BLANK\" },\n\t\t0x000D: { n:\"INTEGER\", f:parse_INTEGER },\n\t\t0x000E: { n:\"NUMBER\", f:parse_NUMBER },\n\t\t0x000F: { n:\"LABEL\", f:parse_LABEL },\n\t\t0x0010: { n:\"FORMULA\", f:parse_FORMULA },\n\t\t0x0018: { n:\"TABLE\" },\n\t\t0x0019: { n:\"ORANGE\" },\n\t\t0x001A: { n:\"PRANGE\" },\n\t\t0x001B: { n:\"SRANGE\" },\n\t\t0x001C: { n:\"FRANGE\" },\n\t\t0x001D: { n:\"KRANGE1\" },\n\t\t0x0020: { n:\"HRANGE\" },\n\t\t0x0023: { n:\"KRANGE2\" },\n\t\t0x0024: { n:\"PROTEC\" },\n\t\t0x0025: { n:\"FOOTER\" },\n\t\t0x0026: { n:\"HEADER\" },\n\t\t0x0027: { n:\"SETUP\" },\n\t\t0x0028: { n:\"MARGINS\" },\n\t\t0x0029: { n:\"LABELFMT\" },\n\t\t0x002A: { n:\"TITLES\" },\n\t\t0x002B: { n:\"SHEETJS\" },\n\t\t0x002D: { n:\"GRAPH\" },\n\t\t0x002E: { n:\"NGRAPH\" },\n\t\t0x002F: { n:\"CALCCOUNT\" },\n\t\t0x0030: { n:\"UNFORMATTED\" },\n\t\t0x0031: { n:\"CURSORW12\" },\n\t\t0x0032: { n:\"WINDOW\" },\n\t\t0x0033: { n:\"STRING\", f:parse_STRING },\n\t\t0x0037: { n:\"PASSWORD\" },\n\t\t0x0038: { n:\"LOCKED\" },\n\t\t0x003C: { n:\"QUERY\" },\n\t\t0x003D: { n:\"QUERYNAME\" },\n\t\t0x003E: { n:\"PRINT\" },\n\t\t0x003F: { n:\"PRINTNAME\" },\n\t\t0x0040: { n:\"GRAPH2\" },\n\t\t0x0041: { n:\"GRAPHNAME\" },\n\t\t0x0042: { n:\"ZOOM\" },\n\t\t0x0043: { n:\"SYMSPLIT\" },\n\t\t0x0044: { n:\"NSROWS\" },\n\t\t0x0045: { n:\"NSCOLS\" },\n\t\t0x0046: { n:\"RULER\" },\n\t\t0x0047: { n:\"NNAME\" },\n\t\t0x0048: { n:\"ACOMM\" },\n\t\t0x0049: { n:\"AMACRO\" },\n\t\t0x004A: { n:\"PARSE\" },\n\t\t// 0x0064\n\t\t0x0066: { n:\"PRANGES??\" },\n\t\t0x0067: { n:\"RRANGES??\" },\n\t\t0x0068: { n:\"FNAME??\" },\n\t\t0x0069: { n:\"MRANGES??\" },\n\t\t// 0x0096\n\t\t// 0x0099\n\t\t// 0x009A\n\t\t// 0x009B\n\t\t// 0x009C\n\t\t// 0x00C0\n\t\t// 0x00C7\n\t\t// 0x00C9\n\t\t0x00CC: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t// 0x00CD\n\t\t0x00DE: { n:\"SHEETNAMELP\", f:parse_SHEETNAMELP },\n\t\t0x00FF: { n:\"BOF\", f:parseuint16 },\n\t\t0x5402: { n:\"WKSNF\", f:parseuint16 },\n\t\t0xFFFF: { n:\"\" }\n\t};\n\n\tvar WK3Enum = {\n\t\t0x0000: { n:\"BOF\" },\n\t\t0x0001: { n:\"EOF\" },\n\t\t0x0002: { n:\"PASSWORD\" },\n\t\t0x0003: { n:\"CALCSET\" },\n\t\t0x0004: { n:\"WINDOWSET\" },\n\t\t0x0005: { n:\"SHEETCELLPTR\" },\n\t\t0x0006: { n:\"SHEETLAYOUT\" },\n\t\t0x0007: { n:\"COLUMNWIDTH\" },\n\t\t0x0008: { n:\"HIDDENCOLUMN\" },\n\t\t0x0009: { n:\"USERRANGE\" },\n\t\t0x000A: { n:\"SYSTEMRANGE\" },\n\t\t0x000B: { n:\"ZEROFORCE\" },\n\t\t0x000C: { n:\"SORTKEYDIR\" },\n\t\t0x000D: { n:\"FILESEAL\" },\n\t\t0x000E: { n:\"DATAFILLNUMS\" },\n\t\t0x000F: { n:\"PRINTMAIN\" },\n\t\t0x0010: { n:\"PRINTSTRING\" },\n\t\t0x0011: { n:\"GRAPHMAIN\" },\n\t\t0x0012: { n:\"GRAPHSTRING\" },\n\t\t0x0013: { n:\"??\" },\n\t\t0x0014: { n:\"ERRCELL\" },\n\t\t0x0015: { n:\"NACELL\" },\n\t\t0x0016: { n:\"LABEL16\", f:parse_LABEL_16},\n\t\t0x0017: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n\t\t0x0018: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n\t\t0x0019: { n:\"FORMULA19\", f:parse_FORMULA_19},\n\t\t0x001A: { n:\"FORMULA1A\" },\n\t\t0x001B: { n:\"XFORMAT\", f:parse_XFORMAT },\n\t\t0x001C: { n:\"DTLABELMISC\" },\n\t\t0x001D: { n:\"DTLABELCELL\" },\n\t\t0x001E: { n:\"GRAPHWINDOW\" },\n\t\t0x001F: { n:\"CPA\" },\n\t\t0x0020: { n:\"LPLAUTO\" },\n\t\t0x0021: { n:\"QUERY\" },\n\t\t0x0022: { n:\"HIDDENSHEET\" },\n\t\t0x0023: { n:\"??\" },\n\t\t0x0025: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n\t\t0x0026: { n:\"??\" },\n\t\t0x0027: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n\t\t0x0028: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n\t\t0x008E: { n:\"??\" },\n\t\t0x0093: { n:\"??\" },\n\t\t0x0096: { n:\"??\" },\n\t\t0x0097: { n:\"??\" },\n\t\t0x0098: { n:\"??\" },\n\t\t0x0099: { n:\"??\" },\n\t\t0x009A: { n:\"??\" },\n\t\t0x009B: { n:\"??\" },\n\t\t0x009C: { n:\"??\" },\n\t\t0x00A3: { n:\"??\" },\n\t\t0x00AE: { n:\"??\" },\n\t\t0x00AF: { n:\"??\" },\n\t\t0x00B0: { n:\"??\" },\n\t\t0x00B1: { n:\"??\" },\n\t\t0x00B8: { n:\"??\" },\n\t\t0x00B9: { n:\"??\" },\n\t\t0x00BA: { n:\"??\" },\n\t\t0x00BB: { n:\"??\" },\n\t\t0x00BC: { n:\"??\" },\n\t\t0x00C3: { n:\"??\" },\n\t\t0x00C9: { n:\"??\" },\n\t\t0x00CC: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t0x00CD: { n:\"??\" },\n\t\t0x00CE: { n:\"??\" },\n\t\t0x00CF: { n:\"??\" },\n\t\t0x00D0: { n:\"??\" },\n\t\t0x0100: { n:\"??\" },\n\t\t0x0103: { n:\"??\" },\n\t\t0x0104: { n:\"??\" },\n\t\t0x0105: { n:\"??\" },\n\t\t0x0106: { n:\"??\" },\n\t\t0x0107: { n:\"??\" },\n\t\t0x0109: { n:\"??\" },\n\t\t0x010A: { n:\"??\" },\n\t\t0x010B: { n:\"??\" },\n\t\t0x010C: { n:\"??\" },\n\t\t0x010E: { n:\"??\" },\n\t\t0x010F: { n:\"??\" },\n\t\t0x0180: { n:\"??\" },\n\t\t0x0185: { n:\"??\" },\n\t\t0x0186: { n:\"??\" },\n\t\t0x0189: { n:\"??\" },\n\t\t0x018C: { n:\"??\" },\n\t\t0x0200: { n:\"??\" },\n\t\t0x0202: { n:\"??\" },\n\t\t0x0201: { n:\"??\" },\n\t\t0x0204: { n:\"??\" },\n\t\t0x0205: { n:\"??\" },\n\t\t0x0280: { n:\"??\" },\n\t\t0x0281: { n:\"??\" },\n\t\t0x0282: { n:\"??\" },\n\t\t0x0283: { n:\"??\" },\n\t\t0x0284: { n:\"??\" },\n\t\t0x0285: { n:\"??\" },\n\t\t0x0286: { n:\"??\" },\n\t\t0x0287: { n:\"??\" },\n\t\t0x0288: { n:\"??\" },\n\t\t0x0292: { n:\"??\" },\n\t\t0x0293: { n:\"??\" },\n\t\t0x0294: { n:\"??\" },\n\t\t0x0295: { n:\"??\" },\n\t\t0x0296: { n:\"??\" },\n\t\t0x0299: { n:\"??\" },\n\t\t0x029A: { n:\"??\" },\n\t\t0x0300: { n:\"??\" },\n\t\t0x0304: { n:\"??\" },\n\t\t0x0601: { n:\"SHEETINFOQP\", f:parse_SHEETINFOQP },\n\t\t0x0640: { n:\"??\" },\n\t\t0x0642: { n:\"??\" },\n\t\t0x0701: { n:\"??\" },\n\t\t0x0702: { n:\"??\" },\n\t\t0x0703: { n:\"??\" },\n\t\t0x0704: { n:\"??\" },\n\t\t0x0780: { n:\"??\" },\n\t\t0x0800: { n:\"??\" },\n\t\t0x0801: { n:\"??\" },\n\t\t0x0804: { n:\"??\" },\n\t\t0x0A80: { n:\"??\" },\n\t\t0x2AF6: { n:\"??\" },\n\t\t0x3231: { n:\"??\" },\n\t\t0x6E49: { n:\"??\" },\n\t\t0x6F44: { n:\"??\" },\n\t\t0xFFFF: { n:\"\" }\n\t};\n\n\t/* TODO: fill out and verify this table across QP versions */\n\tvar QPWNFTable = {\n\t\t0x05: \"dd-mmm-yy\",\n\t\t0x06: \"dd-mmm\",\n\t\t0x07: \"mmm-yy\",\n\t\t0x08: \"mm/dd/yy\", // Long Date Intl\n\t\t0x0A: \"hh:mm:ss AM/PM\",\n\t\t0x0B: \"hh:mm AM/PM\",\n\t\t0x0E: \"dd-mmm-yyyy\",\n\t\t0x0F: \"mmm-yyyy\",\n\n\t\t/* It is suspected that the the low nybble specifies decimal places */\n\t\t0x0022: \"0.00\",\n\t\t0x0032: \"0.00;[Red]0.00\",\n\t\t0x0042: \"0.00;\\(0.00\\)\",\n\t\t0x0052: \"0.00;[Red]\\(0.00\\)\",\n\t\t0x00A2: '\"$\"#,##0.00;\\\\(\"$\"#,##0.00\\\\)',\n\t\t0x0120: '0%',\n\t\t0x0130: '0E+00',\n\t\t0x0140: '# ?/?'\n\t};\n\n\tfunction parse_qpw_str(p) {\n\t\tvar cch = p.read_shift(2);\n\t\tvar flags = p.read_shift(1);\n\t\t/* TODO: find examples with nonzero flags */\n\t\tif(flags != 0) throw \"unsupported QPW string type \" + flags.toString(16);\n\t\treturn p.read_shift(cch, \"sbcs-cont\");\n\t}\n\n\t/* QPW uses a different set of record types */\n\tfunction qpw_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tprep_blob(d, 0);\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ({}/*:any*/); if(o.dense) s[\"!data\"] = [];\n\t\tvar SST = [], sname = \"\", formulae = [];\n\t\tvar range = {s:{r:-1,c:-1}, e:{r:-1,c:-1}};\n\t\tvar cnt = 0, type = 0, C = 0, R = 0;\n\t\tvar wb = { SheetNames: [], Sheets: {} };\n\t\tvar FMTS = [];\n\t\touter: while(d.l < d.length) {\n\t\t\tvar RT = d.read_shift(2), length = d.read_shift(2);\n\t\t\tvar p = d.slice(d.l, d.l + length);\n\t\t\tprep_blob(p, 0);\n\t\t\tswitch(RT) {\n\t\t\t\tcase 0x01: /* BOF */\n\t\t\t\t\tif(p.read_shift(4) != 0x39575051) throw \"Bad QPW9 BOF!\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x02: /* EOF */ break outer;\n\n\t\t\t\tcase 0x08: /* NF */ break; // TODO: this is tied to custom number formats\n\n\t\t\t\tcase 0x0A: /* FORMATS */ {\n\t\t\t\t\tvar fcnt = p.read_shift(4);\n\t\t\t\t\tvar step = ((p.length - p.l)/ fcnt)|0;\n\t\t\t\t\tfor(var ifmt = 0; ifmt < fcnt; ++ifmt) {\n\t\t\t\t\t\tvar end = p.l + step;\n\t\t\t\t\t\tvar fmt = {};\n\t\t\t\t\t\tp.l += 2;\n\t\t\t\t\t\tfmt.numFmtId = p.read_shift(2);\n\t\t\t\t\t\tif(QPWNFTable[fmt.numFmtId]) fmt.z = QPWNFTable[fmt.numFmtId];\n\t\t\t\t\t\tp.l = end;\n\t\t\t\t\t\tFMTS.push(fmt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\t/* TODO: The behavior here should be consistent with Numbers: QP Notebook ~ .TN.SheetArchive, QP Sheet ~ .TST.TableModelArchive */\n\t\t\t\tcase 0x0401: /* BON */ break;\n\t\t\t\tcase 0x0402: /* EON */ /* TODO: backfill missing sheets based on BON cnt */ break;\n\n\t\t\t\tcase 0x0407: { /* SST */\n\t\t\t\t\tp.l += 12;\n\t\t\t\t\twhile(p.l < p.length) {\n\t\t\t\t\t\tcnt = p.read_shift(2);\n\t\t\t\t\t\ttype = p.read_shift(1);\n\t\t\t\t\t\tSST.push(p.read_shift(cnt, 'cstr'));\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0408: { /* FORMULAE */\n\t\t\t\t\t//p.l += 12;\n\t\t\t\t\t//while(p.l < p.length) {\n\t\t\t\t\t//\tcnt = p.read_shift(2);\n\t\t\t\t\t//\tformulae.push(p.slice(p.l, p.l + cnt + 1)); p.l += cnt + 1;\n\t\t\t\t\t//}\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0601: { /* BOS */\n\t\t\t\t\tvar sidx = p.read_shift(2);\n\t\t\t\t\ts = ({}/*:any*/); if(o.dense) s[\"!data\"] = [];\n\t\t\t\t\trange.s.c = p.read_shift(2);\n\t\t\t\t\trange.e.c = p.read_shift(2);\n\t\t\t\t\trange.s.r = p.read_shift(4);\n\t\t\t\t\trange.e.r = p.read_shift(4);\n\t\t\t\t\tp.l += 4;\n\t\t\t\t\tif(p.l + 2 < p.length) {\n\t\t\t\t\t\tcnt = p.read_shift(2);\n\t\t\t\t\t\ttype = p.read_shift(1);\n\t\t\t\t\t\tsname = cnt == 0 ? \"\" : p.read_shift(cnt, 'cstr');\n\t\t\t\t\t}\n\t\t\t\t\tif(!sname) sname = encode_col(sidx);\n\t\t\t\t\t/* TODO: backfill empty sheets */\n\t\t\t\t} break;\n\t\t\t\tcase 0x0602: { /* EOS */\n\t\t\t\t\t/* NOTE: QP valid range A1:IV1000000 */\n\t\t\t\t\tif(range.s.c > 0xFF || range.s.r > 999999) break;\n\t\t\t\t\tif(range.e.c < range.s.c) range.e.c = range.s.c;\n\t\t\t\t\tif(range.e.r < range.s.r) range.e.r = range.s.r;\n\t\t\t\t\ts[\"!ref\"] = encode_range(range);\n\t\t\t\t\tbook_append_sheet(wb, s, sname); // TODO: a barrel roll\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0A01: { /* COL (like XLS Row, modulo the layout transposition) */\n\t\t\t\t\tC = p.read_shift(2);\n\t\t\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\t\t\tif(range.s.c > C) range.s.c = C;\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tif(range.s.r > R) range.s.r = R;\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0C01: { /* MulCells (like XLS MulRK, but takes advantage of common column data patterns) */\n\t\t\t\t\tR = p.read_shift(4), cnt = p.read_shift(4);\n\t\t\t\t\tif(range.s.r > R) range.s.r = R;\n\t\t\t\t\tif(range.e.r < R + cnt - 1) range.e.r = R + cnt - 1;\n\t\t\t\t\tvar CC = encode_col(C);\n\t\t\t\t\twhile(p.l < p.length) {\n\t\t\t\t\t\tvar cell = { t: \"z\" };\n\t\t\t\t\t\tvar flags = p.read_shift(1), fmtidx = -1;\n\t\t\t\t\t\tif(flags & 0x80) fmtidx = p.read_shift(2);\n\t\t\t\t\t\tvar mul = (flags & 0x40) ? p.read_shift(2) - 1: 0;\n\t\t\t\t\t\tswitch(flags & 0x1F) {\n\t\t\t\t\t\t\tcase 0: break;\n\t\t\t\t\t\t\tcase 1: break;\n\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: p.read_shift(2) }; break;\n\t\t\t\t\t\t\tcase 3: cell = { t: \"n\", v: p.read_shift(2, 'i') }; break;\n\t\t\t\t\t\t\tcase 4: cell = { t: \"n\", v: parse_RkNumber(p) }; break;\n\t\t\t\t\t\t\tcase 5: cell = { t: \"n\", v: p.read_shift(8, 'f') }; break;\n\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = p.read_shift(4) - 1] }; break;\n\t\t\t\t\t\t\tcase 8:\n\t\t\t\t\t\t\t\tcell = { t: \"n\", v: p.read_shift(8, 'f') };\n\t\t\t\t\t\t\t\tp.l += 2; /* cell.f = formulae[p.read_shift(4)]; */ p.l += 4;\n\t\t\t\t\t\t\t\tif(isNaN(cell.v)) cell = { t: \"e\", v: 0x0F }; // #VALUE!\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault: throw \"Unrecognized QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(fmtidx != -1 && (FMTS[fmtidx - 1]||{}).z) cell.z = FMTS[fmtidx-1].z;\n\t\t\t\t\t\tvar delta = 0;\n\t\t\t\t\t\tif(flags & 0x20) switch(flags & 0x1F) {\n\t\t\t\t\t\t\tcase 2: delta = p.read_shift(2); break;\n\t\t\t\t\t\t\tcase 3: delta = p.read_shift(2, 'i'); break;\n\t\t\t\t\t\t\tcase 7: delta = p.read_shift(2); break;\n\t\t\t\t\t\t\tdefault: throw \"Unsupported delta for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!(!o.sheetStubs && cell.t == \"z\")) {\n\t\t\t\t\t\t\tvar newcell = dup(cell);\n\t\t\t\t\t\t\tif(cell.t == \"n\" && cell.z && fmt_is_date(cell.z) && o.cellDates) {\n\t\t\t\t\t\t\t\tnewcell.v = numdate(cell.v); newcell.t = typeof newcell.v == \"number\" ? 'n' : 'd';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\t\t\ts[\"!data\"][R][C] = newcell;\n\t\t\t\t\t\t\t} else s[CC + encode_row(R)] = newcell;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t++R; --cnt;\n\t\t\t\t\t\twhile(mul-- > 0 && cnt >= 0) {\n\t\t\t\t\t\t\tif(flags & 0x20) switch(flags & 0x1F) {\n\t\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: (cell.v + delta) & 0xFFFF }; break;\n\t\t\t\t\t\t\t\tcase 3: cell = { t: \"n\", v: (cell.v + delta) & 0xFFFF }; if(cell.v > 0x7FFF) cell.v -= 0x10000; break;\n\t\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = (type + delta) >>> 0] }; break;\n\t\t\t\t\t\t\t\tdefault: throw \"Cannot apply delta for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t\t} else switch(flags & 0x1F) {\n\t\t\t\t\t\t\t\tcase 1: cell = { t: \"z\" }; break;\n\t\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: p.read_shift(2) }; break;\n\t\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = p.read_shift(4) - 1] }; break;\n\t\t\t\t\t\t\t\tdefault: throw \"Cannot apply repeat for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(fmtidx != -1);\n\t\t\t\t\t\t\tif(!(!o.sheetStubs && cell.t == \"z\")) {\n\t\t\t\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\t\t\t\ts[\"!data\"][R][C] = cell;\n\t\t\t\t\t\t\t\t} else s[CC + encode_row(R)] = cell;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t++R; --cnt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0C02: { /* String (result of string formula expression) */\n\t\t\t\t\tC = p.read_shift(2);\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tvar str = parse_qpw_str(p);\n\t\t\t\t\t/* TODO: QP10 record has an additional unknown character after the string */\n\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\ts[\"!data\"][R][C] = { t:\"s\", v:str };\n\t\t\t\t\t} else s[encode_col(C) + encode_row(R)] = { t:\"s\", v:str };\n\t\t\t\t} break;\n\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t\td.l += length;\n\t\t}\n\t\treturn wb;\n\t}\n\n\treturn {\n\t\tsheet_to_wk1: sheet_to_wk1,\n\t\tbook_to_wk3: book_to_wk3,\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/<\\w*:/g,\"<\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '':\n\t\t\tcase '': font.shadow = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '':\n\t\t\tcase '': font.outline = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '':\n\t\t\tcase '': font.strike = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '':\n\t\t\tcase '': font.u = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '':\n\t\t\tcase '': font.b = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '':\n\t\t\tcase '': font.i = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.18 family ST_FontFamily */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = /*#__PURE__*/(function() {\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = str_match_xml_ns(r, \"t\")/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o/*:Cell*/ = ({t:'s', v:unescapexml(t[1])}/*:any*/);\n\t\tvar rpr = str_match_xml_ns(r, \"rPr\");\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of tags */\nvar rs_to_html = /*#__PURE__*/(function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style/*:Array*/ = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('');\n\n\t\tif(font.b) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.i) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.strike) { intro.push(\"\"); outro.push(\"\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"\"); }\n\n\t\toutro.push(\"\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms/*:[Array, string, Array]*/ = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'
') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t\\b[^<>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r\\b[^<>]*>/;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"), true);\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((str_remove_xml_ns_g(x, \"rPh\").match(sitregex)||[]).join(\"\").replace(tagregex,\"\")), true);\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data/*:string*/, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = str_match_xml_ns(data, \"sst\");\n\tif(sst) {\n\t\tss = sst[1].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[0].slice(0, sst[0].indexOf(\">\"))); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst/*:SST*/, opts)/*:string*/ {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS_main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s/*:XLString*/ = sst[i];\n\t\tvar sitag = \"\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"\" + escapexml(s.t) + \"\";\n\t\t}\n\t\tsitag += \"\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* BrtBeginSst */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* BrtSSTItem */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* BrtEndSst */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst/*::, opts*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x009F /* BrtBeginSst */, write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, 0x0013 /* BrtSSTItem */, write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, 0x00A0 /* BrtEndSst */);\n\treturn ba.end();\n}\nfunction _JS2ANSI(str/*:string*/)/*:Array*/ {\n\tif(typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);\n\tvar o/*:Array*/ = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length/*:?number*/) {\n\tvar o/*:any*/ = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\n\t/*:: if(length == null) return o; */\n\tif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps/*:Array<{t:number, v:string}>*/ = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob)/*:Array*/ {\n\tvar o/*:Array*/ = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length/*:number*/) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length/*:number*/) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob/*::, vers*/) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt(/*::blob, vers*/) { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob/*::, vers*/) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\t\t\tcase '': case '': break;\n\n\t\t\tcase '': break;\n\t\t\tcase ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob/*::, length*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = /*#__PURE__*/(function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password/*:string*/) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password/*:string*/, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password/*:string*/) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) }/*:any*/);\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length/*:number*/, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length/*:number*/, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nfunction rtf_to_sheet(d, opts) {\n switch (opts.type) {\n case \"base64\":\n return rtf_to_sheet_str(Base64_decode(d), opts);\n case \"binary\":\n return rtf_to_sheet_str(d, opts);\n case \"buffer\":\n return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString(\"binary\") : a2s(d), opts);\n case \"array\":\n return rtf_to_sheet_str(cc2str(d), opts);\n }\n throw new Error(\"Unrecognized type \" + opts.type);\n}\nfunction rtf_to_sheet_str(str, opts) {\n var o = opts || {};\n var ws = {};\n var dense = o.dense;\n if (dense)\n ws[\"!data\"] = [];\n var rows = str_match_ng(str, \"\\\\trowd\", \"\\\\row\");\n if (!rows)\n throw new Error(\"RTF missing table\");\n var range = { s: { c: 0, r: 0 }, e: { c: 0, r: rows.length - 1 } };\n var row = [];\n rows.forEach(function(rowtf, R) {\n if (dense)\n row = ws[\"!data\"][R] = [];\n var rtfre = /\\\\[\\w\\-]+\\b/g;\n var last_index = 0;\n var res;\n var C = -1;\n var payload = [];\n while ((res = rtfre.exec(rowtf)) != null) {\n var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n if (data.charCodeAt(0) == 32)\n data = data.slice(1);\n if (data.length)\n payload.push(data);\n switch (res[0]) {\n case \"\\\\cell\":\n ++C;\n if (payload.length) {\n var cell = { v: payload.join(\"\"), t: \"s\" };\n if (cell.v == \"TRUE\" || cell.v == \"FALSE\") {\n cell.v = cell.v == \"TRUE\";\n cell.t = \"b\";\n } else if (!isNaN(fuzzynum(cell.v))) {\n cell.t = \"n\";\n if (o.cellText !== false)\n cell.w = cell.v;\n cell.v = fuzzynum(cell.v);\n }\n if (dense)\n row[C] = cell;\n else\n ws[encode_cell({ r: R, c: C })] = cell;\n }\n payload = [];\n break;\n case \"\\\\par\":\n payload.push(\"\\n\");\n break;\n }\n last_index = rtfre.lastIndex;\n }\n if (C > range.e.c)\n range.e.c = C;\n });\n ws[\"!ref\"] = encode_range(range);\n return ws;\n}\nfunction rtf_to_workbook(d, opts) {\n var wb = sheet_to_workbook(rtf_to_sheet(d, opts), opts);\n wb.bookType = \"rtf\";\n return wb;\n}\nfunction sheet_to_rtf(ws, opts) {\n var o = [\"{\\\\rtf1\\\\ansi\"];\n if (!ws[\"!ref\"])\n return o[0] + \"}\";\n var r = safe_decode_range(ws[\"!ref\"]), cell;\n var dense = ws[\"!data\"] != null, row = [];\n for (var R = r.s.r; R <= r.e.r; ++R) {\n o.push(\"\\\\trowd\\\\trautofit1\");\n for (var C = r.s.c; C <= r.e.c; ++C)\n o.push(\"\\\\cellx\" + (C + 1));\n o.push(\"\\\\pard\\\\intbl\");\n if (dense)\n row = ws[\"!data\"][R] || [];\n for (C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({ r: R, c: C });\n cell = dense ? row[C] : ws[coord];\n if (!cell || cell.v == null && (!cell.f || cell.F)) {\n o.push(\" \\\\cell\");\n continue;\n }\n o.push(\" \" + (cell.w || (format_cell(cell), cell.w) || \"\").replace(/[\\r\\n]/g, \"\\\\par \"));\n o.push(\"\\\\cell\");\n }\n o.push(\"\\\\pard\\\\intbl\\\\row\");\n }\n return o.join(\"\") + \"}\";\n}\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll/*:ColInfo*/) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '': case '':\n\t\t\t\tborder = /*::(*/{}/*:: :any)*/;\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '': case '':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '': break;\n\t\t\tcase '': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '': break;\n\t\t\tcase '': case '':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.2 b CT_BooleanProperty */\n\t\t\tcase '': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '': font.strike = 1; break;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty */\n\t\t\tcase '': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array*/ = (keys(table_fmt)/*:any*/);\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = table_fmt[k[i]];\n\tvar m = t.match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\t\t\tcase '0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF__load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {\n\tvar o = [\"\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '': case '':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(styles.NumberFmt && xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '': case '':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = true; break;\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= /*#__PURE__*/(function make_pstyx() {\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = remove_doctype(str_remove_ng(data, \"\"));\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=str_match_xml_ns(data, \"numFmts\"))) parse_numFmts(t[0], styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=str_match_xml_ns(data, \"fonts\"))) parse_fonts(t[0], styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=str_match_xml_ns(data, \"fills\"))) parse_fills(t[0], styles, themes, opts);\n\n\t/* 18.8.5 borders CT_Borders ? */\n\tif((t=str_match_xml_ns(data, \"borders\"))) parse_borders(t[0], styles, themes, opts);\n\n\t/* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8 cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=str_match_xml_ns(data, \"cellXfs\"))) parse_cellXfs(t[0], styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nfunction write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('styleSheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:vt': XMLNS.vt\n\t})], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length/*:number*/) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i/*:number*/, f/*:string*/, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length/*:number*/, opts) {\n\tvar out = ({}/*:any*/);\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font/*:any*/, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames/*:EvertNumType*/;\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tif(!rev_XLSBFillPTNames) rev_XLSBFillPTNames = (evert(XLSBFillPTNames)/*:any*/);\n\tvar fls/*:number*/ = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length/*:number*/) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]/*:any*/);\n\tfor(var y in table_fmt) styles.NumberFmt[y] = table_fmt[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* BrtFmt */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF__load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* BrtFont */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* BrtKnownFonts */ break;\n\t\t\tcase 0x002D: /* BrtFill */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* BrtBorder */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* BrtXF */\n\t\t\t\tif(state[state.length - 1] == 0x0269 /* BrtBeginCellXFs */) {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* BrtStyle */\n\t\t\tcase 0x01FB: /* BrtDXF */\n\t\t\tcase 0x023C: /* BrtMRUColor */\n\t\t\tcase 0x01DB: /* BrtIndexedColor */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* BrtDXF14 */\n\t\t\tcase 0x0836: /* BrtDXF15 */\n\t\t\tcase 0x046A: /* BrtSlicerStyleElement */\n\t\t\tcase 0x0200: /* BrtTableStyleElement */\n\t\t\tcase 0x082F: /* BrtTimelineStyleElement */\n\t\t\tcase 0x0C00: /* BrtUid */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* BrtACBegin */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* BrtACEnd */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF/*:?SSFTable*/) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0267 /* BrtBeginFmts */, write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, 0x002C /* BrtFmt */, write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, 0x0268 /* BrtEndFmts */);\n}\n\nfunction write_FONTS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0263 /* BrtBeginFonts */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002B /* BrtFont */, write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, 0x0264 /* BrtEndFonts */);\n}\n\nfunction write_FILLS_bin(ba/*::, data*/) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x025B /* BrtBeginFills */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, 0x025C /* BrtEndFills */);\n}\n\nfunction write_BORDERS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0265 /* BrtBeginBorders */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002E /* BrtBorder */, write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, 0x0266 /* BrtEndBorders */);\n}\n\nfunction write_CELLSTYLEXFS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\twrite_record(ba, 0x0272 /* BrtBeginCellStyleXFs */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002F /* BrtXF */, write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId: 0,\n\t\tfillId: 0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x0273 /* BrtEndCellStyleXFs */);\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, 0x0269 /* BrtBeginCellXFs */, write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, 0x002F /* BrtXF */, write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x026A /* BrtEndCellXFs */);\n}\n\nfunction write_STYLES_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\twrite_record(ba, 0x026B /* BrtBeginStyles */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x0030 /* BrtStyle */, write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, 0x026C /* BrtEndStyles */);\n}\n\nfunction write_DXFS_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01F9 /* BrtBeginDXFs */, write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, 0x01FA /* BrtEndDXFs */);\n}\n\nfunction write_TABLESTYLES_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01FC /* BrtBeginTableStyles */, write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, 0x01FD /* BrtEndTableStyles */);\n}\n\nfunction write_COLORPALETTE_bin(/*::ba, data*/) {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0116 /* BrtBeginStyleSheet */);\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, 0x0117 /* BrtEndStyleSheet */);\n\treturn ba.end();\n}\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'', '', '', '',\n\t'', '', '',\n\t'', '', '',\n\t'', ''\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.33 sysClr CT_SystemColor */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.4.1.1 accent1 (Accent 1) */\n\t\t\t/* 20.1.4.1.2 accent2 (Accent 2) */\n\t\t\t/* 20.1.4.1.3 accent3 (Accent 3) */\n\t\t\t/* 20.1.4.1.4 accent4 (Accent 4) */\n\t\t\t/* 20.1.4.1.5 accent5 (Accent 5) */\n\t\t\t/* 20.1.4.1.6 accent6 (Accent 6) */\n\t\t\t/* 20.1.4.1.9 dk1 (Dark 1) */\n\t\t\t/* 20.1.4.1.10 dk2 (Dark 2) */\n\t\t\t/* 20.1.4.1.15 folHlink (Followed Hyperlink) */\n\t\t\t/* 20.1.4.1.19 hlink (Hyperlink) */\n\t\t\t/* 20.1.4.1.22 lt1 (Light 1) */\n\t\t\t/* 20.1.4.1.23 lt2 (Light 2) */\n\t\t\tcase '':\n\t\t\tcase '':\n\t\t\tcase '':\n\t\t\tcase '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t/* clrScheme CT_ColorScheme */\n\tif(!(t=str_match_xml(data, \"a:clrScheme\"))) throw new Error('clrScheme not found in themeElements');\n\tparse_clrScheme(t, themes, opts);\n\n\t/* fontScheme CT_FontScheme */\n\tif(!(t=str_match_xml(data, \"a:fontScheme\"))) throw new Error('fontScheme not found in themeElements');\n\tparse_fontScheme(t, themes, opts);\n\n\t/* fmtScheme CT_StyleMatrix */\n\tif(!(t=str_match_xml(data, \"a:fmtScheme\"))) throw new Error('fmtScheme not found in themeElements');\n\tparse_fmtScheme(t, themes, opts);\n}\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data/*:string*/, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) data = write_theme();\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=str_match_xml(data, \"a:themeElements\"))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts)/*:string*/ {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = zip_read(data, {type: \"array\"}); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob/*::, length*/) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob/*::, length*/)/*:Array*/ {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext/*:AOA*/ = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\nfunction parse_BrtMdtinfo(data, length) {\n return {\n flags: data.read_shift(4),\n version: data.read_shift(4),\n name: parse_XLWideString(data, length - 8)\n };\n}\nfunction write_BrtMdtinfo(data) {\n var o = new_buf(12 + 2 * data.name.length);\n o.write_shift(4, data.flags);\n o.write_shift(4, data.version);\n write_XLWideString(data.name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtMdb(data) {\n var out = [];\n var cnt = data.read_shift(4);\n while (cnt-- > 0)\n out.push([data.read_shift(4), data.read_shift(4)]);\n return out;\n}\nfunction write_BrtMdb(mdb) {\n var o = new_buf(4 + 8 * mdb.length);\n o.write_shift(4, mdb.length);\n for (var i = 0; i < mdb.length; ++i) {\n o.write_shift(4, mdb[i][0]);\n o.write_shift(4, mdb[i][1]);\n }\n return o;\n}\nfunction write_BrtBeginEsfmd(cnt, name) {\n var o = new_buf(8 + 2 * name.length);\n o.write_shift(4, cnt);\n write_XLWideString(name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtBeginEsmdb(data) {\n data.l += 4;\n return data.read_shift(4) != 0;\n}\nfunction write_BrtBeginEsmdb(cnt, cm) {\n var o = new_buf(8);\n o.write_shift(4, cnt);\n o.write_shift(4, cm ? 1 : 0);\n return o;\n}\nfunction parse_xlmeta_bin(data, name, _opts) {\n var out = { Types: [], Cell: [], Value: [] };\n var opts = _opts || {};\n var state = [];\n var pass = false;\n var metatype = 2;\n recordhopper(data, function(val, R, RT) {\n switch (RT) {\n case 335:\n out.Types.push({ name: val.name });\n break;\n case 51:\n val.forEach(function(r) {\n if (metatype == 1)\n out.Cell.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n else if (metatype == 0)\n out.Value.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n });\n break;\n case 337:\n metatype = val ? 1 : 0;\n break;\n case 338:\n metatype = 2;\n break;\n case 35:\n state.push(RT);\n pass = true;\n break;\n case 36:\n state.pop();\n pass = false;\n break;\n default:\n if (R.T) {\n } else if (!pass || opts.WTF && state[state.length - 1] != 35)\n throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n }\n });\n return out;\n}\nfunction write_xlmeta_bin() {\n var ba = buf_array();\n write_record(ba, 332);\n write_record(ba, 334, write_UInt32LE(1));\n write_record(ba, 335, write_BrtMdtinfo({\n name: \"XLDAPR\",\n version: 12e4,\n flags: 3496657072\n }));\n write_record(ba, 336);\n write_record(ba, 339, write_BrtBeginEsfmd(1, \"XLDAPR\"));\n write_record(ba, 52);\n write_record(ba, 35, write_UInt32LE(514));\n write_record(ba, 4096, write_UInt32LE(0));\n write_record(ba, 4097, writeuint16(1));\n write_record(ba, 36);\n write_record(ba, 53);\n write_record(ba, 340);\n write_record(ba, 337, write_BrtBeginEsmdb(1, true));\n write_record(ba, 51, write_BrtMdb([[1, 0]]));\n write_record(ba, 338);\n write_record(ba, 333);\n return ba.end();\n}\nfunction parse_xlmeta_xml(data, name, opts) {\n var out = { Types: [], Cell: [], Value: [] };\n if (!data)\n return out;\n var pass = false;\n var metatype = 2;\n var lastmeta;\n data.replace(tagregex, function(x) {\n var y = parsexmltag(x);\n switch (strip_ns(y[0])) {\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n case \"\":\n case \"\":\n break;\n case \"\":\n pass = false;\n break;\n case \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n');\n return o.join(\"\");\n}\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data/*::, name, opts*/)/*:Array*/ {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.6.1 c CT_CalcCell 1 */\n\t\t\tcase ']*r:id=\"([^<>\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nfunction parse_vml(data/*:string*/, sheet, comments) {\n\tvar cidx = 0;\n\t(str_match_xml_ns_g(data, \"shape\")||[]).forEach(function(m) {\n\t\tvar type = \"\";\n\t\tvar hidden = true;\n\t\tvar aidx = -1;\n\t\tvar R = -1, C = -1;\n\t\tm.replace(tagregex, function(x/*:string*/, idx/*:number*/) {\n\t\t\tvar y = parsexmltag(x);\n\t\t\tswitch(strip_ns(y[0])) {\n\t\t\t\tcase '': hidden = false; break;\n\n\t\t\t\tcase '': aidx = idx + x.length; break;\n\t\t\t\tcase '': R = +m.slice(aidx, idx).trim(); break;\n\n\t\t\t\tcase '': aidx = idx + x.length; break;\n\t\t\t\tcase '': C = +m.slice(aidx, idx).trim(); break;\n\t\t\t}\n\t\t\treturn \"\";\n\t\t});\n\t\tswitch(type) {\n\t\tcase 'Note':\n\t\t\tvar cell = ws_get_cell_stub(sheet, ((R>=0 && C>=0) ? encode_cell({r:R,c:C}) : comments[cidx].ref));\n\t\t\tif(cell.c) {\n\t\t\t\tcell.c.hidden = hidden;\n\t\t\t}\n\t\t\t++cidx;\n\t\t\tbreak;\n\t\t}\n\n\t});\n}\n\n\n/* comment boxes */\nfunction write_vml(rId/*:number*/, comments, ws) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"})\n\t];\n\n\tvar _shapeid = 65536 * rId;\n\n\tvar _comments = comments || [];\n\tif(_comments.length > 0) o.push(writextag(\"v:shapetype\", [\n\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t].join(\"\"), {id:\"_x0000_t202\", coordsize:csize.join(\",\"), 'o:spt':202, path:bbox}));\n\n\t_comments.forEach(function(x) { ++_shapeid; o.push(write_vml_comment(x, _shapeid)); });\n\to.push('');\n\treturn o.join(\"\");\n}\n\nfunction write_vml_comment(x, _shapeid, ws)/*:string*/ {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = /*::(*/{'color2':\"#BEFF82\", 'type':\"gradient\"}/*:: :any)*/;\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"}/*:any*/);\n\n\treturn [\n\t'',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'
',\n\t\t'',\n\t\t\t'',\n\t\t\t'',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '',\n\t\t'',\n\t''\n\t].join(\"\");\n}\nfunction sheet_insert_comments(sheet/*:WorkSheet*/, comments/*:Array*/, threaded/*:boolean*/, people/*:?Array*/) {\n\tvar dense = sheet[\"!data\"] != null;\n\tvar cell/*:Cell*/;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(r.r < 0 || r.c < 0) return;\n\t\tif(dense) {\n\t\t\tif(!sheet[\"!data\"][r.r]) sheet[\"!data\"][r.r] = [];\n\t\t\tcell = sheet[\"!data\"][r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"}/*:any*/);\n\t\t\tif(dense) sheet[\"!data\"][r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tsheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o/*:Comment*/ = ({a: comment.author, t: comment.t, r: comment.r, T: threaded});\n\t\tif(comment.h) o.h = comment.h;\n\n\t\t/* threaded comments always override */\n\t\tfor(var i = cell.c.length - 1; i >= 0; --i) {\n\t\t\tif(!threaded && cell.c[i].T) return;\n\t\t\tif(threaded && !cell.c[i].T) cell.c.splice(i, 1);\n\t\t}\n\t\tif(threaded && people) for(i = 0; i < people.length; ++i) {\n\t\t\tif(o.a == people[i].id) { o.a = people[i].name || o.a; break; }\n\t\t}\n\t\tcell.c.push(o);\n\t});\n}\n/* 18.7 Comments */\nfunction parse_comments_xml(data/*:string*/, opts)/*:Array*/ {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors/*:Array*/ = [];\n\tvar commentList/*:Array*/ = [];\n\tvar authtag = str_match_xml_ns(data, \"authors\");\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^<>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = str_match_xml_ns(data, \"commentList\");\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^<>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment/*:RawComment*/ = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid }/*:any*/);\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = str_match_xml_ns(x, \"text\");\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"\") rt.t = rt.h = \"\";\n\t\tcomment.t = (rt.t||\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nfunction write_comments_xml(data/*::, opts*/) {\n\tvar o = [XML_HEADER, writextag('comments', null, { 'xmlns': XMLNS_main[0] })];\n\n\tvar iauthor/*:Array*/ = [];\n\to.push(\"\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) == -1) {\n\t\t\tiauthor.push(a);\n\t\t\to.push(\"\" + a + \"\");\n\t\t}\n\t\tif(w.T && w.ID && iauthor.indexOf(\"tc=\" + w.ID) == -1) {\n\t\t\tiauthor.push(\"tc=\" + w.ID);\n\t\t\to.push(\"\" + \"tc=\" + w.ID + \"\");\n\t\t}\n\t}); });\n\tif(iauthor.length == 0) { iauthor.push(\"SheetJ5\"); o.push(\"SheetJ5\"); }\n\to.push(\"\");\n\to.push(\"\");\n\tdata.forEach(function(d) {\n\t\t/* 18.7.3 CT_Comment */\n\t\tvar lastauthor = 0, ts = [], tcnt = 0;\n\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\td[1].forEach(function(c) {\n\t\t\tif(c.a) lastauthor = iauthor.indexOf(escapexml(c.a));\n\t\t\tif(c.T) ++tcnt;\n\t\t\tts.push(c.t == null ? \"\" : escapexml(c.t));\n\t\t});\n\t\tif(tcnt === 0) {\n\t\t\td[1].forEach(function(c) {\n\t\t\t\to.push('');\n\t\t\t\to.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n\t\t\t\to.push('');\n\t\t\t});\n\t\t} else {\n\t\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\t\t/* based on Threaded Comments -> Comments projection */\n\t\t\to.push('');\n\t\t\tvar t = \"Comment:\\n \" + (ts[0]) + \"\\n\";\n\t\t\tfor(var i = 1; i < ts.length; ++i) t += \"Reply:\\n \" + ts[i] + \"\\n\";\n\t\t\to.push(writetag(\"t\", escapexml(t)));\n\t\t\to.push('');\n\t\t}\n\t});\n\to.push(\"\");\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.17 */\nfunction parse_tcmnt_xml(data/*:string*/, opts)/*:Array*/ {\n\tvar out = [];\n\tvar pass = false, comment = {}, tidx = 0;\n\tdata.replace(tagregex, function xml_tcmnt(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.205 threadedComment CT_ThreadedComment */\n\t\t\tcase '': if(comment.t != null) out.push(comment); break;\n\n\t\t\tcase '': case '': comment.t = data.slice(tidx, idx).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\"); break;\n\n\t\t\t/* 2.6.206 mentions CT_ThreadedCommentMentions TODO */\n\t\t\tcase '': pass = true; break;\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 2.6.202 mention CT_Mention TODO */\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '
': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\n\nfunction write_tcmnt_xml(comments, people, opts) {\n\tvar o = [XML_HEADER, writextag('ThreadedComments', null, { 'xmlns': XMLNS.TCMNT }).replace(/[\\/]>/, \">\")];\n\tcomments.forEach(function(carr) {\n\t\tvar rootid = \"\";\n\t\t(carr[1] || []).forEach(function(c, idx) {\n\t\t\tif(!c.T) { delete c.ID; return; }\n\t\t\tif(c.a && people.indexOf(c.a) == -1) people.push(c.a);\n\t\t\tvar tcopts = {\n\t\t\t\tref: carr[0],\n\t\t\t\tid: \"{54EE7951-7262-4200-6969-\" + (\"000000000000\" + opts.tcid++).slice(-12) + \"}\"\n\t\t\t};\n\t\t\tif(idx == 0) rootid = tcopts.id;\n\t\t\telse tcopts.parentId = rootid;\n\t\t\tc.ID = tcopts.id;\n\t\t\tif(c.a) tcopts.personId = \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + people.indexOf(c.a)).slice(-12) + \"}\";\n\t\t\to.push(writextag('threadedComment', writetag('text', c.t||\"\"), tcopts));\n\t\t});\n\t});\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.18 */\nfunction parse_people_xml(data/*:string*/, opts) {\n\tvar out = [];\n\tvar pass = false;\n\tdata.replace(tagregex, function xml_tcmnt(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.203 person CT_Person TODO: providers */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\nfunction write_people_xml(people/*, opts*/) {\n\tvar o = [XML_HEADER, writextag('personList', null, {\n\t\t'xmlns': XMLNS.TCMNT,\n\t\t'xmlns:x': XMLNS_main[0]\n\t}).replace(/[\\/]>/, \">\")];\n\tpeople.forEach(function(person, idx) {\n\t\to.push(writextag('person', null, {\n\t\t\tdisplayName: person,\n\t\t\tid: \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + idx).slice(-12) + \"}\",\n\t\t\tuserId: person,\n\t\t\tproviderId: \"None\"\n\t\t}));\n\t});\n\to.push(\"\");\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]/*:any*/), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts)/*:Array*/ {\n\tvar out/*:Array*/ = [];\n\tvar authors/*:Array*/ = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c/*:any*/).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data/*::, opts*/) {\n\tvar ba = buf_array();\n\tvar iauthor/*:Array*/ = [];\n\twrite_record(ba, 0x0274 /* BrtBeginComments */);\n\n\twrite_record(ba, 0x0276 /* BrtBeginCommentAuthors */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(c.a));\n\t\t\tif(c.T && c.ID && iauthor.indexOf(\"tc=\" + c.ID) == -1) {\n\t\t\t\tiauthor.push(\"tc=\" + c.ID);\n\t\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(\"tc=\" + c.ID));\n\t\t\t}\n\t\t});\n\t});\n\twrite_record(ba, 0x0277 /* BrtEndCommentAuthors */);\n\n\twrite_record(ba, 0x0279 /* BrtBeginCommentList */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tvar _ia = -1;\n\t\t\tif(c.ID) _ia = iauthor.indexOf(\"tc=\" + c.ID);\n\t\t\tif(_ia == -1 && comment[1][0].T && comment[1][0].ID) _ia = iauthor.indexOf(\"tc=\" + comment[1][0].ID);\n\t\t\tif(_ia == -1) _ia = iauthor.indexOf(c.a);\n\t\t\tc.iauthor = _ia;\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, 0x027B /* BrtBeginComment */, write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, 0x027D /* BrtCommentText */, write_BrtCommentText(c));\n\t\t\twrite_record(ba, 0x027C /* BrtEndComment */);\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, 0x027A /* BrtEndCommentList */);\n\n\twrite_record(ba, 0x0275 /* BrtEndComments */);\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n var newcfb = CFB.utils.cfb_new({ root: \"R\" });\n cfb.FullPaths.forEach(function(p, i) {\n if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/))\n return;\n var newpath = p.replace(/^[^\\/]*/, \"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n });\n return CFB.write(newcfb);\n}\nfunction fill_vba_xls(cfb, vba) {\n vba.FullPaths.forEach(function(p, i) {\n if (i == 0)\n return;\n var newpath = p.replace(/^[\\/]*[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n if (newpath.slice(-1) !== \"/\")\n CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n });\n}\nvar VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\nfunction parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = /*#__PURE__*/(function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase/*:Cell*/ = ({r:0,c:0}/*:any*/);\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr/*:string*/, base/*:Cell*/)/*:string*/ {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])(\\$?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])(\\$?)(\\d{1,7})(?![_.\\(A-Za-z0-9])/g;\ntry {\n\tcrefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\n}catch(e){}\nvar a1_to_rc = /*#__PURE__*/(function(){\n\treturn function a1_to_rc(fstr/*:string*/, base/*:CellAddress*/) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = $4 == \"$\" ? (r+1) : (r == 0 ? \"\" : \"[\" + r + \"]\");\n\t\t\tvar C = $2 == \"$\" ? (c+1) : (c == 0 ? \"\" : \"[\" + c + \"]\");\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:string*/)/*:string*/ {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f/*:string*/)/*:boolean*/ {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f/*:string*/)/*:string*/ {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob/*::, length, opts*/) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob/*::, length, opts*/) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts)/*:Array*/ {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o/*:Array*/ = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob/*::, length*/) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff/*:number*/) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o/*:Array>*/ = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob/*::, length, opts*/) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob/*::, length, opts*/) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n\t0x01: { n:'PtgExp', f:parse_PtgExp },\n\t0x02: { n:'PtgTbl', f:parse_PtgTbl },\n\t0x03: { n:'PtgAdd', f:parseread1 },\n\t0x04: { n:'PtgSub', f:parseread1 },\n\t0x05: { n:'PtgMul', f:parseread1 },\n\t0x06: { n:'PtgDiv', f:parseread1 },\n\t0x07: { n:'PtgPower', f:parseread1 },\n\t0x08: { n:'PtgConcat', f:parseread1 },\n\t0x09: { n:'PtgLt', f:parseread1 },\n\t0x0A: { n:'PtgLe', f:parseread1 },\n\t0x0B: { n:'PtgEq', f:parseread1 },\n\t0x0C: { n:'PtgGe', f:parseread1 },\n\t0x0D: { n:'PtgGt', f:parseread1 },\n\t0x0E: { n:'PtgNe', f:parseread1 },\n\t0x0F: { n:'PtgIsect', f:parseread1 },\n\t0x10: { n:'PtgUnion', f:parseread1 },\n\t0x11: { n:'PtgRange', f:parseread1 },\n\t0x12: { n:'PtgUplus', f:parseread1 },\n\t0x13: { n:'PtgUminus', f:parseread1 },\n\t0x14: { n:'PtgPercent', f:parseread1 },\n\t0x15: { n:'PtgParen', f:parseread1 },\n\t0x16: { n:'PtgMissArg', f:parseread1 },\n\t0x17: { n:'PtgStr', f:parse_PtgStr },\n\t0x1A: { n:'PtgSheet', f:parse_PtgSheet },\n\t0x1B: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n\t0x1C: { n:'PtgErr', f:parse_PtgErr },\n\t0x1D: { n:'PtgBool', f:parse_PtgBool },\n\t0x1E: { n:'PtgInt', f:parse_PtgInt },\n\t0x1F: { n:'PtgNum', f:parse_PtgNum },\n\t0x20: { n:'PtgArray', f:parse_PtgArray },\n\t0x21: { n:'PtgFunc', f:parse_PtgFunc },\n\t0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n\t0x23: { n:'PtgName', f:parse_PtgName },\n\t0x24: { n:'PtgRef', f:parse_PtgRef },\n\t0x25: { n:'PtgArea', f:parse_PtgArea },\n\t0x26: { n:'PtgMemArea', f:parse_PtgMemArea },\n\t0x27: { n:'PtgMemErr', f:parse_PtgMemErr },\n\t0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n\t0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n\t0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },\n\t0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n\t0x2C: { n:'PtgRefN', f:parse_PtgRefN },\n\t0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },\n\t0x2E: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n\t0x2F: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n\t0x39: { n:'PtgNameX', f:parse_PtgNameX },\n\t0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },\n\t0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },\n\t0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n\t0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n\t0xFF: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n\t0x40: 0x20, 0x60: 0x20,\n\t0x41: 0x21, 0x61: 0x21,\n\t0x42: 0x22, 0x62: 0x22,\n\t0x43: 0x23, 0x63: 0x23,\n\t0x44: 0x24, 0x64: 0x24,\n\t0x45: 0x25, 0x65: 0x25,\n\t0x46: 0x26, 0x66: 0x26,\n\t0x47: 0x27, 0x67: 0x27,\n\t0x48: 0x28, 0x68: 0x28,\n\t0x49: 0x29, 0x69: 0x29,\n\t0x4A: 0x2A, 0x6A: 0x2A,\n\t0x4B: 0x2B, 0x6B: 0x2B,\n\t0x4C: 0x2C, 0x6C: 0x2C,\n\t0x4D: 0x2D, 0x6D: 0x2D,\n\t0x4E: 0x2E, 0x6E: 0x2E,\n\t0x4F: 0x2F, 0x6F: 0x2F,\n\t0x58: 0x22, 0x78: 0x22,\n\t0x59: 0x39, 0x79: 0x39,\n\t0x5A: 0x3A, 0x7A: 0x3A,\n\t0x5B: 0x3B, 0x7B: 0x3B,\n\t0x5C: 0x3C, 0x7C: 0x3C,\n\t0x5D: 0x3D, 0x7D: 0x3D\n};\n\nvar Ptg18 = {\n\t0x01: { n:'PtgElfLel', f:parse_PtgElfLel },\n\t0x02: { n:'PtgElfRw', f:parse_PtgElfRw },\n\t0x03: { n:'PtgElfCol', f:parse_PtgElfCol },\n\t0x06: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n\t0x07: { n:'PtgElfColV', f:parse_PtgElfColV },\n\t0x0A: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n\t0x0B: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n\t0x0D: { n:'PtgElfColS', f:parse_PtgElfColS },\n\t0x0F: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n\t0x10: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n\t0x19: { n:'PtgList', f:parse_PtgList },\n\t0x1D: { n:'PtgSxName', f:parse_PtgSxName },\n\t0xFF: {}\n};\nvar Ptg19 = {\n\t0x00: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n\t0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n\t0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n\t0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n\t0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n\t0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n\t0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t0x21: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n\t0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n\t0x80: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n\t0xFF: {}\n};\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id] || PtgTypes[PtgDupes[id]];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f/*:Array>*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r/*:Array*/ = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\n\t\t\t\t\t/*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n\t\t\t\t\tr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// TODO: explore space\nfunction make_3d_range(start, end) {\n\tvar s = start.lastIndexOf(\"!\"), e = end.lastIndexOf(\"!\");\n\tif(s == -1 && e == -1) return start + \":\" + end;\n\tif(s > 0 && e > 0 && start.slice(0, s).toLowerCase() == end.slice(0, e).toLowerCase()) return start + \":\" + end.slice(e+1);\n\tconsole.error(\"Cannot hydrate range\", start, end);\n\treturn start + \":\" + end;\n}\n\nfunction get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tvar ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n\treturn ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\nfunction stringify_formula(formula/*Array*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack/*:Array*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd': /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv': /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq': /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe': /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt': /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe': /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt': /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul': /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe': /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower': /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub': /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(make_3d_range(e2,e1));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\n\t\t\t\t/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\n\t\t\t\t/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]/*:any*/);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\t/* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */\n\t\t\t\tif(name && name.slice(0,6) == \"_xlfn.\" && !opts.xlfn) name = name.slice(6);\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx/*:number*/ = (f[1][1]/*:any*/); nameidx = (f[1][2]/*:any*/); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||\"\").split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]/*:any*/),r:(f[1][0]/*:any*/)};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r}/*:any*/);\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t} else {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(/*::String(*/f[1]/*::)*/);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(/*::(*/f[1]/*:: :any)*/) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\tif(stack[0] == \"TRUE\") return true; if(stack[0] == \"FALSE\") return false;\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob/*::, length*/) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, os/*:number*/) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n\n/* Writes a PtgNum or PtgInt */\nfunction write_XLSBFormulaNum(val/*:number*/) {\n\tif((val | 0) == val && val < Math.pow(2,16) && val >= 0) {\n\t\tvar oint = new_buf(11);\n\t\toint.write_shift(4, 3);\n\t\toint.write_shift(1, 0x1e);\n\t\toint.write_shift(2, val);\n\t\toint.write_shift(4, 0);\n\t\treturn oint;\n\t}\n\n\tvar num = new_buf(17);\n\tnum.write_shift(4, 11);\n\tnum.write_shift(1, 0x1f);\n\tnum.write_shift(8, val);\n\tnum.write_shift(4, 0);\n\treturn num;\n}\n/* Writes a PtgErr */\nfunction write_XLSBFormulaErr(val/*:number*/) {\n\tvar oint = new_buf(10);\n\toint.write_shift(4, 2);\n\toint.write_shift(1, 0x1C);\n\toint.write_shift(1, val);\n\toint.write_shift(4, 0);\n\treturn oint;\n}\n/* Writes a PtgBool */\nfunction write_XLSBFormulaBool(val/*:boolean*/) {\n\tvar oint = new_buf(10);\n\toint.write_shift(4, 2);\n\toint.write_shift(1, 0x1D);\n\toint.write_shift(1, val?1:0);\n\toint.write_shift(4, 0);\n\treturn oint;\n}\n\n/* Writes a PtgStr */\nfunction write_XLSBFormulaStr(val/*:string*/) {\n\tvar preamble = new_buf(7);\n\tpreamble.write_shift(4, 3 + 2 * val.length);\n\tpreamble.write_shift(1, 0x17);\n\tpreamble.write_shift(2, val.length);\n\n\tvar body = new_buf(2 * val.length);\n\tbody.write_shift(2 * val.length, val, \"utf16le\");\n\n\tvar postamble = new_buf(4);\n\tpostamble.write_shift(4, 0);\n\n\treturn bconcat([preamble, body, postamble]);\n}\n\n/* Writes a PtgRef */\nfunction write_XLSBFormulaRef(str) {\n\tvar cell = decode_cell(str);\n\tvar out = new_buf(15);\n\tout.write_shift(4, 7);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a PtgRef3d */\nfunction write_XLSBFormulaRef3D(str, wb) {\n\tvar lastbang = str.lastIndexOf(\"!\");\n\tvar sname = str.slice(0, lastbang);\n\tstr = str.slice(lastbang+1);\n\tvar cell = decode_cell(str);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\n\tvar out = new_buf(17);\n\tout.write_shift(4, 9);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a PtgRefErr3d */\nfunction write_XLSBFormulaRefErr3D(str, wb) {\n\tvar lastbang = str.lastIndexOf(\"!\");\n\tvar sname = str.slice(0, lastbang);\n\tstr = str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\n\tvar out = new_buf(17);\n\tout.write_shift(4, 9);\n\tout.write_shift(1, 0x1C | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, 0);\n\tout.write_shift(2, 0); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a single sheet range [PtgRef PtgRef PtgRange] */\nfunction write_XLSBFormulaRange(_str) {\n\tvar parts = _str.split(\":\"), str = parts[0];\n\n\tvar out = new_buf(23);\n\tout.write_shift(4, 15);\n\n\t/* start cell */\n\tstr = parts[0]; var cell = decode_cell(str);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\t/* end cell */\n\tstr = parts[1]; cell = decode_cell(str);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\t/* PtgRange */\n\tout.write_shift(1, 0x11);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a range with explicit sheet name [PtgRef3D PtgRef3D PtgRange] */\nfunction write_XLSBFormulaRangeWS(_str, wb) {\n\tvar lastbang = _str.lastIndexOf(\"!\");\n\tvar sname = _str.slice(0, lastbang);\n\t_str = _str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\tvar parts = _str.split(\":\");\n\n\tvar out = new_buf(27);\n\tout.write_shift(4, 19);\n\n\t/* start cell */\n\tvar str = parts[0], cell = decode_cell(str);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\n\t/* end cell */\n\tstr = parts[1]; cell = decode_cell(str);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\n\t/* PtgRange */\n\tout.write_shift(1, 0x11);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a range with explicit sheet name [PtgArea3d] */\nfunction write_XLSBFormulaArea3D(_str, wb) {\n\tvar lastbang = _str.lastIndexOf(\"!\");\n\tvar sname = _str.slice(0, lastbang);\n\t_str = _str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\tvar range = decode_range(_str);\n\n\tvar out = new_buf(23);\n\tout.write_shift(4, 15);\n\n\tout.write_shift(1, 0x1B | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, range.s.r);\n\tout.write_shift(4, range.e.r);\n\tout.write_shift(2, range.s.c);\n\tout.write_shift(2, range.e.c);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n\n/* General Formula */\nfunction write_XLSBFormula(val/*:string|number*/, wb) {\n\tif(typeof val == \"number\") return write_XLSBFormulaNum(val);\n\tif(typeof val == \"boolean\") return write_XLSBFormulaBool(val);\n\tif(/^#(DIV\\/0!|GETTING_DATA|N\\/A|NAME\\?|NULL!|NUM!|REF!|VALUE!)$/.test(val)) return write_XLSBFormulaErr(+RBErr[val]);\n\tif(val.match(/^\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRef(val);\n\tif(val.match(/^\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRange(val);\n\tif(val.match(/^#REF!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaArea3D(val, wb);\n\tif(val.match(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRef3D(val, wb);\n\tif(val.match(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRangeWS(val, wb);\n\tif(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!#REF!$/.test(val)) return write_XLSBFormulaRefErr3D(val, wb);\n\tif(/^\".*\"$/.test(val)) return write_XLSBFormulaStr(val);\n\tif(/^[+-]\\d+$/.test(val)) return write_XLSBFormulaNum(parseInt(val, 10));\n\tthrow \"Formula |\" + val + \"| not supported for XLSB\";\n}\nvar write_XLSBNameParsedFormula = write_XLSBFormula;\nvar Cetab = {\n 0: \"BEEP\",\n 1: \"OPEN\",\n 2: \"OPEN.LINKS\",\n 3: \"CLOSE.ALL\",\n 4: \"SAVE\",\n 5: \"SAVE.AS\",\n 6: \"FILE.DELETE\",\n 7: \"PAGE.SETUP\",\n 8: \"PRINT\",\n 9: \"PRINTER.SETUP\",\n 10: \"QUIT\",\n 11: \"NEW.WINDOW\",\n 12: \"ARRANGE.ALL\",\n 13: \"WINDOW.SIZE\",\n 14: \"WINDOW.MOVE\",\n 15: \"FULL\",\n 16: \"CLOSE\",\n 17: \"RUN\",\n 22: \"SET.PRINT.AREA\",\n 23: \"SET.PRINT.TITLES\",\n 24: \"SET.PAGE.BREAK\",\n 25: \"REMOVE.PAGE.BREAK\",\n 26: \"FONT\",\n 27: \"DISPLAY\",\n 28: \"PROTECT.DOCUMENT\",\n 29: \"PRECISION\",\n 30: \"A1.R1C1\",\n 31: \"CALCULATE.NOW\",\n 32: \"CALCULATION\",\n 34: \"DATA.FIND\",\n 35: \"EXTRACT\",\n 36: \"DATA.DELETE\",\n 37: \"SET.DATABASE\",\n 38: \"SET.CRITERIA\",\n 39: \"SORT\",\n 40: \"DATA.SERIES\",\n 41: \"TABLE\",\n 42: \"FORMAT.NUMBER\",\n 43: \"ALIGNMENT\",\n 44: \"STYLE\",\n 45: \"BORDER\",\n 46: \"CELL.PROTECTION\",\n 47: \"COLUMN.WIDTH\",\n 48: \"UNDO\",\n 49: \"CUT\",\n 50: \"COPY\",\n 51: \"PASTE\",\n 52: \"CLEAR\",\n 53: \"PASTE.SPECIAL\",\n 54: \"EDIT.DELETE\",\n 55: \"INSERT\",\n 56: \"FILL.RIGHT\",\n 57: \"FILL.DOWN\",\n 61: \"DEFINE.NAME\",\n 62: \"CREATE.NAMES\",\n 63: \"FORMULA.GOTO\",\n 64: \"FORMULA.FIND\",\n 65: \"SELECT.LAST.CELL\",\n 66: \"SHOW.ACTIVE.CELL\",\n 67: \"GALLERY.AREA\",\n 68: \"GALLERY.BAR\",\n 69: \"GALLERY.COLUMN\",\n 70: \"GALLERY.LINE\",\n 71: \"GALLERY.PIE\",\n 72: \"GALLERY.SCATTER\",\n 73: \"COMBINATION\",\n 74: \"PREFERRED\",\n 75: \"ADD.OVERLAY\",\n 76: \"GRIDLINES\",\n 77: \"SET.PREFERRED\",\n 78: \"AXES\",\n 79: \"LEGEND\",\n 80: \"ATTACH.TEXT\",\n 81: \"ADD.ARROW\",\n 82: \"SELECT.CHART\",\n 83: \"SELECT.PLOT.AREA\",\n 84: \"PATTERNS\",\n 85: \"MAIN.CHART\",\n 86: \"OVERLAY\",\n 87: \"SCALE\",\n 88: \"FORMAT.LEGEND\",\n 89: \"FORMAT.TEXT\",\n 90: \"EDIT.REPEAT\",\n 91: \"PARSE\",\n 92: \"JUSTIFY\",\n 93: \"HIDE\",\n 94: \"UNHIDE\",\n 95: \"WORKSPACE\",\n 96: \"FORMULA\",\n 97: \"FORMULA.FILL\",\n 98: \"FORMULA.ARRAY\",\n 99: \"DATA.FIND.NEXT\",\n 100: \"DATA.FIND.PREV\",\n 101: \"FORMULA.FIND.NEXT\",\n 102: \"FORMULA.FIND.PREV\",\n 103: \"ACTIVATE\",\n 104: \"ACTIVATE.NEXT\",\n 105: \"ACTIVATE.PREV\",\n 106: \"UNLOCKED.NEXT\",\n 107: \"UNLOCKED.PREV\",\n 108: \"COPY.PICTURE\",\n 109: \"SELECT\",\n 110: \"DELETE.NAME\",\n 111: \"DELETE.FORMAT\",\n 112: \"VLINE\",\n 113: \"HLINE\",\n 114: \"VPAGE\",\n 115: \"HPAGE\",\n 116: \"VSCROLL\",\n 117: \"HSCROLL\",\n 118: \"ALERT\",\n 119: \"NEW\",\n 120: \"CANCEL.COPY\",\n 121: \"SHOW.CLIPBOARD\",\n 122: \"MESSAGE\",\n 124: \"PASTE.LINK\",\n 125: \"APP.ACTIVATE\",\n 126: \"DELETE.ARROW\",\n 127: \"ROW.HEIGHT\",\n 128: \"FORMAT.MOVE\",\n 129: \"FORMAT.SIZE\",\n 130: \"FORMULA.REPLACE\",\n 131: \"SEND.KEYS\",\n 132: \"SELECT.SPECIAL\",\n 133: \"APPLY.NAMES\",\n 134: \"REPLACE.FONT\",\n 135: \"FREEZE.PANES\",\n 136: \"SHOW.INFO\",\n 137: \"SPLIT\",\n 138: \"ON.WINDOW\",\n 139: \"ON.DATA\",\n 140: \"DISABLE.INPUT\",\n 142: \"OUTLINE\",\n 143: \"LIST.NAMES\",\n 144: \"FILE.CLOSE\",\n 145: \"SAVE.WORKBOOK\",\n 146: \"DATA.FORM\",\n 147: \"COPY.CHART\",\n 148: \"ON.TIME\",\n 149: \"WAIT\",\n 150: \"FORMAT.FONT\",\n 151: \"FILL.UP\",\n 152: \"FILL.LEFT\",\n 153: \"DELETE.OVERLAY\",\n 155: \"SHORT.MENUS\",\n 159: \"SET.UPDATE.STATUS\",\n 161: \"COLOR.PALETTE\",\n 162: \"DELETE.STYLE\",\n 163: \"WINDOW.RESTORE\",\n 164: \"WINDOW.MAXIMIZE\",\n 166: \"CHANGE.LINK\",\n 167: \"CALCULATE.DOCUMENT\",\n 168: \"ON.KEY\",\n 169: \"APP.RESTORE\",\n 170: \"APP.MOVE\",\n 171: \"APP.SIZE\",\n 172: \"APP.MINIMIZE\",\n 173: \"APP.MAXIMIZE\",\n 174: \"BRING.TO.FRONT\",\n 175: \"SEND.TO.BACK\",\n 185: \"MAIN.CHART.TYPE\",\n 186: \"OVERLAY.CHART.TYPE\",\n 187: \"SELECT.END\",\n 188: \"OPEN.MAIL\",\n 189: \"SEND.MAIL\",\n 190: \"STANDARD.FONT\",\n 191: \"CONSOLIDATE\",\n 192: \"SORT.SPECIAL\",\n 193: \"GALLERY.3D.AREA\",\n 194: \"GALLERY.3D.COLUMN\",\n 195: \"GALLERY.3D.LINE\",\n 196: \"GALLERY.3D.PIE\",\n 197: \"VIEW.3D\",\n 198: \"GOAL.SEEK\",\n 199: \"WORKGROUP\",\n 200: \"FILL.GROUP\",\n 201: \"UPDATE.LINK\",\n 202: \"PROMOTE\",\n 203: \"DEMOTE\",\n 204: \"SHOW.DETAIL\",\n 206: \"UNGROUP\",\n 207: \"OBJECT.PROPERTIES\",\n 208: \"SAVE.NEW.OBJECT\",\n 209: \"SHARE\",\n 210: \"SHARE.NAME\",\n 211: \"DUPLICATE\",\n 212: \"APPLY.STYLE\",\n 213: \"ASSIGN.TO.OBJECT\",\n 214: \"OBJECT.PROTECTION\",\n 215: \"HIDE.OBJECT\",\n 216: \"SET.EXTRACT\",\n 217: \"CREATE.PUBLISHER\",\n 218: \"SUBSCRIBE.TO\",\n 219: \"ATTRIBUTES\",\n 220: \"SHOW.TOOLBAR\",\n 222: \"PRINT.PREVIEW\",\n 223: \"EDIT.COLOR\",\n 224: \"SHOW.LEVELS\",\n 225: \"FORMAT.MAIN\",\n 226: \"FORMAT.OVERLAY\",\n 227: \"ON.RECALC\",\n 228: \"EDIT.SERIES\",\n 229: \"DEFINE.STYLE\",\n 240: \"LINE.PRINT\",\n 243: \"ENTER.DATA\",\n 249: \"GALLERY.RADAR\",\n 250: \"MERGE.STYLES\",\n 251: \"EDITION.OPTIONS\",\n 252: \"PASTE.PICTURE\",\n 253: \"PASTE.PICTURE.LINK\",\n 254: \"SPELLING\",\n 256: \"ZOOM\",\n 259: \"INSERT.OBJECT\",\n 260: \"WINDOW.MINIMIZE\",\n 265: \"SOUND.NOTE\",\n 266: \"SOUND.PLAY\",\n 267: \"FORMAT.SHAPE\",\n 268: \"EXTEND.POLYGON\",\n 269: \"FORMAT.AUTO\",\n 272: \"GALLERY.3D.BAR\",\n 273: \"GALLERY.3D.SURFACE\",\n 274: \"FILL.AUTO\",\n 276: \"CUSTOMIZE.TOOLBAR\",\n 277: \"ADD.TOOL\",\n 278: \"EDIT.OBJECT\",\n 279: \"ON.DOUBLECLICK\",\n 280: \"ON.ENTRY\",\n 281: \"WORKBOOK.ADD\",\n 282: \"WORKBOOK.MOVE\",\n 283: \"WORKBOOK.COPY\",\n 284: \"WORKBOOK.OPTIONS\",\n 285: \"SAVE.WORKSPACE\",\n 288: \"CHART.WIZARD\",\n 289: \"DELETE.TOOL\",\n 290: \"MOVE.TOOL\",\n 291: \"WORKBOOK.SELECT\",\n 292: \"WORKBOOK.ACTIVATE\",\n 293: \"ASSIGN.TO.TOOL\",\n 295: \"COPY.TOOL\",\n 296: \"RESET.TOOL\",\n 297: \"CONSTRAIN.NUMERIC\",\n 298: \"PASTE.TOOL\",\n 302: \"WORKBOOK.NEW\",\n 305: \"SCENARIO.CELLS\",\n 306: \"SCENARIO.DELETE\",\n 307: \"SCENARIO.ADD\",\n 308: \"SCENARIO.EDIT\",\n 309: \"SCENARIO.SHOW\",\n 310: \"SCENARIO.SHOW.NEXT\",\n 311: \"SCENARIO.SUMMARY\",\n 312: \"PIVOT.TABLE.WIZARD\",\n 313: \"PIVOT.FIELD.PROPERTIES\",\n 314: \"PIVOT.FIELD\",\n 315: \"PIVOT.ITEM\",\n 316: \"PIVOT.ADD.FIELDS\",\n 318: \"OPTIONS.CALCULATION\",\n 319: \"OPTIONS.EDIT\",\n 320: \"OPTIONS.VIEW\",\n 321: \"ADDIN.MANAGER\",\n 322: \"MENU.EDITOR\",\n 323: \"ATTACH.TOOLBARS\",\n 324: \"VBAActivate\",\n 325: \"OPTIONS.CHART\",\n 328: \"VBA.INSERT.FILE\",\n 330: \"VBA.PROCEDURE.DEFINITION\",\n 336: \"ROUTING.SLIP\",\n 338: \"ROUTE.DOCUMENT\",\n 339: \"MAIL.LOGON\",\n 342: \"INSERT.PICTURE\",\n 343: \"EDIT.TOOL\",\n 344: \"GALLERY.DOUGHNUT\",\n 350: \"CHART.TREND\",\n 352: \"PIVOT.ITEM.PROPERTIES\",\n 354: \"WORKBOOK.INSERT\",\n 355: \"OPTIONS.TRANSITION\",\n 356: \"OPTIONS.GENERAL\",\n 370: \"FILTER.ADVANCED\",\n 373: \"MAIL.ADD.MAILER\",\n 374: \"MAIL.DELETE.MAILER\",\n 375: \"MAIL.REPLY\",\n 376: \"MAIL.REPLY.ALL\",\n 377: \"MAIL.FORWARD\",\n 378: \"MAIL.NEXT.LETTER\",\n 379: \"DATA.LABEL\",\n 380: \"INSERT.TITLE\",\n 381: \"FONT.PROPERTIES\",\n 382: \"MACRO.OPTIONS\",\n 383: \"WORKBOOK.HIDE\",\n 384: \"WORKBOOK.UNHIDE\",\n 385: \"WORKBOOK.DELETE\",\n 386: \"WORKBOOK.NAME\",\n 388: \"GALLERY.CUSTOM\",\n 390: \"ADD.CHART.AUTOFORMAT\",\n 391: \"DELETE.CHART.AUTOFORMAT\",\n 392: \"CHART.ADD.DATA\",\n 393: \"AUTO.OUTLINE\",\n 394: \"TAB.ORDER\",\n 395: \"SHOW.DIALOG\",\n 396: \"SELECT.ALL\",\n 397: \"UNGROUP.SHEETS\",\n 398: \"SUBTOTAL.CREATE\",\n 399: \"SUBTOTAL.REMOVE\",\n 400: \"RENAME.OBJECT\",\n 412: \"WORKBOOK.SCROLL\",\n 413: \"WORKBOOK.NEXT\",\n 414: \"WORKBOOK.PREV\",\n 415: \"WORKBOOK.TAB.SPLIT\",\n 416: \"FULL.SCREEN\",\n 417: \"WORKBOOK.PROTECT\",\n 420: \"SCROLLBAR.PROPERTIES\",\n 421: \"PIVOT.SHOW.PAGES\",\n 422: \"TEXT.TO.COLUMNS\",\n 423: \"FORMAT.CHARTTYPE\",\n 424: \"LINK.FORMAT\",\n 425: \"TRACER.DISPLAY\",\n 430: \"TRACER.NAVIGATE\",\n 431: \"TRACER.CLEAR\",\n 432: \"TRACER.ERROR\",\n 433: \"PIVOT.FIELD.GROUP\",\n 434: \"PIVOT.FIELD.UNGROUP\",\n 435: \"CHECKBOX.PROPERTIES\",\n 436: \"LABEL.PROPERTIES\",\n 437: \"LISTBOX.PROPERTIES\",\n 438: \"EDITBOX.PROPERTIES\",\n 439: \"PIVOT.REFRESH\",\n 440: \"LINK.COMBO\",\n 441: \"OPEN.TEXT\",\n 442: \"HIDE.DIALOG\",\n 443: \"SET.DIALOG.FOCUS\",\n 444: \"ENABLE.OBJECT\",\n 445: \"PUSHBUTTON.PROPERTIES\",\n 446: \"SET.DIALOG.DEFAULT\",\n 447: \"FILTER\",\n 448: \"FILTER.SHOW.ALL\",\n 449: \"CLEAR.OUTLINE\",\n 450: \"FUNCTION.WIZARD\",\n 451: \"ADD.LIST.ITEM\",\n 452: \"SET.LIST.ITEM\",\n 453: \"REMOVE.LIST.ITEM\",\n 454: \"SELECT.LIST.ITEM\",\n 455: \"SET.CONTROL.VALUE\",\n 456: \"SAVE.COPY.AS\",\n 458: \"OPTIONS.LISTS.ADD\",\n 459: \"OPTIONS.LISTS.DELETE\",\n 460: \"SERIES.AXES\",\n 461: \"SERIES.X\",\n 462: \"SERIES.Y\",\n 463: \"ERRORBAR.X\",\n 464: \"ERRORBAR.Y\",\n 465: \"FORMAT.CHART\",\n 466: \"SERIES.ORDER\",\n 467: \"MAIL.LOGOFF\",\n 468: \"CLEAR.ROUTING.SLIP\",\n 469: \"APP.ACTIVATE.MICROSOFT\",\n 470: \"MAIL.EDIT.MAILER\",\n 471: \"ON.SHEET\",\n 472: \"STANDARD.WIDTH\",\n 473: \"SCENARIO.MERGE\",\n 474: \"SUMMARY.INFO\",\n 475: \"FIND.FILE\",\n 476: \"ACTIVE.CELL.FONT\",\n 477: \"ENABLE.TIPWIZARD\",\n 478: \"VBA.MAKE.ADDIN\",\n 480: \"INSERTDATATABLE\",\n 481: \"WORKGROUP.OPTIONS\",\n 482: \"MAIL.SEND.MAILER\",\n 485: \"AUTOCORRECT\",\n 489: \"POST.DOCUMENT\",\n 491: \"PICKLIST\",\n 493: \"VIEW.SHOW\",\n 494: \"VIEW.DEFINE\",\n 495: \"VIEW.DELETE\",\n 509: \"SHEET.BACKGROUND\",\n 510: \"INSERT.MAP.OBJECT\",\n 511: \"OPTIONS.MENONO\",\n 517: \"MSOCHECKS\",\n 518: \"NORMAL\",\n 519: \"LAYOUT\",\n 520: \"RM.PRINT.AREA\",\n 521: \"CLEAR.PRINT.AREA\",\n 522: \"ADD.PRINT.AREA\",\n 523: \"MOVE.BRK\",\n 545: \"HIDECURR.NOTE\",\n 546: \"HIDEALL.NOTES\",\n 547: \"DELETE.NOTE\",\n 548: \"TRAVERSE.NOTES\",\n 549: \"ACTIVATE.NOTES\",\n 620: \"PROTECT.REVISIONS\",\n 621: \"UNPROTECT.REVISIONS\",\n 647: \"OPTIONS.ME\",\n 653: \"WEB.PUBLISH\",\n 667: \"NEWWEBQUERY\",\n 673: \"PIVOT.TABLE.CHART\",\n 753: \"OPTIONS.SAVE\",\n 755: \"OPTIONS.SPELL\",\n 808: \"HIDEALL.INKANNOTS\"\n};\nvar Ftab = {\n 0: \"COUNT\",\n 1: \"IF\",\n 2: \"ISNA\",\n 3: \"ISERROR\",\n 4: \"SUM\",\n 5: \"AVERAGE\",\n 6: \"MIN\",\n 7: \"MAX\",\n 8: \"ROW\",\n 9: \"COLUMN\",\n 10: \"NA\",\n 11: \"NPV\",\n 12: \"STDEV\",\n 13: \"DOLLAR\",\n 14: \"FIXED\",\n 15: \"SIN\",\n 16: \"COS\",\n 17: \"TAN\",\n 18: \"ATAN\",\n 19: \"PI\",\n 20: \"SQRT\",\n 21: \"EXP\",\n 22: \"LN\",\n 23: \"LOG10\",\n 24: \"ABS\",\n 25: \"INT\",\n 26: \"SIGN\",\n 27: \"ROUND\",\n 28: \"LOOKUP\",\n 29: \"INDEX\",\n 30: \"REPT\",\n 31: \"MID\",\n 32: \"LEN\",\n 33: \"VALUE\",\n 34: \"TRUE\",\n 35: \"FALSE\",\n 36: \"AND\",\n 37: \"OR\",\n 38: \"NOT\",\n 39: \"MOD\",\n 40: \"DCOUNT\",\n 41: \"DSUM\",\n 42: \"DAVERAGE\",\n 43: \"DMIN\",\n 44: \"DMAX\",\n 45: \"DSTDEV\",\n 46: \"VAR\",\n 47: \"DVAR\",\n 48: \"TEXT\",\n 49: \"LINEST\",\n 50: \"TREND\",\n 51: \"LOGEST\",\n 52: \"GROWTH\",\n 53: \"GOTO\",\n 54: \"HALT\",\n 55: \"RETURN\",\n 56: \"PV\",\n 57: \"FV\",\n 58: \"NPER\",\n 59: \"PMT\",\n 60: \"RATE\",\n 61: \"MIRR\",\n 62: \"IRR\",\n 63: \"RAND\",\n 64: \"MATCH\",\n 65: \"DATE\",\n 66: \"TIME\",\n 67: \"DAY\",\n 68: \"MONTH\",\n 69: \"YEAR\",\n 70: \"WEEKDAY\",\n 71: \"HOUR\",\n 72: \"MINUTE\",\n 73: \"SECOND\",\n 74: \"NOW\",\n 75: \"AREAS\",\n 76: \"ROWS\",\n 77: \"COLUMNS\",\n 78: \"OFFSET\",\n 79: \"ABSREF\",\n 80: \"RELREF\",\n 81: \"ARGUMENT\",\n 82: \"SEARCH\",\n 83: \"TRANSPOSE\",\n 84: \"ERROR\",\n 85: \"STEP\",\n 86: \"TYPE\",\n 87: \"ECHO\",\n 88: \"SET.NAME\",\n 89: \"CALLER\",\n 90: \"DEREF\",\n 91: \"WINDOWS\",\n 92: \"SERIES\",\n 93: \"DOCUMENTS\",\n 94: \"ACTIVE.CELL\",\n 95: \"SELECTION\",\n 96: \"RESULT\",\n 97: \"ATAN2\",\n 98: \"ASIN\",\n 99: \"ACOS\",\n 100: \"CHOOSE\",\n 101: \"HLOOKUP\",\n 102: \"VLOOKUP\",\n 103: \"LINKS\",\n 104: \"INPUT\",\n 105: \"ISREF\",\n 106: \"GET.FORMULA\",\n 107: \"GET.NAME\",\n 108: \"SET.VALUE\",\n 109: \"LOG\",\n 110: \"EXEC\",\n 111: \"CHAR\",\n 112: \"LOWER\",\n 113: \"UPPER\",\n 114: \"PROPER\",\n 115: \"LEFT\",\n 116: \"RIGHT\",\n 117: \"EXACT\",\n 118: \"TRIM\",\n 119: \"REPLACE\",\n 120: \"SUBSTITUTE\",\n 121: \"CODE\",\n 122: \"NAMES\",\n 123: \"DIRECTORY\",\n 124: \"FIND\",\n 125: \"CELL\",\n 126: \"ISERR\",\n 127: \"ISTEXT\",\n 128: \"ISNUMBER\",\n 129: \"ISBLANK\",\n 130: \"T\",\n 131: \"N\",\n 132: \"FOPEN\",\n 133: \"FCLOSE\",\n 134: \"FSIZE\",\n 135: \"FREADLN\",\n 136: \"FREAD\",\n 137: \"FWRITELN\",\n 138: \"FWRITE\",\n 139: \"FPOS\",\n 140: \"DATEVALUE\",\n 141: \"TIMEVALUE\",\n 142: \"SLN\",\n 143: \"SYD\",\n 144: \"DDB\",\n 145: \"GET.DEF\",\n 146: \"REFTEXT\",\n 147: \"TEXTREF\",\n 148: \"INDIRECT\",\n 149: \"REGISTER\",\n 150: \"CALL\",\n 151: \"ADD.BAR\",\n 152: \"ADD.MENU\",\n 153: \"ADD.COMMAND\",\n 154: \"ENABLE.COMMAND\",\n 155: \"CHECK.COMMAND\",\n 156: \"RENAME.COMMAND\",\n 157: \"SHOW.BAR\",\n 158: \"DELETE.MENU\",\n 159: \"DELETE.COMMAND\",\n 160: \"GET.CHART.ITEM\",\n 161: \"DIALOG.BOX\",\n 162: \"CLEAN\",\n 163: \"MDETERM\",\n 164: \"MINVERSE\",\n 165: \"MMULT\",\n 166: \"FILES\",\n 167: \"IPMT\",\n 168: \"PPMT\",\n 169: \"COUNTA\",\n 170: \"CANCEL.KEY\",\n 171: \"FOR\",\n 172: \"WHILE\",\n 173: \"BREAK\",\n 174: \"NEXT\",\n 175: \"INITIATE\",\n 176: \"REQUEST\",\n 177: \"POKE\",\n 178: \"EXECUTE\",\n 179: \"TERMINATE\",\n 180: \"RESTART\",\n 181: \"HELP\",\n 182: \"GET.BAR\",\n 183: \"PRODUCT\",\n 184: \"FACT\",\n 185: \"GET.CELL\",\n 186: \"GET.WORKSPACE\",\n 187: \"GET.WINDOW\",\n 188: \"GET.DOCUMENT\",\n 189: \"DPRODUCT\",\n 190: \"ISNONTEXT\",\n 191: \"GET.NOTE\",\n 192: \"NOTE\",\n 193: \"STDEVP\",\n 194: \"VARP\",\n 195: \"DSTDEVP\",\n 196: \"DVARP\",\n 197: \"TRUNC\",\n 198: \"ISLOGICAL\",\n 199: \"DCOUNTA\",\n 200: \"DELETE.BAR\",\n 201: \"UNREGISTER\",\n 204: \"USDOLLAR\",\n 205: \"FINDB\",\n 206: \"SEARCHB\",\n 207: \"REPLACEB\",\n 208: \"LEFTB\",\n 209: \"RIGHTB\",\n 210: \"MIDB\",\n 211: \"LENB\",\n 212: \"ROUNDUP\",\n 213: \"ROUNDDOWN\",\n 214: \"ASC\",\n 215: \"DBCS\",\n 216: \"RANK\",\n 219: \"ADDRESS\",\n 220: \"DAYS360\",\n 221: \"TODAY\",\n 222: \"VDB\",\n 223: \"ELSE\",\n 224: \"ELSE.IF\",\n 225: \"END.IF\",\n 226: \"FOR.CELL\",\n 227: \"MEDIAN\",\n 228: \"SUMPRODUCT\",\n 229: \"SINH\",\n 230: \"COSH\",\n 231: \"TANH\",\n 232: \"ASINH\",\n 233: \"ACOSH\",\n 234: \"ATANH\",\n 235: \"DGET\",\n 236: \"CREATE.OBJECT\",\n 237: \"VOLATILE\",\n 238: \"LAST.ERROR\",\n 239: \"CUSTOM.UNDO\",\n 240: \"CUSTOM.REPEAT\",\n 241: \"FORMULA.CONVERT\",\n 242: \"GET.LINK.INFO\",\n 243: \"TEXT.BOX\",\n 244: \"INFO\",\n 245: \"GROUP\",\n 246: \"GET.OBJECT\",\n 247: \"DB\",\n 248: \"PAUSE\",\n 251: \"RESUME\",\n 252: \"FREQUENCY\",\n 253: \"ADD.TOOLBAR\",\n 254: \"DELETE.TOOLBAR\",\n 255: \"User\",\n 256: \"RESET.TOOLBAR\",\n 257: \"EVALUATE\",\n 258: \"GET.TOOLBAR\",\n 259: \"GET.TOOL\",\n 260: \"SPELLING.CHECK\",\n 261: \"ERROR.TYPE\",\n 262: \"APP.TITLE\",\n 263: \"WINDOW.TITLE\",\n 264: \"SAVE.TOOLBAR\",\n 265: \"ENABLE.TOOL\",\n 266: \"PRESS.TOOL\",\n 267: \"REGISTER.ID\",\n 268: \"GET.WORKBOOK\",\n 269: \"AVEDEV\",\n 270: \"BETADIST\",\n 271: \"GAMMALN\",\n 272: \"BETAINV\",\n 273: \"BINOMDIST\",\n 274: \"CHIDIST\",\n 275: \"CHIINV\",\n 276: \"COMBIN\",\n 277: \"CONFIDENCE\",\n 278: \"CRITBINOM\",\n 279: \"EVEN\",\n 280: \"EXPONDIST\",\n 281: \"FDIST\",\n 282: \"FINV\",\n 283: \"FISHER\",\n 284: \"FISHERINV\",\n 285: \"FLOOR\",\n 286: \"GAMMADIST\",\n 287: \"GAMMAINV\",\n 288: \"CEILING\",\n 289: \"HYPGEOMDIST\",\n 290: \"LOGNORMDIST\",\n 291: \"LOGINV\",\n 292: \"NEGBINOMDIST\",\n 293: \"NORMDIST\",\n 294: \"NORMSDIST\",\n 295: \"NORMINV\",\n 296: \"NORMSINV\",\n 297: \"STANDARDIZE\",\n 298: \"ODD\",\n 299: \"PERMUT\",\n 300: \"POISSON\",\n 301: \"TDIST\",\n 302: \"WEIBULL\",\n 303: \"SUMXMY2\",\n 304: \"SUMX2MY2\",\n 305: \"SUMX2PY2\",\n 306: \"CHITEST\",\n 307: \"CORREL\",\n 308: \"COVAR\",\n 309: \"FORECAST\",\n 310: \"FTEST\",\n 311: \"INTERCEPT\",\n 312: \"PEARSON\",\n 313: \"RSQ\",\n 314: \"STEYX\",\n 315: \"SLOPE\",\n 316: \"TTEST\",\n 317: \"PROB\",\n 318: \"DEVSQ\",\n 319: \"GEOMEAN\",\n 320: \"HARMEAN\",\n 321: \"SUMSQ\",\n 322: \"KURT\",\n 323: \"SKEW\",\n 324: \"ZTEST\",\n 325: \"LARGE\",\n 326: \"SMALL\",\n 327: \"QUARTILE\",\n 328: \"PERCENTILE\",\n 329: \"PERCENTRANK\",\n 330: \"MODE\",\n 331: \"TRIMMEAN\",\n 332: \"TINV\",\n 334: \"MOVIE.COMMAND\",\n 335: \"GET.MOVIE\",\n 336: \"CONCATENATE\",\n 337: \"POWER\",\n 338: \"PIVOT.ADD.DATA\",\n 339: \"GET.PIVOT.TABLE\",\n 340: \"GET.PIVOT.FIELD\",\n 341: \"GET.PIVOT.ITEM\",\n 342: \"RADIANS\",\n 343: \"DEGREES\",\n 344: \"SUBTOTAL\",\n 345: \"SUMIF\",\n 346: \"COUNTIF\",\n 347: \"COUNTBLANK\",\n 348: \"SCENARIO.GET\",\n 349: \"OPTIONS.LISTS.GET\",\n 350: \"ISPMT\",\n 351: \"DATEDIF\",\n 352: \"DATESTRING\",\n 353: \"NUMBERSTRING\",\n 354: \"ROMAN\",\n 355: \"OPEN.DIALOG\",\n 356: \"SAVE.DIALOG\",\n 357: \"VIEW.GET\",\n 358: \"GETPIVOTDATA\",\n 359: \"HYPERLINK\",\n 360: \"PHONETIC\",\n 361: \"AVERAGEA\",\n 362: \"MAXA\",\n 363: \"MINA\",\n 364: \"STDEVPA\",\n 365: \"VARPA\",\n 366: \"STDEVA\",\n 367: \"VARA\",\n 368: \"BAHTTEXT\",\n 369: \"THAIDAYOFWEEK\",\n 370: \"THAIDIGIT\",\n 371: \"THAIMONTHOFYEAR\",\n 372: \"THAINUMSOUND\",\n 373: \"THAINUMSTRING\",\n 374: \"THAISTRINGLENGTH\",\n 375: \"ISTHAIDIGIT\",\n 376: \"ROUNDBAHTDOWN\",\n 377: \"ROUNDBAHTUP\",\n 378: \"THAIYEAR\",\n 379: \"RTD\",\n 380: \"CUBEVALUE\",\n 381: \"CUBEMEMBER\",\n 382: \"CUBEMEMBERPROPERTY\",\n 383: \"CUBERANKEDMEMBER\",\n 384: \"HEX2BIN\",\n 385: \"HEX2DEC\",\n 386: \"HEX2OCT\",\n 387: \"DEC2BIN\",\n 388: \"DEC2HEX\",\n 389: \"DEC2OCT\",\n 390: \"OCT2BIN\",\n 391: \"OCT2HEX\",\n 392: \"OCT2DEC\",\n 393: \"BIN2DEC\",\n 394: \"BIN2OCT\",\n 395: \"BIN2HEX\",\n 396: \"IMSUB\",\n 397: \"IMDIV\",\n 398: \"IMPOWER\",\n 399: \"IMABS\",\n 400: \"IMSQRT\",\n 401: \"IMLN\",\n 402: \"IMLOG2\",\n 403: \"IMLOG10\",\n 404: \"IMSIN\",\n 405: \"IMCOS\",\n 406: \"IMEXP\",\n 407: \"IMARGUMENT\",\n 408: \"IMCONJUGATE\",\n 409: \"IMAGINARY\",\n 410: \"IMREAL\",\n 411: \"COMPLEX\",\n 412: \"IMSUM\",\n 413: \"IMPRODUCT\",\n 414: \"SERIESSUM\",\n 415: \"FACTDOUBLE\",\n 416: \"SQRTPI\",\n 417: \"QUOTIENT\",\n 418: \"DELTA\",\n 419: \"GESTEP\",\n 420: \"ISEVEN\",\n 421: \"ISODD\",\n 422: \"MROUND\",\n 423: \"ERF\",\n 424: \"ERFC\",\n 425: \"BESSELJ\",\n 426: \"BESSELK\",\n 427: \"BESSELY\",\n 428: \"BESSELI\",\n 429: \"XIRR\",\n 430: \"XNPV\",\n 431: \"PRICEMAT\",\n 432: \"YIELDMAT\",\n 433: \"INTRATE\",\n 434: \"RECEIVED\",\n 435: \"DISC\",\n 436: \"PRICEDISC\",\n 437: \"YIELDDISC\",\n 438: \"TBILLEQ\",\n 439: \"TBILLPRICE\",\n 440: \"TBILLYIELD\",\n 441: \"PRICE\",\n 442: \"YIELD\",\n 443: \"DOLLARDE\",\n 444: \"DOLLARFR\",\n 445: \"NOMINAL\",\n 446: \"EFFECT\",\n 447: \"CUMPRINC\",\n 448: \"CUMIPMT\",\n 449: \"EDATE\",\n 450: \"EOMONTH\",\n 451: \"YEARFRAC\",\n 452: \"COUPDAYBS\",\n 453: \"COUPDAYS\",\n 454: \"COUPDAYSNC\",\n 455: \"COUPNCD\",\n 456: \"COUPNUM\",\n 457: \"COUPPCD\",\n 458: \"DURATION\",\n 459: \"MDURATION\",\n 460: \"ODDLPRICE\",\n 461: \"ODDLYIELD\",\n 462: \"ODDFPRICE\",\n 463: \"ODDFYIELD\",\n 464: \"RANDBETWEEN\",\n 465: \"WEEKNUM\",\n 466: \"AMORDEGRC\",\n 467: \"AMORLINC\",\n 468: \"CONVERT\",\n 724: \"SHEETJS\",\n 469: \"ACCRINT\",\n 470: \"ACCRINTM\",\n 471: \"WORKDAY\",\n 472: \"NETWORKDAYS\",\n 473: \"GCD\",\n 474: \"MULTINOMIAL\",\n 475: \"LCM\",\n 476: \"FVSCHEDULE\",\n 477: \"CUBEKPIMEMBER\",\n 478: \"CUBESET\",\n 479: \"CUBESETCOUNT\",\n 480: \"IFERROR\",\n 481: \"COUNTIFS\",\n 482: \"SUMIFS\",\n 483: \"AVERAGEIF\",\n 484: \"AVERAGEIFS\"\n};\nvar FtabArgc = {\n 2: 1,\n 3: 1,\n 10: 0,\n 15: 1,\n 16: 1,\n 17: 1,\n 18: 1,\n 19: 0,\n 20: 1,\n 21: 1,\n 22: 1,\n 23: 1,\n 24: 1,\n 25: 1,\n 26: 1,\n 27: 2,\n 30: 2,\n 31: 3,\n 32: 1,\n 33: 1,\n 34: 0,\n 35: 0,\n 38: 1,\n 39: 2,\n 40: 3,\n 41: 3,\n 42: 3,\n 43: 3,\n 44: 3,\n 45: 3,\n 47: 3,\n 48: 2,\n 53: 1,\n 61: 3,\n 63: 0,\n 65: 3,\n 66: 3,\n 67: 1,\n 68: 1,\n 69: 1,\n 70: 1,\n 71: 1,\n 72: 1,\n 73: 1,\n 74: 0,\n 75: 1,\n 76: 1,\n 77: 1,\n 79: 2,\n 80: 2,\n 83: 1,\n 85: 0,\n 86: 1,\n 89: 0,\n 90: 1,\n 94: 0,\n 95: 0,\n 97: 2,\n 98: 1,\n 99: 1,\n 101: 3,\n 102: 3,\n 105: 1,\n 106: 1,\n 108: 2,\n 111: 1,\n 112: 1,\n 113: 1,\n 114: 1,\n 117: 2,\n 118: 1,\n 119: 4,\n 121: 1,\n 126: 1,\n 127: 1,\n 128: 1,\n 129: 1,\n 130: 1,\n 131: 1,\n 133: 1,\n 134: 1,\n 135: 1,\n 136: 2,\n 137: 2,\n 138: 2,\n 140: 1,\n 141: 1,\n 142: 3,\n 143: 4,\n 144: 4,\n 161: 1,\n 162: 1,\n 163: 1,\n 164: 1,\n 165: 2,\n 172: 1,\n 175: 2,\n 176: 2,\n 177: 3,\n 178: 2,\n 179: 1,\n 184: 1,\n 186: 1,\n 189: 3,\n 190: 1,\n 195: 3,\n 196: 3,\n 197: 1,\n 198: 1,\n 199: 3,\n 201: 1,\n 207: 4,\n 210: 3,\n 211: 1,\n 212: 2,\n 213: 2,\n 214: 1,\n 215: 1,\n 225: 0,\n 229: 1,\n 230: 1,\n 231: 1,\n 232: 1,\n 233: 1,\n 234: 1,\n 235: 3,\n 244: 1,\n 247: 4,\n 252: 2,\n 257: 1,\n 261: 1,\n 271: 1,\n 273: 4,\n 274: 2,\n 275: 2,\n 276: 2,\n 277: 3,\n 278: 3,\n 279: 1,\n 280: 3,\n 281: 3,\n 282: 3,\n 283: 1,\n 284: 1,\n 285: 2,\n 286: 4,\n 287: 3,\n 288: 2,\n 289: 4,\n 290: 3,\n 291: 3,\n 292: 3,\n 293: 4,\n 294: 1,\n 295: 3,\n 296: 1,\n 297: 3,\n 298: 1,\n 299: 2,\n 300: 3,\n 301: 3,\n 302: 4,\n 303: 2,\n 304: 2,\n 305: 2,\n 306: 2,\n 307: 2,\n 308: 2,\n 309: 3,\n 310: 2,\n 311: 2,\n 312: 2,\n 313: 2,\n 314: 2,\n 315: 2,\n 316: 4,\n 325: 2,\n 326: 2,\n 327: 2,\n 328: 2,\n 331: 2,\n 332: 2,\n 337: 2,\n 342: 1,\n 343: 1,\n 346: 2,\n 347: 1,\n 350: 4,\n 351: 3,\n 352: 1,\n 353: 2,\n 360: 1,\n 368: 1,\n 369: 1,\n 370: 1,\n 371: 1,\n 372: 1,\n 373: 1,\n 374: 1,\n 375: 1,\n 376: 1,\n 377: 1,\n 378: 1,\n 382: 3,\n 385: 1,\n 392: 1,\n 393: 1,\n 396: 2,\n 397: 2,\n 398: 2,\n 399: 1,\n 400: 1,\n 401: 1,\n 402: 1,\n 403: 1,\n 404: 1,\n 405: 1,\n 406: 1,\n 407: 1,\n 408: 1,\n 409: 1,\n 410: 1,\n 414: 4,\n 415: 1,\n 416: 1,\n 417: 2,\n 420: 1,\n 421: 1,\n 422: 2,\n 424: 1,\n 425: 2,\n 426: 2,\n 427: 2,\n 428: 2,\n 430: 3,\n 438: 3,\n 439: 3,\n 440: 3,\n 443: 2,\n 444: 2,\n 445: 2,\n 446: 2,\n 447: 6,\n 448: 6,\n 449: 2,\n 450: 2,\n 464: 2,\n 468: 3,\n 476: 2,\n 479: 1,\n 480: 2,\n 65535: 0\n};\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f/*:string*/)/*:string*/ {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\tf = f.replace(/\\$'([^']|'')+'/g, function($$) { return $$.slice(1); });\n\tf = f.replace(/\\$([^\\]\\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})?$/) ? $$ : $1; });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f/*:string*/)/*:string*/ {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {\n\tr = r.replace(/\\$'([^']|'')+'/g, function($$) { return $$.slice(1); });\n\tr = r.replace(/\\$([^\\]\\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})?$/) ? $$ : $1; });\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r/*:string*/)/*:string*/ {\n\treturn r.replace(/!/,\".\").replace(/:/, \":.\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}/*:any*/); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C/*:number*/, col) {\n\tvar p = ({min:C+1,max:C+1}/*:any*/);\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\tif(col.level != null) { p.outlineLevel = p.level = col.level; }\n\treturn p;\n}\n\nfunction default_margins(margins/*:Margins*/, mode/*:?string*/) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left == null) margins.left = defs[0];\n\tif(margins.right == null) margins.right = defs[1];\n\tif(margins.top == null) margins.top = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles/*:Array*/, cell/*:Cell*/, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF__load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, themes, styles, date1904) {\n\ttry {\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z' && !opts.cellStyles) return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif((!opts || opts.cellText !== false) && p.t !== 'z') try {\n\t\tif(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v, !!date1904);\n\t\t\t\tif((dd|0) === dd) p.w = dd.toString(10);\n\t\t\t\telse p.w = SSF_general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF_general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF_format(fmtid,datenum(p.v, !!date1904),_ssfopts);\n\t\telse p.w = SSF_format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w+:)?mergeCell ref=[\"'][A-Z0-9:]+['\"]\\s*[\\/]?>/g;\nvar hlinkregex = /<(?:\\w+:)?hyperlink [^<>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w+:)?col\\b[^<>]*[\\/]?>/g;\nvar afregex = /<(?:\\w+:)?autoFilter[^>]*/g;\nvar marginregex= /<(?:\\w+:)?pageMargins[^<>]*\\/>/g;\nvar sheetprregex = /<(?:\\w+:)?sheetPr\\b[^<>]*?\\/>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = ({}/*:any*/); if(opts.dense) s[\"!data\"] = [];\n\tvar refguess/*:Range*/ = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} }/*:any*/);\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch/*:?any*/ = str_match_xml_ns(data, \"sheetData\");\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\telse if((sheetPr = str_match_xml_ns(data1, \"sheetPr\"))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||\"\", s, wb, idx, styles, themes);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref && !(opts && opts.nodim)) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = str_match_xml_ns(data1, \"sheetViews\");\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns/*:Array*/ = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles, wb);\n\n\t/* 18.3.1.2 autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges/*:Array*/ = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\t/* legacyDrawing */\n\tvar m;\n\tif((m = data2.match(/legacyDrawing r:id=\"(.*?)\"/))) s['!legrel'] = m[1];\n\n\tif(opts && opts.nodim) refguess.s.c = refguess.s.r = 0;\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(rels['!id'][s['!legrel']]) s['!legdrawel'] = rels['!id'][s['!legrel']];\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges/*:Array*/)/*:string*/ {\n\tif(merges.length === 0) return \"\";\n\tvar o = '';\n\tfor(var i = 0; i != merges.length; ++i) o += '';\n\treturn o + '';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\nfunction parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tparse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = utf8write(escapexml(cname));\n\t}\n\n\tif(ws && ws[\"!outline\"]) {\n\t\tvar outlineprops = {summaryBelow:1, summaryRight:1};\n\t\tif(ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n\t\tif(ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n\t\tpayload = (payload||\"\") + writextag('outlinePr', null, outlineprops);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp)/*:string*/ {\n\t// algorithmName, hashValue, saltValue, spinCount\n\tvar o = ({sheet:1}/*:any*/);\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data/*:Array*/, rels) {\n\tvar dense = s[\"!data\"] != null;\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+unescapexml(val.location);\n\t\t} else {\n\t\t\tval.Target = \"#\" + unescapexml(val.location);\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_col(C) + encode_row(R);\n\t\t\tif(dense) {\n\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\tif(!s[\"!data\"][R][C]) s[\"!data\"][R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[\"!data\"][R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin)/*:string*/ {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tif(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0);\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols)/*:string*/ {\n\tvar o = [\"\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data/*:string*/) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref); break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^<>a-z][^<>]*)?\\/?>/g;\nfunction parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r/*:string*/, i/*:number*/) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;\n\t\t// $FlowIgnore\n\t\tif(tag.rightToLeft && parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {\n\tvar sview = ({workbookViewId:\"0\"}/*:any*/);\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts, idx, wb, date1904)/*:string*/ {\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\tif((cell.v === undefined || cell.t === \"z\" && !(opts||{}).sheetStubs) && typeof cell.f !== \"string\" && typeof cell.z == \"undefined\") return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n':\n\t\t\tif(isNaN(cell.v)) { cell.t = \"e\"; vv = BErr[cell.v = 0x24]; } // #NUM!\n\t\t\telse if(!isFinite(cell.v)) { cell.t = \"e\"; vv = BErr[cell.v = 0x07]; } // #DIV/0!\n\t\t\telse vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) {\n\t\t\t\tvar _vv = parseDate(cell.v, date1904);\n\t\t\t\tvv = _vv.toISOString();\n\t\t\t\tif(_vv.getUTCFullYear() < 1900) vv = vv.slice(vv.indexOf(\"T\") + 1).replace(\"Z\",\"\");\n\t\t\t} else {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v, date1904), date1904));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = table_fmt[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = (cell.t == \"z\" || cell.v == null)? \"\" : writetag('v', escapexml(vv)), o = ({r:ref}/*:any*/);\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\telse o.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) {\n\t\tcell.l.display = escapexml(vv);\n\t\tws['!links'].push([ref, cell.l]);\n\t}\n\tif(cell.D) o.cm = 1;\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = /*#__PURE__*/(function() {\n\tvar cellregex = /<(?:\\w+:)?c[ \\/>]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\nreturn function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, themes, styles, wb) {\n\tvar ri = 0, x = \"\", cells/*:Array*/ = [], cref/*:?Array*/ = [], idx=0, i=0, cc=0, d=\"\", p/*:any*/;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = [];\n\tvar dense = s[\"!data\"] != null;\n\tvar rows/*:Array*/ = [], rowobj = {}, rowrite = false;\n\tvar sheetStubs = !!opts.sheetStubs;\n\tvar date1904 = !!((wb||{}).WBProps||{}).date1904;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tvar rstarti = 0;\n\t\touta: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) {\n\t\t\tcase \">\" /*62*/:\n\t\t\t\tif(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != \"/\") { ++ri; break outa; }\n\t\t\t\tif(opts && opts.cellStyles) {\n\t\t\t\t\t// TODO: avoid duplication\n\t\t\t\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\t\t\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\t\t\t\trowobj = {}; rowrite = false;\n\t\t\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\t\t\tif(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }\n\t\t\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"<\" /*60*/: rstarti = ri; break;\n\t\t}\n\t\tif(rstarti >= ri) break;\n\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(!opts.nodim) {\n\t\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\t\t}\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"}/*:any*/);\n\n\t\t\tif((cref=str_match_xml_ns(d, \"v\"))!= null && /*::cref != null && */cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=str_match_xml_ns(d, \"f\"))!= null /*:: && cref != null*/) {\n\t\t\t\t\tif(cref[1] == \"\") {\n\t\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\t\tp.f=unescapexml(utf8read(cref[1]), true);\n\t\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t\t} else if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? unescapexml(utf8read(p.v), true) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = str_match_xml_ns(d, \"is\");\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, date1904);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, date1904), date1904); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles, date1904);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) { p.v = numdate(p.v + (date1904 ? 1462 : 0)); p.t = typeof p.v == \"number\" ? 'n' : 'd'; }\n\t\t\tif(tag.cm && opts.xlmeta) {\n\t\t\t\tvar cm = (opts.xlmeta.Cell||[])[+tag.cm-1];\n\t\t\t\tif(cm && cm.type == 'XLDAPR') p.D = true;\n\t\t\t}\n\t\t\tvar _r;\n\t\t\tif(opts.nodim) {\n\t\t\t\t_r = decode_cell(tag.r);\n\t\t\t\tif(guess.s.r > _r.r) guess.s.r = _r.r;\n\t\t\t\tif(guess.e.r < _r.r) guess.e.r = _r.r;\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\t_r = decode_cell(tag.r);\n\t\t\t\tif(!s[\"!data\"][_r.r]) s[\"!data\"][_r.r] = [];\n\t\t\t\ts[\"!data\"][_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*//*::, rels*/)/*:string*/ {\n\tvar o/*:Array*/ = [], r/*:Array*/ = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols/*:Array*/ = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = ws[\"!data\"] != null;\n\tvar params = ({r:rr}/*:any*/), row/*:RowInfo*/, height = -1;\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[\"!data\"][R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb, date1904)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr}/*:any*/);\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1}/*:any*/);\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('worksheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = (''); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(/*::(*/ws['!links']/*::||[])*/.length > 0) {\n\t\to[o.length] = \"\";\n\t\t/*::(*/ws['!links']/*::||[])*/.forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]}/*:any*/);\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#[\\s\\S]*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\trel.display = l[1].display;\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({}/*:any*/);\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R/*:number*/, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = dense ? (ws[\"!data\"][caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 0x0000 /* BrtRowHdr */, o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo(/*::data, length*/) {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\tvar f = data[data.l]; ++data.l;\n\tz.above = !(f & 0x40);\n\tz.left = !(f & 0x80);\n\t/* TODO: pull flags */\n\tdata.l += 18;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, outl, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tvar f = 0xC0;\n\tif(outl) {\n\t\tif(outl.above) f &= ~0x40;\n\t\tif(outl.left) f &= ~0x80;\n\t}\n\to.write_shift(1, f);\n\tfor(var i = 1; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\nfunction parse_BrtShortBlank(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\treturn [cell];\n}\nfunction write_BrtShortBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(4);\n\treturn write_XLSBShortCell(ncell, o);\n}\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\nfunction parse_BrtShortBool(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtShortBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(5);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtCellError(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v);\n\treturn o;\n}\nfunction parse_BrtShortError(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtShortError(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v);\n\to.write_shift(2, 0);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\nfunction parse_BrtShortIsst(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtShortIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortReal(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortRk(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtCellRString */\nfunction parse_BrtCellRString(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RichStr(data);\n\treturn [cell, value, 'is'];\n}\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tvar data = cell.v == null ? \"\" : String(cell.v);\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(data, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction parse_BrtShortSt(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtShortSt(cell, ncell, o) {\n\tvar data = cell.v == null ? \"\" : String(cell.v);\n\tif(o == null) o = new_buf(8 + 4 * data.length);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_XLWideString(data, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length/*::, opts*/) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display}/*:any*/);\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C/*:number*/, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {\n\tvar margins = ({}/*:any*/);\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins/*:Margins*/, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins/*:any*/)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data/*::, length, opts*/) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\", false], // fObjects\n\t\t[\"scenarios\", false], // fScenarios\n\t\t[\"formatCells\", true], // fFormatCells\n\t\t[\"formatColumns\", true], // fFormatColumns\n\t\t[\"formatRows\", true], // fFormatRows\n\t\t[\"insertColumns\", true], // fInsertColumns\n\t\t[\"insertRows\", true], // fInsertRows\n\t\t[\"insertHyperlinks\", true], // fInsertHyperlinks\n\t\t[\"deleteColumns\", true], // fDeleteColumns\n\t\t[\"deleteRows\", true], // fDeleteRows\n\t\t[\"selectLockedCells\", false], // fSelLockedCells\n\t\t[\"sort\", true], // fSort\n\t\t[\"autoFilter\", true], // fAutoFilter\n\t\t[\"pivotTables\", true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false] // fSelUnlockedCells\n\t].forEach(function(n) {\n\t\t/*:: if(o == null) throw \"unreachable\"; */\n\t\tif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s/*:Worksheet*/ = ({}); if(opts.dense) s[\"!data\"] = [];\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state/*:Array*/ = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell/*:Cell*/;\n\tvar merges/*:Array*/ = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || /*::(*/wb/*:: :any)*/.supbooks || ([[]]/*:any*/);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtShortReal\", f:parse_BrtShortReal };\n\n\tvar cm, vm;\n\tvar date1904 = 1462 * +!!((wb||{}).WBProps||{}).date1904;\n\n\trecordhopper(data, function ws_parse(val, RR, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\tcase 0x000D: /* 'BrtShortRk' */\n\t\t\tcase 0x000E: /* 'BrtShortError' */\n\t\t\tcase 0x000F: /* 'BrtShortBool' */\n\t\t\tcase 0x0010: /* 'BrtShortReal' */\n\t\t\tcase 0x0011: /* 'BrtShortSt' */\n\t\t\tcase 0x0012: /* 'BrtShortIsst' */\n\t\t\tcase 0x003E: /* 'BrtCellRString' */\n\t\t\t\tp = ({t:val[2]}/*:any*/);\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t\tcase 'is': p.t = 's'; p.v = val[1].t; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles, date1904>0);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[\"!data\"][R]) s[\"!data\"][R] = []; s[\"!data\"][R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF_parse_date_code(p.v + date1904); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }\n\t\t\t\t}\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\tcase 0x000C: /* 'BrtShortBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:void 0}/*:any*/);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[\"!data\"][R]) s[\"!data\"][R] = []; s[\"!data\"][R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x0031: { /* 'BrtCellMeta' */\n\t\t\t\tcm = ((opts.xlmeta||{}).Cell||[])[val-1];\n\t\t\t} break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\tif(!s[\"!data\"][R][C]) s[\"!data\"][R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[\"!data\"][R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_col(C) + encode_row(R);\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[\"!data\"][R][C] : s[encode_col(C) + rr])/*:any*/);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[\"!data\"][R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\t\tif(val) s[\"!legrel\"] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tif(val.above || val.left) s['!outline'] = { above: val.above, left: val.left };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(RR.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\tif(rels['!id'][s['!legrel']]) s['!legdrawel'] = rels['!id'][s['!legrel']];\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ws/*:Worksheet*/, last_seen/*:boolean*/, date1904/*:boolean*/)/*:boolean*/ {\n\tvar o/*:any*/ = ({r:R, c:C}/*:any*/);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tif(cell.v === undefined) return false;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || table_fmt[14];\n\t\t\tcell.v = datenum(parseDate(cell.v, date1904), date1904); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v == null ? \"\" : String(cell.v)/*:any*/), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\tif(last_seen) write_record(ba, 0x0012 /* BrtShortIsst */, write_BrtShortIsst(cell, o));\n\t\t\t\telse write_record(ba, 0x0007 /* BrtCellIsst */, write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\tif(last_seen) write_record(ba, 0x0011 /* BrtShortSt */, write_BrtShortSt(cell, o));\n\t\t\t\telse write_record(ba, 0x0006 /* BrtCellSt */, write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn true;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o));\n\t\t\t\telse write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o));\n\t\t\t} else if(isNaN(cell.v)) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:\"e\", v: 0x24}, o)); // #NUM!\n\t\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:\"e\", v: 0x24}, o)); // #NUM!\n\t\t\t} else if(!isFinite(cell.v)) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:\"e\", v: 0x07}, o)); // #DIV/0!\n\t\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:\"e\", v: 0x07}, o)); // #DIV/0!\n\t\t\t} else {\n\t\t\t\tif(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o));\n\t\t\t\telse write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o));\n\t\t\t} return true;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\tif(last_seen) write_record(ba, 0x000F /* BrtShortBool */, write_BrtShortBool(cell, o));\n\t\t\telse write_record(ba, 0x0004 /* BrtCellBool */, write_BrtCellBool(cell, o));\n\t\t\treturn true;\n\t\tcase 'e':\n\t\t\to.t = \"e\";\n\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError(cell, o));\n\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError(cell, o));\n\t\t\treturn true;\n\t}\n\tif(last_seen) write_record(ba, 0x000C /* BrtShortBlank */, write_BrtShortBlank(cell, o));\n\telse write_record(ba, 0x0001 /* BrtCellBlank */, write_BrtCellBlank(cell, o));\n\treturn true;\n}\n\nfunction write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts, wb/*:Workbook*/) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols/*:Array*/ = [];\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\twrite_record(ba, 0x0091 /* BrtBeginSheetData */);\n\tvar dense = ws[\"!data\"] != null;\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tvar last_seen = false;\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\tif(!cell) { last_seen = false; continue; }\n\t\t\t/* write cell */\n\t\t\tlast_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen, date1904);\n\t\t}\n\t}\n\twrite_record(ba, 0x0092 /* BrtEndSheetData */);\n}\n\nfunction write_MERGECELLS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 0x00B1 /* BrtBeginMergeCells */, write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 0x00B0 /* BrtMergeCell */, write_BrtMergeCell(m)); });\n\twrite_record(ba, 0x00B2 /* BrtEndMergeCells */);\n}\n\nfunction write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:Workbook*/) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 0x0186 /* BrtBeginColInfos */);\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 0x003C /* 'BrtColInfo' */, write_BrtColInfo(i, m)); });\n\twrite_record(ba, 0x0187 /* BrtEndColInfos */);\n}\n\nfunction write_IGNOREECS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 0x0288 /* BrtBeginCellIgnoreECs */);\n\twrite_record(ba, 0x0289 /* BrtCellIgnoreEC */, write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 0x028A /* BrtEndCellIgnoreECs */);\n}\n\nfunction write_HLINKS(ba, ws/*:Worksheet*/, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#[\\s\\S]*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, 0x01EE /* BrtHLink */, write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, 0x0227 /* BrtLegacyDrawing */, write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref); break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref) });\n\n\twrite_record(ba, 0x00A1 /* BrtBeginAFilter */, write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, 0x00A2 /* BrtEndAFilter */);\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, 0x0085 /* BrtBeginWsViews */);\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, 0x0089 /* BrtBeginWsView */, write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, 0x008A /* BrtEndWsView */);\n\t}\n\t/* *FRT */\n\twrite_record(ba, 0x0086 /* BrtEndWsViews */);\n}\n\nfunction write_WSFMTINFO(/*::ba, ws*/) {\n\t/* [ACWSFMTINFO] */\n\t// write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, 0x0217 /* BrtSheetProtection */, write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c/*:string*/ = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\tif(wb.vbaraw || ws['!outline']) write_record(ba, 0x0093 /* BrtWsProp */, write_BrtWsProp(c, ws['!outline']));\n\twrite_record(ba, 0x0094 /* BrtWsDim */, write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, 0x01DC /* BrtMargins */, write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\nfunction parse_Cache(data/*:string*/)/*:[Array, string, ?string]*/ {\n\tvar col/*:Array*/ = [];\n\tvar num = data.match(/^/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/\\/]*>([^<])<\\/c:v><\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/\\/]*>([^<]*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((str_match_xml(data, \"c:formatCode\") || [\"\",\"General\"])[1]);\n\n\t(str_match_ng(data, \"\", \"\")||[]).forEach(function(F) { f = F.replace(/<[^<>]*>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, csheet) {\n\tvar cs/*:Worksheet*/ = ((csheet || {\"!type\":\"chart\"})/*:any*/);\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(str_match_ng(data, \"\", \"\")||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tif(cs[\"!data\"]) {\n\t\t\t\tif(!cs[\"!data\"][i]) cs[\"!data\"][i] = [];\n\t\t\t\tcs[\"!data\"][i][C] = {t:'n', v:n, z:cache[1] };\n\t\t\t} else cs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"}/*:any*/);\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\n//function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n//\tvar o = [XML_HEADER, writextag('chartsheet', null, {\n//\t\t'xmlns': XMLNS_main[0],\n//\t\t'xmlns:r': XMLNS.r\n//\t})];\n//\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n//\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n//\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n//\treturn o.join(\"\");\n//}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length/*:number*/) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\n//function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {\n//\tvar ba = buf_array();\n//\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n//\t/* [BrtCsProp] */\n//\t/* CSVIEWS */\n//\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n//\t/* [USERCSVIEWS] */\n//\t/* [BrtMargins] */\n//\t/* [BrtCsPageSetup] */\n//\t/* [HEADERFOOTER] */\n//\t/* BrtDrawing */\n//\t/* [BrtLegacyDrawing] */\n//\t/* [BrtLegacyDrawingHF] */\n//\t/* [BrtBkHim] */\n//\t/* [WEBPUBITEMS] */\n//\t/* FRTCHARTSHEET */\n//\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n//\treturn ba.end();\n//}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery', false, \"bool\"],\n\t['autoCompressPictures', true, \"bool\"],\n\t['backupFile', false, \"bool\"],\n\t['checkCompatibility', false, \"bool\"],\n\t['CodeName', ''],\n\t['date1904', false, \"bool\"],\n\t['defaultThemeVersion', 0, \"int\"],\n\t['filterPrivacy', false, \"bool\"],\n\t['hidePivotFieldList', false, \"bool\"],\n\t['promptedSolutions', false, \"bool\"],\n\t['publishItems', false, \"bool\"],\n\t['refreshAllConnections', false, \"bool\"],\n\t['saveExternalLinkValues', true, \"bool\"],\n\t['showBorderUnselectedTables', true, \"bool\"],\n\t['showInkAnnotation', true, \"bool\"],\n\t['showObjects', 'all'],\n\t['showPivotChartFilter', false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab', 0, \"int\"],\n\t['autoFilterDateGrouping', true, \"bool\"],\n\t['firstSheet', 0, \"int\"],\n\t['minimized', false, \"bool\"],\n\t['showHorizontalScroll', true, \"bool\"],\n\t['showSheetTabs', true, \"bool\"],\n\t['showVerticalScroll', true, \"bool\"],\n\t['tabRatio', 600, \"int\"],\n\t['visibility', 'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2 (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb/*:Workbook*/)/*:string*/ {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = /*#__PURE__*/\":][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {\n\ttry {\n\t\tif(n == \"\") throw new Error(\"Sheet name cannot be blank\");\n\t\tif(n.length > 31) throw new Error(\"Sheet name cannot exceed 31 chars\");\n\t\tif(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error(\"Sheet name cannot start or end with apostrophe (')\");\n\t\tif(n.toLowerCase() == \"history\") throw new Error(\"Sheet name cannot be 'History'\");\n\t\tbadchars.forEach(function(c) {\n\t\t\tif(n.indexOf(c) == -1) return;\n\t\t\tthrow new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t});\n\t} catch(e) { if(safe) return false; throw e; }\n\treturn true;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\twb.SheetNames.forEach(function(n, i) {\n\t\tvar ws = wb.Sheets[n];\n\t\tif(!ws || !ws[\"!autofilter\"]) return;\n\t\tvar DN;\n\t\tif(!wb.Workbook) wb.Workbook = {};\n\t\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\t\twb.Workbook.Names.forEach(function(dn) { if(dn.Name == \"_xlnm._FilterDatabase\" && dn.Sheet == i) DN = dn; });\n\t\tvar nn = formula_quote_sheet_name(n) + \"!\" + fix_range(ws[\"!autofilter\"].ref);\n\t\tif(DN) DN.Ref = nn;\n\t\telse wb.Workbook.Names.push({Name: \"_xlnm._FilterDatabase\", Sheet: i, Ref: nn});\n\t});\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts)/*:WorkbookFile*/ {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = /*::(*/{ AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" }/*::)*/;\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.1 bookViews CT_BookViews ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.30 workbookView CT_BookView + */\n\t\t\tcase '': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '': case '': break; // aggregate sheet\n\t\t\t/* 18.2.19 sheet CT_Sheet + */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '': break;\n\t\t\t/* 18.2.14 functionGroup CT_FunctionGroup + */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.8 externalReference CT_ExternalReference + */\n\t\t\tcase '': break;\n\t\t\tcase '': case '': pass=false; break;\n\t\t\t/* 18.2.5 definedName CT_DefinedName + */\n\t\t\tcase '': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.2 calcPr CT_CalcPr ? */\n\t\t\tcase '': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '': pass=true; break;\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase ' 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr/*:any*/ = ({codeName:\"ThisWorkbook\"}/*:any*/);\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\n\t\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]/*:any*/);\n\t\t});\n\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\tif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '';\n\t\to[o.length] = \"\";\n\t}\n\n\to[o.length] = \"\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}/*:any*/);\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d/*:any*/ = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length/*:number*/) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length)/*:WBProps*/ {\n\tvar o/*:WBProps*/ = ({}/*:any*/);\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data/*:?WBProps*/, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.date1904) flags |= 0x01;\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tvar flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula;\n\tvar comment = \"\";\n\ttry {\n\t\tformula = parse_XLSBNameParsedFormula(data, 0, opts);\n\t\ttry {\n\t\t\tcomment = parse_XLNullableWideString(data);\n\t\t} catch(e){}\n\t} catch(e) { console.error(\"Could not parse defined name \" + name); }\n\tif(flags & 0x20) name = \"_xlnm.\" + name;\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula, Flags: flags}/*:any*/);\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\nfunction write_BrtName(name, wb) {\n\tvar o = new_buf(9);\n\tvar flags = 0;\n\tvar dname = name.Name;\n\tif(XLSLblBuiltIn.indexOf(dname) > -1) { flags |= 0x20; dname = dname.slice(6); }\n\to.write_shift(4, flags); // flags\n\to.write_shift(1, 0); // chKey\n\to.write_shift(4, name.Sheet == null ? 0xFFFFFFFF : name.Sheet);\n\n\tvar arr = [\n\t\to,\n\t\twrite_XLWideString(dname),\n\t\twrite_XLSBNameParsedFormula(name.Ref, wb)\n\t];\n\tif(name.Comment) arr.push(write_XLNullableWideString(name.Comment));\n\telse {\n\t\tvar x = new_buf(4);\n\t\tx.write_shift(4, 0xFFFFFFFF);\n\t\tarr.push(x);\n\t}\n\n\t// if macro (flags & 0x0F):\n\t// write_shift(4, 0xFFFFFFFF);\n\t// write_XLNullableWideString(description)\n\t// write_XLNullableWideString(helpTopic)\n\t// write_shift(4, 0xFFFFFFFF);\n\n\treturn bconcat(arr);\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts)/*:WorkbookFile*/ {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]/*:any*/);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ };\n\n\trecordhopper(data, function hopper_wb(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = val.Ptg ? stringify_formula(val.Ptg, null, null, supbooks, opts) : \"#REF!\";\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x008F: /* 'BrtBeginBundleShs' */\n\t\t\tcase 0x0298: /* 'BrtBeginFnGroup' */\n\t\t\tcase 0x0161: /* 'BrtBeginExternals' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */ && state[state.length-1] != 0x0023 /* BrtFRTBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb/*:any*/).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb/*::, opts*/) {\n\twrite_record(ba, 0x008F /* BrtBeginBundleShs */);\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, 0x009C /* BrtBundleSh */, write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, 0x0090 /* BrtEndBundleShs */);\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4, 28800);\n\to.write_shift(4, 17600);\n\to.write_shift(4, 500);\n\to.write_shift(4, idx);\n\to.write_shift(4, idx);\n\tvar flags = 0x78;\n\to.write_shift(1, flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb/*::, opts*/) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, 0x0087 /* BrtBeginBookViews */);\n\twrite_record(ba, 0x009E /* BrtBookView */, write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, 0x0088 /* BrtEndBookViews */);\n}\n\nfunction write_BRTNAMES(ba, wb) {\n\tif(!wb.Workbook || !wb.Workbook.Names) return;\n\twb.Workbook.Names.forEach(function(name) { try {\n\t\tif(name.Flags & 0x0e) return; // TODO: macro name write\n\t\twrite_record(ba, 0x0027 /* BrtName */, write_BrtName(name, wb));\n\t} catch(e) {\n\t\tconsole.error(\"Could not serialize defined name \" + JSON.stringify(name));\n\t} });\n}\n\nfunction write_SELF_EXTERNS_xlsb(wb) {\n\tvar L = wb.SheetNames.length;\n\tvar o = new_buf(12 * L + 28);\n\to.write_shift(4, L + 2);\n\to.write_shift(4, 0); o.write_shift(4, -2); o.write_shift(4, -2); // workbook-level reference\n\to.write_shift(4, 0); o.write_shift(4, -1); o.write_shift(4, -1); // #REF!...\n\tfor(var i = 0; i < L; ++i) {\n\t\to.write_shift(4, 0); o.write_shift(4, i); o.write_shift(4, i);\n\t}\n\treturn o;\n}\nfunction write_EXTERNALS_xlsb(ba, wb) {\n\twrite_record(ba, 0x0161 /* BrtBeginExternals */);\n\twrite_record(ba, 0x0165 /* BrtSupSelf */);\n\twrite_record(ba, 0x016A /* BrtExternSheet */, write_SELF_EXTERNS_xlsb(wb, 0));\n\twrite_record(ba, 0x0162 /* BrtEndExternals */);\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0083 /* BrtBeginBook */);\n\twrite_record(ba, 0x0080 /* BrtFileVersion */, write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, 0x0099 /* BrtWbProp */, write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\twrite_EXTERNALS_xlsb(ba, wb);\n\tif((wb.Workbook||{}).Names) write_BRTNAMES(ba, wb);\n\t/* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, 0x0084 /* BrtEndBook */);\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data/*:any*/), opts);\n\treturn parse_wb_xml((data/*:any*/), opts);\n}\n\nfunction parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name/*:string*/, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data/*:any*/), themes, opts);\n\treturn parse_sty_xml((data/*:any*/), themes, opts);\n}\n\nfunction parse_sst(data, name/*:string*/, opts)/*:SST*/ {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data/*:any*/), opts);\n\treturn parse_sst_xml((data/*:any*/), opts);\n}\n\nfunction parse_cmnt(data, name/*:string*/, opts)/*:Array*/ {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data/*:any*/), opts);\n\treturn parse_comments_xml((data/*:any*/), opts);\n}\n\nfunction parse_cc(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data/*:any*/), name, opts);\n\treturn parse_cc_xml((data/*:any*/), name, opts);\n}\n\nfunction parse_xlink(data, rel, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data/*:any*/), rel, name, opts);\n\treturn parse_xlink_xml((data/*:any*/), rel, name, opts);\n}\n\nfunction parse_xlmeta(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlmeta_bin((data/*:any*/), name, opts);\n\treturn parse_xlmeta_xml((data/*:any*/), name, opts);\n}\nvar attregexg2=/\\b((?:\\w+:)?[\\w]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/\\b((?:\\w+:)?[\\w]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z/*:any*/ = ([]/*:any*/); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag/*:string*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*: {[string]:string}*/;\n\nfunction xlml_format(format, value, date1904)/*:string*/ {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF_general(value);\n\treturn SSF_format(fmt, value, {date1904: !!date1904});\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val/*:string*/) {\n\tvar oval/*:any*/ = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell/*:Cell*/, nf, o, date1904) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = cell.v.toString(10);\n\t\t\t\telse cell.w = SSF_general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF_general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v, date1904);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && fmt_is_date(z)) {\n\t\t\tvar _d = SSF_parse_date_code(cell.v + (date1904 ? 1462 : 0)); if(_d) { cell.t = 'd'; cell.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, arrayf, o, date1904) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tvar ssid = styles[sid];\n\t\tif(ssid.nf) nf = ssid.nf;\n\t\tif(ssid.Interior) interiors.push(ssid.Interior);\n\t\tif(!ssid.Parent) break;\n\t\tsid = ssid.Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<[^<>]*>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = datenum(parseDate(xml, date1904), date1904);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o, date1904);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_prefix_dname(dname) {\n\treturn XLSLblBuiltIn.indexOf(\"_xlnm.\" + dname) > -1 ? \"_xlnm.\" + dname : dname;\n}\n\nfunction xlml_clean_comment(comment/*:any*/) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\n/* TODO: Everything */\nfunction parse_xlml_xml(d, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tmake_ssf();\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\topening = opening.replace(/\".*?\"/g, \"\");\n\tif((opening.indexOf(\">\") & 1023) > Math.min((opening.indexOf(\",\") & 1023), (opening.indexOf(\";\")&1023))) { var _o = dup(opts); _o.type = \"string\"; return PRN.to_workbook(str, _o); }\n\tif(opening.indexOf(\"= 0) ishtml = true; });\n\tif(ishtml) return html_to_workbook(str, opts);\n\n\tXLMLFormatMap = ({\n\t\t\"General Number\": \"General\",\n\t\t\"General Date\": table_fmt[22],\n\t\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\t\"Medium Date\": table_fmt[15],\n\t\t\"Short Date\": table_fmt[14],\n\t\t\"Long Time\": table_fmt[19],\n\t\t\"Medium Time\": table_fmt[18],\n\t\t\"Short Time\": table_fmt[20],\n\t\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\t\"Fixed\": table_fmt[2],\n\t\t\"Standard\": table_fmt[4],\n\t\t\"Percent\": table_fmt[10],\n\t\t\"Scientific\": table_fmt[11],\n\t\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n\t}/*:any*/);\n\n\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames/*:Array*/ = [], cursheet/*:Worksheet*/ = ({}), sheetname = \"\"; if(opts.dense) cursheet[\"!data\"] = [];\n\tvar cell = ({}/*:any*/), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag(''), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess/*:Range*/ = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges/*:Array*/ = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar rowinfo/*:Array*/ = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false} }/*:any*/), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str_remove_ng(str, \"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts, Workbook.WBProps.date1904);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== void 0) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[\"!data\"][r]) cursheet[\"!data\"][r] = [];\n\t\t\t\t\t\tcursheet[\"!data\"][r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:unescapexml(cell.HRef)}/*:any*/);\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tif(cc > c || rr > r) merges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\t/*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n\t\t\t\t\tfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[\"!data\"][cmd]) cursheet[\"!data\"][cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[\"!data\"][cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\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\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = ({}); if(opts.dense) cursheet[\"!data\"] = [];\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF__load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName/*:DefinedName*/ = ({\n\t\t\t\tName: xlml_prefix_dname(_NamedRange.Name),\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t}/*:any*/);\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\n\t\t\t/*:: if(Workbook.Names) */Workbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(!parsexmlbool(tmp[\"ShowAlways\"]||\"0\")) comments.hidden = true;\n\t\t\t\tcomment = ({a:tmp.Author}/*:any*/);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tcase 'null' /*case 'Null'*/: break;\n\n\t\tdefault:\n\t\t\t/* FODS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\n\t\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\t\tWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'hidehorizontalscrollbar' /*case 'HideHorizontalScrollBar'*/: break;\n\t\t\t\t\tcase 'hideverticalscrollbar' /*case 'HideVerticalScrollBar'*/: break;\n\t\t\t\t\tcase 'hideworkbooktabs' /*case 'HideWorkbookTabs'*/: break;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'printerrors' /*case 'PrintErrors'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].above = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].left = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = dup(table_fmt);\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\tout.bookType = \"xlml\";\n\treturn out;\n}\n\nfunction parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64_decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n\t/*:: throw new Error(\"unsupported type \" + opts.type); */\n}\n\n/* TODO */\nfunction write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml(wb/*::, opts*/)/*:string*/ {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\tif((((wb||{}).Workbook||{}).WBProps||{}).date1904) return '';\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts)/*:string*/ {\n\t/* Styles */\n\tvar styles/*:Array*/ = [''];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload/*:Array*/ = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(table_fmt[xf.numFmtId])}));\n\n\t\tvar o = /*::(*/{\"ss:ID\": \"s\" + (21+id)}/*:: :any)*/;\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name.slice(0,6) == \"_xlnm.\" ? n.Name.slice(6) : n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb/*::, opts*/)/*:string*/ {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tvar o/*:Array*/ = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments/*:Array*/)/*:string*/ {\n\t/* TODO: test multiple comments */\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\tvar p = {};\n\t\tif(c.a) p[\"ss:Author\"] = c.a;\n\t\tif(!comments.hidden) p[\"ss:ShowAlways\"] = \"1\";\n\t\treturn writextag(\"Comment\", d, p);\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number*/, wb, addr)/*:string*/{\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || table_fmt[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('' + _v + '');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R/*:number*/, row)/*:string*/ {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws['!ref']) return \"\";\n\tvar range/*:Range*/ = safe_decode_range(ws['!ref']);\n\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\tvar o/*:Array*/ = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k/*:any*/ = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_col(C) + encode_row(R), cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t/*:string*/ = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"
\" + t + \"
\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\tif(ws[\"!autofilter\"]) o.push('');\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts)/*:string*/ {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = dup(table_fmt);\n\tif(wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d/*:Array*/ = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj/*:CFBEntry*/) {\n\tvar v = {};\n\tvar o = obj.content;\n\t/*:: if(o == null) return; */\n\n\t/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m/*:number*/ = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue 0x003c\n\t- 2.4.59 ContinueBigName 0x043c\n\t- 2.4.60 ContinueFrt 0x0812\n\t- 2.4.61 ContinueFrt11 0x0875\n\t- 2.4.62 ContinueFrt12 0x087f\n*/\nvar CONTINUE_RT = [ 0x003c, 0x043c, 0x0812, 0x0875, 0x087f ];\nfunction slurp(RecordType, R, blob, length/*:number*/, opts)/*:any*/ {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(RecordType) {\n\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809/* BOF */: case 0x002F /* FilePass */: case 0x0195 /* FileLock */: case 0x00E1 /* InterfaceHdr */: case 0x0196 /* RRDInfo */: case 0x0138 /* RRDHead */: case 0x0194 /* UsrExcl */: case 0x000a /* EOF */:\n\t\tbreak;\n\tcase 0x0085 /* BoundSheet8 */:\n\t\tbreak;\n\tdefault:\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar nextrt = __readUInt16LE(blob,blob.l), next = XLSRecordEnum[nextrt];\n\tvar start = 0;\n\twhile(next != null && CONTINUE_RT.indexOf(nextrt) > -1) {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(nextrt == 0x0812 /* ContinueFrt */) start += 4;\n\t\telse if(nextrt == 0x0875 || nextrt == 0x087f) {\n\t\t\tstart += 12;\n\t\t}\n\t\td = blob.slice(start,blob.l+4+l);\n\t\tbufs.push(d);\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs)/*:any*/);\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\tif(b.length < length) throw \"XLS Record 0x\" + RecordType.toString(16) + \" Truncated: \" + b.length + \" < \" + length;\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boolean*/) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF && p.z == null) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF_general(p.v);\n\t\t}\n\t\telse p.w = SSF_format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF_parse_date_code(p.v + (date1904 ? 1462 : 0)); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t)/*:Cell*/ {\n\treturn ({v:val, ixfe:ixfe, t:t}/*:any*/);\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {\n\tvar wb = ({opts:{}}/*:any*/);\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out/*:Worksheet*/ = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\tvar Directory = {};\n\tvar range/*:Range*/ = ({}/*:any*/);\n\tvar last_formula = null;\n\tvar sst/*:SST*/ = ([]/*:any*/);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc/*:Cell*/, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar temp_val/*:Cell*/;\n\tvar country;\n\tvar XFs = []; /* XF records */\n\tvar palette/*:Array<[number, number, number]>*/ = [];\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }/*:any*/), wsprops = {};\n\tvar biff4w = false;\n\tvar get_rgb = function getrgb(icv/*:number*/)/*:[number, number, number]*/ {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(line/*:any*/, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({}/*:any*/);\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell/*:any*/, line/*:any*/, options/*:any*/) {\n\t\tif(!biff4w && file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[\"!data\"][cell.r]) out[\"!data\"][cell.r] = [];\n\t\t\t\tout[\"!data\"][cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t}/*:any*/);\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges/*:Array*/ = [];\n\tvar objects = [];\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\tvar supbooks = ([]/*:any*/); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_RT = 0;\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable/*:Array*/ = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl/*:?DefinedName*/;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_RT === 0x000a /* EOF */) break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(RecordType) == -1 /* BOF */) break;\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_RT === 0x0085 /* BoundSheet8 */ && RecordType !== 0x0085 /* R.n !== 'BoundSheet8' */) break;\n\t\t\t}\n\t\t\tlast_RT = RecordType;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){\n\t\t\t\t\tblob.l += 10; length -= 10;\n\t\t\t\t} // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val/*:any*/ = ({}/*:any*/);\n\t\t\tif(RecordType === 0x000a /* EOF */) val = /*::(*/R.f(blob, length, opts)/*:: :any)*/;\n\t\t\telse val = /*::(*/slurp(RecordType, R, blob, length, opts)/*:: :any)*/;\n\t\t\t/*:: val = (val:any); */\n\t\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1 /* BOF */) continue;\n\t\t\tswitch(RecordType) {\n\t\t\t\tcase 0x0022 /* Date1904 */:\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\twb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 0x0086 /* WriteProtect */: wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 0x002f /* FilePass */:\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x005c /* WriteAccess */: opts.lastuser = val; break;\n\t\t\t\tcase 0x0042 /* CodePage */:\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval = 1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x013d /* RRTabId */: opts.rrtabid = val; break;\n\t\t\t\tcase 0x0019 /* WinProtect */: opts.winlocked = val; break;\n\t\t\t\tcase 0x01b7 /* RefreshAll */: wb.opts[\"RefreshAll\"] = val; break;\n\t\t\t\tcase 0x000c /* CalcCount */: wb.opts[\"CalcCount\"] = val; break;\n\t\t\t\tcase 0x0010 /* CalcDelta */: wb.opts[\"CalcDelta\"] = val; break;\n\t\t\t\tcase 0x0011 /* CalcIter */: wb.opts[\"CalcIter\"] = val; break;\n\t\t\t\tcase 0x000d /* CalcMode */: wb.opts[\"CalcMode\"] = val; break;\n\t\t\t\tcase 0x000e /* CalcPrecision */: wb.opts[\"CalcPrecision\"] = val; break;\n\t\t\t\tcase 0x005f /* CalcSaveRecalc */: wb.opts[\"CalcSaveRecalc\"] = val; break;\n\t\t\t\tcase 0x000f /* CalcRefMode */: opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 0x08a3 /* ForceFullCalculation */: wb.opts.FullCalc = val; break;\n\t\t\t\tcase 0x0081 /* WsBool */:\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tif(!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n\t\t\t\t\tif(!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 0x0043: /* BIFF2XF */ case 0x0243: /* BIFF3XF */ case 0x0443: /* BIFF4XF */\n\t\t\t\tcase 0x00e0 /* XF */:\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 0x01ae /* SupBook */:\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0023: case 0x0223 /* ExternName */:\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0018: case 0x0218 /* Lbl */:\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t}/*:DefinedName*/);\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0016 /* ExternCount */: opts.ExternCount = val; break;\n\t\t\t\tcase 0x0017 /* ExternSheet */:\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 0x0894 /* NameCmt */:\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0012 /* Protect */: out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 0x0013 /* Password */: if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 0x0085 /* BoundSheet8 */: {\n\t\t\t\t\tDirectory[opts.biff == 4 ? opts.snames.length : val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 0x000a /* EOF */: {\n\t\t\t\t\tif(--file_depth ? !biff4w : biff4w) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\t\t\t\t} break;\n\t\t\t\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809 /* BOF */: {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n\t\t\t\t\t\t0x0009: 2,\n\t\t\t\t\t\t0x0209: 3,\n\t\t\t\t\t\t0x0409: 4\n\t\t\t\t\t}[RecordType] || {\n\t\t\t\t\t\t0x0200: 2,\n\t\t\t\t\t\t0x0300: 3,\n\t\t\t\t\t\t0x0400: 4,\n\t\t\t\t\t\t0x0500: 5,\n\t\t\t\t\t\t0x0600: 8,\n\t\t\t\t\t\t0x0002: 2,\n\t\t\t\t\t\t0x0007: 2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\topts.biffguess = val.BIFFVer == 0;\n\t\t\t\t\tif(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); }\n\t\t\t\t\tif(opts.biff == 4 && val.dt & 0x100) biff4w = true;\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++ && !biff4w) break;\n\t\t\t\t\tout = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\t\t\t\t\tif(opts.biff == 4 && biff4w) {\n\t\t\t\t\t\tcur_sheet = (Directory[opts.snames.indexOf(cur_sheet)+1] || {name:\"\"}).name;\n\t\t\t\t\t} else if(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\t\t\t\tcase 0x0203 /* Number */: case 0x0003 /* BIFF2NUM */: case 0x0002 /* BIFF2INT */: {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[\"!data\"][val.r]||[])[val.c]: out[encode_col(val.c) + encode_row(val.r)]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0005: case 0x0205 /* BoolErr */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x027e /* RK */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00bd /* MulRk */: {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0006: case 0x0206: case 0x0406 /* Formula */: {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[\"!data\"][_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x0007: case 0x0207 /* String */: {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 0x0021: case 0x0221 /* Array */: {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[\"!data\"][val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x04bc /* ShrFmla */: {\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fd /* LabelSst */:\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0201 /* Blank */: if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00be /* MulBlank */: if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00d6 /* RString */:\n\t\t\t\tcase 0x0204 /* Label */: case 0x0004 /* BIFF2STR */:\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0x0000: case 0x0200 /* Dimensions */: {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fc /* SST */: {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x041e /* Format */: { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff >= 3 && opts.biff <= 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(table_fmt[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF__load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF__load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 0x001e /* BIFF2FORMAT */: {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(table_fmt[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF__load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x00e5 /* MergeCells */: merges = merges.concat(val); break;\n\n\t\t\t\tcase 0x005d /* Obj */: objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 0x01b6 /* TxO */: opts.lastobj.TxO = val; break;\n\t\t\t\tcase 0x007f /* ImData */: opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 0x01b8 /* HLink */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0800 /* HLinkTooltip */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x001c /* Note */: {\n\t\t\t\t\t/* TODO: comment continuation (row == -1 / 0xFFFF) */\n\t\t\t\t\tcc = options.dense ? (out[\"!data\"][val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[\"!data\"][val[0].r]) out[\"!data\"][val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[\"!data\"][val[0].r][val[0].c] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) cmnt = {a:\"SheetJ5\", t:val[1]};\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\t\tif(val[3] != null && !(val[3] & 0x02)) cc.c.hidden = true;\n\t\t\t\t\t}\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\t\t\t\tcase 0x087d /* XFExt */: update_xfext(XFs[val.ixfe], val.ext); break;\n\t\t\t\tcase 0x007d /* ColInfo */: {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0208 /* Row */: {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0026 /* LeftMargin */:\n\t\t\t\tcase 0x0027 /* RightMargin */:\n\t\t\t\tcase 0x0028 /* TopMargin */:\n\t\t\t\tcase 0x0029 /* BottomMargin */:\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][({0x26: \"left\", 0x27:\"right\", 0x28:\"top\", 0x29:\"bottom\"})[RecordType]] = val;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00a1 /* Setup */: // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x023e /* Window2 */: // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0092 /* Palette */: palette = val; break;\n\t\t\t\tcase 0x0896 /* Theme */: themes = val; break;\n\t\t\t\tcase 0x008c /* Country */: country = val; break;\n\t\t\t\tcase 0x01ba /* CodeName */: {\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\tif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t}\n\t\t} else {\n\t\t\tif(!R) console.error(\"Missing Info for XLS Record 0x\" + RecordType.toString(16));\n\t\t\tblob.l += length;\n\t\t}\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(!wb.SheetNames.length && Preamble[\"!ref\"]) {\n\t\twb.SheetNames.push(\"Sheet1\");\n\t\t/*jshint -W069 */\n\t\tif(wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n\t\t/*jshint +W069 */\n\t} else wb.Preamble=Preamble;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Strings = sst;\n\twb.SSF = dup(table_fmt);\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb/*:CFBContainer*/, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '/!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '/!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tvar DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, \"n\");\n\tvar SummaryRE/*:{[key:string]:string}*/ = evert_key(SummaryPIDSI, \"n\");\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj/*:?CFBEntry*/, WB/*:?any*/;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64_decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb}/*:any*/);\n}\nvar /*::CompObjP, */WorkbookP/*:: :Workbook = XLSX.utils.book_new(); */;\n\nvar _data/*:?any*/;\nif(CompObj) /*::CompObjP = */parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({}/*:any*/);\nelse/*:: if(cfb instanceof CFBContainer) */ {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Works 4 for Mac */\n\telse if((_data=CFB.find(cfb, 'MN0')) && _data.content) throw new Error(\"Unsupported Works 4 for Mac file\");\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(/*::((*/cfb/*:: :any):CFBContainer)*/, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContainer*/ {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n\t0x0000: { /* n:\"BrtRowHdr\", */ f:parse_BrtRowHdr },\n\t0x0001: { /* n:\"BrtCellBlank\", */ f:parse_BrtCellBlank },\n\t0x0002: { /* n:\"BrtCellRk\", */ f:parse_BrtCellRk },\n\t0x0003: { /* n:\"BrtCellError\", */ f:parse_BrtCellError },\n\t0x0004: { /* n:\"BrtCellBool\", */ f:parse_BrtCellBool },\n\t0x0005: { /* n:\"BrtCellReal\", */ f:parse_BrtCellReal },\n\t0x0006: { /* n:\"BrtCellSt\", */ f:parse_BrtCellSt },\n\t0x0007: { /* n:\"BrtCellIsst\", */ f:parse_BrtCellIsst },\n\t0x0008: { /* n:\"BrtFmlaString\", */ f:parse_BrtFmlaString },\n\t0x0009: { /* n:\"BrtFmlaNum\", */ f:parse_BrtFmlaNum },\n\t0x000A: { /* n:\"BrtFmlaBool\", */ f:parse_BrtFmlaBool },\n\t0x000B: { /* n:\"BrtFmlaError\", */ f:parse_BrtFmlaError },\n\t0x000C: { /* n:\"BrtShortBlank\", */ f:parse_BrtShortBlank },\n\t0x000D: { /* n:\"BrtShortRk\", */ f:parse_BrtShortRk },\n\t0x000E: { /* n:\"BrtShortError\", */ f:parse_BrtShortError },\n\t0x000F: { /* n:\"BrtShortBool\", */ f:parse_BrtShortBool },\n\t0x0010: { /* n:\"BrtShortReal\", */ f:parse_BrtShortReal },\n\t0x0011: { /* n:\"BrtShortSt\", */ f:parse_BrtShortSt },\n\t0x0012: { /* n:\"BrtShortIsst\", */ f:parse_BrtShortIsst },\n\t0x0013: { /* n:\"BrtSSTItem\", */ f:parse_RichStr },\n\t0x0014: { /* n:\"BrtPCDIMissing\" */ },\n\t0x0015: { /* n:\"BrtPCDINumber\" */ },\n\t0x0016: { /* n:\"BrtPCDIBoolean\" */ },\n\t0x0017: { /* n:\"BrtPCDIError\" */ },\n\t0x0018: { /* n:\"BrtPCDIString\" */ },\n\t0x0019: { /* n:\"BrtPCDIDatetime\" */ },\n\t0x001A: { /* n:\"BrtPCDIIndex\" */ },\n\t0x001B: { /* n:\"BrtPCDIAMissing\" */ },\n\t0x001C: { /* n:\"BrtPCDIANumber\" */ },\n\t0x001D: { /* n:\"BrtPCDIABoolean\" */ },\n\t0x001E: { /* n:\"BrtPCDIAError\" */ },\n\t0x001F: { /* n:\"BrtPCDIAString\" */ },\n\t0x0020: { /* n:\"BrtPCDIADatetime\" */ },\n\t0x0021: { /* n:\"BrtPCRRecord\" */ },\n\t0x0022: { /* n:\"BrtPCRRecordDt\" */ },\n\t0x0023: { /* n:\"BrtFRTBegin\", */ T:1 },\n\t0x0024: { /* n:\"BrtFRTEnd\", */ T:-1 },\n\t0x0025: { /* n:\"BrtACBegin\", */ T:1 },\n\t0x0026: { /* n:\"BrtACEnd\", */ T:-1 },\n\t0x0027: { /* n:\"BrtName\", */ f:parse_BrtName },\n\t0x0028: { /* n:\"BrtIndexRowBlock\" */ },\n\t0x002A: { /* n:\"BrtIndexBlock\" */ },\n\t0x002B: { /* n:\"BrtFont\", */ f:parse_BrtFont },\n\t0x002C: { /* n:\"BrtFmt\", */ f:parse_BrtFmt },\n\t0x002D: { /* n:\"BrtFill\", */ f:parse_BrtFill },\n\t0x002E: { /* n:\"BrtBorder\", */ f:parse_BrtBorder },\n\t0x002F: { /* n:\"BrtXF\", */ f:parse_BrtXF },\n\t0x0030: { /* n:\"BrtStyle\" */ },\n\t0x0031: { /* n:\"BrtCellMeta\", */ f:parse_Int32LE },\n\t0x0032: { /* n:\"BrtValueMeta\" */ },\n\t0x0033: { /* n:\"BrtMdb\" */ f:parse_BrtMdb },\n\t0x0034: { /* n:\"BrtBeginFmd\", */ T:1 },\n\t0x0035: { /* n:\"BrtEndFmd\", */ T:-1 },\n\t0x0036: { /* n:\"BrtBeginMdx\", */ T:1 },\n\t0x0037: { /* n:\"BrtEndMdx\", */ T:-1 },\n\t0x0038: { /* n:\"BrtBeginMdxTuple\", */ T:1 },\n\t0x0039: { /* n:\"BrtEndMdxTuple\", */ T:-1 },\n\t0x003A: { /* n:\"BrtMdxMbrIstr\" */ },\n\t0x003B: { /* n:\"BrtStr\" */ },\n\t0x003C: { /* n:\"BrtColInfo\", */ f:parse_ColInfo },\n\t0x003E: { /* n:\"BrtCellRString\", */ f:parse_BrtCellRString },\n\t0x003F: { /* n:\"BrtCalcChainItem$\", */ f:parse_BrtCalcChainItem$ },\n\t0x0040: { /* n:\"BrtDVal\", */ f:parse_BrtDVal },\n\t0x0041: { /* n:\"BrtSxvcellNum\" */ },\n\t0x0042: { /* n:\"BrtSxvcellStr\" */ },\n\t0x0043: { /* n:\"BrtSxvcellBool\" */ },\n\t0x0044: { /* n:\"BrtSxvcellErr\" */ },\n\t0x0045: { /* n:\"BrtSxvcellDate\" */ },\n\t0x0046: { /* n:\"BrtSxvcellNil\" */ },\n\t0x0080: { /* n:\"BrtFileVersion\" */ },\n\t0x0081: { /* n:\"BrtBeginSheet\", */ T:1 },\n\t0x0082: { /* n:\"BrtEndSheet\", */ T:-1 },\n\t0x0083: { /* n:\"BrtBeginBook\", */ T:1, f:parsenoop, p:0 },\n\t0x0084: { /* n:\"BrtEndBook\", */ T:-1 },\n\t0x0085: { /* n:\"BrtBeginWsViews\", */ T:1 },\n\t0x0086: { /* n:\"BrtEndWsViews\", */ T:-1 },\n\t0x0087: { /* n:\"BrtBeginBookViews\", */ T:1 },\n\t0x0088: { /* n:\"BrtEndBookViews\", */ T:-1 },\n\t0x0089: { /* n:\"BrtBeginWsView\", */ T:1, f:parse_BrtBeginWsView },\n\t0x008A: { /* n:\"BrtEndWsView\", */ T:-1 },\n\t0x008B: { /* n:\"BrtBeginCsViews\", */ T:1 },\n\t0x008C: { /* n:\"BrtEndCsViews\", */ T:-1 },\n\t0x008D: { /* n:\"BrtBeginCsView\", */ T:1 },\n\t0x008E: { /* n:\"BrtEndCsView\", */ T:-1 },\n\t0x008F: { /* n:\"BrtBeginBundleShs\", */ T:1 },\n\t0x0090: { /* n:\"BrtEndBundleShs\", */ T:-1 },\n\t0x0091: { /* n:\"BrtBeginSheetData\", */ T:1 },\n\t0x0092: { /* n:\"BrtEndSheetData\", */ T:-1 },\n\t0x0093: { /* n:\"BrtWsProp\", */ f:parse_BrtWsProp },\n\t0x0094: { /* n:\"BrtWsDim\", */ f:parse_BrtWsDim, p:16 },\n\t0x0097: { /* n:\"BrtPane\", */ f:parse_BrtPane },\n\t0x0098: { /* n:\"BrtSel\" */ },\n\t0x0099: { /* n:\"BrtWbProp\", */ f:parse_BrtWbProp },\n\t0x009A: { /* n:\"BrtWbFactoid\" */ },\n\t0x009B: { /* n:\"BrtFileRecover\" */ },\n\t0x009C: { /* n:\"BrtBundleSh\", */ f:parse_BrtBundleSh },\n\t0x009D: { /* n:\"BrtCalcProp\" */ },\n\t0x009E: { /* n:\"BrtBookView\" */ },\n\t0x009F: { /* n:\"BrtBeginSst\", */ T:1, f:parse_BrtBeginSst },\n\t0x00A0: { /* n:\"BrtEndSst\", */ T:-1 },\n\t0x00A1: { /* n:\"BrtBeginAFilter\", */ T:1, f:parse_UncheckedRfX },\n\t0x00A2: { /* n:\"BrtEndAFilter\", */ T:-1 },\n\t0x00A3: { /* n:\"BrtBeginFilterColumn\", */ T:1 },\n\t0x00A4: { /* n:\"BrtEndFilterColumn\", */ T:-1 },\n\t0x00A5: { /* n:\"BrtBeginFilters\", */ T:1 },\n\t0x00A6: { /* n:\"BrtEndFilters\", */ T:-1 },\n\t0x00A7: { /* n:\"BrtFilter\" */ },\n\t0x00A8: { /* n:\"BrtColorFilter\" */ },\n\t0x00A9: { /* n:\"BrtIconFilter\" */ },\n\t0x00AA: { /* n:\"BrtTop10Filter\" */ },\n\t0x00AB: { /* n:\"BrtDynamicFilter\" */ },\n\t0x00AC: { /* n:\"BrtBeginCustomFilters\", */ T:1 },\n\t0x00AD: { /* n:\"BrtEndCustomFilters\", */ T:-1 },\n\t0x00AE: { /* n:\"BrtCustomFilter\" */ },\n\t0x00AF: { /* n:\"BrtAFilterDateGroupItem\" */ },\n\t0x00B0: { /* n:\"BrtMergeCell\", */ f:parse_BrtMergeCell },\n\t0x00B1: { /* n:\"BrtBeginMergeCells\", */ T:1 },\n\t0x00B2: { /* n:\"BrtEndMergeCells\", */ T:-1 },\n\t0x00B3: { /* n:\"BrtBeginPivotCacheDef\", */ T:1 },\n\t0x00B4: { /* n:\"BrtEndPivotCacheDef\", */ T:-1 },\n\t0x00B5: { /* n:\"BrtBeginPCDFields\", */ T:1 },\n\t0x00B6: { /* n:\"BrtEndPCDFields\", */ T:-1 },\n\t0x00B7: { /* n:\"BrtBeginPCDField\", */ T:1 },\n\t0x00B8: { /* n:\"BrtEndPCDField\", */ T:-1 },\n\t0x00B9: { /* n:\"BrtBeginPCDSource\", */ T:1 },\n\t0x00BA: { /* n:\"BrtEndPCDSource\", */ T:-1 },\n\t0x00BB: { /* n:\"BrtBeginPCDSRange\", */ T:1 },\n\t0x00BC: { /* n:\"BrtEndPCDSRange\", */ T:-1 },\n\t0x00BD: { /* n:\"BrtBeginPCDFAtbl\", */ T:1 },\n\t0x00BE: { /* n:\"BrtEndPCDFAtbl\", */ T:-1 },\n\t0x00BF: { /* n:\"BrtBeginPCDIRun\", */ T:1 },\n\t0x00C0: { /* n:\"BrtEndPCDIRun\", */ T:-1 },\n\t0x00C1: { /* n:\"BrtBeginPivotCacheRecords\", */ T:1 },\n\t0x00C2: { /* n:\"BrtEndPivotCacheRecords\", */ T:-1 },\n\t0x00C3: { /* n:\"BrtBeginPCDHierarchies\", */ T:1 },\n\t0x00C4: { /* n:\"BrtEndPCDHierarchies\", */ T:-1 },\n\t0x00C5: { /* n:\"BrtBeginPCDHierarchy\", */ T:1 },\n\t0x00C6: { /* n:\"BrtEndPCDHierarchy\", */ T:-1 },\n\t0x00C7: { /* n:\"BrtBeginPCDHFieldsUsage\", */ T:1 },\n\t0x00C8: { /* n:\"BrtEndPCDHFieldsUsage\", */ T:-1 },\n\t0x00C9: { /* n:\"BrtBeginExtConnection\", */ T:1 },\n\t0x00CA: { /* n:\"BrtEndExtConnection\", */ T:-1 },\n\t0x00CB: { /* n:\"BrtBeginECDbProps\", */ T:1 },\n\t0x00CC: { /* n:\"BrtEndECDbProps\", */ T:-1 },\n\t0x00CD: { /* n:\"BrtBeginECOlapProps\", */ T:1 },\n\t0x00CE: { /* n:\"BrtEndECOlapProps\", */ T:-1 },\n\t0x00CF: { /* n:\"BrtBeginPCDSConsol\", */ T:1 },\n\t0x00D0: { /* n:\"BrtEndPCDSConsol\", */ T:-1 },\n\t0x00D1: { /* n:\"BrtBeginPCDSCPages\", */ T:1 },\n\t0x00D2: { /* n:\"BrtEndPCDSCPages\", */ T:-1 },\n\t0x00D3: { /* n:\"BrtBeginPCDSCPage\", */ T:1 },\n\t0x00D4: { /* n:\"BrtEndPCDSCPage\", */ T:-1 },\n\t0x00D5: { /* n:\"BrtBeginPCDSCPItem\", */ T:1 },\n\t0x00D6: { /* n:\"BrtEndPCDSCPItem\", */ T:-1 },\n\t0x00D7: { /* n:\"BrtBeginPCDSCSets\", */ T:1 },\n\t0x00D8: { /* n:\"BrtEndPCDSCSets\", */ T:-1 },\n\t0x00D9: { /* n:\"BrtBeginPCDSCSet\", */ T:1 },\n\t0x00DA: { /* n:\"BrtEndPCDSCSet\", */ T:-1 },\n\t0x00DB: { /* n:\"BrtBeginPCDFGroup\", */ T:1 },\n\t0x00DC: { /* n:\"BrtEndPCDFGroup\", */ T:-1 },\n\t0x00DD: { /* n:\"BrtBeginPCDFGItems\", */ T:1 },\n\t0x00DE: { /* n:\"BrtEndPCDFGItems\", */ T:-1 },\n\t0x00DF: { /* n:\"BrtBeginPCDFGRange\", */ T:1 },\n\t0x00E0: { /* n:\"BrtEndPCDFGRange\", */ T:-1 },\n\t0x00E1: { /* n:\"BrtBeginPCDFGDiscrete\", */ T:1 },\n\t0x00E2: { /* n:\"BrtEndPCDFGDiscrete\", */ T:-1 },\n\t0x00E3: { /* n:\"BrtBeginPCDSDTupleCache\", */ T:1 },\n\t0x00E4: { /* n:\"BrtEndPCDSDTupleCache\", */ T:-1 },\n\t0x00E5: { /* n:\"BrtBeginPCDSDTCEntries\", */ T:1 },\n\t0x00E6: { /* n:\"BrtEndPCDSDTCEntries\", */ T:-1 },\n\t0x00E7: { /* n:\"BrtBeginPCDSDTCEMembers\", */ T:1 },\n\t0x00E8: { /* n:\"BrtEndPCDSDTCEMembers\", */ T:-1 },\n\t0x00E9: { /* n:\"BrtBeginPCDSDTCEMember\", */ T:1 },\n\t0x00EA: { /* n:\"BrtEndPCDSDTCEMember\", */ T:-1 },\n\t0x00EB: { /* n:\"BrtBeginPCDSDTCQueries\", */ T:1 },\n\t0x00EC: { /* n:\"BrtEndPCDSDTCQueries\", */ T:-1 },\n\t0x00ED: { /* n:\"BrtBeginPCDSDTCQuery\", */ T:1 },\n\t0x00EE: { /* n:\"BrtEndPCDSDTCQuery\", */ T:-1 },\n\t0x00EF: { /* n:\"BrtBeginPCDSDTCSets\", */ T:1 },\n\t0x00F0: { /* n:\"BrtEndPCDSDTCSets\", */ T:-1 },\n\t0x00F1: { /* n:\"BrtBeginPCDSDTCSet\", */ T:1 },\n\t0x00F2: { /* n:\"BrtEndPCDSDTCSet\", */ T:-1 },\n\t0x00F3: { /* n:\"BrtBeginPCDCalcItems\", */ T:1 },\n\t0x00F4: { /* n:\"BrtEndPCDCalcItems\", */ T:-1 },\n\t0x00F5: { /* n:\"BrtBeginPCDCalcItem\", */ T:1 },\n\t0x00F6: { /* n:\"BrtEndPCDCalcItem\", */ T:-1 },\n\t0x00F7: { /* n:\"BrtBeginPRule\", */ T:1 },\n\t0x00F8: { /* n:\"BrtEndPRule\", */ T:-1 },\n\t0x00F9: { /* n:\"BrtBeginPRFilters\", */ T:1 },\n\t0x00FA: { /* n:\"BrtEndPRFilters\", */ T:-1 },\n\t0x00FB: { /* n:\"BrtBeginPRFilter\", */ T:1 },\n\t0x00FC: { /* n:\"BrtEndPRFilter\", */ T:-1 },\n\t0x00FD: { /* n:\"BrtBeginPNames\", */ T:1 },\n\t0x00FE: { /* n:\"BrtEndPNames\", */ T:-1 },\n\t0x00FF: { /* n:\"BrtBeginPName\", */ T:1 },\n\t0x0100: { /* n:\"BrtEndPName\", */ T:-1 },\n\t0x0101: { /* n:\"BrtBeginPNPairs\", */ T:1 },\n\t0x0102: { /* n:\"BrtEndPNPairs\", */ T:-1 },\n\t0x0103: { /* n:\"BrtBeginPNPair\", */ T:1 },\n\t0x0104: { /* n:\"BrtEndPNPair\", */ T:-1 },\n\t0x0105: { /* n:\"BrtBeginECWebProps\", */ T:1 },\n\t0x0106: { /* n:\"BrtEndECWebProps\", */ T:-1 },\n\t0x0107: { /* n:\"BrtBeginEcWpTables\", */ T:1 },\n\t0x0108: { /* n:\"BrtEndECWPTables\", */ T:-1 },\n\t0x0109: { /* n:\"BrtBeginECParams\", */ T:1 },\n\t0x010A: { /* n:\"BrtEndECParams\", */ T:-1 },\n\t0x010B: { /* n:\"BrtBeginECParam\", */ T:1 },\n\t0x010C: { /* n:\"BrtEndECParam\", */ T:-1 },\n\t0x010D: { /* n:\"BrtBeginPCDKPIs\", */ T:1 },\n\t0x010E: { /* n:\"BrtEndPCDKPIs\", */ T:-1 },\n\t0x010F: { /* n:\"BrtBeginPCDKPI\", */ T:1 },\n\t0x0110: { /* n:\"BrtEndPCDKPI\", */ T:-1 },\n\t0x0111: { /* n:\"BrtBeginDims\", */ T:1 },\n\t0x0112: { /* n:\"BrtEndDims\", */ T:-1 },\n\t0x0113: { /* n:\"BrtBeginDim\", */ T:1 },\n\t0x0114: { /* n:\"BrtEndDim\", */ T:-1 },\n\t0x0115: { /* n:\"BrtIndexPartEnd\" */ },\n\t0x0116: { /* n:\"BrtBeginStyleSheet\", */ T:1 },\n\t0x0117: { /* n:\"BrtEndStyleSheet\", */ T:-1 },\n\t0x0118: { /* n:\"BrtBeginSXView\", */ T:1 },\n\t0x0119: { /* n:\"BrtEndSXVI\", */ T:-1 },\n\t0x011A: { /* n:\"BrtBeginSXVI\", */ T:1 },\n\t0x011B: { /* n:\"BrtBeginSXVIs\", */ T:1 },\n\t0x011C: { /* n:\"BrtEndSXVIs\", */ T:-1 },\n\t0x011D: { /* n:\"BrtBeginSXVD\", */ T:1 },\n\t0x011E: { /* n:\"BrtEndSXVD\", */ T:-1 },\n\t0x011F: { /* n:\"BrtBeginSXVDs\", */ T:1 },\n\t0x0120: { /* n:\"BrtEndSXVDs\", */ T:-1 },\n\t0x0121: { /* n:\"BrtBeginSXPI\", */ T:1 },\n\t0x0122: { /* n:\"BrtEndSXPI\", */ T:-1 },\n\t0x0123: { /* n:\"BrtBeginSXPIs\", */ T:1 },\n\t0x0124: { /* n:\"BrtEndSXPIs\", */ T:-1 },\n\t0x0125: { /* n:\"BrtBeginSXDI\", */ T:1 },\n\t0x0126: { /* n:\"BrtEndSXDI\", */ T:-1 },\n\t0x0127: { /* n:\"BrtBeginSXDIs\", */ T:1 },\n\t0x0128: { /* n:\"BrtEndSXDIs\", */ T:-1 },\n\t0x0129: { /* n:\"BrtBeginSXLI\", */ T:1 },\n\t0x012A: { /* n:\"BrtEndSXLI\", */ T:-1 },\n\t0x012B: { /* n:\"BrtBeginSXLIRws\", */ T:1 },\n\t0x012C: { /* n:\"BrtEndSXLIRws\", */ T:-1 },\n\t0x012D: { /* n:\"BrtBeginSXLICols\", */ T:1 },\n\t0x012E: { /* n:\"BrtEndSXLICols\", */ T:-1 },\n\t0x012F: { /* n:\"BrtBeginSXFormat\", */ T:1 },\n\t0x0130: { /* n:\"BrtEndSXFormat\", */ T:-1 },\n\t0x0131: { /* n:\"BrtBeginSXFormats\", */ T:1 },\n\t0x0132: { /* n:\"BrtEndSxFormats\", */ T:-1 },\n\t0x0133: { /* n:\"BrtBeginSxSelect\", */ T:1 },\n\t0x0134: { /* n:\"BrtEndSxSelect\", */ T:-1 },\n\t0x0135: { /* n:\"BrtBeginISXVDRws\", */ T:1 },\n\t0x0136: { /* n:\"BrtEndISXVDRws\", */ T:-1 },\n\t0x0137: { /* n:\"BrtBeginISXVDCols\", */ T:1 },\n\t0x0138: { /* n:\"BrtEndISXVDCols\", */ T:-1 },\n\t0x0139: { /* n:\"BrtEndSXLocation\", */ T:-1 },\n\t0x013A: { /* n:\"BrtBeginSXLocation\", */ T:1 },\n\t0x013B: { /* n:\"BrtEndSXView\", */ T:-1 },\n\t0x013C: { /* n:\"BrtBeginSXTHs\", */ T:1 },\n\t0x013D: { /* n:\"BrtEndSXTHs\", */ T:-1 },\n\t0x013E: { /* n:\"BrtBeginSXTH\", */ T:1 },\n\t0x013F: { /* n:\"BrtEndSXTH\", */ T:-1 },\n\t0x0140: { /* n:\"BrtBeginISXTHRws\", */ T:1 },\n\t0x0141: { /* n:\"BrtEndISXTHRws\", */ T:-1 },\n\t0x0142: { /* n:\"BrtBeginISXTHCols\", */ T:1 },\n\t0x0143: { /* n:\"BrtEndISXTHCols\", */ T:-1 },\n\t0x0144: { /* n:\"BrtBeginSXTDMPS\", */ T:1 },\n\t0x0145: { /* n:\"BrtEndSXTDMPs\", */ T:-1 },\n\t0x0146: { /* n:\"BrtBeginSXTDMP\", */ T:1 },\n\t0x0147: { /* n:\"BrtEndSXTDMP\", */ T:-1 },\n\t0x0148: { /* n:\"BrtBeginSXTHItems\", */ T:1 },\n\t0x0149: { /* n:\"BrtEndSXTHItems\", */ T:-1 },\n\t0x014A: { /* n:\"BrtBeginSXTHItem\", */ T:1 },\n\t0x014B: { /* n:\"BrtEndSXTHItem\", */ T:-1 },\n\t0x014C: { /* n:\"BrtBeginMetadata\", */ T:1 },\n\t0x014D: { /* n:\"BrtEndMetadata\", */ T:-1 },\n\t0x014E: { /* n:\"BrtBeginEsmdtinfo\", */ T:1 },\n\t0x014F: { /* n:\"BrtMdtinfo\", */ f:parse_BrtMdtinfo },\n\t0x0150: { /* n:\"BrtEndEsmdtinfo\", */ T:-1 },\n\t0x0151: { /* n:\"BrtBeginEsmdb\", */ f:parse_BrtBeginEsmdb, T:1 },\n\t0x0152: { /* n:\"BrtEndEsmdb\", */ T:-1 },\n\t0x0153: { /* n:\"BrtBeginEsfmd\", */ T:1 },\n\t0x0154: { /* n:\"BrtEndEsfmd\", */ T:-1 },\n\t0x0155: { /* n:\"BrtBeginSingleCells\", */ T:1 },\n\t0x0156: { /* n:\"BrtEndSingleCells\", */ T:-1 },\n\t0x0157: { /* n:\"BrtBeginList\", */ T:1 },\n\t0x0158: { /* n:\"BrtEndList\", */ T:-1 },\n\t0x0159: { /* n:\"BrtBeginListCols\", */ T:1 },\n\t0x015A: { /* n:\"BrtEndListCols\", */ T:-1 },\n\t0x015B: { /* n:\"BrtBeginListCol\", */ T:1 },\n\t0x015C: { /* n:\"BrtEndListCol\", */ T:-1 },\n\t0x015D: { /* n:\"BrtBeginListXmlCPr\", */ T:1 },\n\t0x015E: { /* n:\"BrtEndListXmlCPr\", */ T:-1 },\n\t0x015F: { /* n:\"BrtListCCFmla\" */ },\n\t0x0160: { /* n:\"BrtListTrFmla\" */ },\n\t0x0161: { /* n:\"BrtBeginExternals\", */ T:1 },\n\t0x0162: { /* n:\"BrtEndExternals\", */ T:-1 },\n\t0x0163: { /* n:\"BrtSupBookSrc\", */ f:parse_RelID},\n\t0x0165: { /* n:\"BrtSupSelf\" */ },\n\t0x0166: { /* n:\"BrtSupSame\" */ },\n\t0x0167: { /* n:\"BrtSupTabs\" */ },\n\t0x0168: { /* n:\"BrtBeginSupBook\", */ T:1 },\n\t0x0169: { /* n:\"BrtPlaceholderName\" */ },\n\t0x016A: { /* n:\"BrtExternSheet\", */ f:parse_ExternSheet },\n\t0x016B: { /* n:\"BrtExternTableStart\" */ },\n\t0x016C: { /* n:\"BrtExternTableEnd\" */ },\n\t0x016E: { /* n:\"BrtExternRowHdr\" */ },\n\t0x016F: { /* n:\"BrtExternCellBlank\" */ },\n\t0x0170: { /* n:\"BrtExternCellReal\" */ },\n\t0x0171: { /* n:\"BrtExternCellBool\" */ },\n\t0x0172: { /* n:\"BrtExternCellError\" */ },\n\t0x0173: { /* n:\"BrtExternCellString\" */ },\n\t0x0174: { /* n:\"BrtBeginEsmdx\", */ T:1 },\n\t0x0175: { /* n:\"BrtEndEsmdx\", */ T:-1 },\n\t0x0176: { /* n:\"BrtBeginMdxSet\", */ T:1 },\n\t0x0177: { /* n:\"BrtEndMdxSet\", */ T:-1 },\n\t0x0178: { /* n:\"BrtBeginMdxMbrProp\", */ T:1 },\n\t0x0179: { /* n:\"BrtEndMdxMbrProp\", */ T:-1 },\n\t0x017A: { /* n:\"BrtBeginMdxKPI\", */ T:1 },\n\t0x017B: { /* n:\"BrtEndMdxKPI\", */ T:-1 },\n\t0x017C: { /* n:\"BrtBeginEsstr\", */ T:1 },\n\t0x017D: { /* n:\"BrtEndEsstr\", */ T:-1 },\n\t0x017E: { /* n:\"BrtBeginPRFItem\", */ T:1 },\n\t0x017F: { /* n:\"BrtEndPRFItem\", */ T:-1 },\n\t0x0180: { /* n:\"BrtBeginPivotCacheIDs\", */ T:1 },\n\t0x0181: { /* n:\"BrtEndPivotCacheIDs\", */ T:-1 },\n\t0x0182: { /* n:\"BrtBeginPivotCacheID\", */ T:1 },\n\t0x0183: { /* n:\"BrtEndPivotCacheID\", */ T:-1 },\n\t0x0184: { /* n:\"BrtBeginISXVIs\", */ T:1 },\n\t0x0185: { /* n:\"BrtEndISXVIs\", */ T:-1 },\n\t0x0186: { /* n:\"BrtBeginColInfos\", */ T:1 },\n\t0x0187: { /* n:\"BrtEndColInfos\", */ T:-1 },\n\t0x0188: { /* n:\"BrtBeginRwBrk\", */ T:1 },\n\t0x0189: { /* n:\"BrtEndRwBrk\", */ T:-1 },\n\t0x018A: { /* n:\"BrtBeginColBrk\", */ T:1 },\n\t0x018B: { /* n:\"BrtEndColBrk\", */ T:-1 },\n\t0x018C: { /* n:\"BrtBrk\" */ },\n\t0x018D: { /* n:\"BrtUserBookView\" */ },\n\t0x018E: { /* n:\"BrtInfo\" */ },\n\t0x018F: { /* n:\"BrtCUsr\" */ },\n\t0x0190: { /* n:\"BrtUsr\" */ },\n\t0x0191: { /* n:\"BrtBeginUsers\", */ T:1 },\n\t0x0193: { /* n:\"BrtEOF\" */ },\n\t0x0194: { /* n:\"BrtUCR\" */ },\n\t0x0195: { /* n:\"BrtRRInsDel\" */ },\n\t0x0196: { /* n:\"BrtRREndInsDel\" */ },\n\t0x0197: { /* n:\"BrtRRMove\" */ },\n\t0x0198: { /* n:\"BrtRREndMove\" */ },\n\t0x0199: { /* n:\"BrtRRChgCell\" */ },\n\t0x019A: { /* n:\"BrtRREndChgCell\" */ },\n\t0x019B: { /* n:\"BrtRRHeader\" */ },\n\t0x019C: { /* n:\"BrtRRUserView\" */ },\n\t0x019D: { /* n:\"BrtRRRenSheet\" */ },\n\t0x019E: { /* n:\"BrtRRInsertSh\" */ },\n\t0x019F: { /* n:\"BrtRRDefName\" */ },\n\t0x01A0: { /* n:\"BrtRRNote\" */ },\n\t0x01A1: { /* n:\"BrtRRConflict\" */ },\n\t0x01A2: { /* n:\"BrtRRTQSIF\" */ },\n\t0x01A3: { /* n:\"BrtRRFormat\" */ },\n\t0x01A4: { /* n:\"BrtRREndFormat\" */ },\n\t0x01A5: { /* n:\"BrtRRAutoFmt\" */ },\n\t0x01A6: { /* n:\"BrtBeginUserShViews\", */ T:1 },\n\t0x01A7: { /* n:\"BrtBeginUserShView\", */ T:1 },\n\t0x01A8: { /* n:\"BrtEndUserShView\", */ T:-1 },\n\t0x01A9: { /* n:\"BrtEndUserShViews\", */ T:-1 },\n\t0x01AA: { /* n:\"BrtArrFmla\", */ f:parse_BrtArrFmla },\n\t0x01AB: { /* n:\"BrtShrFmla\", */ f:parse_BrtShrFmla },\n\t0x01AC: { /* n:\"BrtTable\" */ },\n\t0x01AD: { /* n:\"BrtBeginExtConnections\", */ T:1 },\n\t0x01AE: { /* n:\"BrtEndExtConnections\", */ T:-1 },\n\t0x01AF: { /* n:\"BrtBeginPCDCalcMems\", */ T:1 },\n\t0x01B0: { /* n:\"BrtEndPCDCalcMems\", */ T:-1 },\n\t0x01B1: { /* n:\"BrtBeginPCDCalcMem\", */ T:1 },\n\t0x01B2: { /* n:\"BrtEndPCDCalcMem\", */ T:-1 },\n\t0x01B3: { /* n:\"BrtBeginPCDHGLevels\", */ T:1 },\n\t0x01B4: { /* n:\"BrtEndPCDHGLevels\", */ T:-1 },\n\t0x01B5: { /* n:\"BrtBeginPCDHGLevel\", */ T:1 },\n\t0x01B6: { /* n:\"BrtEndPCDHGLevel\", */ T:-1 },\n\t0x01B7: { /* n:\"BrtBeginPCDHGLGroups\", */ T:1 },\n\t0x01B8: { /* n:\"BrtEndPCDHGLGroups\", */ T:-1 },\n\t0x01B9: { /* n:\"BrtBeginPCDHGLGroup\", */ T:1 },\n\t0x01BA: { /* n:\"BrtEndPCDHGLGroup\", */ T:-1 },\n\t0x01BB: { /* n:\"BrtBeginPCDHGLGMembers\", */ T:1 },\n\t0x01BC: { /* n:\"BrtEndPCDHGLGMembers\", */ T:-1 },\n\t0x01BD: { /* n:\"BrtBeginPCDHGLGMember\", */ T:1 },\n\t0x01BE: { /* n:\"BrtEndPCDHGLGMember\", */ T:-1 },\n\t0x01BF: { /* n:\"BrtBeginQSI\", */ T:1 },\n\t0x01C0: { /* n:\"BrtEndQSI\", */ T:-1 },\n\t0x01C1: { /* n:\"BrtBeginQSIR\", */ T:1 },\n\t0x01C2: { /* n:\"BrtEndQSIR\", */ T:-1 },\n\t0x01C3: { /* n:\"BrtBeginDeletedNames\", */ T:1 },\n\t0x01C4: { /* n:\"BrtEndDeletedNames\", */ T:-1 },\n\t0x01C5: { /* n:\"BrtBeginDeletedName\", */ T:1 },\n\t0x01C6: { /* n:\"BrtEndDeletedName\", */ T:-1 },\n\t0x01C7: { /* n:\"BrtBeginQSIFs\", */ T:1 },\n\t0x01C8: { /* n:\"BrtEndQSIFs\", */ T:-1 },\n\t0x01C9: { /* n:\"BrtBeginQSIF\", */ T:1 },\n\t0x01CA: { /* n:\"BrtEndQSIF\", */ T:-1 },\n\t0x01CB: { /* n:\"BrtBeginAutoSortScope\", */ T:1 },\n\t0x01CC: { /* n:\"BrtEndAutoSortScope\", */ T:-1 },\n\t0x01CD: { /* n:\"BrtBeginConditionalFormatting\", */ T:1 },\n\t0x01CE: { /* n:\"BrtEndConditionalFormatting\", */ T:-1 },\n\t0x01CF: { /* n:\"BrtBeginCFRule\", */ T:1 },\n\t0x01D0: { /* n:\"BrtEndCFRule\", */ T:-1 },\n\t0x01D1: { /* n:\"BrtBeginIconSet\", */ T:1 },\n\t0x01D2: { /* n:\"BrtEndIconSet\", */ T:-1 },\n\t0x01D3: { /* n:\"BrtBeginDatabar\", */ T:1 },\n\t0x01D4: { /* n:\"BrtEndDatabar\", */ T:-1 },\n\t0x01D5: { /* n:\"BrtBeginColorScale\", */ T:1 },\n\t0x01D6: { /* n:\"BrtEndColorScale\", */ T:-1 },\n\t0x01D7: { /* n:\"BrtCFVO\" */ },\n\t0x01D8: { /* n:\"BrtExternValueMeta\" */ },\n\t0x01D9: { /* n:\"BrtBeginColorPalette\", */ T:1 },\n\t0x01DA: { /* n:\"BrtEndColorPalette\", */ T:-1 },\n\t0x01DB: { /* n:\"BrtIndexedColor\" */ },\n\t0x01DC: { /* n:\"BrtMargins\", */ f:parse_BrtMargins },\n\t0x01DD: { /* n:\"BrtPrintOptions\" */ },\n\t0x01DE: { /* n:\"BrtPageSetup\" */ },\n\t0x01DF: { /* n:\"BrtBeginHeaderFooter\", */ T:1 },\n\t0x01E0: { /* n:\"BrtEndHeaderFooter\", */ T:-1 },\n\t0x01E1: { /* n:\"BrtBeginSXCrtFormat\", */ T:1 },\n\t0x01E2: { /* n:\"BrtEndSXCrtFormat\", */ T:-1 },\n\t0x01E3: { /* n:\"BrtBeginSXCrtFormats\", */ T:1 },\n\t0x01E4: { /* n:\"BrtEndSXCrtFormats\", */ T:-1 },\n\t0x01E5: { /* n:\"BrtWsFmtInfo\", */ f:parse_BrtWsFmtInfo },\n\t0x01E6: { /* n:\"BrtBeginMgs\", */ T:1 },\n\t0x01E7: { /* n:\"BrtEndMGs\", */ T:-1 },\n\t0x01E8: { /* n:\"BrtBeginMGMaps\", */ T:1 },\n\t0x01E9: { /* n:\"BrtEndMGMaps\", */ T:-1 },\n\t0x01EA: { /* n:\"BrtBeginMG\", */ T:1 },\n\t0x01EB: { /* n:\"BrtEndMG\", */ T:-1 },\n\t0x01EC: { /* n:\"BrtBeginMap\", */ T:1 },\n\t0x01ED: { /* n:\"BrtEndMap\", */ T:-1 },\n\t0x01EE: { /* n:\"BrtHLink\", */ f:parse_BrtHLink },\n\t0x01EF: { /* n:\"BrtBeginDCon\", */ T:1 },\n\t0x01F0: { /* n:\"BrtEndDCon\", */ T:-1 },\n\t0x01F1: { /* n:\"BrtBeginDRefs\", */ T:1 },\n\t0x01F2: { /* n:\"BrtEndDRefs\", */ T:-1 },\n\t0x01F3: { /* n:\"BrtDRef\" */ },\n\t0x01F4: { /* n:\"BrtBeginScenMan\", */ T:1 },\n\t0x01F5: { /* n:\"BrtEndScenMan\", */ T:-1 },\n\t0x01F6: { /* n:\"BrtBeginSct\", */ T:1 },\n\t0x01F7: { /* n:\"BrtEndSct\", */ T:-1 },\n\t0x01F8: { /* n:\"BrtSlc\" */ },\n\t0x01F9: { /* n:\"BrtBeginDXFs\", */ T:1 },\n\t0x01FA: { /* n:\"BrtEndDXFs\", */ T:-1 },\n\t0x01FB: { /* n:\"BrtDXF\" */ },\n\t0x01FC: { /* n:\"BrtBeginTableStyles\", */ T:1 },\n\t0x01FD: { /* n:\"BrtEndTableStyles\", */ T:-1 },\n\t0x01FE: { /* n:\"BrtBeginTableStyle\", */ T:1 },\n\t0x01FF: { /* n:\"BrtEndTableStyle\", */ T:-1 },\n\t0x0200: { /* n:\"BrtTableStyleElement\" */ },\n\t0x0201: { /* n:\"BrtTableStyleClient\" */ },\n\t0x0202: { /* n:\"BrtBeginVolDeps\", */ T:1 },\n\t0x0203: { /* n:\"BrtEndVolDeps\", */ T:-1 },\n\t0x0204: { /* n:\"BrtBeginVolType\", */ T:1 },\n\t0x0205: { /* n:\"BrtEndVolType\", */ T:-1 },\n\t0x0206: { /* n:\"BrtBeginVolMain\", */ T:1 },\n\t0x0207: { /* n:\"BrtEndVolMain\", */ T:-1 },\n\t0x0208: { /* n:\"BrtBeginVolTopic\", */ T:1 },\n\t0x0209: { /* n:\"BrtEndVolTopic\", */ T:-1 },\n\t0x020A: { /* n:\"BrtVolSubtopic\" */ },\n\t0x020B: { /* n:\"BrtVolRef\" */ },\n\t0x020C: { /* n:\"BrtVolNum\" */ },\n\t0x020D: { /* n:\"BrtVolErr\" */ },\n\t0x020E: { /* n:\"BrtVolStr\" */ },\n\t0x020F: { /* n:\"BrtVolBool\" */ },\n\t0x0210: { /* n:\"BrtBeginCalcChain$\", */ T:1 },\n\t0x0211: { /* n:\"BrtEndCalcChain$\", */ T:-1 },\n\t0x0212: { /* n:\"BrtBeginSortState\", */ T:1 },\n\t0x0213: { /* n:\"BrtEndSortState\", */ T:-1 },\n\t0x0214: { /* n:\"BrtBeginSortCond\", */ T:1 },\n\t0x0215: { /* n:\"BrtEndSortCond\", */ T:-1 },\n\t0x0216: { /* n:\"BrtBookProtection\" */ },\n\t0x0217: { /* n:\"BrtSheetProtection\" */ },\n\t0x0218: { /* n:\"BrtRangeProtection\" */ },\n\t0x0219: { /* n:\"BrtPhoneticInfo\" */ },\n\t0x021A: { /* n:\"BrtBeginECTxtWiz\", */ T:1 },\n\t0x021B: { /* n:\"BrtEndECTxtWiz\", */ T:-1 },\n\t0x021C: { /* n:\"BrtBeginECTWFldInfoLst\", */ T:1 },\n\t0x021D: { /* n:\"BrtEndECTWFldInfoLst\", */ T:-1 },\n\t0x021E: { /* n:\"BrtBeginECTwFldInfo\", */ T:1 },\n\t0x0224: { /* n:\"BrtFileSharing\" */ },\n\t0x0225: { /* n:\"BrtOleSize\" */ },\n\t0x0226: { /* n:\"BrtDrawing\", */ f:parse_RelID },\n\t0x0227: { /* n:\"BrtLegacyDrawing\", */ f:parse_XLNullableWideString },\n\t0x0228: { /* n:\"BrtLegacyDrawingHF\" */ },\n\t0x0229: { /* n:\"BrtWebOpt\" */ },\n\t0x022A: { /* n:\"BrtBeginWebPubItems\", */ T:1 },\n\t0x022B: { /* n:\"BrtEndWebPubItems\", */ T:-1 },\n\t0x022C: { /* n:\"BrtBeginWebPubItem\", */ T:1 },\n\t0x022D: { /* n:\"BrtEndWebPubItem\", */ T:-1 },\n\t0x022E: { /* n:\"BrtBeginSXCondFmt\", */ T:1 },\n\t0x022F: { /* n:\"BrtEndSXCondFmt\", */ T:-1 },\n\t0x0230: { /* n:\"BrtBeginSXCondFmts\", */ T:1 },\n\t0x0231: { /* n:\"BrtEndSXCondFmts\", */ T:-1 },\n\t0x0232: { /* n:\"BrtBkHim\" */ },\n\t0x0234: { /* n:\"BrtColor\" */ },\n\t0x0235: { /* n:\"BrtBeginIndexedColors\", */ T:1 },\n\t0x0236: { /* n:\"BrtEndIndexedColors\", */ T:-1 },\n\t0x0239: { /* n:\"BrtBeginMRUColors\", */ T:1 },\n\t0x023A: { /* n:\"BrtEndMRUColors\", */ T:-1 },\n\t0x023C: { /* n:\"BrtMRUColor\" */ },\n\t0x023D: { /* n:\"BrtBeginDVals\", */ T:1 },\n\t0x023E: { /* n:\"BrtEndDVals\", */ T:-1 },\n\t0x0241: { /* n:\"BrtSupNameStart\" */ },\n\t0x0242: { /* n:\"BrtSupNameValueStart\" */ },\n\t0x0243: { /* n:\"BrtSupNameValueEnd\" */ },\n\t0x0244: { /* n:\"BrtSupNameNum\" */ },\n\t0x0245: { /* n:\"BrtSupNameErr\" */ },\n\t0x0246: { /* n:\"BrtSupNameSt\" */ },\n\t0x0247: { /* n:\"BrtSupNameNil\" */ },\n\t0x0248: { /* n:\"BrtSupNameBool\" */ },\n\t0x0249: { /* n:\"BrtSupNameFmla\" */ },\n\t0x024A: { /* n:\"BrtSupNameBits\" */ },\n\t0x024B: { /* n:\"BrtSupNameEnd\" */ },\n\t0x024C: { /* n:\"BrtEndSupBook\", */ T:-1 },\n\t0x024D: { /* n:\"BrtCellSmartTagProperty\" */ },\n\t0x024E: { /* n:\"BrtBeginCellSmartTag\", */ T:1 },\n\t0x024F: { /* n:\"BrtEndCellSmartTag\", */ T:-1 },\n\t0x0250: { /* n:\"BrtBeginCellSmartTags\", */ T:1 },\n\t0x0251: { /* n:\"BrtEndCellSmartTags\", */ T:-1 },\n\t0x0252: { /* n:\"BrtBeginSmartTags\", */ T:1 },\n\t0x0253: { /* n:\"BrtEndSmartTags\", */ T:-1 },\n\t0x0254: { /* n:\"BrtSmartTagType\" */ },\n\t0x0255: { /* n:\"BrtBeginSmartTagTypes\", */ T:1 },\n\t0x0256: { /* n:\"BrtEndSmartTagTypes\", */ T:-1 },\n\t0x0257: { /* n:\"BrtBeginSXFilters\", */ T:1 },\n\t0x0258: { /* n:\"BrtEndSXFilters\", */ T:-1 },\n\t0x0259: { /* n:\"BrtBeginSXFILTER\", */ T:1 },\n\t0x025A: { /* n:\"BrtEndSXFilter\", */ T:-1 },\n\t0x025B: { /* n:\"BrtBeginFills\", */ T:1 },\n\t0x025C: { /* n:\"BrtEndFills\", */ T:-1 },\n\t0x025D: { /* n:\"BrtBeginCellWatches\", */ T:1 },\n\t0x025E: { /* n:\"BrtEndCellWatches\", */ T:-1 },\n\t0x025F: { /* n:\"BrtCellWatch\" */ },\n\t0x0260: { /* n:\"BrtBeginCRErrs\", */ T:1 },\n\t0x0261: { /* n:\"BrtEndCRErrs\", */ T:-1 },\n\t0x0262: { /* n:\"BrtCrashRecErr\" */ },\n\t0x0263: { /* n:\"BrtBeginFonts\", */ T:1 },\n\t0x0264: { /* n:\"BrtEndFonts\", */ T:-1 },\n\t0x0265: { /* n:\"BrtBeginBorders\", */ T:1 },\n\t0x0266: { /* n:\"BrtEndBorders\", */ T:-1 },\n\t0x0267: { /* n:\"BrtBeginFmts\", */ T:1 },\n\t0x0268: { /* n:\"BrtEndFmts\", */ T:-1 },\n\t0x0269: { /* n:\"BrtBeginCellXFs\", */ T:1 },\n\t0x026A: { /* n:\"BrtEndCellXFs\", */ T:-1 },\n\t0x026B: { /* n:\"BrtBeginStyles\", */ T:1 },\n\t0x026C: { /* n:\"BrtEndStyles\", */ T:-1 },\n\t0x0271: { /* n:\"BrtBigName\" */ },\n\t0x0272: { /* n:\"BrtBeginCellStyleXFs\", */ T:1 },\n\t0x0273: { /* n:\"BrtEndCellStyleXFs\", */ T:-1 },\n\t0x0274: { /* n:\"BrtBeginComments\", */ T:1 },\n\t0x0275: { /* n:\"BrtEndComments\", */ T:-1 },\n\t0x0276: { /* n:\"BrtBeginCommentAuthors\", */ T:1 },\n\t0x0277: { /* n:\"BrtEndCommentAuthors\", */ T:-1 },\n\t0x0278: { /* n:\"BrtCommentAuthor\", */ f:parse_BrtCommentAuthor },\n\t0x0279: { /* n:\"BrtBeginCommentList\", */ T:1 },\n\t0x027A: { /* n:\"BrtEndCommentList\", */ T:-1 },\n\t0x027B: { /* n:\"BrtBeginComment\", */ T:1, f:parse_BrtBeginComment},\n\t0x027C: { /* n:\"BrtEndComment\", */ T:-1 },\n\t0x027D: { /* n:\"BrtCommentText\", */ f:parse_BrtCommentText },\n\t0x027E: { /* n:\"BrtBeginOleObjects\", */ T:1 },\n\t0x027F: { /* n:\"BrtOleObject\" */ },\n\t0x0280: { /* n:\"BrtEndOleObjects\", */ T:-1 },\n\t0x0281: { /* n:\"BrtBeginSxrules\", */ T:1 },\n\t0x0282: { /* n:\"BrtEndSxRules\", */ T:-1 },\n\t0x0283: { /* n:\"BrtBeginActiveXControls\", */ T:1 },\n\t0x0284: { /* n:\"BrtActiveX\" */ },\n\t0x0285: { /* n:\"BrtEndActiveXControls\", */ T:-1 },\n\t0x0286: { /* n:\"BrtBeginPCDSDTCEMembersSortBy\", */ T:1 },\n\t0x0288: { /* n:\"BrtBeginCellIgnoreECs\", */ T:1 },\n\t0x0289: { /* n:\"BrtCellIgnoreEC\" */ },\n\t0x028A: { /* n:\"BrtEndCellIgnoreECs\", */ T:-1 },\n\t0x028B: { /* n:\"BrtCsProp\", */ f:parse_BrtCsProp },\n\t0x028C: { /* n:\"BrtCsPageSetup\" */ },\n\t0x028D: { /* n:\"BrtBeginUserCsViews\", */ T:1 },\n\t0x028E: { /* n:\"BrtEndUserCsViews\", */ T:-1 },\n\t0x028F: { /* n:\"BrtBeginUserCsView\", */ T:1 },\n\t0x0290: { /* n:\"BrtEndUserCsView\", */ T:-1 },\n\t0x0291: { /* n:\"BrtBeginPcdSFCIEntries\", */ T:1 },\n\t0x0292: { /* n:\"BrtEndPCDSFCIEntries\", */ T:-1 },\n\t0x0293: { /* n:\"BrtPCDSFCIEntry\" */ },\n\t0x0294: { /* n:\"BrtBeginListParts\", */ T:1 },\n\t0x0295: { /* n:\"BrtListPart\" */ },\n\t0x0296: { /* n:\"BrtEndListParts\", */ T:-1 },\n\t0x0297: { /* n:\"BrtSheetCalcProp\" */ },\n\t0x0298: { /* n:\"BrtBeginFnGroup\", */ T:1 },\n\t0x0299: { /* n:\"BrtFnGroup\" */ },\n\t0x029A: { /* n:\"BrtEndFnGroup\", */ T:-1 },\n\t0x029B: { /* n:\"BrtSupAddin\" */ },\n\t0x029C: { /* n:\"BrtSXTDMPOrder\" */ },\n\t0x029D: { /* n:\"BrtCsProtection\" */ },\n\t0x029F: { /* n:\"BrtBeginWsSortMap\", */ T:1 },\n\t0x02A0: { /* n:\"BrtEndWsSortMap\", */ T:-1 },\n\t0x02A1: { /* n:\"BrtBeginRRSort\", */ T:1 },\n\t0x02A2: { /* n:\"BrtEndRRSort\", */ T:-1 },\n\t0x02A3: { /* n:\"BrtRRSortItem\" */ },\n\t0x02A4: { /* n:\"BrtFileSharingIso\" */ },\n\t0x02A5: { /* n:\"BrtBookProtectionIso\" */ },\n\t0x02A6: { /* n:\"BrtSheetProtectionIso\" */ },\n\t0x02A7: { /* n:\"BrtCsProtectionIso\" */ },\n\t0x02A8: { /* n:\"BrtRangeProtectionIso\" */ },\n\t0x02A9: { /* n:\"BrtDValList\" */ },\n\t0x0400: { /* n:\"BrtRwDescent\" */ },\n\t0x0401: { /* n:\"BrtKnownFonts\" */ },\n\t0x0402: { /* n:\"BrtBeginSXTupleSet\", */ T:1 },\n\t0x0403: { /* n:\"BrtEndSXTupleSet\", */ T:-1 },\n\t0x0404: { /* n:\"BrtBeginSXTupleSetHeader\", */ T:1 },\n\t0x0405: { /* n:\"BrtEndSXTupleSetHeader\", */ T:-1 },\n\t0x0406: { /* n:\"BrtSXTupleSetHeaderItem\" */ },\n\t0x0407: { /* n:\"BrtBeginSXTupleSetData\", */ T:1 },\n\t0x0408: { /* n:\"BrtEndSXTupleSetData\", */ T:-1 },\n\t0x0409: { /* n:\"BrtBeginSXTupleSetRow\", */ T:1 },\n\t0x040A: { /* n:\"BrtEndSXTupleSetRow\", */ T:-1 },\n\t0x040B: { /* n:\"BrtSXTupleSetRowItem\" */ },\n\t0x040C: { /* n:\"BrtNameExt\" */ },\n\t0x040D: { /* n:\"BrtPCDH14\" */ },\n\t0x040E: { /* n:\"BrtBeginPCDCalcMem14\", */ T:1 },\n\t0x040F: { /* n:\"BrtEndPCDCalcMem14\", */ T:-1 },\n\t0x0410: { /* n:\"BrtSXTH14\" */ },\n\t0x0411: { /* n:\"BrtBeginSparklineGroup\", */ T:1 },\n\t0x0412: { /* n:\"BrtEndSparklineGroup\", */ T:-1 },\n\t0x0413: { /* n:\"BrtSparkline\" */ },\n\t0x0414: { /* n:\"BrtSXDI14\" */ },\n\t0x0415: { /* n:\"BrtWsFmtInfoEx14\" */ },\n\t0x0416: { /* n:\"BrtBeginConditionalFormatting14\", */ T:1 },\n\t0x0417: { /* n:\"BrtEndConditionalFormatting14\", */ T:-1 },\n\t0x0418: { /* n:\"BrtBeginCFRule14\", */ T:1 },\n\t0x0419: { /* n:\"BrtEndCFRule14\", */ T:-1 },\n\t0x041A: { /* n:\"BrtCFVO14\" */ },\n\t0x041B: { /* n:\"BrtBeginDatabar14\", */ T:1 },\n\t0x041C: { /* n:\"BrtBeginIconSet14\", */ T:1 },\n\t0x041D: { /* n:\"BrtDVal14\", */ f: parse_BrtDVal14 },\n\t0x041E: { /* n:\"BrtBeginDVals14\", */ T:1 },\n\t0x041F: { /* n:\"BrtColor14\" */ },\n\t0x0420: { /* n:\"BrtBeginSparklines\", */ T:1 },\n\t0x0421: { /* n:\"BrtEndSparklines\", */ T:-1 },\n\t0x0422: { /* n:\"BrtBeginSparklineGroups\", */ T:1 },\n\t0x0423: { /* n:\"BrtEndSparklineGroups\", */ T:-1 },\n\t0x0425: { /* n:\"BrtSXVD14\" */ },\n\t0x0426: { /* n:\"BrtBeginSXView14\", */ T:1 },\n\t0x0427: { /* n:\"BrtEndSXView14\", */ T:-1 },\n\t0x0428: { /* n:\"BrtBeginSXView16\", */ T:1 },\n\t0x0429: { /* n:\"BrtEndSXView16\", */ T:-1 },\n\t0x042A: { /* n:\"BrtBeginPCD14\", */ T:1 },\n\t0x042B: { /* n:\"BrtEndPCD14\", */ T:-1 },\n\t0x042C: { /* n:\"BrtBeginExtConn14\", */ T:1 },\n\t0x042D: { /* n:\"BrtEndExtConn14\", */ T:-1 },\n\t0x042E: { /* n:\"BrtBeginSlicerCacheIDs\", */ T:1 },\n\t0x042F: { /* n:\"BrtEndSlicerCacheIDs\", */ T:-1 },\n\t0x0430: { /* n:\"BrtBeginSlicerCacheID\", */ T:1 },\n\t0x0431: { /* n:\"BrtEndSlicerCacheID\", */ T:-1 },\n\t0x0433: { /* n:\"BrtBeginSlicerCache\", */ T:1 },\n\t0x0434: { /* n:\"BrtEndSlicerCache\", */ T:-1 },\n\t0x0435: { /* n:\"BrtBeginSlicerCacheDef\", */ T:1 },\n\t0x0436: { /* n:\"BrtEndSlicerCacheDef\", */ T:-1 },\n\t0x0437: { /* n:\"BrtBeginSlicersEx\", */ T:1 },\n\t0x0438: { /* n:\"BrtEndSlicersEx\", */ T:-1 },\n\t0x0439: { /* n:\"BrtBeginSlicerEx\", */ T:1 },\n\t0x043A: { /* n:\"BrtEndSlicerEx\", */ T:-1 },\n\t0x043B: { /* n:\"BrtBeginSlicer\", */ T:1 },\n\t0x043C: { /* n:\"BrtEndSlicer\", */ T:-1 },\n\t0x043D: { /* n:\"BrtSlicerCachePivotTables\" */ },\n\t0x043E: { /* n:\"BrtBeginSlicerCacheOlapImpl\", */ T:1 },\n\t0x043F: { /* n:\"BrtEndSlicerCacheOlapImpl\", */ T:-1 },\n\t0x0440: { /* n:\"BrtBeginSlicerCacheLevelsData\", */ T:1 },\n\t0x0441: { /* n:\"BrtEndSlicerCacheLevelsData\", */ T:-1 },\n\t0x0442: { /* n:\"BrtBeginSlicerCacheLevelData\", */ T:1 },\n\t0x0443: { /* n:\"BrtEndSlicerCacheLevelData\", */ T:-1 },\n\t0x0444: { /* n:\"BrtBeginSlicerCacheSiRanges\", */ T:1 },\n\t0x0445: { /* n:\"BrtEndSlicerCacheSiRanges\", */ T:-1 },\n\t0x0446: { /* n:\"BrtBeginSlicerCacheSiRange\", */ T:1 },\n\t0x0447: { /* n:\"BrtEndSlicerCacheSiRange\", */ T:-1 },\n\t0x0448: { /* n:\"BrtSlicerCacheOlapItem\" */ },\n\t0x0449: { /* n:\"BrtBeginSlicerCacheSelections\", */ T:1 },\n\t0x044A: { /* n:\"BrtSlicerCacheSelection\" */ },\n\t0x044B: { /* n:\"BrtEndSlicerCacheSelections\", */ T:-1 },\n\t0x044C: { /* n:\"BrtBeginSlicerCacheNative\", */ T:1 },\n\t0x044D: { /* n:\"BrtEndSlicerCacheNative\", */ T:-1 },\n\t0x044E: { /* n:\"BrtSlicerCacheNativeItem\" */ },\n\t0x044F: { /* n:\"BrtRangeProtection14\" */ },\n\t0x0450: { /* n:\"BrtRangeProtectionIso14\" */ },\n\t0x0451: { /* n:\"BrtCellIgnoreEC14\" */ },\n\t0x0457: { /* n:\"BrtList14\" */ },\n\t0x0458: { /* n:\"BrtCFIcon\" */ },\n\t0x0459: { /* n:\"BrtBeginSlicerCachesPivotCacheIDs\", */ T:1 },\n\t0x045A: { /* n:\"BrtEndSlicerCachesPivotCacheIDs\", */ T:-1 },\n\t0x045B: { /* n:\"BrtBeginSlicers\", */ T:1 },\n\t0x045C: { /* n:\"BrtEndSlicers\", */ T:-1 },\n\t0x045D: { /* n:\"BrtWbProp14\" */ },\n\t0x045E: { /* n:\"BrtBeginSXEdit\", */ T:1 },\n\t0x045F: { /* n:\"BrtEndSXEdit\", */ T:-1 },\n\t0x0460: { /* n:\"BrtBeginSXEdits\", */ T:1 },\n\t0x0461: { /* n:\"BrtEndSXEdits\", */ T:-1 },\n\t0x0462: { /* n:\"BrtBeginSXChange\", */ T:1 },\n\t0x0463: { /* n:\"BrtEndSXChange\", */ T:-1 },\n\t0x0464: { /* n:\"BrtBeginSXChanges\", */ T:1 },\n\t0x0465: { /* n:\"BrtEndSXChanges\", */ T:-1 },\n\t0x0466: { /* n:\"BrtSXTupleItems\" */ },\n\t0x0468: { /* n:\"BrtBeginSlicerStyle\", */ T:1 },\n\t0x0469: { /* n:\"BrtEndSlicerStyle\", */ T:-1 },\n\t0x046A: { /* n:\"BrtSlicerStyleElement\" */ },\n\t0x046B: { /* n:\"BrtBeginStyleSheetExt14\", */ T:1 },\n\t0x046C: { /* n:\"BrtEndStyleSheetExt14\", */ T:-1 },\n\t0x046D: { /* n:\"BrtBeginSlicerCachesPivotCacheID\", */ T:1 },\n\t0x046E: { /* n:\"BrtEndSlicerCachesPivotCacheID\", */ T:-1 },\n\t0x046F: { /* n:\"BrtBeginConditionalFormattings\", */ T:1 },\n\t0x0470: { /* n:\"BrtEndConditionalFormattings\", */ T:-1 },\n\t0x0471: { /* n:\"BrtBeginPCDCalcMemExt\", */ T:1 },\n\t0x0472: { /* n:\"BrtEndPCDCalcMemExt\", */ T:-1 },\n\t0x0473: { /* n:\"BrtBeginPCDCalcMemsExt\", */ T:1 },\n\t0x0474: { /* n:\"BrtEndPCDCalcMemsExt\", */ T:-1 },\n\t0x0475: { /* n:\"BrtPCDField14\" */ },\n\t0x0476: { /* n:\"BrtBeginSlicerStyles\", */ T:1 },\n\t0x0477: { /* n:\"BrtEndSlicerStyles\", */ T:-1 },\n\t0x0478: { /* n:\"BrtBeginSlicerStyleElements\", */ T:1 },\n\t0x0479: { /* n:\"BrtEndSlicerStyleElements\", */ T:-1 },\n\t0x047A: { /* n:\"BrtCFRuleExt\" */ },\n\t0x047B: { /* n:\"BrtBeginSXCondFmt14\", */ T:1 },\n\t0x047C: { /* n:\"BrtEndSXCondFmt14\", */ T:-1 },\n\t0x047D: { /* n:\"BrtBeginSXCondFmts14\", */ T:1 },\n\t0x047E: { /* n:\"BrtEndSXCondFmts14\", */ T:-1 },\n\t0x0480: { /* n:\"BrtBeginSortCond14\", */ T:1 },\n\t0x0481: { /* n:\"BrtEndSortCond14\", */ T:-1 },\n\t0x0482: { /* n:\"BrtEndDVals14\", */ T:-1 },\n\t0x0483: { /* n:\"BrtEndIconSet14\", */ T:-1 },\n\t0x0484: { /* n:\"BrtEndDatabar14\", */ T:-1 },\n\t0x0485: { /* n:\"BrtBeginColorScale14\", */ T:1 },\n\t0x0486: { /* n:\"BrtEndColorScale14\", */ T:-1 },\n\t0x0487: { /* n:\"BrtBeginSxrules14\", */ T:1 },\n\t0x0488: { /* n:\"BrtEndSxrules14\", */ T:-1 },\n\t0x0489: { /* n:\"BrtBeginPRule14\", */ T:1 },\n\t0x048A: { /* n:\"BrtEndPRule14\", */ T:-1 },\n\t0x048B: { /* n:\"BrtBeginPRFilters14\", */ T:1 },\n\t0x048C: { /* n:\"BrtEndPRFilters14\", */ T:-1 },\n\t0x048D: { /* n:\"BrtBeginPRFilter14\", */ T:1 },\n\t0x048E: { /* n:\"BrtEndPRFilter14\", */ T:-1 },\n\t0x048F: { /* n:\"BrtBeginPRFItem14\", */ T:1 },\n\t0x0490: { /* n:\"BrtEndPRFItem14\", */ T:-1 },\n\t0x0491: { /* n:\"BrtBeginCellIgnoreECs14\", */ T:1 },\n\t0x0492: { /* n:\"BrtEndCellIgnoreECs14\", */ T:-1 },\n\t0x0493: { /* n:\"BrtDxf14\" */ },\n\t0x0494: { /* n:\"BrtBeginDxF14s\", */ T:1 },\n\t0x0495: { /* n:\"BrtEndDxf14s\", */ T:-1 },\n\t0x0499: { /* n:\"BrtFilter14\" */ },\n\t0x049A: { /* n:\"BrtBeginCustomFilters14\", */ T:1 },\n\t0x049C: { /* n:\"BrtCustomFilter14\" */ },\n\t0x049D: { /* n:\"BrtIconFilter14\" */ },\n\t0x049E: { /* n:\"BrtPivotCacheConnectionName\" */ },\n\t0x0800: { /* n:\"BrtBeginDecoupledPivotCacheIDs\", */ T:1 },\n\t0x0801: { /* n:\"BrtEndDecoupledPivotCacheIDs\", */ T:-1 },\n\t0x0802: { /* n:\"BrtDecoupledPivotCacheID\" */ },\n\t0x0803: { /* n:\"BrtBeginPivotTableRefs\", */ T:1 },\n\t0x0804: { /* n:\"BrtEndPivotTableRefs\", */ T:-1 },\n\t0x0805: { /* n:\"BrtPivotTableRef\" */ },\n\t0x0806: { /* n:\"BrtSlicerCacheBookPivotTables\" */ },\n\t0x0807: { /* n:\"BrtBeginSxvcells\", */ T:1 },\n\t0x0808: { /* n:\"BrtEndSxvcells\", */ T:-1 },\n\t0x0809: { /* n:\"BrtBeginSxRow\", */ T:1 },\n\t0x080A: { /* n:\"BrtEndSxRow\", */ T:-1 },\n\t0x080C: { /* n:\"BrtPcdCalcMem15\" */ },\n\t0x0813: { /* n:\"BrtQsi15\" */ },\n\t0x0814: { /* n:\"BrtBeginWebExtensions\", */ T:1 },\n\t0x0815: { /* n:\"BrtEndWebExtensions\", */ T:-1 },\n\t0x0816: { /* n:\"BrtWebExtension\" */ },\n\t0x0817: { /* n:\"BrtAbsPath15\" */ },\n\t0x0818: { /* n:\"BrtBeginPivotTableUISettings\", */ T:1 },\n\t0x0819: { /* n:\"BrtEndPivotTableUISettings\", */ T:-1 },\n\t0x081B: { /* n:\"BrtTableSlicerCacheIDs\" */ },\n\t0x081C: { /* n:\"BrtTableSlicerCacheID\" */ },\n\t0x081D: { /* n:\"BrtBeginTableSlicerCache\", */ T:1 },\n\t0x081E: { /* n:\"BrtEndTableSlicerCache\", */ T:-1 },\n\t0x081F: { /* n:\"BrtSxFilter15\" */ },\n\t0x0820: { /* n:\"BrtBeginTimelineCachePivotCacheIDs\", */ T:1 },\n\t0x0821: { /* n:\"BrtEndTimelineCachePivotCacheIDs\", */ T:-1 },\n\t0x0822: { /* n:\"BrtTimelineCachePivotCacheID\" */ },\n\t0x0823: { /* n:\"BrtBeginTimelineCacheIDs\", */ T:1 },\n\t0x0824: { /* n:\"BrtEndTimelineCacheIDs\", */ T:-1 },\n\t0x0825: { /* n:\"BrtBeginTimelineCacheID\", */ T:1 },\n\t0x0826: { /* n:\"BrtEndTimelineCacheID\", */ T:-1 },\n\t0x0827: { /* n:\"BrtBeginTimelinesEx\", */ T:1 },\n\t0x0828: { /* n:\"BrtEndTimelinesEx\", */ T:-1 },\n\t0x0829: { /* n:\"BrtBeginTimelineEx\", */ T:1 },\n\t0x082A: { /* n:\"BrtEndTimelineEx\", */ T:-1 },\n\t0x082B: { /* n:\"BrtWorkBookPr15\" */ },\n\t0x082C: { /* n:\"BrtPCDH15\" */ },\n\t0x082D: { /* n:\"BrtBeginTimelineStyle\", */ T:1 },\n\t0x082E: { /* n:\"BrtEndTimelineStyle\", */ T:-1 },\n\t0x082F: { /* n:\"BrtTimelineStyleElement\" */ },\n\t0x0830: { /* n:\"BrtBeginTimelineStylesheetExt15\", */ T:1 },\n\t0x0831: { /* n:\"BrtEndTimelineStylesheetExt15\", */ T:-1 },\n\t0x0832: { /* n:\"BrtBeginTimelineStyles\", */ T:1 },\n\t0x0833: { /* n:\"BrtEndTimelineStyles\", */ T:-1 },\n\t0x0834: { /* n:\"BrtBeginTimelineStyleElements\", */ T:1 },\n\t0x0835: { /* n:\"BrtEndTimelineStyleElements\", */ T:-1 },\n\t0x0836: { /* n:\"BrtDxf15\" */ },\n\t0x0837: { /* n:\"BrtBeginDxfs15\", */ T:1 },\n\t0x0838: { /* n:\"BrtEndDxfs15\", */ T:-1 },\n\t0x0839: { /* n:\"BrtSlicerCacheHideItemsWithNoData\" */ },\n\t0x083A: { /* n:\"BrtBeginItemUniqueNames\", */ T:1 },\n\t0x083B: { /* n:\"BrtEndItemUniqueNames\", */ T:-1 },\n\t0x083C: { /* n:\"BrtItemUniqueName\" */ },\n\t0x083D: { /* n:\"BrtBeginExtConn15\", */ T:1 },\n\t0x083E: { /* n:\"BrtEndExtConn15\", */ T:-1 },\n\t0x083F: { /* n:\"BrtBeginOledbPr15\", */ T:1 },\n\t0x0840: { /* n:\"BrtEndOledbPr15\", */ T:-1 },\n\t0x0841: { /* n:\"BrtBeginDataFeedPr15\", */ T:1 },\n\t0x0842: { /* n:\"BrtEndDataFeedPr15\", */ T:-1 },\n\t0x0843: { /* n:\"BrtTextPr15\" */ },\n\t0x0844: { /* n:\"BrtRangePr15\" */ },\n\t0x0845: { /* n:\"BrtDbCommand15\" */ },\n\t0x0846: { /* n:\"BrtBeginDbTables15\", */ T:1 },\n\t0x0847: { /* n:\"BrtEndDbTables15\", */ T:-1 },\n\t0x0848: { /* n:\"BrtDbTable15\" */ },\n\t0x0849: { /* n:\"BrtBeginDataModel\", */ T:1 },\n\t0x084A: { /* n:\"BrtEndDataModel\", */ T:-1 },\n\t0x084B: { /* n:\"BrtBeginModelTables\", */ T:1 },\n\t0x084C: { /* n:\"BrtEndModelTables\", */ T:-1 },\n\t0x084D: { /* n:\"BrtModelTable\" */ },\n\t0x084E: { /* n:\"BrtBeginModelRelationships\", */ T:1 },\n\t0x084F: { /* n:\"BrtEndModelRelationships\", */ T:-1 },\n\t0x0850: { /* n:\"BrtModelRelationship\" */ },\n\t0x0851: { /* n:\"BrtBeginECTxtWiz15\", */ T:1 },\n\t0x0852: { /* n:\"BrtEndECTxtWiz15\", */ T:-1 },\n\t0x0853: { /* n:\"BrtBeginECTWFldInfoLst15\", */ T:1 },\n\t0x0854: { /* n:\"BrtEndECTWFldInfoLst15\", */ T:-1 },\n\t0x0855: { /* n:\"BrtBeginECTWFldInfo15\", */ T:1 },\n\t0x0856: { /* n:\"BrtFieldListActiveItem\" */ },\n\t0x0857: { /* n:\"BrtPivotCacheIdVersion\" */ },\n\t0x0858: { /* n:\"BrtSXDI15\" */ },\n\t0x0859: { /* n:\"BrtBeginModelTimeGroupings\", */ T:1 },\n\t0x085A: { /* n:\"BrtEndModelTimeGroupings\", */ T:-1 },\n\t0x085B: { /* n:\"BrtBeginModelTimeGrouping\", */ T:1 },\n\t0x085C: { /* n:\"BrtEndModelTimeGrouping\", */ T:-1 },\n\t0x085D: { /* n:\"BrtModelTimeGroupingCalcCol\" */ },\n\t0x0C00: { /* n:\"BrtUid\" */ },\n\t0x0C01: { /* n:\"BrtRevisionPtr\" */ },\n\t0x1000: { /* n:\"BrtBeginDynamicArrayPr\", */ T:1 },\n\t0x1001: { /* n:\"BrtEndDynamicArrayPr\", */ T:-1 },\n\t0x138A: { /* n:\"BrtBeginRichValueBlock\", */ T:1 },\n\t0x138B: { /* n:\"BrtEndRichValueBlock\", */ T:-1 },\n\t0x13D9: { /* n:\"BrtBeginRichFilters\", */ T:1 },\n\t0x13DA: { /* n:\"BrtEndRichFilters\", */ T:-1 },\n\t0x13DB: { /* n:\"BrtRichFilter\" */ },\n\t0x13DC: { /* n:\"BrtBeginRichFilterColumn\", */ T:1 },\n\t0x13DD: { /* n:\"BrtEndRichFilterColumn\", */ T:-1 },\n\t0x13DE: { /* n:\"BrtBeginCustomRichFilters\", */ T:1 },\n\t0x13DF: { /* n:\"BrtEndCustomRichFilters\", */ T:-1 },\n\t0x13E0: { /* n:\"BrtCustomRichFilter\" */ },\n\t0x13E1: { /* n:\"BrtTop10RichFilter\" */ },\n\t0x13E2: { /* n:\"BrtDynamicRichFilter\" */ },\n\t0x13E4: { /* n:\"BrtBeginRichSortCondition\", */ T:1 },\n\t0x13E5: { /* n:\"BrtEndRichSortCondition\", */ T:-1 },\n\t0x13E6: { /* n:\"BrtRichFilterDateGroupItem\" */ },\n\t0x13E7: { /* n:\"BrtBeginCalcFeatures\", */ T:1 },\n\t0x13E8: { /* n:\"BrtEndCalcFeatures\", */ T:-1 },\n\t0x13E9: { /* n:\"BrtCalcFeature\" */ },\n\t0x13EB: { /* n:\"BrtExternalLinksPr\" */ },\n\t0xFFFF: { n:\"\" }\n};\n\n/* [MS-XLS] 2.3 Record Enumeration (and other sources) */\nvar XLSRecordEnum = {\n\t/* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */\n\t0x0006: { /* n:\"Formula\", */ f:parse_Formula },\n\t0x000a: { /* n:\"EOF\", */ f:parsenoop2 },\n\t0x000c: { /* n:\"CalcCount\", */ f:parseuint16 }, //\n\t0x000d: { /* n:\"CalcMode\", */ f:parseuint16 }, //\n\t0x000e: { /* n:\"CalcPrecision\", */ f:parsebool }, //\n\t0x000f: { /* n:\"CalcRefMode\", */ f:parsebool }, //\n\t0x0010: { /* n:\"CalcDelta\", */ f:parse_Xnum }, //\n\t0x0011: { /* n:\"CalcIter\", */ f:parsebool }, //\n\t0x0012: { /* n:\"Protect\", */ f:parsebool },\n\t0x0013: { /* n:\"Password\", */ f:parseuint16 },\n\t0x0014: { /* n:\"Header\", */ f:parse_XLHeaderFooter },\n\t0x0015: { /* n:\"Footer\", */ f:parse_XLHeaderFooter },\n\t0x0017: { /* n:\"ExternSheet\", */ f:parse_ExternSheet },\n\t0x0018: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t0x0019: { /* n:\"WinProtect\", */ f:parsebool },\n\t0x001a: { /* n:\"VerticalPageBreaks\", */ },\n\t0x001b: { /* n:\"HorizontalPageBreaks\", */ },\n\t0x001c: { /* n:\"Note\", */ f:parse_Note },\n\t0x001d: { /* n:\"Selection\", */ },\n\t0x0022: { /* n:\"Date1904\", */ f:parsebool },\n\t0x0023: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t0x0026: { /* n:\"LeftMargin\", */ f:parse_Xnum }, // *\n\t0x0027: { /* n:\"RightMargin\", */ f:parse_Xnum }, // *\n\t0x0028: { /* n:\"TopMargin\", */ f:parse_Xnum }, // *\n\t0x0029: { /* n:\"BottomMargin\", */ f:parse_Xnum }, // *\n\t0x002a: { /* n:\"PrintRowCol\", */ f:parsebool },\n\t0x002b: { /* n:\"PrintGrid\", */ f:parsebool },\n\t0x002f: { /* n:\"FilePass\", */ f:parse_FilePass },\n\t0x0031: { /* n:\"Font\", */ f:parse_Font },\n\t0x0033: { /* n:\"PrintSize\", */ f:parseuint16 },\n\t0x003c: { /* n:\"Continue\", */ },\n\t0x003d: { /* n:\"Window1\", */ f:parse_Window1 },\n\t0x0040: { /* n:\"Backup\", */ f:parsebool },\n\t0x0041: { /* n:\"Pane\", */ f:parse_Pane },\n\t0x0042: { /* n:\"CodePage\", */ f:parseuint16 },\n\t0x004d: { /* n:\"Pls\", */ },\n\t0x0050: { /* n:\"DCon\", */ },\n\t0x0051: { /* n:\"DConRef\", */ },\n\t0x0052: { /* n:\"DConName\", */ },\n\t0x0055: { /* n:\"DefColWidth\", */ f:parseuint16 },\n\t0x0059: { /* n:\"XCT\", */ },\n\t0x005a: { /* n:\"CRN\", */ },\n\t0x005b: { /* n:\"FileSharing\", */ },\n\t0x005c: { /* n:\"WriteAccess\", */ f:parse_WriteAccess },\n\t0x005d: { /* n:\"Obj\", */ f:parse_Obj },\n\t0x005e: { /* n:\"Uncalced\", */ },\n\t0x005f: { /* n:\"CalcSaveRecalc\", */ f:parsebool }, //\n\t0x0060: { /* n:\"Template\", */ },\n\t0x0061: { /* n:\"Intl\", */ },\n\t0x0063: { /* n:\"ObjProtect\", */ f:parsebool },\n\t0x007d: { /* n:\"ColInfo\", */ f:parse_ColInfo },\n\t0x0080: { /* n:\"Guts\", */ f:parse_Guts },\n\t0x0081: { /* n:\"WsBool\", */ f:parse_WsBool },\n\t0x0082: { /* n:\"GridSet\", */ f:parseuint16 },\n\t0x0083: { /* n:\"HCenter\", */ f:parsebool },\n\t0x0084: { /* n:\"VCenter\", */ f:parsebool },\n\t0x0085: { /* n:\"BoundSheet8\", */ f:parse_BoundSheet8 },\n\t0x0086: { /* n:\"WriteProtect\", */ },\n\t0x008c: { /* n:\"Country\", */ f:parse_Country },\n\t0x008d: { /* n:\"HideObj\", */ f:parseuint16 },\n\t0x0090: { /* n:\"Sort\", */ },\n\t0x0092: { /* n:\"Palette\", */ f:parse_Palette },\n\t0x0097: { /* n:\"Sync\", */ },\n\t0x0098: { /* n:\"LPr\", */ },\n\t0x0099: { /* n:\"DxGCol\", */ },\n\t0x009a: { /* n:\"FnGroupName\", */ },\n\t0x009b: { /* n:\"FilterMode\", */ },\n\t0x009c: { /* n:\"BuiltInFnGroupCount\", */ f:parseuint16 },\n\t0x009d: { /* n:\"AutoFilterInfo\", */ },\n\t0x009e: { /* n:\"AutoFilter\", */ },\n\t0x00a0: { /* n:\"Scl\", */ f:parse_Scl },\n\t0x00a1: { /* n:\"Setup\", */ f:parse_Setup },\n\t0x00ae: { /* n:\"ScenMan\", */ },\n\t0x00af: { /* n:\"SCENARIO\", */ },\n\t0x00b0: { /* n:\"SxView\", */ },\n\t0x00b1: { /* n:\"Sxvd\", */ },\n\t0x00b2: { /* n:\"SXVI\", */ },\n\t0x00b4: { /* n:\"SxIvd\", */ },\n\t0x00b5: { /* n:\"SXLI\", */ },\n\t0x00b6: { /* n:\"SXPI\", */ },\n\t0x00b8: { /* n:\"DocRoute\", */ },\n\t0x00b9: { /* n:\"RecipName\", */ },\n\t0x00bd: { /* n:\"MulRk\", */ f:parse_MulRk },\n\t0x00be: { /* n:\"MulBlank\", */ f:parse_MulBlank },\n\t0x00c1: { /* n:\"Mms\", */ f:parsenoop2 },\n\t0x00c5: { /* n:\"SXDI\", */ },\n\t0x00c6: { /* n:\"SXDB\", */ },\n\t0x00c7: { /* n:\"SXFDB\", */ },\n\t0x00c8: { /* n:\"SXDBB\", */ },\n\t0x00c9: { /* n:\"SXNum\", */ },\n\t0x00ca: { /* n:\"SxBool\", */ f:parsebool },\n\t0x00cb: { /* n:\"SxErr\", */ },\n\t0x00cc: { /* n:\"SXInt\", */ },\n\t0x00cd: { /* n:\"SXString\", */ },\n\t0x00ce: { /* n:\"SXDtr\", */ },\n\t0x00cf: { /* n:\"SxNil\", */ },\n\t0x00d0: { /* n:\"SXTbl\", */ },\n\t0x00d1: { /* n:\"SXTBRGIITM\", */ },\n\t0x00d2: { /* n:\"SxTbpg\", */ },\n\t0x00d3: { /* n:\"ObProj\", */ },\n\t0x00d5: { /* n:\"SXStreamID\", */ },\n\t0x00d7: { /* n:\"DBCell\", */ },\n\t0x00d8: { /* n:\"SXRng\", */ },\n\t0x00d9: { /* n:\"SxIsxoper\", */ },\n\t0x00da: { /* n:\"BookBool\", */ f:parseuint16 },\n\t0x00dc: { /* n:\"DbOrParamQry\", */ },\n\t0x00dd: { /* n:\"ScenarioProtect\", */ f:parsebool },\n\t0x00de: { /* n:\"OleObjectSize\", */ },\n\t0x00e0: { /* n:\"XF\", */ f:parse_XF },\n\t0x00e1: { /* n:\"InterfaceHdr\", */ f:parse_InterfaceHdr },\n\t0x00e2: { /* n:\"InterfaceEnd\", */ f:parsenoop2 },\n\t0x00e3: { /* n:\"SXVS\", */ },\n\t0x00e5: { /* n:\"MergeCells\", */ f:parse_MergeCells },\n\t0x00e9: { /* n:\"BkHim\", */ },\n\t0x00eb: { /* n:\"MsoDrawingGroup\", */ },\n\t0x00ec: { /* n:\"MsoDrawing\", */ },\n\t0x00ed: { /* n:\"MsoDrawingSelection\", */ },\n\t0x00ef: { /* n:\"PhoneticInfo\", */ },\n\t0x00f0: { /* n:\"SxRule\", */ },\n\t0x00f1: { /* n:\"SXEx\", */ },\n\t0x00f2: { /* n:\"SxFilt\", */ },\n\t0x00f4: { /* n:\"SxDXF\", */ },\n\t0x00f5: { /* n:\"SxItm\", */ },\n\t0x00f6: { /* n:\"SxName\", */ },\n\t0x00f7: { /* n:\"SxSelect\", */ },\n\t0x00f8: { /* n:\"SXPair\", */ },\n\t0x00f9: { /* n:\"SxFmla\", */ },\n\t0x00fb: { /* n:\"SxFormat\", */ },\n\t0x00fc: { /* n:\"SST\", */ f:parse_SST },\n\t0x00fd: { /* n:\"LabelSst\", */ f:parse_LabelSst },\n\t0x00ff: { /* n:\"ExtSST\", */ f:parse_ExtSST },\n\t0x0100: { /* n:\"SXVDEx\", */ },\n\t0x0103: { /* n:\"SXFormula\", */ },\n\t0x0122: { /* n:\"SXDBEx\", */ },\n\t0x0137: { /* n:\"RRDInsDel\", */ },\n\t0x0138: { /* n:\"RRDHead\", */ },\n\t0x013b: { /* n:\"RRDChgCell\", */ },\n\t0x013d: { /* n:\"RRTabId\", */ f:parseuint16a },\n\t0x013e: { /* n:\"RRDRenSheet\", */ },\n\t0x013f: { /* n:\"RRSort\", */ },\n\t0x0140: { /* n:\"RRDMove\", */ },\n\t0x014a: { /* n:\"RRFormat\", */ },\n\t0x014b: { /* n:\"RRAutoFmt\", */ },\n\t0x014d: { /* n:\"RRInsertSh\", */ },\n\t0x014e: { /* n:\"RRDMoveBegin\", */ },\n\t0x014f: { /* n:\"RRDMoveEnd\", */ },\n\t0x0150: { /* n:\"RRDInsDelBegin\", */ },\n\t0x0151: { /* n:\"RRDInsDelEnd\", */ },\n\t0x0152: { /* n:\"RRDConflict\", */ },\n\t0x0153: { /* n:\"RRDDefName\", */ },\n\t0x0154: { /* n:\"RRDRstEtxp\", */ },\n\t0x015f: { /* n:\"LRng\", */ },\n\t0x0160: { /* n:\"UsesELFs\", */ f:parsebool },\n\t0x0161: { /* n:\"DSF\", */ f:parsenoop2 },\n\t0x0191: { /* n:\"CUsr\", */ },\n\t0x0192: { /* n:\"CbUsr\", */ },\n\t0x0193: { /* n:\"UsrInfo\", */ },\n\t0x0194: { /* n:\"UsrExcl\", */ },\n\t0x0195: { /* n:\"FileLock\", */ },\n\t0x0196: { /* n:\"RRDInfo\", */ },\n\t0x0197: { /* n:\"BCUsrs\", */ },\n\t0x0198: { /* n:\"UsrChk\", */ },\n\t0x01a9: { /* n:\"UserBView\", */ },\n\t0x01aa: { /* n:\"UserSViewBegin\", */ },\n\t0x01ab: { /* n:\"UserSViewEnd\", */ },\n\t0x01ac: { /* n:\"RRDUserView\", */ },\n\t0x01ad: { /* n:\"Qsi\", */ },\n\t0x01ae: { /* n:\"SupBook\", */ f:parse_SupBook },\n\t0x01af: { /* n:\"Prot4Rev\", */ f:parsebool },\n\t0x01b0: { /* n:\"CondFmt\", */ },\n\t0x01b1: { /* n:\"CF\", */ },\n\t0x01b2: { /* n:\"DVal\", */ },\n\t0x01b5: { /* n:\"DConBin\", */ },\n\t0x01b6: { /* n:\"TxO\", */ f:parse_TxO },\n\t0x01b7: { /* n:\"RefreshAll\", */ f:parsebool }, //\n\t0x01b8: { /* n:\"HLink\", */ f:parse_HLink },\n\t0x01b9: { /* n:\"Lel\", */ },\n\t0x01ba: { /* n:\"CodeName\", */ f:parse_XLUnicodeString },\n\t0x01bb: { /* n:\"SXFDBType\", */ },\n\t0x01bc: { /* n:\"Prot4RevPass\", */ f:parseuint16 },\n\t0x01bd: { /* n:\"ObNoMacros\", */ },\n\t0x01be: { /* n:\"Dv\", */ },\n\t0x01c0: { /* n:\"Excel9File\", */ f:parsenoop2 },\n\t0x01c1: { /* n:\"RecalcId\", */ f:parse_RecalcId, r:2},\n\t0x01c2: { /* n:\"EntExU2\", */ f:parsenoop2 },\n\t0x0200: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t0x0201: { /* n:\"Blank\", */ f:parse_Blank },\n\t0x0203: { /* n:\"Number\", */ f:parse_Number },\n\t0x0204: { /* n:\"Label\", */ f:parse_Label },\n\t0x0205: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t0x0207: { /* n:\"String\", */ f:parse_String },\n\t0x0208: { /* n:\"Row\", */ f:parse_Row },\n\t0x020b: { /* n:\"Index\", */ },\n\t0x0221: { /* n:\"Array\", */ f:parse_Array },\n\t0x0225: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t0x0236: { /* n:\"Table\", */ },\n\t0x023e: { /* n:\"Window2\", */ f:parse_Window2 },\n\t0x027e: { /* n:\"RK\", */ f:parse_RK },\n\t0x0293: { /* n:\"Style\", */ },\n\t0x0418: { /* n:\"BigName\", */ },\n\t0x041e: { /* n:\"Format\", */ f:parse_Format },\n\t0x043c: { /* n:\"ContinueBigName\", */ },\n\t0x04bc: { /* n:\"ShrFmla\", */ f:parse_ShrFmla },\n\t0x0800: { /* n:\"HLinkTooltip\", */ f:parse_HLinkTooltip },\n\t0x0801: { /* n:\"WebPub\", */ },\n\t0x0802: { /* n:\"QsiSXTag\", */ },\n\t0x0803: { /* n:\"DBQueryExt\", */ },\n\t0x0804: { /* n:\"ExtString\", */ },\n\t0x0805: { /* n:\"TxtQry\", */ },\n\t0x0806: { /* n:\"Qsir\", */ },\n\t0x0807: { /* n:\"Qsif\", */ },\n\t0x0808: { /* n:\"RRDTQSIF\", */ },\n\t0x0809: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x080a: { /* n:\"OleDbConn\", */ },\n\t0x080b: { /* n:\"WOpt\", */ },\n\t0x080c: { /* n:\"SXViewEx\", */ },\n\t0x080d: { /* n:\"SXTH\", */ },\n\t0x080e: { /* n:\"SXPIEx\", */ },\n\t0x080f: { /* n:\"SXVDTEx\", */ },\n\t0x0810: { /* n:\"SXViewEx9\", */ },\n\t0x0812: { /* n:\"ContinueFrt\", */ },\n\t0x0813: { /* n:\"RealTimeData\", */ },\n\t0x0850: { /* n:\"ChartFrtInfo\", */ },\n\t0x0851: { /* n:\"FrtWrapper\", */ },\n\t0x0852: { /* n:\"StartBlock\", */ },\n\t0x0853: { /* n:\"EndBlock\", */ },\n\t0x0854: { /* n:\"StartObject\", */ },\n\t0x0855: { /* n:\"EndObject\", */ },\n\t0x0856: { /* n:\"CatLab\", */ },\n\t0x0857: { /* n:\"YMult\", */ },\n\t0x0858: { /* n:\"SXViewLink\", */ },\n\t0x0859: { /* n:\"PivotChartBits\", */ },\n\t0x085a: { /* n:\"FrtFontList\", */ },\n\t0x0862: { /* n:\"SheetExt\", */ },\n\t0x0863: { /* n:\"BookExt\", */ r:12},\n\t0x0864: { /* n:\"SXAddl\", */ },\n\t0x0865: { /* n:\"CrErr\", */ },\n\t0x0866: { /* n:\"HFPicture\", */ },\n\t0x0867: { /* n:\"FeatHdr\", */ f:parsenoop2 },\n\t0x0868: { /* n:\"Feat\", */ },\n\t0x086a: { /* n:\"DataLabExt\", */ },\n\t0x086b: { /* n:\"DataLabExtContents\", */ },\n\t0x086c: { /* n:\"CellWatch\", */ },\n\t0x0871: { /* n:\"FeatHdr11\", */ },\n\t0x0872: { /* n:\"Feature11\", */ },\n\t0x0874: { /* n:\"DropDownObjIds\", */ },\n\t0x0875: { /* n:\"ContinueFrt11\", */ },\n\t0x0876: { /* n:\"DConn\", */ },\n\t0x0877: { /* n:\"List12\", */ },\n\t0x0878: { /* n:\"Feature12\", */ },\n\t0x0879: { /* n:\"CondFmt12\", */ },\n\t0x087a: { /* n:\"CF12\", */ },\n\t0x087b: { /* n:\"CFEx\", */ },\n\t0x087c: { /* n:\"XFCRC\", */ f:parse_XFCRC, r:12 },\n\t0x087d: { /* n:\"XFExt\", */ f:parse_XFExt, r:12 },\n\t0x087e: { /* n:\"AutoFilter12\", */ },\n\t0x087f: { /* n:\"ContinueFrt12\", */ },\n\t0x0884: { /* n:\"MDTInfo\", */ },\n\t0x0885: { /* n:\"MDXStr\", */ },\n\t0x0886: { /* n:\"MDXTuple\", */ },\n\t0x0887: { /* n:\"MDXSet\", */ },\n\t0x0888: { /* n:\"MDXProp\", */ },\n\t0x0889: { /* n:\"MDXKPI\", */ },\n\t0x088a: { /* n:\"MDB\", */ },\n\t0x088b: { /* n:\"PLV\", */ },\n\t0x088c: { /* n:\"Compat12\", */ f:parsebool, r:12 },\n\t0x088d: { /* n:\"DXF\", */ },\n\t0x088e: { /* n:\"TableStyles\", */ r:12 },\n\t0x088f: { /* n:\"TableStyle\", */ },\n\t0x0890: { /* n:\"TableStyleElement\", */ },\n\t0x0892: { /* n:\"StyleExt\", */ },\n\t0x0893: { /* n:\"NamePublish\", */ },\n\t0x0894: { /* n:\"NameCmt\", */ f:parse_NameCmt, r:12 },\n\t0x0895: { /* n:\"SortData\", */ },\n\t0x0896: { /* n:\"Theme\", */ f:parse_Theme, r:12 },\n\t0x0897: { /* n:\"GUIDTypeLib\", */ },\n\t0x0898: { /* n:\"FnGrp12\", */ },\n\t0x0899: { /* n:\"NameFnGrp12\", */ },\n\t0x089a: { /* n:\"MTRSettings\", */ f:parse_MTRSettings, r:12 },\n\t0x089b: { /* n:\"CompressPictures\", */ f:parsenoop2 },\n\t0x089c: { /* n:\"HeaderFooter\", */ },\n\t0x089d: { /* n:\"CrtLayout12\", */ },\n\t0x089e: { /* n:\"CrtMlFrt\", */ },\n\t0x089f: { /* n:\"CrtMlFrtContinue\", */ },\n\t0x08a3: { /* n:\"ForceFullCalculation\", */ f:parse_ForceFullCalculation },\n\t0x08a4: { /* n:\"ShapePropsStream\", */ },\n\t0x08a5: { /* n:\"TextPropsStream\", */ },\n\t0x08a6: { /* n:\"RichTextStream\", */ },\n\t0x08a7: { /* n:\"CrtLayout12A\", */ },\n\t0x1001: { /* n:\"Units\", */ },\n\t0x1002: { /* n:\"Chart\", */ },\n\t0x1003: { /* n:\"Series\", */ },\n\t0x1006: { /* n:\"DataFormat\", */ },\n\t0x1007: { /* n:\"LineFormat\", */ },\n\t0x1009: { /* n:\"MarkerFormat\", */ },\n\t0x100a: { /* n:\"AreaFormat\", */ },\n\t0x100b: { /* n:\"PieFormat\", */ },\n\t0x100c: { /* n:\"AttachedLabel\", */ },\n\t0x100d: { /* n:\"SeriesText\", */ },\n\t0x1014: { /* n:\"ChartFormat\", */ },\n\t0x1015: { /* n:\"Legend\", */ },\n\t0x1016: { /* n:\"SeriesList\", */ },\n\t0x1017: { /* n:\"Bar\", */ },\n\t0x1018: { /* n:\"Line\", */ },\n\t0x1019: { /* n:\"Pie\", */ },\n\t0x101a: { /* n:\"Area\", */ },\n\t0x101b: { /* n:\"Scatter\", */ },\n\t0x101c: { /* n:\"CrtLine\", */ },\n\t0x101d: { /* n:\"Axis\", */ },\n\t0x101e: { /* n:\"Tick\", */ },\n\t0x101f: { /* n:\"ValueRange\", */ },\n\t0x1020: { /* n:\"CatSerRange\", */ },\n\t0x1021: { /* n:\"AxisLine\", */ },\n\t0x1022: { /* n:\"CrtLink\", */ },\n\t0x1024: { /* n:\"DefaultText\", */ },\n\t0x1025: { /* n:\"Text\", */ },\n\t0x1026: { /* n:\"FontX\", */ f:parseuint16 },\n\t0x1027: { /* n:\"ObjectLink\", */ },\n\t0x1032: { /* n:\"Frame\", */ },\n\t0x1033: { /* n:\"Begin\", */ },\n\t0x1034: { /* n:\"End\", */ },\n\t0x1035: { /* n:\"PlotArea\", */ },\n\t0x103a: { /* n:\"Chart3d\", */ },\n\t0x103c: { /* n:\"PicF\", */ },\n\t0x103d: { /* n:\"DropBar\", */ },\n\t0x103e: { /* n:\"Radar\", */ },\n\t0x103f: { /* n:\"Surf\", */ },\n\t0x1040: { /* n:\"RadarArea\", */ },\n\t0x1041: { /* n:\"AxisParent\", */ },\n\t0x1043: { /* n:\"LegendException\", */ },\n\t0x1044: { /* n:\"ShtProps\", */ f:parse_ShtProps },\n\t0x1045: { /* n:\"SerToCrt\", */ },\n\t0x1046: { /* n:\"AxesUsed\", */ },\n\t0x1048: { /* n:\"SBaseRef\", */ },\n\t0x104a: { /* n:\"SerParent\", */ },\n\t0x104b: { /* n:\"SerAuxTrend\", */ },\n\t0x104e: { /* n:\"IFmtRecord\", */ },\n\t0x104f: { /* n:\"Pos\", */ },\n\t0x1050: { /* n:\"AlRuns\", */ },\n\t0x1051: { /* n:\"BRAI\", */ },\n\t0x105b: { /* n:\"SerAuxErrBar\", */ },\n\t0x105c: { /* n:\"ClrtClient\", */ f:parse_ClrtClient },\n\t0x105d: { /* n:\"SerFmt\", */ },\n\t0x105f: { /* n:\"Chart3DBarShape\", */ },\n\t0x1060: { /* n:\"Fbi\", */ },\n\t0x1061: { /* n:\"BopPop\", */ },\n\t0x1062: { /* n:\"AxcExt\", */ },\n\t0x1063: { /* n:\"Dat\", */ },\n\t0x1064: { /* n:\"PlotGrowth\", */ },\n\t0x1065: { /* n:\"SIIndex\", */ },\n\t0x1066: { /* n:\"GelFrame\", */ },\n\t0x1067: { /* n:\"BopPopCustom\", */ },\n\t0x1068: { /* n:\"Fbi2\", */ },\n\n\t0x0000: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t0x0001: { /* n:\"BIFF2BLANK\", */ },\n\t0x0002: { /* n:\"BIFF2INT\", */ f:parse_BIFF2INT },\n\t0x0003: { /* n:\"BIFF2NUM\", */ f:parse_BIFF2NUM },\n\t0x0004: { /* n:\"BIFF2STR\", */ f:parse_BIFF2STR },\n\t0x0005: { /* n:\"BIFF2BOOLERR\", */ f:parse_BIFF2BOOLERR },\n\t0x0007: { /* n:\"String\", */ f:parse_BIFF2STRING },\n\t0x0008: { /* n:\"BIFF2ROW\", */ },\n\t0x0009: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x000b: { /* n:\"Index\", */ },\n\t0x0016: { /* n:\"ExternCount\", */ f:parseuint16 },\n\t0x001e: { /* n:\"BIFF2FORMAT\", */ f:parse_BIFF2Format },\n\t0x001f: { /* n:\"BIFF2FMTCNT\", */ }, /* 16-bit cnt of BIFF2FORMAT records */\n\t0x0020: { /* n:\"BIFF2COLINFO\", */ },\n\t0x0021: { /* n:\"Array\", */ f:parse_Array },\n\t0x0024: { /* n:\"COLWIDTH\", */ },\n\t0x0025: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t// 0x002c ??\n\t// 0x002d ??\n\t// 0x002e ??\n\t// 0x0030 FONTCOUNT: number of fonts\n\t0x0032: { /* n:\"BIFF2FONTXTRA\", */ f:parse_BIFF2FONTXTRA },\n\t// 0x0035: INFOOPTS\n\t// 0x0036: TABLE (BIFF2 only)\n\t// 0x0037: TABLE2 (BIFF2 only)\n\t// 0x0038: WNDESK\n\t// 0x0039 ??\n\t// 0x003a: BEGINPREF\n\t// 0x003b: ENDPREF\n\t0x003e: { /* n:\"BIFF2WINDOW2\", */ },\n\t// 0x003f ??\n\t// 0x0046: SHOWSCROLL\n\t// 0x0047: SHOWFORMULA\n\t// 0x0048: STATUSBAR\n\t// 0x0049: SHORTMENUS\n\t// 0x004A:\n\t// 0x004B:\n\t// 0x004C:\n\t// 0x004E:\n\t// 0x004F:\n\t// 0x0058: TOOLBAR (BIFF3)\n\n\t/* - - - */\n\t0x0034: { /* n:\"DDEObjName\", */ },\n\t0x0043: { /* n:\"BIFF2XF\", */ f:parse_BIFF2XF },\n\t0x0044: { /* n:\"BIFF2XFINDEX\", */ f:parseuint16 },\n\t0x0045: { /* n:\"BIFF2FONTCLR\", */ },\n\t0x0056: { /* n:\"BIFF4FMTCNT\", */ }, /* 16-bit cnt, similar to BIFF2 */\n\t0x007e: { /* n:\"RK\", */ }, /* Not necessarily same as 0x027e */\n\t0x007f: { /* n:\"ImData\", */ f:parse_ImData },\n\t0x0087: { /* n:\"Addin\", */ },\n\t0x0088: { /* n:\"Edg\", */ },\n\t0x0089: { /* n:\"Pub\", */ },\n\t// 0x8A\n\t// 0x8B LH: alternate menu key flag (BIFF3/4)\n\t// 0x8E\n\t0x008F: { /* n:\"BIFF4SheetInfo\", */ f:parse_BIFF4SheetInfo },\n\t0x0091: { /* n:\"Sub\", */ },\n\t// 0x93 STYLE\n\t0x0094: { /* n:\"LHRecord\", */ },\n\t0x0095: { /* n:\"LHNGraph\", */ },\n\t0x0096: { /* n:\"Sound\", */ },\n\t// 0xA2 FNPROTO: function prototypes (BIFF4)\n\t// 0xA3\n\t// 0xA8\n\t0x00a9: { /* n:\"CoordList\", */ },\n\t0x00ab: { /* n:\"GCW\", */ },\n\t0x00bc: { /* n:\"ShrFmla\", */ }, /* Not necessarily same as 0x04bc */\n\t0x00bf: { /* n:\"ToolbarHdr\", */ },\n\t0x00c0: { /* n:\"ToolbarEnd\", */ },\n\t0x00c2: { /* n:\"AddMenu\", */ },\n\t0x00c3: { /* n:\"DelMenu\", */ },\n\t0x00d6: { /* n:\"RString\", */ f:parse_RString },\n\t0x00df: { /* n:\"UDDesc\", */ },\n\t0x00ea: { /* n:\"TabIdConf\", */ },\n\t0x0162: { /* n:\"XL5Modify\", */ },\n\t0x01a5: { /* n:\"FileSharing2\", */ },\n\t0x0206: { /* n:\"Formula\", */ f:parse_Formula },\n\t0x0209: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x0218: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t0x0223: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t0x0231: { /* n:\"Font\", */ },\n\t0x0243: { /* n:\"BIFF3XF\", */ f:parse_BIFF3XF },\n\t0x0406: { /* n:\"Formula\", */ f:parse_Formula },\n\t0x0409: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x0443: { /* n:\"BIFF4XF\", */ f:parse_BIFF4XF },\n\t0x086d: { /* n:\"FeatInfo\", */ },\n\t0x0873: { /* n:\"FeatInfo11\", */ },\n\t0x0881: { /* n:\"SXAddl12\", */ },\n\t0x08c0: { /* n:\"AutoWebPub\", */ },\n\t0x08c1: { /* n:\"ListObj\", */ },\n\t0x08c2: { /* n:\"ListField\", */ },\n\t0x08c3: { /* n:\"ListDV\", */ },\n\t0x08c4: { /* n:\"ListCondFmt\", */ },\n\t0x08c5: { /* n:\"ListCF\", */ },\n\t0x08c6: { /* n:\"FMQry\", */ },\n\t0x08c7: { /* n:\"FMSQry\", */ },\n\t0x08c8: { /* n:\"PLV\", */ },\n\t0x08c9: { /* n:\"LnExt\", */ },\n\t0x08ca: { /* n:\"MkrExt\", */ },\n\t0x08cb: { /* n:\"CrtCoopt\", */ },\n\t0x08d6: { /* n:\"FRTArchId$\", */ r:12 },\n\n\t/* --- multiplan 4 records --- */\n\t0x0065: { /* n:\"\", */ }, // one per window\n\t0x0066: { /* n:\"\", */ }, // calc settings\n\t0x0069: { /* n:\"\", */ }, // print header\n\t0x006a: { /* n:\"\", */ }, // print footer\n\t0x006b: { /* n:\"\", */ }, // print settings\n\t0x006d: { /* n:\"\", */ }, // one per window\n\t0x0070: { /* n:\"\", */ }, // includes default col width\n\t0x0072: { /* n:\"\", */ }, // includes selected cell\n\n\t0x7262: {}\n};\n\nfunction write_biff_rec(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar t/*:number*/ = type;\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(/*:: len != null &&*/len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = type;\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\twrite_Bes(val, t || 'b', out);\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_comments_biff2(ba/*:BufArray*/, comments/*:Array<[Comment[], number, number]>*/) {\n\tcomments.forEach(function(data) {\n\t\tvar text = data[0].map(function(cc) { return cc.t; }).join(\"\");\n\t\t// TODO: should '\\n' be translated to '\\r' to correct for Excel 5.0 bug when exporting to BIFF2/3 ?\n\t\tif(text.length <= 2048) return write_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text, data[1], data[2]));\n\t\twrite_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text.slice(0, 2048), data[1], data[2], text.length));\n\t\tfor(var i = 2048; i < text.length; i += 2048)\n\t\t\twrite_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text.slice(i, Math.min(i+2048, text.length)), -1, -1, Math.min(2048, text.length - i)));\n\t});\n}\n\n/* TODO: BIFF3/4 use different records -- see comments*/\nfunction write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/) {\n\tvar ifmt = 0;\n\tif(cell.z != null) {\n\t\tifmt = opts._BIFF2FmtTable.indexOf(cell.z);\n\t\tif(ifmt == -1) { opts._BIFF2FmtTable.push(cell.z); ifmt = opts._BIFF2FmtTable.length - 1; }\n\t}\n\tvar ixfe = 0;\n\tif(cell.z != null) {\n\t\tfor(; ixfe < opts.cellXfs.length; ++ixfe) if(opts.cellXfs[ixfe].numFmtId == ifmt) break;\n\t\tif(ixfe == opts.cellXfs.length) opts.cellXfs.push({numFmtId: ifmt});\n\t}\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;\n\t\t\tif(opts.biff == 2 && (v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\t// 0x027E (RK) in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v, ixfe, ifmt));\n\t\t\telse if(isNaN(v))\n\t\t\t\t// 0x0205 in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x24, \"e\")); // #NUM!\n\t\t\telse if(!isFinite(v))\n\t\t\t\t// 0x0205 in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x07, \"e\")); // #DIV/0!\n\t\t\telse\n\t\t\t\t// 0x0203 in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v, ixfe, ifmt));\n\t\t\treturn;\n\t\tcase 'b': case 'e':\n\t\t\t// 0x0205 in BIFF3/4\n\t\t\twrite_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\t// 0x0204 in BIFF3/4\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v == null ? \"\" : String(cell.v).slice(0,255)));\n\t\t\treturn;\n\t}\n\t// 0x0201 in BIFF3/4\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*/, opts, wb/*:Workbook*/) {\n\tvar dense = ws[\"!data\"] != null;\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), rr = \"\", cols/*:Array*/ = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t}\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\tvar row = [], comments = [];\n\t/* TODO: 0x0000 / 0x0200 dimensions? */\n\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tif(dense) row = ws[\"!data\"][R] || [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar cell = dense ? row[C] : ws[cols[C] + rr];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts, date1904);\n\t\t\tif(cell.c) comments.push([cell.c, R, C]);\n\t\t}\n\t}\n\n\t/* ... 0x12 0x19 0x13 (Password) */\n\twrite_comments_biff2(ba, comments);\n\t/* 0x3d (Window1) ... */\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i*/ = [\"General\"]; o._Fonts = [];\n\tvar body = buf_array();\n\twrite_ws_biff2(body, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);\n\n\to._BIFF2FmtTable.forEach(function(f) {\n\t\tif(o.biff <= 3) write_biff_rec(ba, 0x001E, write_BIFF2Format(f));\n\t\telse write_biff_rec(ba, 0x041E, write_BIFF4Format(f));\n\t});\n\to.cellXfs.forEach(function(xf) {\n\t\tswitch(o.biff) {\n\t\t\tcase 2: write_biff_rec(ba, 0x0043, write_BIFF2XF(xf)); break;\n\t\t\tcase 3: write_biff_rec(ba, 0x0243, write_BIFF3XF(xf)); break;\n\t\t\tcase 4: write_biff_rec(ba, 0x0443, write_BIFF4XF(xf)); break;\n\t\t}\n\t});\n\tdelete o._BIFF2FmtTable; delete o.cellXfs; delete o._Fonts;\n\n\tba.push(body.end());\n\twrite_biff_rec(ba, 0x000A);\n\treturn ba.end();\n}\n\nvar b8oid = 1, b8ocnts/*:Array<[number, number, number]>*/ = [];\nfunction write_MsoDrawingGroup() {\n\tvar buf = new_buf(82 + 8 * b8ocnts.length);\n\t/* [MS-ODRAW] 2.2.12 OfficeArtDggContainer */\n\tbuf.write_shift(2, 0x0F);\n\tbuf.write_shift(2, 0xF000);\n\tbuf.write_shift(4, 74 + 8 * b8ocnts.length);\n\t/* 2.2.48 OfficeArtFDGGBlock */\n\t{\n\t\tbuf.write_shift(2, 0);\n\t\tbuf.write_shift(2, 0xF006);\n\t\tbuf.write_shift(4, 16 + 8 * b8ocnts.length);\n\t\t/* 2.2.47 OfficeArtFDGG */\n\t\t{\n\t\t\tbuf.write_shift(4, b8oid);\n\t\t\tbuf.write_shift(4, b8ocnts.length+1);\n\t\t\tvar acc = 0; for(var i = 0; i < b8ocnts.length; ++i) acc += (b8ocnts[i] && b8ocnts[i][1] || 0); buf.write_shift(4, acc);\n\t\t\tbuf.write_shift(4, b8ocnts.length);\n\t\t}\n\t\t/* 2.2.46 OfficeArtIDCL + */\n\t\tb8ocnts.forEach(function(b8) {\n\t\t\tbuf.write_shift(4, b8[0]);\n\t\t\tbuf.write_shift(4, b8[2]);\n\t\t});\n\t}\n\t/* 2.2.9 OfficeArtFOPT */\n\t{\n\t\tbuf.write_shift(2, 0x33); // 0x03 | (3 << 4)\n\t\tbuf.write_shift(2, 0xF00B);\n\t\tbuf.write_shift(4, 0x12); // 3 * 6\n\t\t/* 2.3.21.15 Text Boolean Properties */\n\t\tbuf.write_shift(2, 0xBF); buf.write_shift(4, 0x00080008);\n\t\t/* 2.3.7.2 fillColor */\n\t\tbuf.write_shift(2, 0x0181); buf.write_shift(4, 0x08000041);\n\t\t/* 2.3.8.1 lineColor */\n\t\tbuf.write_shift(2, 0x01C0); buf.write_shift(4, 0x08000040);\n\t}\n\t/* 2.2.45 OfficeArtSplitMenuColorContainer */\n\t{\n\t\tbuf.write_shift(2, 0x40);\n\t\tbuf.write_shift(2, 0xF11E);\n\t\tbuf.write_shift(4, 16);\n\t\tbuf.write_shift(4, 0x0800000D);\n\t\tbuf.write_shift(4, 0x0800000C);\n\t\tbuf.write_shift(4, 0x08000017);\n\t\tbuf.write_shift(4, 0x100000F7);\n\t}\n\treturn buf;\n}\nfunction write_comments_biff8(ba/*:BufArray*/, comments/*:Array<[Comment[], number, number]>*/) {\n\tvar notes/*:Array*/ = [], sz = 0, pl = buf_array(), baseid = b8oid;\n\tvar _oasc;\n\tcomments.forEach(function(c, ci) {\n\t\tvar author = \"\";\n\t\tvar text = c[0].map(function(t) { if(t.a && !author) author = t.a; return t.t; }).join(\"\");\n\t\t++b8oid;\n\n\t\t/* 2.2.14 OfficeArtSpContainer */\n\t\t{\n\t\t\tvar oasc = new_buf(0x96);\n\t\t\toasc.write_shift(2, 0x0F);\n\t\t\toasc.write_shift(2, 0xF004);\n\t\t\toasc.write_shift(4, 0x96);\n\t\t\t/* 2.2.40 OfficeArtFSP */\n\t\t\t{\n\t\t\t\toasc.write_shift(2, 0xca2); // 0x02 | (0xca << 4)\n\t\t\t\toasc.write_shift(2, 0xF00A);\n\t\t\t\toasc.write_shift(4, 8);\n\t\t\t\toasc.write_shift(4, b8oid);\n\t\t\t\toasc.write_shift(4, 0xA00);\n\t\t\t}\n\t\t\t/* 2.2.9 OfficeArtFOPT */\n\t\t\t{\n\t\t\t\toasc.write_shift(2, 0xE3); // 0x03 | (14 << 4)\n\t\t\t\toasc.write_shift(2, 0xF00B);\n\t\t\t\toasc.write_shift(4, 0x54); // 14 * 6\n\t\t\t\t/* 2.3.21.1 ITxid */\n\t\t\t\toasc.write_shift(2, 0x80); oasc.write_shift(4, 0);\n\t\t\t\t/* 2.3.21.12 txdir */\n\t\t\t\toasc.write_shift(2, 0x8B); oasc.write_shift(4, 0x02);\n\t\t\t\t/* 2.3.21.15 Text Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0xBF); oasc.write_shift(4, 0x00080008);\n\t\t\t\t/* 2.3.6.30 cxk */\n\t\t\t\toasc.write_shift(2, 0x0158); oasc.l += 4;\n\t\t\t\t/* 2.3.7.2 fillColor */\n\t\t\t\toasc.write_shift(2, 0x0181); oasc.write_shift(4, 0x08000050);\n\t\t\t\t/* 2.3.7.4 fillBackColor */\n\t\t\t\toasc.write_shift(2, 0x0183); oasc.write_shift(4, 0x08000050);\n\t\t\t\t/* 2.3.7.6 fillCrMod */\n\t\t\t\toasc.write_shift(2, 0x0185); oasc.write_shift(4, 0x100000F4);\n\t\t\t\t/* 2.3.7.43 Fill Style Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0x01BF); oasc.write_shift(4, 0x00100010);\n\t\t\t\t/* 2.3.8.1 lineColor */\n\t\t\t\toasc.write_shift(2, 0x01C0); oasc.write_shift(4, 0x08000051);\n\t\t\t\t/* 2.3.8.4 lineCrMod */\n\t\t\t\toasc.write_shift(2, 0x01C3); oasc.write_shift(4, 0x100000F4);\n\t\t\t\t/* 2.3.13.2 shadowColor */\n\t\t\t\toasc.write_shift(2, 0x0201); oasc.write_shift(4, 0x08000051);\n\t\t\t\t/* 2.3.13.4 shadowCrMod */\n\t\t\t\toasc.write_shift(2, 0x0203); oasc.write_shift(4, 0x100000F4);\n\t\t\t\t/* 2.3.13.23 Shadow Style Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0x023F); oasc.write_shift(4, 0x00030001);\n\t\t\t\t/* 2.3.4.44 Group Shape Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0x03BF); oasc.write_shift(4, 0x00020000 | (c[0].hidden ? 2 : 0));\n\t\t\t}\n\t\t\t/* [MS-XLS] 2.5.193 OfficeArtClientAnchorSheet */\n\t\t\t{\n\t\t\t\toasc.l += 2;\n\t\t\t\toasc.write_shift(2, 0xF010);\n\t\t\t\toasc.write_shift(4, 0x12);\n\t\t\t\toasc.write_shift(2, 0x3); // do not move or size with cells\n\t\t\t\toasc.write_shift(2, c[2] + 2); oasc.l += 2;\n\t\t\t\toasc.write_shift(2, c[1] + 1); oasc.l += 2;\n\t\t\t\toasc.write_shift(2, c[2] + 4); oasc.l += 2;\n\t\t\t\toasc.write_shift(2, c[1] + 5); oasc.l += 2;\n\t\t\t}\n\t\t\t/* [MS-XLS] 2.5.194 OfficeArtClientData */\n\t\t\t{\n\t\t\t\toasc.l += 2;\n\t\t\t\toasc.write_shift(2, 0xF011);\n\t\t\t\toasc.l += 4;\n\t\t\t}\n\t\t\toasc.l = 0x96;\n\t\t\tif(ci == 0) /* write_biff_rec(pl, 0x003C, oasc); */ _oasc = oasc;\n\t\t\telse write_biff_rec(pl, 0x00EC, oasc);\n\t\t}\n\t\tsz += 0x96;\n\n\t\t/* [MS-XLS] 2.4.181 Obj */\n\t\t{\n\t\t\tvar obj = new_buf(52); // 22 + 26 + 4\n\t\t\t/* [MS-XLS] 2.5.143 FtCmo */\n\t\t\tobj.write_shift(2, 0x15);\n\t\t\tobj.write_shift(2, 0x12);\n\t\t\tobj.write_shift(2, 0x19);\n\t\t\tobj.write_shift(2, b8oid);\n\t\t\tobj.write_shift(2, 0);\n\t\t\tobj.l = 22;\n\t\t\t/* [MS-XLS] 2.5.149 FtNts */\n\t\t\tobj.write_shift(2, 0x0D);\n\t\t\tobj.write_shift(2, 0x16);\n\t\t\tobj.write_shift(4, 0x62726272);\n\t\t\tobj.write_shift(4, 0x95374305);\n\t\t\tobj.write_shift(4, 0x80301328);\n\t\t\tobj.write_shift(4, 0x69696904 + b8oid*256);\n\t\t\tobj.write_shift(2,0);\n\t\t\tobj.write_shift(4,0);\n\t\t\t// reserved\n\t\t\tobj.l += 4;\n\t\t\twrite_biff_rec(pl, 0x005D, obj);\n\t\t}\n\n\t\t/* [MS-XLS] 2.5.195 OfficeArtClientTextbox */\n\t\t{\n\t\t\tvar oact = new_buf(8);\n\t\t\toact.l += 2;\n\t\t\toact.write_shift(2, 0xF00D);\n\t\t\toact.l += 4;\n\t\t\twrite_biff_rec(pl, 0x00EC, oact);\n\t\t}\n\t\tsz += 8;\n\n\t\t/* [MS-XLS] 2.4.329 TxO */\n\t\t{\n\t\t\tvar txo = new_buf(18);\n\t\t\ttxo.write_shift(2, 0x12);\n\t\t\ttxo.l += 8;\n\t\t\ttxo.write_shift(2, text.length);\n\t\t\ttxo.write_shift(2, 0x10);\n\t\t\ttxo.l += 4;\n\t\t\twrite_biff_rec(pl, 0x01b6, txo);\n\t\t\t/* text continue record TODO: switch to wide strings */\n\t\t\t{\n\t\t\t\tvar cont = new_buf(1 + text.length);\n\t\t\t\tcont.write_shift(1, 0);\n\t\t\t\tcont.write_shift(text.length, text, \"sbcs\");\n\t\t\t\twrite_biff_rec(pl, 0x003C, cont);\n\t\t\t}\n\t\t\t/* formatting continue records */\n\t\t\t{\n\t\t\t\tvar conf = new_buf(0x10);\n\t\t\t\tconf.l += 8;\n\t\t\t\tconf.write_shift(2, text.length);\n\t\t\t\tconf.l += 6;\n\t\t\t\twrite_biff_rec(pl, 0x003C, conf);\n\t\t\t}\n\t\t}\n\n\t\t/* 2.4.179 Note */\n\t\t{\n\t\t\tvar notesh = new_buf(12 + author.length);\n\t\t\tnotesh.write_shift(2, c[1]);\n\t\t\tnotesh.write_shift(2, c[2]);\n\t\t\tnotesh.write_shift(2, 0 | (c[0].hidden ? 0 : 2));\n\t\t\tnotesh.write_shift(2, b8oid);\n\t\t\tnotesh.write_shift(2, author.length);\n\t\t\tnotesh.write_shift(1, 0);\n\t\t\tnotesh.write_shift(author.length, author, \"sbcs\");\n\t\t\tnotesh.l ++;\n\t\t\tnotes.push(notesh);\n\t\t}\n\t});\n\t/* [MS-ODRAW] 2.2.13 OfficeArtDgContainer */\n\t{\n\t\tvar hdr = new_buf(80);\n\t\thdr.write_shift(2, 0x0F);\n\t\thdr.write_shift(2, 0xF002);\n\t\thdr.write_shift(4, sz + hdr.length - 8);\n\t\t/* [MS-ODRAW] 2.2.49 OfficeArtFDG */\n\t\t{\n\t\t\thdr.write_shift(2, 0x10);\n\t\t\thdr.write_shift(2, 0xF008);\n\t\t\thdr.write_shift(4, 0x08);\n\t\t\thdr.write_shift(4, comments.length + 1);\n\t\t\thdr.write_shift(4, b8oid);\n\t\t}\n\t\t/* [MS-ODRAW] 2.2.16 OfficeArtSpgrContainer */\n\t\t{\n\t\t\thdr.write_shift(2, 0x0f);\n\t\t\thdr.write_shift(2, 0xF003);\n\t\t\thdr.write_shift(4, sz + 0x30);\n\t\t\t/* [MS-ODRAW] 2.2.14 OfficeArtSpContainer */\n\t\t\t{\n\t\t\t\thdr.write_shift(2, 0x0f);\n\t\t\t\thdr.write_shift(2, 0xF004);\n\t\t\t\thdr.write_shift(4, 0x28);\n\t\t\t\t/* [MS-ODRAW] 2.2.38 OfficeArtFSPGR */\n\t\t\t\t{\n\t\t\t\t\thdr.write_shift(2, 0x01);\n\t\t\t\t\thdr.write_shift(2, 0xF009);\n\t\t\t\t\thdr.write_shift(4, 0x10);\n\t\t\t\t\thdr.l += 16;\n\t\t\t\t}\n\t\t\t\t/* [MS-ODRAW] 2.2.40 OfficeArtFSP */\n\t\t\t\t{\n\t\t\t\t\thdr.write_shift(2, 0x02);\n\t\t\t\t\thdr.write_shift(2, 0xF00A);\n\t\t\t\t\thdr.write_shift(4, 0x08);\n\t\t\t\t\thdr.write_shift(4, baseid);\n\t\t\t\t\thdr.write_shift(4, 0x05);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\twrite_biff_rec(ba, 0x00EC, /* hdr */ _oasc ? bconcat([hdr, _oasc]) : hdr);\n\t}\n\tba.push(pl.end());\n\tnotes.forEach(function(n) { write_biff_rec(ba, 0x001C, n); });\n\tb8ocnts.push([baseid, comments.length + 1, b8oid]);\n\t++b8oid;\n}\n\nfunction write_FONTS_biff8(ba, data, opts) {\n\twrite_biff_rec(ba, 0x0031 /* Font */, write_Font({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Arial\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}, opts));\n}\n\n\nfunction write_FMTS_biff8(ba, NF/*:?SSFTable*/, opts) {\n\tif(!NF) return;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_biff_rec(ba, 0x041E /* Format */, write_Format(i, NF[i], opts));\n\t});\n}\n\nfunction write_FEAT(ba, ws) {\n\t/* [MS-XLS] 2.4.112 */\n\tvar o = new_buf(19);\n\to.write_shift(4, 0x867); o.write_shift(4, 0); o.write_shift(4, 0);\n\to.write_shift(2, 3); o.write_shift(1, 1); o.write_shift(4, 0);\n\twrite_biff_rec(ba, 0x0867 /* FeatHdr */, o);\n\t/* [MS-XLS] 2.4.111 */\n\to = new_buf(39);\n\to.write_shift(4, 0x868); o.write_shift(4, 0); o.write_shift(4, 0);\n\to.write_shift(2, 3); o.write_shift(1, 0); o.write_shift(4, 0);\n\to.write_shift(2, 1); o.write_shift(4, 4); o.write_shift(2, 0);\n\twrite_Ref8U(safe_decode_range(ws['!ref']||\"A1\"), o);\n\to.write_shift(4, 4);\n\twrite_biff_rec(ba, 0x0868 /* Feat */, o);\n}\n\nfunction write_CELLXFS_biff8(ba, opts) {\n\tfor(var i = 0; i < 16; ++i) write_biff_rec(ba, 0x00e0 /* XF */, write_XF({numFmtId:0, style:true}, 0, opts));\n\topts.cellXfs.forEach(function(c) {\n\t\twrite_biff_rec(ba, 0x00e0 /* XF */, write_XF(c, 0, opts));\n\t});\n}\n\nfunction write_ws_biff8_hlinks(ba/*:BufArray*/, ws) {\n\tfor(var R=0; R*/ = [];\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\");\n\tvar MAX_ROWS = b8 ? 65536 : 16384;\n\tif(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, 0x000d /* CalcMode */, writeuint16(1));\n\twrite_biff_rec(ba, 0x000c /* CalcCount */, writeuint16(100));\n\twrite_biff_rec(ba, 0x000f /* CalcRefMode */, writebool(true));\n\twrite_biff_rec(ba, 0x0011 /* CalcIter */, writebool(false));\n\twrite_biff_rec(ba, 0x0010 /* CalcDelta */, write_Xnum(0.001));\n\twrite_biff_rec(ba, 0x005f /* CalcSaveRecalc */, writebool(true));\n\twrite_biff_rec(ba, 0x002a /* PrintRowCol */, writebool(false));\n\twrite_biff_rec(ba, 0x002b /* PrintGrid */, writebool(false));\n\twrite_biff_rec(ba, 0x0082 /* GridSet */, writeuint16(1));\n\twrite_biff_rec(ba, 0x0080 /* Guts */, write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, 0x0083 /* HCenter */, writebool(false));\n\twrite_biff_rec(ba, 0x0084 /* VCenter */, writebool(false));\n\t/* ... */\n\tif(b8) write_ws_cols_biff8(ba, ws[\"!cols\"]);\n\t/* ... */\n\twrite_biff_rec(ba, 0x0200 /* Dimensions */, write_Dimensions(range, opts));\n\t/* ... */\n\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\tif(b8) ws['!links'] = [];\n\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tvar comments = [];\n\tvar row = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tif(dense) row = ws[\"!data\"][R] || [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? row[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts, date1904);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t\tif(cell.c) comments.push([cell.c, R, C]);\n\t\t}\n\t}\n\tvar cname/*:string*/ = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8) write_comments_biff8(ba, comments); else write_comments_biff2(ba, comments);\n\t/* ... */\n\tif(b8) write_biff_rec(ba, 0x023e /* Window2 */, write_Window2((_WB.Views||[])[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, 0x00e5 /* MergeCells */, write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, 0x000a /* EOF */);\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {\n\tvar A = buf_array();\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheets/*:Array*/ = (_WB.Sheets||[]);\n\tvar _wb/*:WBProps*/ = /*::((*/_WB.WBProps||{/*::CodeName:\"ThisWorkbook\"*/}/*:: ):any)*/;\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, 0x0087 /* Addin */);\n\twrite_biff_rec(A, 0x00e1 /* InterfaceHdr */, b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, 0x00c1 /* Mms */, writezeroes(2));\n\tif(b5) write_biff_rec(A, 0x00bf /* ToolbarHdr */);\n\tif(b5) write_biff_rec(A, 0x00c0 /* ToolbarEnd */);\n\twrite_biff_rec(A, 0x00e2 /* InterfaceEnd */);\n\twrite_biff_rec(A, 0x005c /* WriteAccess */, write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, 0x0042 /* CodePage */, writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, 0x0161 /* DSF */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01c0 /* Excel9File */);\n\twrite_biff_rec(A, 0x013d /* RRTabId */, write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, 0x00d3 /* ObProj */);\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname/*:string*/ = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, 0x009c /* BuiltInFnGroupCount */, writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, 0x0019 /* WinProtect */, writebool(false));\n\twrite_biff_rec(A, 0x0012 /* Protect */, writebool(false));\n\twrite_biff_rec(A, 0x0013 /* Password */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01af /* Prot4Rev */, writebool(false));\n\tif(b8) write_biff_rec(A, 0x01bc /* Prot4RevPass */, writeuint16(0));\n\twrite_biff_rec(A, 0x003d /* Window1 */, write_Window1(opts));\n\twrite_biff_rec(A, 0x0040 /* Backup */, writebool(false));\n\twrite_biff_rec(A, 0x008d /* HideObj */, writeuint16(0));\n\twrite_biff_rec(A, 0x0022 /* Date1904 */, writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, 0x000e /* CalcPrecision */, writebool(true));\n\tif(b8) write_biff_rec(A, 0x01b7 /* RefreshAll */, writebool(false));\n\twrite_biff_rec(A, 0x00DA /* BookBool */, writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, 0x0160 /* UsesELFs */, writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, 0x008C /* Country */, write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture */\n\n\t/* BIFF8: MsoDrawingGroup [*Continue] */\n\tif(b8 && b8ocnts.length) write_biff_rec(C, 0x00EB /* MsoDrawingGroup */, write_MsoDrawingGroup());\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, 0x00FC /* SST */, write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, 0x000A /* EOF */);\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet/*:WBWSProp*/ = _sheets[j] || ({}/*:any*/);\n\t\twrite_biff_rec(B, 0x0085 /* BoundSheet8 */, write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn bconcat(out);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\tb8oid = 1; b8ocnts = [];\n\to.Strings = /*::((*/[]/*:: :any):SST)*/; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn bconcat(bufs);\n}\n\nfunction write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tfor(var i = 0; i <= wb.SheetNames.length; ++i) {\n\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\tif(range.e.c > 255) { // note: 255 is IV\n\t\t\tif(typeof console != \"undefined\" && console.error) console.error(\"Worksheet '\" + wb.SheetNames[i] + \"' extends beyond column IV (255). Data may be lost.\");\n\t\t}\n\t}\n\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nfunction html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar dense = (opts.dense != null) ? opts.dense : DENSE;\n\tvar ws/*:Worksheet*/ = ({}/*:any*/); if(dense) ws[\"!data\"] = [];\n\tstr = str_remove_ng(str, \"\");\n\tvar mtch/*:any*/ = str.match(/\");\n\tvar mtch2/*:any*/ = str.match(/<\\/table/i);\n\tvar i/*:number*/ = mtch.index, j/*:number*/ = mtch2 && mtch2.index || str.length;\n\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n\tvar R = -1, C = 0, RS = 0, CS = 0;\n\tvar range/*:Range*/ = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\tvar merges/*:Array*/ = [];\n\tfor(i = 0; i < rows.length; ++i) {\n\t\tvar row = rows[i].trim();\n\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\tif(hd == \"/i);\n\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\tvar cell = cells[j].trim();\n\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar _merge/*:Range*/ = merges[midx];\n\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t}\n\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\tvar _t/*:string*/ = tag.t || tag[\"data-t\"] || \"\";\n\t\t\t/* TODO: generate stub cells */\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tm = htmldecode(m);\n\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tvar o/*:Cell*/ = {t:'s', v:m};\n\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\to = ({t:'d', v:parseDate(m)}/*:any*/);\n\t\t\t\tif(opts.UTC === false) o.v = utc_to_local(o.v);\n\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t}\n\t\t\tif(o.cellText !== false) o.w = m;\n\t\t\tif(dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = o; }\n\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\tC += CS;\n\t\t}\n\t}\n\tws['!ref'] = encode_range(range);\n\tif(merges.length) ws[\"!merges\"] = merges;\n\treturn ws;\n}\nfunction make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar M/*:Array*/ = (ws['!merges'] ||[]);\n\tvar oo/*:Array*/ = [];\n\tvar sp = ({}/*:any*/);\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar RS = 0, CS = 0;\n\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t}\n\t\tif(RS < 0) continue;\n\t\tvar coord = encode_col(C) + encode_row(R);\n\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t/* TODO: html entities */\n\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\tsp = ({}/*:any*/);\n\t\tif(RS > 1) sp.rowspan = RS;\n\t\tif(CS > 1) sp.colspan = CS;\n\t\tif(o.editable) w = '' + w + '';\n\t\telse if(cell) {\n\t\t\tsp[\"data-t\"] = cell && cell.t || 'z';\n\t\t\t// note: data-v is unaffected by the timezone interpretation\n\t\t\tif(cell.v != null) sp[\"data-v\"] = escapehtml(cell.v instanceof Date ? cell.v.toISOString() : cell.v);\n\t\t\tif(cell.z != null) sp[\"data-z\"] = cell.z;\n\t\t\tif(cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '' + w + '';\n\t\t}\n\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\too.push(writextag('td', w, sp));\n\t}\n\tvar preamble = \"\";\n\treturn preamble + oo.join(\"\") + \"\";\n}\n\nvar HTML_BEGIN = 'SheetJS Table Export';\nvar HTML_END = '';\n\nfunction html_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\tvar mtch = str_match_xml_ig(str, \"table\");\n\tif(!mtch || mtch.length == 0) throw new Error(\"Invalid HTML: could not find
\");\n\tif(mtch.length == 1) {\n\t\tvar w = sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);\n\t\tw.bookType = \"html\";\n\t\treturn w;\n\t}\n\tvar wb = book_new();\n\tmtch.forEach(function(s, idx) { book_append_sheet(wb, html_to_sheet(s, opts), \"Sheet\" + (idx+1)); });\n\twb.bookType = \"html\";\n\treturn wb;\n}\n\nfunction make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\treturn out.join(\"\") + '';\n}\n\nfunction sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:?Workbook*/)/*:string*/ {\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tvar out/*:Array*/ = [header];\n\tvar r = decode_range(ws['!ref'] || \"A1\");\n\tout.push(make_html_preamble(ws, r, o));\n\tif(ws[\"!ref\"]) for(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\tout.push(\"
\" + footer);\n\treturn out.join(\"\");\n}\n\nfunction sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar rows/*:HTMLCollection*/ = table.rows;\n\tif(!rows) {\n\t\t/* not an HTML TABLE */\n\t\tthrow \"Unsupported origin when \" + table.tagName + \" is not a TABLE\";\n\t}\n\n\tvar opts = _opts || {};\n\tvar dense = ws[\"!data\"] != null;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range/*:Range*/ = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range/*:Range*/ = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges/*:Array*/ = [], midx = 0;\n\tvar rowinfo/*:Array*/ = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row/*:HTMLTableRowElement*/ = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts/*:HTMLCollection*/ = (row.cells);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt/*:HTMLTableCellElement*/ = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v/*:?string*/ = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z/*:?string*/ = elt.getAttribute('data-z') || elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m/*:Range*/ = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o/*:Cell*/ = {t:'s', v:v};\n\t\t\tvar _t/*:string*/ = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)}/*:any*/);\n\t\t\t\t\tif(opts.UTC) o.v = local_to_utc(o.v);\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\t/* The first link is used. Links are assumed to be fully specified.\n\t\t\t * TODO: The right way to process relative links is to make a new */\n\t\t\tvar l = \"\", Aelts = elt.getElementsByTagName(\"A\");\n\t\t\tif(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti)\tif(Aelts[Aelti].hasAttribute(\"href\")) {\n\t\t\t\tl = Aelts[Aelti].getAttribute(\"href\"); if(l.charAt(0) != \"#\") break;\n\t\t\t}\n\t\t\tif(l && l.charAt(0) != \"#\" &&\tl.slice(0, 11).toLowerCase() != 'javascript:') o.l = ({ Target: l });\n\t\t\tif(dense) { if(!ws[\"!data\"][R + or_R]) ws[\"!data\"][R + or_R] = []; ws[\"!data\"][R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tvar ws/*:Worksheet*/ = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = [];\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {\n\tvar o = sheet_to_workbook(parse_dom_table(table, opts), opts);\n\t//o.bookType = \"dom\"; // TODO: define a type for this\n\treturn o;\n}\n\nfunction is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {\n\tvar display/*:string*/ = '';\n\tvar get_computed_style/*:?function*/ = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style && element.style.display;\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element/*:HTMLElement*/)/*:?function*/ {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nfunction parse_text_p(text/*:string*//*::, tag*/)/*:Array*/ {\n\t/* 6.1.2 White Space Characters */\n\tvar fixed = text\n\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t.replace(//g,\" \")\n\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t.replace(//g,\"\\n\");\n\tvar v = unescapexml(fixed.replace(/<[^<>]*>/g,\"\"));\n\n\treturn [v];\n}\n\n/* Note: ODS can stick styles in content.xml or styles.xml, FODS blurs lines */\nfunction parse_ods_styles(d/*:string*/, _opts, _nfm) {\n\tvar number_format_map = _nfm || {};\n\tvar str = xlml_normalize(d);\n\txlmlregex.lastIndex = 0;\n\tstr = remove_doctype(str_remove_ng(str, \"\"));\n\tvar Rn, NFtag, NF = \"\", tNF = \"\", y, etpos = 0, tidx = -1, infmt = false, payload = \"\";\n\twhile((Rn = xlmlregex.exec(str))) {\n\t\tswitch((Rn[3]=Rn[3].replace(/_[\\s\\S]*$/,\"\"))) {\n\t\t/* Number Format Definitions */\n\t\tcase 'number-style': // 16.29.2\n\t\tcase 'currency-style': // 16.29.8\n\t\tcase 'percentage-style': // 16.29.10\n\t\tcase 'date-style': // 16.29.11\n\t\tcase 'time-style': // 16.29.19\n\t\tcase 'text-style': // 16.29.26\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tinfmt = false;\n\t\t\t\tif(NFtag['truncate-on-overflow'] == \"false\") {\n\t\t\t\t\tif(NF.match(/h/)) NF = NF.replace(/h+/, \"[$&]\");\n\t\t\t\t\telse if(NF.match(/m/)) NF = NF.replace(/m+/, \"[$&]\");\n\t\t\t\t\telse if(NF.match(/s/)) NF = NF.replace(/s+/, \"[$&]\");\n\t\t\t\t}\n\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\tNF = \"\";\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tinfmt = true;\n\t\t\t\tNF = \"\";\n\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t} break;\n\n\t\t// LibreOffice bug https://bugs.documentfoundation.org/show_bug.cgi?id=149484\n\t\tcase 'boolean-style': // 16.29.24\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tinfmt = false;\n\t\t\t\tnumber_format_map[NFtag.name] = \"General\";\n\t\t\t\tNF = \"\";\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tinfmt = true;\n\t\t\t\tNF = \"\";\n\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t} break;\n\n\t\t/* Number Format Elements */\n\t\tcase 'boolean': // 16.29.25\n\t\t\tNF += \"General\"; // ODF spec is unfortunately underspecified here\n\t\t\tbreak;\n\n\t\tcase 'text': // 16.29.27\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tpayload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);\n\t\t\t\t// NOTE: Excel has a different interpretation of \"%%\" and friends\n\t\t\t\tif(payload == \"%\" && NFtag[0] == ' 16.29.12\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"d\"; break;\n\t\t\t\tcase \"long\": NF += \"dd\"; break;\n\t\t\t\tdefault: NF += \"dd\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'day-of-week': { // 16.29.16\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"ddd\"; break;\n\t\t\t\tcase \"long\": NF += \"dddd\"; break;\n\t\t\t\tdefault: NF += \"ddd\"; break;\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'era': { // 16.29.15 TODO: proper mapping\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"ee\"; break;\n\t\t\t\tcase \"long\": NF += \"eeee\"; break;\n\t\t\t\tdefault: NF += \"eeee\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'hours': { // 16.29.20\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"h\"; break;\n\t\t\t\tcase \"long\": NF += \"hh\"; break;\n\t\t\t\tdefault: NF += \"hh\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'minutes': { // 16.29.21\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"m\"; break;\n\t\t\t\tcase \"long\": NF += \"mm\"; break;\n\t\t\t\tdefault: NF += \"mm\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'month': { // 16.29.13\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(y[\"textual\"]) NF += \"mm\";\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"m\"; break;\n\t\t\t\tcase \"long\": NF += \"mm\"; break;\n\t\t\t\tdefault: NF += \"m\"; break;\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'seconds': { // 16.29.22\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"s\"; break;\n\t\t\t\tcase \"long\": NF += \"ss\"; break;\n\t\t\t\tdefault: NF += \"ss\"; break; // TODO: error condition\n\t\t\t}\n\t\t\tif(y[\"decimal-places\"]) NF += \".\" + fill(\"0\", +y[\"decimal-places\"]);\n\t\t} break;\n\n\t\tcase 'year': { // 16.29.14\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"yy\"; break;\n\t\t\t\tcase \"long\": NF += \"yyyy\"; break;\n\t\t\t\tdefault: NF += \"yy\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'am-pm': // 16.29.23\n\t\t\tNF += \"AM/PM\"; // LO autocorrects A/P -> AM/PM\n\t\t\tbreak;\n\n\t\tcase 'week-of-year': // 16.29.17\n\t\tcase 'quarter': // 16.29.18\n\t\t\tconsole.error(\"Excel does not support ODS format token \" + Rn[3]);\n\t\t\tbreak;\n\n\t\tcase 'fill-character': // 16.29.5\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tpayload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);\n\t\t\t\t// NOTE: Excel has a different interpretation of \"%%\" and friends\n\t\t\t\tNF += '\"' + payload.replace(/\"/g, '\"\"') + '\"*';\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t} break;\n\n\t\tcase 'scientific-number': // 16.29.6\n\t\t\t// TODO: find a mapping for all parameters\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tNF += \"0.\" + fill(\"0\", +y[\"min-decimal-places\"] || +y[\"decimal-places\"] || 2) + fill(\"?\", +y[\"decimal-places\"] - +y[\"min-decimal-places\"] || 0) + \"E\" + (parsexmlbool(y[\"forced-exponent-sign\"]) ? \"+\" : \"\") + fill(\"0\", +y[\"min-exponent-digits\"] || 2);\n\t\t\tbreak;\n\n\t\tcase 'fraction': // 16.29.7\n\t\t\t// TODO: find a mapping for all parameters\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(!+y[\"min-integer-digits\"]) NF += \"#\";\n\t\t\telse NF += fill(\"0\", +y[\"min-integer-digits\"]);\n\t\t\tNF += \" \";\n\t\t\tNF += fill(\"?\", +y[\"min-numerator-digits\"] || 1);\n\t\t\tNF += \"/\";\n\t\t\tif(+y[\"denominator-value\"]) NF += y[\"denominator-value\"];\n\t\t\telse NF += fill(\"?\", +y[\"min-denominator-digits\"] || 1);\n\t\t\tbreak;\n\n\t\tcase 'currency-symbol': // 16.29.9\n\t\t\t// TODO: localization with [$-...]\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tNF += '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"';\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t} else NF += \"$\";\n\t\t\tbreak;\n\n\t\tcase 'text-properties': // 16.29.29\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch((y[\"color\"]||\"\").toLowerCase().replace(\"#\", \"\")) {\n\t\t\t\tcase \"ff0000\": case \"red\": NF = \"[Red]\" + NF; break;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'text-content': // 16.29.28\n\t\t\tNF += \"@\";\n\t\t\tbreak;\n\n\t\tcase 'map': // 16.3\n\t\t\t// TODO: handle more complex maps\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(unescapexml(y[\"condition\"]) == \"value()>=0\") NF = number_format_map[y[\"apply-style-name\"]] + \";\" + NF;\n\t\t\telse console.error(\"ODS number format may be incorrect: \" + y[\"condition\"]);\n\t\t\tbreak;\n\n\t\tcase 'number': // 16.29.3\n\t\t\t// TODO: handle all the attributes\n\t\t\tif(Rn[1]==='/') break;\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\ttNF = \"\";\n\t\t\ttNF += fill(\"0\", +y[\"min-integer-digits\"] || 1);\n\t\t\tif(parsexmlbool(y[\"grouping\"])) tNF = commaify(fill(\"#\", Math.max(0, 4 - tNF.length)) + tNF);\n\t\t\tif(+y[\"min-decimal-places\"] || +y[\"decimal-places\"]) tNF += \".\";\n\t\t\tif(+y[\"min-decimal-places\"]) tNF += fill(\"0\", +y[\"min-decimal-places\"] || 1);\n\t\t\tif(+y[\"decimal-places\"] - (+y[\"min-decimal-places\"]||0)) tNF += fill(\"0\", +y[\"decimal-places\"] - (+y[\"min-decimal-places\"]||0)); // TODO: should this be \"#\" ?\n\t\t\tNF += tNF;\n\t\t\tbreak;\n\n\t\tcase 'embedded-text': // 16.29.4\n\t\t\t// TODO: verify interplay with grouping et al\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tif(etpos == 0) NF += '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"';\n\t\t\t\telse NF = NF.slice(0, etpos) + '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"' + NF.slice(etpos);\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t\tetpos = -+parsexmltag(Rn[0], false)[\"position\"] || 0;\n\t\t\t} break;\n\n\t}}\n\treturn number_format_map;\n}\n\nfunction parse_content_xml(d/*:string*/, _opts, _nfm)/*:Workbook*/ {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state/*:Array*/ = [], tmp;\n\t\tvar tag/*:: = {}*/;\n\t\tvar nfidx, NF = \"\", pidx = 0;\n\t\tvar sheetag/*:: = {name:\"\", '名称':\"\"}*/;\n\t\tvar rowtag/*:: = {'行号':\"\"}*/;\n\t\tvar Sheets = {}, SheetNames/*:Array*/ = [];\n\t\tvar ws = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = [];\n\t\tvar Rn, q/*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/;\n\t\tvar ctag = ({value:\"\"}/*:any*/);\n\t\tvar textp = \"\", textpidx = 0, textptag/*:: = {}*/, oldtextp = \"\", oldtextpidx = 0;\n\t\tvar textR = [], oldtextR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = _nfm || {}, styles = {};\n\t\tvar merges/*:Array*/ = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo/*:Array*/ = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\t\tvar WB = {Names:[], WBProps:{}};\n\t\tvar atag = ({}/*:any*/);\n\t\tvar _Ref/*:[string, string]*/ = [\"\", \"\"];\n\t\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = remove_doctype(str_remove_ng(str, \"\"));\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_[\\s\\S]*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\telse ws['!ref'] = \"A1:A1\";\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = []; merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif(ctag[\"style-name\"] && styles[ctag[\"style-name\"]]) q.z = styles[ctag[\"style-name\"]];\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[\"!data\"][R]) ws[\"!data\"][R] = [];\n\t\t\t\t\t\t\tws[\"!data\"][R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_col(C) + encode_row(R)] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\ttextp = oldtextp = \"\"; textpidx = oldtextpidx = 0; textR = []; oldtextR = [];\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({}/*:any*/);\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag[\"style-name\"] && styles[ctag[\"style-name\"]]) q.z = styles[ctag[\"style-name\"]];\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type TODO: verify ODS and UOS */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']) || (+ctag['boolean-value'] >= 1); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value);\n\t\t\t\t\t\t\tif(opts.cellDates && q.z && fmt_is_date(q.z)) { q.v = numdate(q.v + (WB.WBProps.date1904 ? 1462 : 0)); q.t = typeof q.v == \"number\" ? 'n' : 'd'; }\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value'], WB.WBProps.date1904);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v, WB.WBProps.date1904); }\n\t\t\t\t\t\t\tif(!q.z) q.z = 'm/d/yy'; break;\n\t\t\t\t\t\t/* NOTE: for `time`, Excel ODS export incorrectly uses durations relative to 1900 epoch even if 1904 is specified */\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400;\n\t\t\t\t\t\t\tif(opts.cellDates) { q.v = numdate(q.v); q.t = typeof q.v == \"number\" ? 'n' : 'd'; }\n\t\t\t\t\t\t\tif(!q.z) q.z = 'HH:MM:SS'; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[\"!data\"][R + rpt]) ws[\"!data\"][R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[\"!data\"][R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[\"!data\"][R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\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\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {/*:: t:\"\", v:null, z:null, w:\"\",c:[]*/};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({}/*:any*/);\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\tcase 'master-styles': // 3.15.4 -- relevant for FODS\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) /*::(*/comment/*:: :any)*/.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t\ttextp = oldtextp; textpidx = oldtextpidx; textR = oldtextR;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\t\tvar annotag = parsexmltag(Rn[0], true);\n\t\t\t\t\t/* office:display TODO: check if there is a global override */\n\t\t\t\t\tif(!(annotag[\"display\"] && parsexmlbool(annotag[\"display\"]))) comments.hidden = true;\n\t\t\t\t\toldtextp = textp; oldtextpidx = textpidx; oldtextR = textR;\n\t\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\t}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // \n\t\t\tcase 'currency-symbol': // \n\t\t\tcase 'fill-character': // 16.29.5 \n\t\t\t\tbreak;\n\n\t\t\tcase 'text-style': // 16.27.25 \n\t\t\tcase 'boolean-style': // 16.27.23 \n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'currency-style': // 16.29.8 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tvar xlmlidx = xlmlregex.lastIndex;\n\t\t\t\t\tparse_ods_styles(str.slice(nfidx, xlmlregex.lastIndex), _opts, number_format_map);\n\t\t\t\t\txlmlregex.lastIndex = xlmlidx;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tnfidx = xlmlregex.lastIndex - Rn[0].length;\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': { // 16.2 \n\t\t\t\tvar styletag = parsexmltag(Rn[0], false);\n\t\t\t\tif(styletag[\"family\"] == \"table-cell\" && number_format_map[styletag[\"data-style-name\"]]) styles[styletag[\"name\"]] = number_format_map[styletag[\"data-style-name\"]];\n\t\t\t} break;\n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tbreak;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tbreak;\n\n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}/*:any*/);\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27 \n\t\t\tcase 'embedded-text': break; // 16.27.4 \n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 \n\t\t\tcase 'table-header-rows': break; // 9.1.7 \n\t\t\tcase 'table-rows': break; // 9.1.12 \n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 \n\t\t\tcase 'table-header-columns': break; // 9.1.11 \n\t\t\tcase 'table-columns': break; // 9.1.12 \n\n\t\t\tcase 'null-date': // 9.4.2 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\tswitch(tag[\"date-value\"]) {\n\t\t\t\t\tcase \"1904-01-01\": WB.WBProps.date1904 = true; break;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'graphic-properties': break; // 17.21 \n\t\t\tcase 'calculation-settings': break; // 9.4.1 \n\t\t\tcase 'named-expressions': break; // 9.4.11 \n\t\t\tcase 'label-range': break; // 9.4.9 \n\t\t\tcase 'label-ranges': break; // 9.4.10 \n\t\t\tcase 'named-expression': break; // 9.4.13 \n\t\t\tcase 'sort': break; // 9.4.19 \n\t\t\tcase 'sort-by': break; // 9.4.20 \n\t\t\tcase 'sort-groups': break; // 9.4.22 \n\n\t\t\tcase 'tab': break; // 6.1.4 \n\t\t\tcase 'line-break': break; // 6.1.5 \n\t\t\tcase 'span': break; // 6.1.7 \n\t\t\tcase 'p': case '文本串': // 5.1.3 \n\t\t\t\tif(['master-styles'].indexOf(state[state.length-1][0]) > -1) break;\n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else if(Rn[0].slice(-2) == \"/>\") {\n\t\t\t\t\t/* TODO: is self-closing 文本串 valid? */\n\t\t\t\t\ttextp += \"\\n\";\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // \n\t\t\tcase 's': break; // \n\n\t\t\tcase 'database-range': // 9.4.15 \n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 \n\t\t\tcase 'title': case '标题': break; // <*:title> OR \n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 \n\t\t\tcase 'content-validations': break; // 9.4.4 \n\n\t\t\t/* 9.5 Filters */\n\t\t\tcase 'filter': break; // 9.5.2 \n\t\t\tcase 'filter-and': break; // 9.5.3 \n\t\t\tcase 'filter-or': break; // 9.5.4 \n\t\t\tcase 'filter-condition': break; // 9.5.5 \n\t\t\tcase 'filter-set-item': break; // 9.5.6 \n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 \n\t\t\tcase 'page-count': break; // TODO \n\t\t\tcase 'time': break; // TODO \n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 \n\t\t\tcase 'property': break; // 13.8 \n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = unescapexml(atag.href); delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t} else if(atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // ',\n\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t'',\n\t\t''\n\t].join(\"\");\n\n\tvar payload = '' + master_styles + '';\n\n\treturn function wso(/*::wb, opts*/) {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\n\n// TODO: find out if anyone actually read the spec. LO has some wild errors\nfunction write_number_format_ods(nf/*:string*/, nfidx/*:string*/)/*:string*/ {\n\tvar type = \"number\", payload = \"\", nopts = { \"style:name\": nfidx }, c = \"\", i = 0;\n\tnf = nf.replace(/\"[$]\"/g, \"$\");\n\t/* TODO: replace with an actual parser based on a real grammar */\n\tj: {\n\t\t// TODO: support style maps\n\t\tif(nf.indexOf(\";\") > -1) {\n\t\t\tconsole.error(\"Unsupported ODS Style Map exported. Using first branch of \" + nf);\n\t\t\tnf = nf.slice(0, nf.indexOf(\";\"));\n\t\t}\n\n\t\tif(nf == \"@\") { type = \"text\"; payload = \"\"; break j; }\n\n\t\t/* currency flag */\n\t\tif(nf.indexOf(/\\$/) > -1) { type = \"currency\"; }\n\n\t\t/* opening string literal */\n\t\tif(nf[i] == '\"') {\n\t\t\tc = \"\";\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tif(nf[i+1] == \"*\") {\n\t\t\t\ti++;\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t} else {\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t}\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\n\t\t/* fractions */\n\t\tvar t = nf.match(/# (\\?+)\\/(\\?+)/);\n\t\tif(t) { payload += writextag(\"number:fraction\", null, {\"number:min-integer-digits\":0, \"number:min-numerator-digits\": t[1].length, \"number:max-denominator-value\": Math.max(+(t[1].replace(/./g, \"9\")), +(t[2].replace(/./g, \"9\"))) }); break j; }\n\t\tif((t=nf.match(/# (\\?+)\\/(\\d+)/))) { payload += writextag(\"number:fraction\", null, {\"number:min-integer-digits\":0, \"number:min-numerator-digits\": t[1].length, \"number:denominator-value\": +t[2]}); break j; }\n\n\t\t/* percentages */\n\t\tif((t=nf.match(/\\b(\\d+)(|\\.\\d+)%/))) { type = \"percentage\"; payload += writextag(\"number:number\", null, {\"number:decimal-places\": t[2] && t.length - 1 || 0, \"number:min-decimal-places\": t[2] && t.length - 1 || 0, \"number:min-integer-digits\": t[1].length }) + \"%\"; break j; }\n\n\t\t/* datetime */\n\t\tvar has_time = false;\n\t\tif([\"y\",\"m\",\"d\"].indexOf(nf[0]) > -1) {\n\t\t\ttype = \"date\";\n\t\t\tk: for(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {\n\t\t\t\tcase \"h\": case \"s\": has_time = true; --i; break k;\n\t\t\t\tcase \"m\":\n\t\t\t\t\tl: for(var h = i+1; h < nf.length; ++h) switch(nf[h]) {\n\t\t\t\t\t\tcase \"y\": case \"d\": break l;\n\t\t\t\t\t\tcase \"h\": case \"s\": has_time = true; --i; break k;\n\t\t\t\t\t}\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase \"y\": case \"d\":\n\t\t\t\t\twhile((nf[++i]||\"\").toLowerCase() == c[0]) c += c[0]; --i;\n\t\t\t\t\tswitch(c) {\n\t\t\t\t\t\tcase \"y\": case \"yy\": payload += \"\"; break;\n\t\t\t\t\t\tcase \"yyy\": case \"yyyy\": payload += ''; break;\n\t\t\t\t\t\tcase \"mmmmm\": console.error(\"ODS has no equivalent of format |mmmmm|\");\n\t\t\t\t\t\t\t/* falls through */\n\t\t\t\t\t\tcase \"m\": case \"mm\": case \"mmm\": case \"mmmm\":\n\t\t\t\t\t\t\tpayload += '= 3 ? \"true\" : \"false\") + '\"/>';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"d\": case \"dd\": payload += ''; break;\n\t\t\t\t\t\tcase \"ddd\": case \"dddd\": payload += ''; break;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\"':\n\t\t\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\t\t\tpayload += '' + escapexml(c.slice(1).replace(/\"\"/g, '\"')) + '';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\\\\': c = nf[++i];\n\t\t\t\t\tpayload += '' + escapexml(c) + ''; break;\n\t\t\t\tcase '/': case ':': payload += '' + escapexml(c) + ''; break;\n\t\t\t\tdefault: console.error(\"unrecognized character \" + c + \" in ODF format \" + nf);\n\t\t\t}\n\t\t\tif(!has_time) break j;\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\t\tif(nf.match(/^\\[?[hms]/)) {\n\t\t\tif(type == \"number\") type = \"time\";\n\t\t\tif(nf.match(/\\[/)) {\n\t\t\t\tnf = nf.replace(/[\\[\\]]/g, \"\");\n\t\t\t\tnopts['number:truncate-on-overflow'] = \"false\";\n\t\t\t}\n\t\t\tfor(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {\n\t\t\t\tcase \"h\": case \"m\": case \"s\":\n\t\t\t\t\twhile((nf[++i]||\"\").toLowerCase() == c[0]) c += c[0]; --i;\n\t\t\t\t\tswitch(c) {\n\t\t\t\t\t\tcase \"h\": case \"hh\": payload += ''; break;\n\t\t\t\t\t\tcase \"m\": case \"mm\": payload += ''; break;\n\t\t\t\t\t\tcase \"s\": case \"ss\":\n\t\t\t\t\t\t\tif(nf[i+1] == \".\") do { c += nf[i+1]; ++i; } while(nf[i+1] == \"0\");\n\t\t\t\t\t\t\tpayload += ''; break;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\"':\n\t\t\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\t\t\tpayload += '' + escapexml(c.slice(1).replace(/\"\"/g, '\"')) + '';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '/': case ':': payload += '' + escapexml(c) + ''; break;\n\t\t\t\tcase \"a\":\n\t\t\t\t\tif(nf.slice(i, i+3).toLowerCase() == \"a/p\") { payload += ''; i += 2; break; } // Note: ODF does not support A/P\n\t\t\t\t\tif(nf.slice(i, i+5).toLowerCase() == \"am/pm\") { payload += ''; i += 4; break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: console.error(\"unrecognized character \" + c + \" in ODF format \" + nf);\n\t\t\t}\n\t\t\tbreak j;\n\t\t}\n\n\t\t/* currency flag */\n\t\tif(nf.indexOf(/\\$/) > -1) { type = \"currency\"; }\n\n\t\t/* should be in a char loop */\n\t\tif(nf[0] == \"$\") { payload += '$'; nf = nf.slice(1); i = 0; }\n\t\ti = 0; if(nf[i] == '\"') {\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tif(nf[i+1] == \"*\") {\n\t\t\t\ti++;\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t} else {\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t}\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\n\t\t/* number TODO: interstitial text e.g. 000)000-0000 */\n\t\tvar np = nf.match(/([#0][0#,]*)(\\.[0#]*|)(E[+]?0*|)/i);\n\t\tif(!np || !np[0]) console.error(\"Could not find numeric part of \" + nf);\n\t\telse {\n\t\t\tvar base = np[1].replace(/,/g, \"\");\n\t\t\tpayload += ' -1 ? ' number:grouping=\"true\"' : \"\") +\n\t\t\t\t(np[2] && ' number:decimal-places=\"' + (np[2].length - 1) + '\"' || ' number:decimal-places=\"0\"') +\n\t\t\t\t(np[3] && np[3].indexOf(\"+\") > -1 ? ' number:forced-exponent-sign=\"true\"' : \"\" ) +\n\t\t\t\t(np[3] ? ' number:min-exponent-digits=\"' + np[3].match(/0+/)[0].length + '\"' : \"\" ) +\n\t\t\t\t'>' +\n\t\t\t\t/* TODO: interstitial text placeholders */\n\t\t\t\t'';\n\t\t\ti = np.index + np[0].length;\n\t\t}\n\n\t\t/* residual text */\n\t\tif(nf[i] == '\"') {\n\t\t\tc = \"\";\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t}\n\t}\n\n\tif(!payload) { console.error(\"Could not generate ODS number format for |\" + nf + \"|\"); return \"\"; }\n\treturn writextag(\"number:\" + type + \"-style\", payload, nopts);\n}\n\nfunction write_names_ods(Names, SheetNames, idx) {\n\t//var scoped = Names.filter(function(name) { return name.Sheet == (idx == -1 ? null : idx); });\n\tvar scoped = []; for(var namei = 0; namei < Names.length; ++namei) {\n\t\tvar name = Names[namei];\n\t\tif(!name) continue;\n\t\tif(name.Sheet == (idx == -1 ? null : idx)) scoped.push(name);\n\t}\n\tif(!scoped.length) return \"\";\n\treturn \" \\n\" + scoped.map(function(name) {\n\t\tvar odsref = (idx == -1 ? \"$\" : \"\") + csf_to_ods_3D(name.Ref);\n\t\treturn \" \" + writextag(\"table:named-range\", null, {\n\t\t\t\"table:name\": name.Name,\n\t\t\t\"table:cell-range-address\": odsref,\n\t\t\t\"table:base-cell-address\": odsref.replace(/[\\.][^\\.]*$/, \".$A$1\")\n\t\t});\n\t}).join(\"\\n\") + \"\\n \\n\";\n}\nvar write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text/*:string*/, span)/*:string*/ {\n\t\treturn escapexml(text)\n\t\t\t.replace(/ +/g, function($$){return '';})\n\t\t\t.replace(/\\t/g, \"\")\n\t\t\t.replace(/\\n/g, span ? \"\": \"\")\n\t\t\t.replace(/^ /, \"\").replace(/ $/, \"\");\n\t};\n\n\tvar null_cell_xml = ' \\n';\n\tvar write_ws = function(ws, wb/*:Workbook*/, i/*:number*/, opts, nfs, date1904)/*:string*/ {\n\t\t/* Section 9 Tables */\n\t\tvar o/*:Array*/ = [];\n\t\to.push(' \\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']||\"A1\");\n\t\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tif(ws[\"!cols\"]) {\n\t\t\tfor(C = 0; C <= range.e.c; ++C) o.push(' \\n');\n\t\t}\n\t\tvar H = \"\", ROWS = ws[\"!rows\"]||[];\n\t\tfor(R = 0; R < range.s.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t}\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] = (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(' \\n'); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[\"!data\"][R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v, date1904).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v, date1904).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e': // TODO: translate to ODS errors\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue; // TODO: empty cell with comments\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target;\n\t\t\t\t\t_tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\t// TODO: choose correct parent path format based on link delimiters\n\t\t\t\t\tif(_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt.replace(/&/g, \"&\")});\n\t\t\t\t}\n\t\t\t\tif(nfs[cell.z]) ct[\"table:style-name\"] = \"ce\" + nfs[cell.z].slice(1);\n\t\t\t\tvar payload = writextag('text:p', text_p, {});\n\t\t\t\tif(cell.c) {\n\t\t\t\t\tvar acreator = \"\", apayload = \"\", aprops = {};\n\t\t\t\t\tfor(var ci = 0; ci < cell.c.length; ++ci) {\n\t\t\t\t\t\tif(!acreator && cell.c[ci].a) acreator = cell.c[ci].a;\n\t\t\t\t\t\tapayload += \"\" + write_text_p(cell.c[ci].t) + \"\";\n\t\t\t\t\t}\n\t\t\t\t\tif(!cell.c.hidden) aprops[\"office:display\"] = true;\n\t\t\t\t\tpayload = writextag('office:annotation', apayload, aprops) + payload;\n\t\t\t\t}\n\t\t\t\to.push(' ' + writextag('table:table-cell', payload, ct) + '\\n');\n\t\t\t}\n\t\t\to.push(' \\n');\n\t\t}\n\t\tif((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, i));\n\t\to.push(' \\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o/*:Array*/, wb) {\n\t\to.push(' \\n');\n\n\t\t/* column styles */\n\t\tvar cidx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!cols\"]) {\n\t\t\t\tfor(var C = 0; C < ws[\"!cols\"].length; ++C) if(ws[\"!cols\"][C]) {\n\t\t\t\t\tvar colobj = ws[\"!cols\"][C];\n\t\t\t\t\tif(colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n\t\t\t\t\tprocess_col(colobj);\n\t\t\t\t\tcolobj.ods = cidx;\n\t\t\t\t\tvar w = ws[\"!cols\"][C].wpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++cidx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* row styles */\n\t\tvar ridx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!rows\"]) {\n\t\t\t\tfor(var R = 0; R < ws[\"!rows\"].length; ++R) if(ws[\"!rows\"][R]) {\n\t\t\t\t\tws[\"!rows\"][R].ods = ridx;\n\t\t\t\t\tvar h = ws[\"!rows\"][R].hpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++ridx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* table */\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* number formats, table cells, text */\n\t\tvar nfs = {};\n\t\tvar nfi = 69;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tvar dense = (ws[\"!data\"] != null);\n\t\t\tif(!ws[\"!ref\"]) return;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tfor(var R = 0; R <= range.e.r; ++R) for(var C = 0; C <= range.e.c; ++C) {\n\t\t\t\tvar c = dense ? (ws[\"!data\"][R]||[])[C] : ws[encode_cell({r:R,c:C})];\n\t\t\t\tif(!c || !c.z || c.z.toLowerCase() == \"general\") continue;\n\t\t\t\tif(!nfs[c.z]) {\n\t\t\t\t\tvar out = write_number_format_ods(c.z, \"N\" + nfi);\n\t\t\t\t\tif(out) { nfs[c.z] = \"N\" + nfi; ++nfi; o.push(out + \"\\n\"); }\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\to.push(' \\n');\n\t\tkeys(nfs).forEach(function(nf) {\n\t\t\to.push('\\n');\n\t\t});\n\n\t\t/* page-layout */\n\n\t\to.push(' \\n');\n\t\treturn nfs;\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo': \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt': \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version': \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") {\n\t\t\to.push('\\n');\n\t\t\to.push(write_meta_ods().replace(/]*?>/, \"\").replace(/<\\/office:document-meta>/, \"\") + \"\\n\");\n\t\t\t// TODO: settings (equiv of settings.xml for ODS)\n\t\t} else o.push('\\n');\n\t\t// o.push(' \\n');\n\t\tvar nfs = write_automatic_styles_ods(o, wb);\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(((wb.Workbook||{}).WBProps||{}).date1904) o.push(' \\n \\n \\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts, nfs, ((wb.Workbook||{}).WBProps||{}).date1904));\n\t\tif((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, -1));\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(opts.bookType == \"fods\") o.push('');\n\t\telse o.push('');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb/*:any*/, opts/*:any*/) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\n\tvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest/*:Array >*/ = [];\n\tvar rdf/*:Array<[string, string]>*/ = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, XML_HEADER + write_meta_ods(/*::wb, opts*/));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\n/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */\nvar subarray = function() {\n try {\n if (typeof Uint8Array == \"undefined\")\n return \"slice\";\n if (typeof Uint8Array.prototype.subarray == \"undefined\")\n return \"slice\";\n if (typeof Buffer !== \"undefined\") {\n if (typeof Buffer.prototype.subarray == \"undefined\")\n return \"slice\";\n if ((typeof Buffer.from == \"function\" ? Buffer.from([72, 62]) : new Buffer([72, 62])) instanceof Uint8Array)\n return \"subarray\";\n return \"slice\";\n }\n return \"subarray\";\n } catch (e) {\n return \"slice\";\n }\n}();\nfunction u8_to_dataview(array) {\n return new DataView(array.buffer, array.byteOffset, array.byteLength);\n}\nfunction u8str(u8) {\n return typeof TextDecoder != \"undefined\" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));\n}\nfunction stru8(str) {\n return typeof TextEncoder != \"undefined\" ? new TextEncoder().encode(str) : s2a(utf8write(str));\n}\nfunction u8concat(u8a) {\n var len = 0;\n for (var i = 0; i < u8a.length; ++i)\n len += u8a[i].length;\n var out = new Uint8Array(len);\n var off = 0;\n for (i = 0; i < u8a.length; ++i) {\n var u8 = u8a[i], L = u8.length;\n if (L < 250) {\n for (var j = 0; j < L; ++j)\n out[off++] = u8[j];\n } else {\n out.set(u8, off);\n off += L;\n }\n }\n return out;\n}\nfunction popcnt(x) {\n x -= x >> 1 & 1431655765;\n x = (x & 858993459) + (x >> 2 & 858993459);\n return (x + (x >> 4) & 252645135) * 16843009 >>> 24;\n}\nfunction readDecimal128LE(buf, offset) {\n var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;\n var mantissa = buf[offset + 14] & 1;\n for (var j = offset + 13; j >= offset; --j)\n mantissa = mantissa * 256 + buf[j];\n return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);\n}\nfunction writeDecimal128LE(buf, offset, value) {\n var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 16;\n var mantissa = value / Math.pow(10, exp - 6176);\n buf[offset + 15] |= exp >> 7;\n buf[offset + 14] |= (exp & 127) << 1;\n for (var i = 0; mantissa >= 1; ++i, mantissa /= 256)\n buf[offset + i] = mantissa & 255;\n buf[offset + 15] |= value >= 0 ? 0 : 128;\n}\nfunction parse_varint49(buf, ptr) {\n var l = ptr.l;\n var usz = buf[l] & 127;\n varint:\n if (buf[l++] >= 128) {\n usz |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 28);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 35);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 42);\n ++l;\n if (buf[l++] < 128)\n break varint;\n }\n ptr.l = l;\n return usz;\n}\nfunction write_varint49(v) {\n var usz = new Uint8Array(7);\n usz[0] = v & 127;\n var L = 1;\n sz:\n if (v > 127) {\n usz[L - 1] |= 128;\n usz[L] = v >> 7 & 127;\n ++L;\n if (v <= 16383)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 14 & 127;\n ++L;\n if (v <= 2097151)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 21 & 127;\n ++L;\n if (v <= 268435455)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 256 >>> 21 & 127;\n ++L;\n if (v <= 34359738367)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 65536 >>> 21 & 127;\n ++L;\n if (v <= 4398046511103)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 16777216 >>> 21 & 127;\n ++L;\n }\n return usz[subarray](0, L);\n}\nfunction parse_packed_varints(buf) {\n var ptr = { l: 0 };\n var out = [];\n while (ptr.l < buf.length)\n out.push(parse_varint49(buf, ptr));\n return out;\n}\nfunction write_packed_varints(nums) {\n return u8concat(nums.map(function(x) {\n return write_varint49(x);\n }));\n}\nfunction varint_to_i32(buf) {\n var l = 0, i32 = buf[l] & 127;\n if (buf[l++] < 128)\n return i32;\n i32 |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n return i32;\n i32 |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n return i32;\n i32 |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n return i32;\n i32 |= (buf[l] & 15) << 28;\n return i32;\n}\nfunction varint_to_u64(buf) {\n var l = 0, lo = buf[l] & 127, hi = 0;\n varint:\n if (buf[l++] >= 128) {\n lo |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n lo |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n lo |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n lo |= (buf[l] & 127) << 28;\n hi = buf[l] >> 4 & 7;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 3;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 10;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 17;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 24;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 31;\n }\n return [lo >>> 0, hi >>> 0];\n}\nfunction parse_shallow(buf) {\n var out = [], ptr = { l: 0 };\n while (ptr.l < buf.length) {\n var off = ptr.l;\n var num = parse_varint49(buf, ptr);\n var type = num & 7;\n num = num / 8 | 0;\n var data;\n var l = ptr.l;\n switch (type) {\n case 0:\n {\n while (buf[l++] >= 128)\n ;\n data = buf[subarray](ptr.l, l);\n ptr.l = l;\n }\n break;\n case 1:\n {\n data = buf[subarray](l, l + 8);\n ptr.l = l + 8;\n }\n break;\n case 2:\n {\n var len = parse_varint49(buf, ptr);\n data = buf[subarray](ptr.l, ptr.l + len);\n ptr.l += len;\n }\n break;\n case 5:\n {\n data = buf[subarray](l, l + 4);\n ptr.l = l + 4;\n }\n break;\n default:\n throw new Error(\"PB Type \".concat(type, \" for Field \").concat(num, \" at offset \").concat(off));\n }\n var v = { data: data, type: type };\n if (out[num] == null)\n out[num] = [];\n out[num].push(v);\n }\n return out;\n}\nfunction write_shallow(proto) {\n var out = [];\n proto.forEach(function(field, idx) {\n if (idx == 0)\n return;\n field.forEach(function(item) {\n if (!item.data)\n return;\n out.push(write_varint49(idx * 8 + item.type));\n if (item.type == 2)\n out.push(write_varint49(item.data.length));\n out.push(item.data);\n });\n });\n return u8concat(out);\n}\nfunction mappa(data, cb) {\n return (data == null ? void 0 : data.map(function(d) {\n return cb(d.data);\n })) || [];\n}\nfunction parse_iwa_file(buf) {\n var _a;\n var out = [], ptr = { l: 0 };\n while (ptr.l < buf.length) {\n var len = parse_varint49(buf, ptr);\n var ai = parse_shallow(buf[subarray](ptr.l, ptr.l + len));\n ptr.l += len;\n var res = {\n id: varint_to_i32(ai[1][0].data),\n messages: []\n };\n ai[2].forEach(function(b) {\n var mi = parse_shallow(b.data);\n var fl = varint_to_i32(mi[3][0].data);\n res.messages.push({\n meta: mi,\n data: buf[subarray](ptr.l, ptr.l + fl)\n });\n ptr.l += fl;\n });\n if ((_a = ai[3]) == null ? void 0 : _a[0])\n res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;\n out.push(res);\n }\n return out;\n}\nfunction write_iwa_file(ias) {\n var bufs = [];\n ias.forEach(function(ia) {\n var ai = [\n [],\n [{ data: write_varint49(ia.id), type: 0 }],\n []\n ];\n if (ia.merge != null)\n ai[3] = [{ data: write_varint49(+!!ia.merge), type: 0 }];\n var midata = [];\n ia.messages.forEach(function(mi) {\n midata.push(mi.data);\n mi.meta[3] = [{ type: 0, data: write_varint49(mi.data.length) }];\n ai[2].push({ data: write_shallow(mi.meta), type: 2 });\n });\n var aipayload = write_shallow(ai);\n bufs.push(write_varint49(aipayload.length));\n bufs.push(aipayload);\n midata.forEach(function(mid) {\n return bufs.push(mid);\n });\n });\n return u8concat(bufs);\n}\nfunction parse_snappy_chunk(type, buf) {\n if (type != 0)\n throw new Error(\"Unexpected Snappy chunk type \".concat(type));\n var ptr = { l: 0 };\n var usz = parse_varint49(buf, ptr);\n var chunks = [];\n var l = ptr.l;\n while (l < buf.length) {\n var tag = buf[l] & 3;\n if (tag == 0) {\n var len = buf[l++] >> 2;\n if (len < 60)\n ++len;\n else {\n var c = len - 59;\n len = buf[l];\n if (c > 1)\n len |= buf[l + 1] << 8;\n if (c > 2)\n len |= buf[l + 2] << 16;\n if (c > 3)\n len |= buf[l + 3] << 24;\n len >>>= 0;\n len++;\n l += c;\n }\n chunks.push(buf[subarray](l, l + len));\n l += len;\n continue;\n } else {\n var offset = 0, length = 0;\n if (tag == 1) {\n length = (buf[l] >> 2 & 7) + 4;\n offset = (buf[l++] & 224) << 3;\n offset |= buf[l++];\n } else {\n length = (buf[l++] >> 2) + 1;\n if (tag == 2) {\n offset = buf[l] | buf[l + 1] << 8;\n l += 2;\n } else {\n offset = (buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16 | buf[l + 3] << 24) >>> 0;\n l += 4;\n }\n }\n if (offset == 0)\n throw new Error(\"Invalid offset 0\");\n var j = chunks.length - 1, off = offset;\n while (j >= 0 && off >= chunks[j].length) {\n off -= chunks[j].length;\n --j;\n }\n if (j < 0) {\n if (off == 0)\n off = chunks[j = 0].length;\n else\n throw new Error(\"Invalid offset beyond length\");\n }\n if (length < off)\n chunks.push(chunks[j][subarray](chunks[j].length - off, chunks[j].length - off + length));\n else {\n if (off > 0) {\n chunks.push(chunks[j][subarray](chunks[j].length - off));\n length -= off;\n }\n ++j;\n while (length >= chunks[j].length) {\n chunks.push(chunks[j]);\n length -= chunks[j].length;\n ++j;\n }\n if (length)\n chunks.push(chunks[j][subarray](0, length));\n }\n if (chunks.length > 25)\n chunks = [u8concat(chunks)];\n }\n }\n var clen = 0;\n for (var u8i = 0; u8i < chunks.length; ++u8i)\n clen += chunks[u8i].length;\n if (clen != usz)\n throw new Error(\"Unexpected length: \".concat(clen, \" != \").concat(usz));\n return chunks;\n}\nfunction decompress_iwa_file(buf) {\n if (Array.isArray(buf))\n buf = new Uint8Array(buf);\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var t = buf[l++];\n var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;\n l += 3;\n out.push.apply(out, parse_snappy_chunk(t, buf[subarray](l, l + len)));\n l += len;\n }\n if (l !== buf.length)\n throw new Error(\"data is not a valid framed stream!\");\n return out.length == 1 ? out[0] : u8concat(out);\n}\nfunction compress_iwa_file(buf) {\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var c = Math.min(buf.length - l, 268435455);\n var frame = new Uint8Array(4);\n out.push(frame);\n var usz = write_varint49(c);\n var L = usz.length;\n out.push(usz);\n if (c <= 60) {\n L++;\n out.push(new Uint8Array([c - 1 << 2]));\n } else if (c <= 256) {\n L += 2;\n out.push(new Uint8Array([240, c - 1 & 255]));\n } else if (c <= 65536) {\n L += 3;\n out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));\n } else if (c <= 16777216) {\n L += 4;\n out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));\n } else if (c <= 4294967296) {\n L += 5;\n out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));\n }\n out.push(buf[subarray](l, l + c));\n L += c;\n frame[0] = 0;\n frame[1] = L & 255;\n frame[2] = L >> 8 & 255;\n frame[3] = L >> 16 & 255;\n l += c;\n }\n return u8concat(out);\n}\nvar numbers_lut_new = function() {\n return { sst: [], rsst: [], ofmt: [], nfmt: [], fmla: [], ferr: [], cmnt: [] };\n};\nfunction numbers_format_cell(cell, t, flags, ofmt, nfmt) {\n var _a, _b, _c, _d;\n var ctype = t & 255, ver = t >> 8;\n var fmt = ver >= 5 ? nfmt : ofmt;\n dur:\n if (flags & (ver > 4 ? 8 : 4) && cell.t == \"n\" && ctype == 7) {\n var dstyle = ((_a = fmt[7]) == null ? void 0 : _a[0]) ? varint_to_i32(fmt[7][0].data) : -1;\n if (dstyle == -1)\n break dur;\n var dmin = ((_b = fmt[15]) == null ? void 0 : _b[0]) ? varint_to_i32(fmt[15][0].data) : -1;\n var dmax = ((_c = fmt[16]) == null ? void 0 : _c[0]) ? varint_to_i32(fmt[16][0].data) : -1;\n var auto = ((_d = fmt[40]) == null ? void 0 : _d[0]) ? varint_to_i32(fmt[40][0].data) : -1;\n var d = cell.v, dd = d;\n autodur:\n if (auto) {\n if (d == 0) {\n dmin = dmax = 2;\n break autodur;\n }\n if (d >= 604800)\n dmin = 1;\n else if (d >= 86400)\n dmin = 2;\n else if (d >= 3600)\n dmin = 4;\n else if (d >= 60)\n dmin = 8;\n else if (d >= 1)\n dmin = 16;\n else\n dmin = 32;\n if (Math.floor(d) != d)\n dmax = 32;\n else if (d % 60)\n dmax = 16;\n else if (d % 3600)\n dmax = 8;\n else if (d % 86400)\n dmax = 4;\n else if (d % 604800)\n dmax = 2;\n if (dmax < dmin)\n dmax = dmin;\n }\n if (dmin == -1 || dmax == -1)\n break dur;\n var dstr = [], zstr = [];\n if (dmin == 1) {\n dd = d / 604800;\n if (dmax == 1) {\n zstr.push('d\"d\"');\n } else {\n dd |= 0;\n d -= 604800 * dd;\n }\n dstr.push(dd + (dstyle == 2 ? \" week\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"w\" : \"\"));\n }\n if (dmin <= 2 && dmax >= 2) {\n dd = d / 86400;\n if (dmax > 2) {\n dd |= 0;\n d -= 86400 * dd;\n }\n zstr.push('d\"d\"');\n dstr.push(dd + (dstyle == 2 ? \" day\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"d\" : \"\"));\n }\n if (dmin <= 4 && dmax >= 4) {\n dd = d / 3600;\n if (dmax > 4) {\n dd |= 0;\n d -= 3600 * dd;\n }\n zstr.push((dmin >= 4 ? \"[h]\" : \"h\") + '\"h\"');\n dstr.push(dd + (dstyle == 2 ? \" hour\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"h\" : \"\"));\n }\n if (dmin <= 8 && dmax >= 8) {\n dd = d / 60;\n if (dmax > 8) {\n dd |= 0;\n d -= 60 * dd;\n }\n zstr.push((dmin >= 8 ? \"[m]\" : \"m\") + '\"m\"');\n if (dstyle == 0)\n dstr.push((dmin == 8 && dmax == 8 || dd >= 10 ? \"\" : \"0\") + dd);\n else\n dstr.push(dd + (dstyle == 2 ? \" minute\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"m\" : \"\"));\n }\n if (dmin <= 16 && dmax >= 16) {\n dd = d;\n if (dmax > 16) {\n dd |= 0;\n d -= dd;\n }\n zstr.push((dmin >= 16 ? \"[s]\" : \"s\") + '\"s\"');\n if (dstyle == 0)\n dstr.push((dmax == 16 && dmin == 16 || dd >= 10 ? \"\" : \"0\") + dd);\n else\n dstr.push(dd + (dstyle == 2 ? \" second\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"s\" : \"\"));\n }\n if (dmax >= 32) {\n dd = Math.round(1e3 * d);\n if (dmin < 32)\n zstr.push('.000\"ms\"');\n if (dstyle == 0)\n dstr.push((dd >= 100 ? \"\" : dd >= 10 ? \"0\" : \"00\") + dd);\n else\n dstr.push(dd + (dstyle == 2 ? \" millisecond\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"ms\" : \"\"));\n }\n cell.w = dstr.join(dstyle == 0 ? \":\" : \" \");\n cell.z = zstr.join(dstyle == 0 ? '\":\"' : \" \");\n if (dstyle == 0)\n cell.w = cell.w.replace(/:(\\d\\d\\d)$/, \".$1\");\n }\n}\nfunction parse_old_storage(buf, lut, v, opts) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(4, true);\n var ridx = -1, sidx = -1, zidx = -1, ieee = NaN, dc = 0, dt = new Date(Date.UTC(2001, 0, 1));\n var doff = v > 1 ? 12 : 8;\n if (flags & 2) {\n zidx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(flags & (v > 1 ? 3468 : 396)) * 4;\n if (flags & 512) {\n ridx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;\n if (flags & 16) {\n sidx = dv.getUint32(doff, true);\n doff += 4;\n }\n if (flags & 32) {\n ieee = dv.getFloat64(doff, true);\n doff += 8;\n }\n if (flags & 64) {\n dt.setTime(dt.getTime() + (dc = dv.getFloat64(doff, true)) * 1e3);\n doff += 8;\n }\n if (v > 1) {\n flags = dv.getUint32(8, true) >>> 16;\n if (flags & 255) {\n if (zidx == -1)\n zidx = dv.getUint32(doff, true);\n doff += 4;\n }\n }\n var ret;\n var t = buf[v >= 4 ? 1 : 2];\n switch (t) {\n case 0:\n return void 0;\n case 2:\n ret = { t: \"n\", v: ieee };\n break;\n case 3:\n ret = { t: \"s\", v: lut.sst[sidx] };\n break;\n case 5:\n {\n if (opts == null ? void 0 : opts.cellDates)\n ret = { t: \"d\", v: dt };\n else\n ret = { t: \"n\", v: dc / 86400 + 35430, z: table_fmt[14] };\n }\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n {\n if (ridx > -1) {\n var rts = lut.rsst[ridx];\n ret = { t: \"s\", v: rts.v };\n if (rts.l)\n ret.l = { Target: rts.l };\n } else\n throw new Error(\"Unsupported cell type \".concat(buf[subarray](0, 4)));\n }\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf[subarray](0, 4)));\n }\n if (zidx > -1)\n numbers_format_cell(ret, t | v << 8, flags, lut.ofmt[zidx], lut.nfmt[zidx]);\n if (t == 7)\n ret.v /= 86400;\n return ret;\n}\nfunction parse_new_storage(buf, lut, opts) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(4, true);\n var fields = dv.getUint32(8, true);\n var doff = 12;\n var ridx = -1, sidx = -1, zidx = -1, d128 = NaN, ieee = NaN, dc = 0, dt = new Date(Date.UTC(2001, 0, 1)), eidx = -1, fidx = -1;\n if (fields & 1) {\n d128 = readDecimal128LE(buf, doff);\n doff += 16;\n }\n if (fields & 2) {\n ieee = dv.getFloat64(doff, true);\n doff += 8;\n }\n if (fields & 4) {\n dt.setTime(dt.getTime() + (dc = dv.getFloat64(doff, true)) * 1e3);\n doff += 8;\n }\n if (fields & 8) {\n sidx = dv.getUint32(doff, true);\n doff += 4;\n }\n if (fields & 16) {\n ridx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(fields & 480) * 4;\n if (fields & 512) {\n fidx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(fields & 1024) * 4;\n if (fields & 2048) {\n eidx = dv.getUint32(doff, true);\n doff += 4;\n }\n var ret;\n var t = buf[1];\n switch (t) {\n case 0:\n ret = { t: \"z\" };\n break;\n case 2:\n ret = { t: \"n\", v: d128 };\n break;\n case 3:\n ret = { t: \"s\", v: lut.sst[sidx] };\n break;\n case 5:\n {\n if (opts == null ? void 0 : opts.cellDates)\n ret = { t: \"d\", v: dt };\n else\n ret = { t: \"n\", v: dc / 86400 + 35430, z: table_fmt[14] };\n }\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n {\n if (ridx > -1) {\n var rts = lut.rsst[ridx];\n ret = { t: \"s\", v: rts.v };\n if (rts.l)\n ret.l = { Target: rts.l };\n } else\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(fields & 31, \" : \").concat(buf[subarray](0, 4)));\n }\n break;\n case 10:\n ret = { t: \"n\", v: d128 };\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(fields & 31, \" : \").concat(buf[subarray](0, 4)));\n }\n doff += popcnt(fields & 4096) * 4;\n if (fields & 516096) {\n if (zidx == -1)\n zidx = dv.getUint32(doff, true);\n doff += 4;\n }\n if (fields & 524288) {\n var cmntidx = dv.getUint32(doff, true);\n doff += 4;\n if (lut.cmnt[cmntidx])\n ret.c = iwa_to_s5s_comment(lut.cmnt[cmntidx]);\n }\n if (zidx > -1)\n numbers_format_cell(ret, t | 5 << 8, fields >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);\n if (t == 7)\n ret.v /= 86400;\n return ret;\n}\nfunction write_new_storage(cell, lut) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;\n out[0] = 5;\n switch (cell.t) {\n case \"n\":\n if (cell.z && fmt_is_date(cell.z)) {\n out[1] = 5;\n dv.setFloat64(l, (numdate(cell.v + 1462).getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);\n fields |= 4;\n l += 8;\n break;\n } else {\n out[1] = 2;\n writeDecimal128LE(out, l, cell.v);\n fields |= 1;\n l += 16;\n }\n break;\n case \"b\":\n out[1] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n fields |= 2;\n l += 8;\n break;\n case \"s\":\n {\n var s = cell.v == null ? \"\" : String(cell.v);\n if (cell.l) {\n var irsst = lut.rsst.findIndex(function(v) {\n var _a;\n return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);\n });\n if (irsst == -1)\n lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };\n out[1] = 9;\n dv.setUint32(l, irsst, true);\n fields |= 16;\n l += 4;\n } else {\n var isst = lut.sst.indexOf(s);\n if (isst == -1)\n lut.sst[isst = lut.sst.length] = s;\n out[1] = 3;\n dv.setUint32(l, isst, true);\n fields |= 8;\n l += 4;\n }\n }\n break;\n case \"d\":\n out[1] = 5;\n dv.setFloat64(l, (cell.v.getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);\n fields |= 4;\n l += 8;\n break;\n case \"z\":\n out[1] = 0;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n if (cell.c) {\n lut.cmnt.push(s5s_to_iwa_comment(cell.c));\n dv.setUint32(l, lut.cmnt.length - 1, true);\n fields |= 524288;\n l += 4;\n }\n dv.setUint32(8, fields, true);\n return out[subarray](0, l);\n}\nfunction write_old_storage(cell, lut) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0, s = \"\";\n out[0] = 4;\n switch (cell.t) {\n case \"n\":\n break;\n case \"b\":\n break;\n case \"s\":\n {\n s = cell.v == null ? \"\" : String(cell.v);\n if (cell.l) {\n var irsst = lut.rsst.findIndex(function(v) {\n var _a;\n return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);\n });\n if (irsst == -1)\n lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };\n out[1] = 9;\n dv.setUint32(l, irsst, true);\n fields |= 512;\n l += 4;\n } else {\n }\n }\n break;\n case \"d\":\n break;\n case \"e\":\n break;\n case \"z\":\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n if (cell.c) {\n dv.setUint32(l, lut.cmnt.length - 1, true);\n fields |= 4096;\n l += 4;\n }\n switch (cell.t) {\n case \"n\":\n out[1] = 2;\n dv.setFloat64(l, cell.v, true);\n fields |= 32;\n l += 8;\n break;\n case \"b\":\n out[1] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n fields |= 32;\n l += 8;\n break;\n case \"s\":\n {\n s = cell.v == null ? \"\" : String(cell.v);\n if (cell.l) {\n } else {\n var isst = lut.sst.indexOf(s);\n if (isst == -1)\n lut.sst[isst = lut.sst.length] = s;\n out[1] = 3;\n dv.setUint32(l, isst, true);\n fields |= 16;\n l += 4;\n }\n }\n break;\n case \"d\":\n out[1] = 5;\n dv.setFloat64(l, (cell.v.getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);\n fields |= 64;\n l += 8;\n break;\n case \"z\":\n out[1] = 0;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n dv.setUint32(8, fields, true);\n return out[subarray](0, l);\n}\nfunction parse_cell_storage(buf, lut, opts) {\n switch (buf[0]) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n return parse_old_storage(buf, lut, buf[0], opts);\n case 5:\n return parse_new_storage(buf, lut, opts);\n default:\n throw new Error(\"Unsupported payload version \".concat(buf[0]));\n }\n}\nfunction parse_TSP_Reference(buf) {\n var pb = parse_shallow(buf);\n return varint_to_i32(pb[1][0].data);\n}\nfunction write_TSP_Reference(idx) {\n return write_shallow([\n [],\n [{ type: 0, data: write_varint49(idx) }]\n ]);\n}\nfunction numbers_add_oref(iwa, ref) {\n var _a;\n var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];\n var orefidx = orefs.indexOf(ref);\n if (orefidx == -1) {\n orefs.push(ref);\n iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];\n }\n}\nfunction numbers_del_oref(iwa, ref) {\n var _a;\n var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];\n iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs.filter(function(r) {\n return r != ref;\n })) }];\n}\nfunction parse_TST_TableDataList(M, root) {\n var pb = parse_shallow(root.data);\n var type = varint_to_i32(pb[1][0].data);\n var entries = pb[3];\n var data = [];\n (entries || []).forEach(function(entry) {\n var _a, _b;\n var le = parse_shallow(entry.data);\n if (!le[1])\n return;\n var key = varint_to_i32(le[1][0].data) >>> 0;\n switch (type) {\n case 1:\n data[key] = u8str(le[3][0].data);\n break;\n case 8:\n {\n var rt = M[parse_TSP_Reference(le[9][0].data)][0];\n var rtp = parse_shallow(rt.data);\n var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];\n var mtype = varint_to_i32(rtpref.meta[1][0].data);\n if (mtype != 2001)\n throw new Error(\"2000 unexpected reference to \".concat(mtype));\n var tswpsa = parse_shallow(rtpref.data);\n var richtext = { v: tswpsa[3].map(function(x) {\n return u8str(x.data);\n }).join(\"\") };\n data[key] = richtext;\n sfields:\n if ((_a = tswpsa == null ? void 0 : tswpsa[11]) == null ? void 0 : _a[0]) {\n var smartfields = (_b = parse_shallow(tswpsa[11][0].data)) == null ? void 0 : _b[1];\n if (!smartfields)\n break sfields;\n smartfields.forEach(function(sf) {\n var _a2, _b2, _c;\n var attr = parse_shallow(sf.data);\n if ((_a2 = attr[2]) == null ? void 0 : _a2[0]) {\n var obj = M[parse_TSP_Reference((_b2 = attr[2]) == null ? void 0 : _b2[0].data)][0];\n var objtype = varint_to_i32(obj.meta[1][0].data);\n switch (objtype) {\n case 2032:\n var hlink = parse_shallow(obj.data);\n if (((_c = hlink == null ? void 0 : hlink[2]) == null ? void 0 : _c[0]) && !richtext.l)\n richtext.l = u8str(hlink[2][0].data);\n break;\n case 2039:\n break;\n default:\n console.log(\"unrecognized ObjectAttribute type \".concat(objtype));\n }\n }\n });\n }\n }\n break;\n case 2:\n data[key] = parse_shallow(le[6][0].data);\n break;\n case 3:\n data[key] = parse_shallow(le[5][0].data);\n break;\n case 10:\n {\n var cs = M[parse_TSP_Reference(le[10][0].data)][0];\n data[key] = parse_TSD_CommentStorageArchive(M, cs.data);\n }\n break;\n default:\n throw type;\n }\n });\n return data;\n}\nfunction parse_TST_TileRowInfo(u8, type) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;\n var pb = parse_shallow(u8);\n var R = varint_to_i32(pb[1][0].data) >>> 0;\n var cnt = varint_to_i32(pb[2][0].data) >>> 0;\n var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;\n var used_storage_u8, used_storage;\n if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {\n used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;\n used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;\n } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {\n used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;\n used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;\n } else\n throw \"NUMBERS Tile missing \".concat(type, \" cell storage\");\n var width = wide_offsets ? 4 : 1;\n var used_storage_offsets = u8_to_dataview(used_storage_u8);\n var offsets = [];\n for (var C = 0; C < used_storage_u8.length / 2; ++C) {\n var off = used_storage_offsets.getUint16(C * 2, true);\n if (off < 65535)\n offsets.push([C, off]);\n }\n if (offsets.length != cnt)\n throw \"Expected \".concat(cnt, \" cells, found \").concat(offsets.length);\n var cells = [];\n for (C = 0; C < offsets.length - 1; ++C)\n cells[offsets[C][0]] = used_storage[subarray](offsets[C][1] * width, offsets[C + 1][1] * width);\n if (offsets.length >= 1)\n cells[offsets[offsets.length - 1][0]] = used_storage[subarray](offsets[offsets.length - 1][1] * width);\n return { R: R, cells: cells };\n}\nfunction parse_TST_Tile(M, root) {\n var _a;\n var pb = parse_shallow(root.data);\n var storage = -1;\n if ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) {\n if (varint_to_i32(pb[7][0].data) >>> 0)\n storage = 1;\n else\n storage = 0;\n }\n var ri = mappa(pb[5], function(u8) {\n return parse_TST_TileRowInfo(u8, storage);\n });\n return {\n nrows: varint_to_i32(pb[4][0].data) >>> 0,\n data: ri.reduce(function(acc, x) {\n if (!acc[x.R])\n acc[x.R] = [];\n x.cells.forEach(function(cell, C) {\n if (acc[x.R][C])\n throw new Error(\"Duplicate cell r=\".concat(x.R, \" c=\").concat(C));\n acc[x.R][C] = cell;\n });\n return acc;\n }, [])\n };\n}\nfunction parse_TSD_CommentStorageArchive(M, data) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n var out = { t: \"\", a: \"\" };\n var csp = parse_shallow(data);\n if ((_b = (_a = csp == null ? void 0 : csp[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data)\n out.t = u8str((_d = (_c = csp == null ? void 0 : csp[1]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) || \"\";\n if ((_f = (_e = csp == null ? void 0 : csp[3]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data) {\n var as = M[parse_TSP_Reference((_h = (_g = csp == null ? void 0 : csp[3]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data)][0];\n var asp = parse_shallow(as.data);\n if ((_j = (_i = asp[1]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data)\n out.a = u8str(asp[1][0].data);\n }\n if (csp == null ? void 0 : csp[4]) {\n out.replies = [];\n csp[4].forEach(function(pi) {\n var cs = M[parse_TSP_Reference(pi.data)][0];\n out.replies.push(parse_TSD_CommentStorageArchive(M, cs.data));\n });\n }\n return out;\n}\nfunction iwa_to_s5s_comment(iwa) {\n var out = [];\n out.push({ t: iwa.t || \"\", a: iwa.a, T: iwa.replies && iwa.replies.length > 0 });\n if (iwa.replies)\n iwa.replies.forEach(function(reply) {\n out.push({ t: reply.t || \"\", a: reply.a, T: true });\n });\n return out;\n}\nfunction s5s_to_iwa_comment(s5s) {\n var out = { a: \"\", t: \"\", replies: [] };\n for (var i = 0; i < s5s.length; ++i) {\n if (i == 0) {\n out.a = s5s[i].a;\n out.t = s5s[i].t;\n } else {\n out.replies.push({ a: s5s[i].a, t: s5s[i].t });\n }\n }\n return out;\n}\nfunction parse_TST_TableModelArchive(M, root, ws, opts) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n var pb = parse_shallow(root.data);\n var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };\n range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;\n if (range.e.r < 0)\n throw new Error(\"Invalid row varint \".concat(pb[6][0].data));\n range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;\n if (range.e.c < 0)\n throw new Error(\"Invalid col varint \".concat(pb[7][0].data));\n ws[\"!ref\"] = encode_range(range);\n var dense = ws[\"!data\"] != null, dws = ws;\n var store = parse_shallow(pb[4][0].data);\n var lut = numbers_lut_new();\n if ((_a = store[4]) == null ? void 0 : _a[0])\n lut.sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);\n if ((_b = store[6]) == null ? void 0 : _b[0])\n lut.fmla = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[6][0].data)][0]);\n if ((_c = store[11]) == null ? void 0 : _c[0])\n lut.ofmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[11][0].data)][0]);\n if ((_d = store[12]) == null ? void 0 : _d[0])\n lut.ferr = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[12][0].data)][0]);\n if ((_e = store[17]) == null ? void 0 : _e[0])\n lut.rsst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]);\n if ((_f = store[19]) == null ? void 0 : _f[0])\n lut.cmnt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[19][0].data)][0]);\n if ((_g = store[22]) == null ? void 0 : _g[0])\n lut.nfmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[22][0].data)][0]);\n var tile = parse_shallow(store[3][0].data);\n var _R = 0;\n if (!((_h = store[9]) == null ? void 0 : _h[0]))\n throw \"NUMBERS file missing row tree\";\n var rtt = parse_shallow(store[9][0].data)[1].map(function(p) {\n return parse_shallow(p.data);\n });\n rtt.forEach(function(kv) {\n _R = varint_to_i32(kv[1][0].data);\n var tidx = varint_to_i32(kv[2][0].data);\n var t = tile[1][tidx];\n if (!t)\n throw \"NUMBERS missing tile \" + tidx;\n var tl = parse_shallow(t.data);\n var ref2 = M[parse_TSP_Reference(tl[2][0].data)][0];\n var mtype2 = varint_to_i32(ref2.meta[1][0].data);\n if (mtype2 != 6002)\n throw new Error(\"6001 unexpected reference to \".concat(mtype2));\n var _tile = parse_TST_Tile(M, ref2);\n _tile.data.forEach(function(row, R) {\n row.forEach(function(buf, C) {\n var res = parse_cell_storage(buf, lut, opts);\n if (res) {\n if (dense) {\n if (!dws[\"!data\"][_R + R])\n dws[\"!data\"][_R + R] = [];\n dws[\"!data\"][_R + R][C] = res;\n } else {\n ws[encode_col(C) + encode_row(_R + R)] = res;\n }\n }\n });\n });\n _R += _tile.nrows;\n });\n if ((_i = store[13]) == null ? void 0 : _i[0]) {\n var ref = M[parse_TSP_Reference(store[13][0].data)][0];\n var mtype = varint_to_i32(ref.meta[1][0].data);\n if (mtype != 6144)\n throw new Error(\"Expected merge type 6144, found \".concat(mtype));\n ws[\"!merges\"] = (_j = parse_shallow(ref.data)) == null ? void 0 : _j[1].map(function(pi) {\n var merge = parse_shallow(pi.data);\n var origin = u8_to_dataview(parse_shallow(merge[1][0].data)[1][0].data), size = u8_to_dataview(parse_shallow(merge[2][0].data)[1][0].data);\n return {\n s: { r: origin.getUint16(0, true), c: origin.getUint16(2, true) },\n e: {\n r: origin.getUint16(0, true) + size.getUint16(0, true) - 1,\n c: origin.getUint16(2, true) + size.getUint16(2, true) - 1\n }\n };\n });\n }\n}\nfunction parse_TST_TableInfoArchive(M, root, opts) {\n var pb = parse_shallow(root.data);\n var out = { \"!ref\": \"A1\" };\n if (opts == null ? void 0 : opts.dense)\n out[\"!data\"] = [];\n var tableref = M[parse_TSP_Reference(pb[2][0].data)];\n var mtype = varint_to_i32(tableref[0].meta[1][0].data);\n if (mtype != 6001)\n throw new Error(\"6000 unexpected reference to \".concat(mtype));\n parse_TST_TableModelArchive(M, tableref[0], out, opts);\n return out;\n}\nfunction parse_TN_SheetArchive(M, root, opts) {\n var _a;\n var pb = parse_shallow(root.data);\n var out = {\n name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : \"\",\n sheets: []\n };\n var shapeoffs = mappa(pb[2], parse_TSP_Reference);\n shapeoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 6e3)\n out.sheets.push(parse_TST_TableInfoArchive(M, m, opts));\n });\n });\n return out;\n}\nfunction parse_TN_DocumentArchive(M, root, opts) {\n var _a;\n var out = book_new();\n out.Workbook = { WBProps: { date1904: true } };\n var pb = parse_shallow(root.data);\n if ((_a = pb[2]) == null ? void 0 : _a[0])\n throw new Error(\"Keynote presentations are not supported\");\n var sheetoffs = mappa(pb[1], parse_TSP_Reference);\n sheetoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 2) {\n var root2 = parse_TN_SheetArchive(M, m, opts);\n root2.sheets.forEach(function(sheet, idx) {\n book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + \"_\" + idx, true);\n });\n }\n });\n });\n if (out.SheetNames.length == 0)\n throw new Error(\"Empty NUMBERS file\");\n out.bookType = \"numbers\";\n return out;\n}\nfunction parse_numbers_iwa(cfb, opts) {\n var _a, _b, _c, _d, _e, _f, _g;\n var M = {}, indices = [];\n cfb.FullPaths.forEach(function(p) {\n if (p.match(/\\.iwpv2/))\n throw new Error(\"Unsupported password protection\");\n });\n cfb.FileIndex.forEach(function(s) {\n if (!s.name.match(/\\.iwa$/))\n return;\n if (s.content[0] != 0)\n return;\n var o;\n try {\n o = decompress_iwa_file(s.content);\n } catch (e) {\n return console.log(\"?? \" + s.content.length + \" \" + (e.message || e));\n }\n var packets;\n try {\n packets = parse_iwa_file(o);\n } catch (e) {\n return console.log(\"## \" + (e.message || e));\n }\n packets.forEach(function(packet) {\n M[packet.id] = packet.messages;\n indices.push(packet.id);\n });\n });\n if (!indices.length)\n throw new Error(\"File has no messages\");\n if (((_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0].meta) == null ? void 0 : _b[1]) == null ? void 0 : _c[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1e4)\n throw new Error(\"Pages documents are not supported\");\n var docroot = ((_g = (_f = (_e = (_d = M == null ? void 0 : M[1]) == null ? void 0 : _d[0]) == null ? void 0 : _e.meta) == null ? void 0 : _f[1]) == null ? void 0 : _g[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];\n if (!docroot)\n indices.forEach(function(idx) {\n M[idx].forEach(function(iwam) {\n var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;\n if (mtype == 1) {\n if (!docroot)\n docroot = iwam;\n else\n throw new Error(\"Document has multiple roots\");\n }\n });\n });\n if (!docroot)\n throw new Error(\"Cannot find Document root\");\n return parse_TN_DocumentArchive(M, docroot, opts);\n}\nfunction write_TST_TileRowInfo(data, lut, wide) {\n var _a, _b, _c;\n var tri = [\n [],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 2, data: new Uint8Array([]) }],\n [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {\n return 255;\n })) }],\n [{ type: 0, data: write_varint49(5) }],\n [{ type: 2, data: new Uint8Array([]) }],\n [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {\n return 255;\n })) }],\n [{ type: 0, data: write_varint49(1) }]\n ];\n if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))\n throw \"Mutation only works on post-BNC storages!\";\n var cnt = 0;\n if (tri[7][0].data.length < 2 * data.length) {\n var new_7 = new Uint8Array(2 * data.length);\n new_7.set(tri[7][0].data);\n tri[7][0].data = new_7;\n }\n if (tri[4][0].data.length < 2 * data.length) {\n var new_4 = new Uint8Array(2 * data.length);\n new_4.set(tri[4][0].data);\n tri[4][0].data = new_4;\n }\n var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];\n var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];\n var width = wide ? 4 : 1;\n for (var C = 0; C < data.length; ++C) {\n if (data[C] == null || data[C].t == \"z\" && !((_c = data[C].c) == null ? void 0 : _c.length) || data[C].t == \"e\") {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535);\n continue;\n }\n dv.setUint16(C * 2, last_offset / width, true);\n _dv.setUint16(C * 2, _last_offset / width, true);\n var celload, _celload;\n switch (data[C].t) {\n case \"d\":\n if (data[C].v instanceof Date) {\n celload = write_new_storage(data[C], lut);\n _celload = write_old_storage(data[C], lut);\n break;\n }\n celload = write_new_storage(data[C], lut);\n _celload = write_old_storage(data[C], lut);\n break;\n case \"s\":\n case \"n\":\n case \"b\":\n case \"z\":\n celload = write_new_storage(data[C], lut);\n _celload = write_old_storage(data[C], lut);\n break;\n default:\n throw new Error(\"Unsupported value \" + data[C]);\n }\n cell_storage.push(celload);\n last_offset += celload.length;\n {\n _cell_storage.push(_celload);\n _last_offset += _celload.length;\n }\n ++cnt;\n }\n tri[2][0].data = write_varint49(cnt);\n tri[5][0].data = write_varint49(5);\n for (; C < tri[7][0].data.length / 2; ++C) {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535, true);\n }\n tri[6][0].data = u8concat(cell_storage);\n tri[3][0].data = u8concat(_cell_storage);\n tri[8] = [{ type: 0, data: write_varint49(wide ? 1 : 0) }];\n return tri;\n}\nfunction write_iwam(type, payload) {\n return {\n meta: [\n [],\n [{ type: 0, data: write_varint49(type) }]\n ],\n data: payload\n };\n}\nfunction get_unique_msgid(dep, dependents) {\n if (!dependents.last)\n dependents.last = 927262;\n for (var i = dependents.last; i < 2e6; ++i)\n if (!dependents[i]) {\n dependents[dependents.last = i] = dep;\n return i;\n }\n throw new Error(\"Too many messages\");\n}\nfunction build_numbers_deps(cfb) {\n var dependents = {};\n var indices = [];\n cfb.FileIndex.map(function(fi, idx) {\n return [fi, cfb.FullPaths[idx]];\n }).forEach(function(row) {\n var fi = row[0], fp = row[1];\n if (fi.type != 2)\n return;\n if (!fi.name.match(/\\.iwa/))\n return;\n if (fi.content[0] != 0)\n return;\n parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(packet) {\n indices.push(packet.id);\n dependents[packet.id] = { deps: [], location: fp, type: varint_to_i32(packet.messages[0].meta[1][0].data) };\n });\n });\n cfb.FileIndex.forEach(function(fi) {\n if (!fi.name.match(/\\.iwa/))\n return;\n if (fi.content[0] != 0)\n return;\n parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(ia) {\n ia.messages.forEach(function(mess) {\n [5, 6].forEach(function(f) {\n if (!mess.meta[f])\n return;\n mess.meta[f].forEach(function(x) {\n dependents[ia.id].deps.push(varint_to_i32(x.data));\n });\n });\n });\n });\n });\n return dependents;\n}\nfunction write_TSP_Color_RGB(r, g, b) {\n return write_shallow([\n [],\n [{ type: 0, data: write_varint49(1) }],\n [],\n [{ type: 5, data: new Uint8Array(Float32Array.from([r / 255]).buffer) }],\n [{ type: 5, data: new Uint8Array(Float32Array.from([g / 255]).buffer) }],\n [{ type: 5, data: new Uint8Array(Float32Array.from([b / 255]).buffer) }],\n [{ type: 5, data: new Uint8Array(Float32Array.from([1]).buffer) }],\n [],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(1) }]\n ]);\n}\nfunction get_author_color(n) {\n switch (n) {\n case 0:\n return write_TSP_Color_RGB(99, 222, 171);\n case 1:\n return write_TSP_Color_RGB(162, 197, 240);\n case 2:\n return write_TSP_Color_RGB(255, 189, 189);\n }\n return write_TSP_Color_RGB(Math.random() * 255, Math.random() * 255, Math.random() * 255);\n}\nfunction write_numbers_iwa(wb, opts) {\n if (!opts || !opts.numbers)\n throw new Error(\"Must pass a `numbers` option -- check the README\");\n var cfb = CFB.read(opts.numbers, { type: \"base64\" });\n var deps = build_numbers_deps(cfb);\n var docroot = numbers_iwa_find(cfb, deps, 1);\n if (docroot == null)\n throw \"Could not find message \".concat(1, \" in Numbers template\");\n var sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);\n if (sheetrefs.length > 1)\n throw new Error(\"Template NUMBERS file must have exactly one sheet\");\n wb.SheetNames.forEach(function(name, idx) {\n if (idx >= 1) {\n numbers_add_ws(cfb, deps, idx + 1);\n docroot = numbers_iwa_find(cfb, deps, 1);\n sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);\n }\n write_numbers_ws(cfb, deps, wb.Sheets[name], name, idx, sheetrefs[idx]);\n });\n return cfb;\n}\nfunction numbers_iwa_doit(cfb, deps, id, cb) {\n var entry = CFB.find(cfb, deps[id].location);\n if (!entry)\n throw \"Could not find \".concat(deps[id].location, \" in Numbers template\");\n var x = parse_iwa_file(decompress_iwa_file(entry.content));\n var ainfo = x.find(function(packet) {\n return packet.id == id;\n });\n cb(ainfo, x);\n entry.content = compress_iwa_file(write_iwa_file(x));\n entry.size = entry.content.length;\n}\nfunction numbers_iwa_find(cfb, deps, id) {\n var entry = CFB.find(cfb, deps[id].location);\n if (!entry)\n throw \"Could not find \".concat(deps[id].location, \" in Numbers template\");\n var x = parse_iwa_file(decompress_iwa_file(entry.content));\n var ainfo = x.find(function(packet) {\n return packet.id == id;\n });\n return ainfo;\n}\nfunction numbers_add_meta(mlist, newid, newloc) {\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newid) }],\n [{ type: 2, data: stru8(newloc.replace(/-[\\s\\S]*$/, \"\")) }],\n [{ type: 2, data: stru8(newloc) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newid + 1, varint_to_i32(mlist[1][0].data))) }];\n}\nfunction numbers_add_msg(cfb, type, msg, path, deps, id) {\n if (!id)\n id = get_unique_msgid({ deps: [], location: \"\", type: type }, deps);\n var loc = \"\".concat(path, \"-\").concat(id, \".iwa\");\n deps[id].location = \"Root Entry\" + loc;\n CFB.utils.cfb_add(cfb, loc, compress_iwa_file(write_iwa_file([{\n id: id,\n messages: [write_iwam(type, write_shallow(msg))]\n }])));\n var newloc = loc.replace(/^[\\/]/, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_add_meta(mlist, id || 0, newloc);\n ai.messages[0].data = write_shallow(mlist);\n });\n return id;\n}\nfunction numbers_meta_add_dep(mlist, deps, id, dep) {\n var loc = deps[id].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n var parentidx = mlist[3].findIndex(function(m) {\n var _a, _b;\n var mm = parse_shallow(m.data);\n if ((_a = mm[3]) == null ? void 0 : _a[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n (Array.isArray(dep) ? dep : [dep]).forEach(function(dep2) {\n parent[6].push({\n type: 2,\n data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(dep2) }]\n ])\n });\n });\n mlist[3][parentidx].data = write_shallow(parent);\n}\nfunction numbers_meta_del_dep(mlist, deps, id, dep) {\n var loc = deps[id].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n var parentidx = mlist[3].findIndex(function(m) {\n var _a, _b;\n var mm = parse_shallow(m.data);\n if ((_a = mm[3]) == null ? void 0 : _a[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n parent[6] = parent[6].filter(function(m) {\n return varint_to_i32(parse_shallow(m.data)[1][0].data) != dep;\n });\n mlist[3][parentidx].data = write_shallow(parent);\n}\nfunction numbers_add_ws(cfb, deps, wsidx) {\n var sheetref = -1, newsheetref = -1;\n var remap = {};\n numbers_iwa_doit(cfb, deps, 1, function(docroot, arch) {\n var doc = parse_shallow(docroot.messages[0].data);\n sheetref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);\n newsheetref = get_unique_msgid({ deps: [1], location: deps[sheetref].location, type: 2 }, deps);\n remap[sheetref] = newsheetref;\n numbers_add_oref(docroot, newsheetref);\n doc[1].push({ type: 2, data: write_TSP_Reference(newsheetref) });\n var sheet = numbers_iwa_find(cfb, deps, sheetref);\n sheet.id = newsheetref;\n if (deps[1].location == deps[newsheetref].location)\n arch.push(sheet);\n else\n numbers_iwa_doit(cfb, deps, newsheetref, function(_, x) {\n return x.push(sheet);\n });\n docroot.messages[0].data = write_shallow(doc);\n });\n var tiaref = -1;\n numbers_iwa_doit(cfb, deps, newsheetref, function(sheetroot, arch) {\n var sa = parse_shallow(sheetroot.messages[0].data);\n for (var i = 3; i <= 69; ++i)\n delete sa[i];\n var drawables = mappa(sa[2], parse_TSP_Reference);\n drawables.forEach(function(n) {\n return numbers_del_oref(sheetroot, n);\n });\n tiaref = get_unique_msgid({ deps: [newsheetref], location: deps[drawables[0]].location, type: deps[drawables[0]].type }, deps);\n numbers_add_oref(sheetroot, tiaref);\n remap[drawables[0]] = tiaref;\n sa[2] = [{ type: 2, data: write_TSP_Reference(tiaref) }];\n var tia = numbers_iwa_find(cfb, deps, drawables[0]);\n tia.id = tiaref;\n if (deps[drawables[0]].location == deps[newsheetref].location)\n arch.push(tia);\n else {\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, newsheetref, tiaref);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_iwa_doit(cfb, deps, tiaref, function(_, x) {\n return x.push(tia);\n });\n }\n sheetroot.messages[0].data = write_shallow(sa);\n });\n var tmaref = -1;\n numbers_iwa_doit(cfb, deps, tiaref, function(tiaroot, arch) {\n var tia = parse_shallow(tiaroot.messages[0].data);\n var da = parse_shallow(tia[1][0].data);\n for (var i = 3; i <= 69; ++i)\n delete da[i];\n var dap = parse_TSP_Reference(da[2][0].data);\n da[2][0].data = write_TSP_Reference(remap[dap]);\n tia[1][0].data = write_shallow(da);\n var oldtmaref = parse_TSP_Reference(tia[2][0].data);\n numbers_del_oref(tiaroot, oldtmaref);\n tmaref = get_unique_msgid({ deps: [tiaref], location: deps[oldtmaref].location, type: deps[oldtmaref].type }, deps);\n numbers_add_oref(tiaroot, tmaref);\n remap[oldtmaref] = tmaref;\n tia[2][0].data = write_TSP_Reference(tmaref);\n var tma = numbers_iwa_find(cfb, deps, oldtmaref);\n tma.id = tmaref;\n if (deps[tiaref].location == deps[tmaref].location)\n arch.push(tma);\n else\n numbers_iwa_doit(cfb, deps, tmaref, function(_, x) {\n return x.push(tma);\n });\n tiaroot.messages[0].data = write_shallow(tia);\n });\n numbers_iwa_doit(cfb, deps, tmaref, function(tmaroot, arch) {\n var _a, _b;\n var tma = parse_shallow(tmaroot.messages[0].data);\n var uuid = u8str(tma[1][0].data), new_uuid = uuid.replace(/-[A-Z0-9]*/, \"-\".concat((\"0000\" + wsidx.toString(16)).slice(-4)));\n tma[1][0].data = stru8(new_uuid);\n [12, 13, 29, 31, 32, 33, 39, 44, 47, 81, 82, 84].forEach(function(n) {\n return delete tma[n];\n });\n if (tma[45]) {\n var srrta = parse_shallow(tma[45][0].data);\n var ref = parse_TSP_Reference(srrta[1][0].data);\n numbers_del_oref(tmaroot, ref);\n delete tma[45];\n }\n if (tma[70]) {\n var hsoa = parse_shallow(tma[70][0].data);\n (_a = hsoa[2]) == null ? void 0 : _a.forEach(function(item) {\n var hsa = parse_shallow(item.data);\n [2, 3].map(function(n) {\n return hsa[n][0];\n }).forEach(function(hseadata) {\n var hsea = parse_shallow(hseadata.data);\n if (!hsea[8])\n return;\n var ref2 = parse_TSP_Reference(hsea[8][0].data);\n numbers_del_oref(tmaroot, ref2);\n });\n });\n delete tma[70];\n }\n [\n 46,\n 30,\n 34,\n 35,\n 36,\n 38,\n 48,\n 49,\n 60,\n 61,\n 62,\n 63,\n 64,\n 71,\n 72,\n 73,\n 74,\n 75,\n 85,\n 86,\n 87,\n 88,\n 89\n ].forEach(function(n) {\n if (!tma[n])\n return;\n var ref2 = parse_TSP_Reference(tma[n][0].data);\n delete tma[n];\n numbers_del_oref(tmaroot, ref2);\n });\n var store = parse_shallow(tma[4][0].data);\n {\n [2, 4, 5, 6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22].forEach(function(n) {\n var _a2;\n if (!((_a2 = store[n]) == null ? void 0 : _a2[0]))\n return;\n var oldref = parse_TSP_Reference(store[n][0].data);\n var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);\n numbers_del_oref(tmaroot, oldref);\n numbers_add_oref(tmaroot, newref);\n remap[oldref] = newref;\n var msg = numbers_iwa_find(cfb, deps, oldref);\n msg.id = newref;\n if (deps[oldref].location == deps[tmaref].location)\n arch.push(msg);\n else {\n deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());\n if (deps[newref].location == deps[oldref].location)\n deps[newref].location = deps[newref].location.replace(/\\.iwa/, \"-\".concat(newref, \".iwa\"));\n CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));\n var newloc = deps[newref].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_add_meta(mlist, newref, newloc);\n numbers_meta_add_dep(mlist, deps, tmaref, newref);\n ai.messages[0].data = write_shallow(mlist);\n });\n }\n store[n][0].data = write_TSP_Reference(newref);\n });\n var row_headers = parse_shallow(store[1][0].data);\n {\n (_b = row_headers[2]) == null ? void 0 : _b.forEach(function(tspref) {\n var oldref = parse_TSP_Reference(tspref.data);\n var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);\n numbers_del_oref(tmaroot, oldref);\n numbers_add_oref(tmaroot, newref);\n remap[oldref] = newref;\n var msg = numbers_iwa_find(cfb, deps, oldref);\n msg.id = newref;\n if (deps[oldref].location == deps[tmaref].location) {\n arch.push(msg);\n } else {\n deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());\n if (deps[newref].location == deps[oldref].location)\n deps[newref].location = deps[newref].location.replace(/\\.iwa/, \"-\".concat(newref, \".iwa\"));\n CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));\n var newloc = deps[newref].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_add_meta(mlist, newref, newloc);\n numbers_meta_add_dep(mlist, deps, tmaref, newref);\n ai.messages[0].data = write_shallow(mlist);\n });\n }\n tspref.data = write_TSP_Reference(newref);\n });\n }\n store[1][0].data = write_shallow(row_headers);\n var tiles = parse_shallow(store[3][0].data);\n {\n tiles[1].forEach(function(t) {\n var tst = parse_shallow(t.data);\n var oldtileref = parse_TSP_Reference(tst[2][0].data);\n var newtileref = remap[oldtileref];\n if (!remap[oldtileref]) {\n newtileref = get_unique_msgid({ deps: [tmaref], location: \"\", type: deps[oldtileref].type }, deps);\n deps[newtileref].location = \"Root Entry/Index/Tables/Tile-\".concat(newtileref, \".iwa\");\n remap[oldtileref] = newtileref;\n var oldtile = numbers_iwa_find(cfb, deps, oldtileref);\n oldtile.id = newtileref;\n numbers_del_oref(tmaroot, oldtileref);\n numbers_add_oref(tmaroot, newtileref);\n CFB.utils.cfb_add(cfb, \"/Index/Tables/Tile-\".concat(newtileref, \".iwa\"), compress_iwa_file(write_iwa_file([oldtile])));\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newtileref) }],\n [{ type: 2, data: stru8(\"Tables/Tile\") }],\n [{ type: 2, data: stru8(\"Tables/Tile-\".concat(newtileref)) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileref + 1, varint_to_i32(mlist[1][0].data))) }];\n numbers_meta_add_dep(mlist, deps, tmaref, newtileref);\n ai.messages[0].data = write_shallow(mlist);\n });\n }\n tst[2][0].data = write_TSP_Reference(newtileref);\n t.data = write_shallow(tst);\n });\n }\n store[3][0].data = write_shallow(tiles);\n }\n tma[4][0].data = write_shallow(store);\n tmaroot.messages[0].data = write_shallow(tma);\n });\n}\nfunction write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {\n var drawables = [];\n numbers_iwa_doit(cfb, deps, rootref, function(docroot) {\n var sheetref = parse_shallow(docroot.messages[0].data);\n {\n sheetref[1] = [{ type: 2, data: stru8(wsname) }];\n drawables = mappa(sheetref[2], parse_TSP_Reference);\n }\n docroot.messages[0].data = write_shallow(sheetref);\n });\n var tia = numbers_iwa_find(cfb, deps, drawables[0]);\n var tmaref = parse_TSP_Reference(parse_shallow(tia.messages[0].data)[2][0].data);\n numbers_iwa_doit(cfb, deps, tmaref, function(docroot, x) {\n return write_numbers_tma(cfb, deps, ws, docroot, x, tmaref);\n });\n}\nvar USE_WIDE_ROWS = true;\nfunction write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {\n if (!ws[\"!ref\"])\n throw new Error(\"Cannot export empty sheet to NUMBERS\");\n var range = decode_range(ws[\"!ref\"]);\n range.s.r = range.s.c = 0;\n var trunc = false;\n if (range.e.c > 999) {\n trunc = true;\n range.e.c = 999;\n }\n if (range.e.r > 999999) {\n trunc = true;\n range.e.r = 999999;\n }\n if (trunc)\n console.error(\"Truncating to \".concat(encode_range(range)));\n var data = [];\n if (ws[\"!data\"])\n data = ws[\"!data\"];\n else {\n var colstr = [];\n for (var _C = 0; _C <= range.e.c; ++_C)\n colstr[_C] = encode_col(_C);\n for (var R_ = 0; R_ <= range.e.r; ++R_) {\n data[R_] = [];\n var _R = \"\" + (R_ + 1);\n for (_C = 0; _C <= range.e.c; ++_C) {\n var _cell = ws[colstr[_C] + _R];\n if (!_cell)\n continue;\n data[R_][_C] = _cell;\n }\n }\n }\n var LUT = {\n cmnt: [{ a: \"~54ee77S~\", t: \"... the people who are crazy enough to think they can change the world, are the ones who do.\" }],\n ferr: [],\n fmla: [],\n nfmt: [],\n ofmt: [],\n rsst: [{ v: \"~54ee77S~\", l: \"https://sheetjs.com/\" }],\n sst: [\"~Sh33tJ5~\"]\n };\n var pb = parse_shallow(tmaroot.messages[0].data);\n {\n pb[6][0].data = write_varint49(range.e.r + 1);\n pb[7][0].data = write_varint49(range.e.c + 1);\n delete pb[46];\n var store = parse_shallow(pb[4][0].data);\n {\n var row_header_ref = parse_TSP_Reference(parse_shallow(store[1][0].data)[2][0].data);\n numbers_iwa_doit(cfb, deps, row_header_ref, function(rowhead, _x) {\n var _a;\n var base_bucket = parse_shallow(rowhead.messages[0].data);\n if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])\n for (var R2 = 0; R2 < data.length; ++R2) {\n var _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(R2);\n _bucket[4][0].data = write_varint49(data[R2].length);\n base_bucket[2][R2] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n rowhead.messages[0].data = write_shallow(base_bucket);\n });\n var col_header_ref = parse_TSP_Reference(store[2][0].data);\n numbers_iwa_doit(cfb, deps, col_header_ref, function(colhead, _x) {\n var base_bucket = parse_shallow(colhead.messages[0].data);\n for (var C = 0; C <= range.e.c; ++C) {\n var _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(C);\n _bucket[4][0].data = write_varint49(range.e.r + 1);\n base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n colhead.messages[0].data = write_shallow(base_bucket);\n });\n var rbtree = parse_shallow(store[9][0].data);\n rbtree[1] = [];\n var tilestore = parse_shallow(store[3][0].data);\n {\n var tstride = 256;\n tilestore[2] = [{ type: 0, data: write_varint49(tstride) }];\n var tileref = parse_TSP_Reference(parse_shallow(tilestore[1][0].data)[2][0].data);\n var save_token = function() {\n var metadata = numbers_iwa_find(cfb, deps, 2);\n var mlist = parse_shallow(metadata.messages[0].data);\n var mlst = mlist[3].filter(function(m) {\n return varint_to_i32(parse_shallow(m.data)[1][0].data) == tileref;\n });\n return (mlst == null ? void 0 : mlst.length) ? varint_to_i32(parse_shallow(mlst[0].data)[12][0].data) : 0;\n }();\n {\n CFB.utils.cfb_del(cfb, deps[tileref].location);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3] = mlist[3].filter(function(m) {\n return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;\n });\n numbers_meta_del_dep(mlist, deps, tmaref, tileref);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_del_oref(tmaroot, tileref);\n }\n tilestore[1] = [];\n var ntiles = Math.ceil((range.e.r + 1) / tstride);\n for (var tidx = 0; tidx < ntiles; ++tidx) {\n var newtileid = get_unique_msgid({\n deps: [],\n location: \"\",\n type: 6002\n }, deps);\n deps[newtileid].location = \"Root Entry/Index/Tables/Tile-\".concat(newtileid, \".iwa\");\n var tiledata = [\n [],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 0, data: write_varint49(Math.min(range.e.r + 1, (tidx + 1) * tstride)) }],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 0, data: write_varint49(Math.min((tidx + 1) * tstride, range.e.r + 1) - tidx * tstride) }],\n [],\n [{ type: 0, data: write_varint49(5) }],\n [{ type: 0, data: write_varint49(1) }],\n [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]\n ];\n for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {\n var tilerow = write_TST_TileRowInfo(data[R], LUT, USE_WIDE_ROWS);\n tilerow[1][0].data = write_varint49(R - tidx * tstride);\n tiledata[5].push({ data: write_shallow(tilerow), type: 2 });\n }\n tilestore[1].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(tidx) }],\n [{ type: 2, data: write_TSP_Reference(newtileid) }]\n ]) });\n var newtile = {\n id: newtileid,\n messages: [write_iwam(6002, write_shallow(tiledata))]\n };\n var tilecontent = compress_iwa_file(write_iwa_file([newtile]));\n CFB.utils.cfb_add(cfb, \"/Index/Tables/Tile-\".concat(newtileid, \".iwa\"), tilecontent);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newtileid) }],\n [{ type: 2, data: stru8(\"Tables/Tile\") }],\n [{ type: 2, data: stru8(\"Tables/Tile-\".concat(newtileid)) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(save_token) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, varint_to_i32(mlist[1][0].data))) }];\n numbers_meta_add_dep(mlist, deps, tmaref, newtileid);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_add_oref(tmaroot, newtileid);\n rbtree[1].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(tidx * tstride) }],\n [{ type: 0, data: write_varint49(tidx) }]\n ]) });\n }\n }\n store[3][0].data = write_shallow(tilestore);\n store[9][0].data = write_shallow(rbtree);\n store[10] = [{ type: 2, data: new Uint8Array([]) }];\n if (ws[\"!merges\"]) {\n var mergeid = get_unique_msgid({\n type: 6144,\n deps: [tmaref],\n location: deps[tmaref].location\n }, deps);\n tmafile.push({\n id: mergeid,\n messages: [write_iwam(6144, write_shallow([\n [],\n ws[\"!merges\"].map(function(m) {\n return { type: 2, data: write_shallow([\n [],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]\n ]) }],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]\n ]) }]\n ]) };\n })\n ]))]\n });\n store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, tmaref, mergeid);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_add_oref(tmaroot, mergeid);\n } else\n delete store[13];\n var sstref = parse_TSP_Reference(store[4][0].data);\n numbers_iwa_doit(cfb, deps, sstref, function(sstroot) {\n var sstdata = parse_shallow(sstroot.messages[0].data);\n {\n sstdata[3] = [];\n LUT.sst.forEach(function(str, i) {\n if (i == 0)\n return;\n sstdata[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(i) }],\n [{ type: 0, data: write_varint49(1) }],\n [{ type: 2, data: stru8(str) }]\n ]) });\n });\n }\n sstroot.messages[0].data = write_shallow(sstdata);\n });\n var rsstref = parse_TSP_Reference(store[17][0].data);\n numbers_iwa_doit(cfb, deps, rsstref, function(rsstroot) {\n var rsstdata = parse_shallow(rsstroot.messages[0].data);\n rsstdata[3] = [];\n var style_indices = [\n 904980,\n 903835,\n 903815,\n 903845\n ];\n LUT.rsst.forEach(function(rsst, i) {\n if (i == 0)\n return;\n var tswpsa = [\n [],\n [{ type: 0, data: new Uint8Array([5]) }],\n [],\n [{ type: 2, data: stru8(rsst.v) }]\n ];\n tswpsa[10] = [{ type: 0, data: new Uint8Array([1]) }];\n tswpsa[19] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 18, 2, 101, 110]) }];\n tswpsa[5] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 155, 149, 55]) }];\n tswpsa[2] = [{ type: 2, data: new Uint8Array([8, 148, 158, 55]) }];\n tswpsa[6] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];\n tswpsa[7] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 135, 149, 55]) }];\n tswpsa[8] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 165, 149, 55]) }];\n tswpsa[14] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];\n tswpsa[24] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];\n var tswpsaid = get_unique_msgid({ deps: [], location: \"\", type: 2001 }, deps);\n var tswpsarefs = [];\n if (rsst.l) {\n var newhlinkid = numbers_add_msg(cfb, 2032, [\n [],\n [],\n [{ type: 2, data: stru8(rsst.l) }]\n ], \"/Index/Tables/DataList\", deps);\n tswpsa[11] = [];\n var smartfield = [[], []];\n if (!smartfield[1])\n smartfield[1] = [];\n smartfield[1].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 2, data: write_TSP_Reference(newhlinkid) }]\n ]) });\n tswpsa[11][0] = { type: 2, data: write_shallow(smartfield) };\n tswpsarefs.push(newhlinkid);\n }\n numbers_add_msg(cfb, 2001, tswpsa, \"/Index/Tables/DataList\", deps, tswpsaid);\n numbers_iwa_doit(cfb, deps, tswpsaid, function(iwa) {\n style_indices.forEach(function(ref) {\n return numbers_add_oref(iwa, ref);\n });\n tswpsarefs.forEach(function(ref) {\n return numbers_add_oref(iwa, ref);\n });\n });\n var rtpaid = numbers_add_msg(cfb, 6218, [\n [],\n [{ type: 2, data: write_TSP_Reference(tswpsaid) }],\n [],\n [{ type: 2, data: new Uint8Array([13, 255, 255, 255, 0, 18, 10, 16, 255, 255, 1, 24, 255, 255, 255, 255, 7]) }]\n ], \"/Index/Tables/DataList\", deps);\n numbers_iwa_doit(cfb, deps, rtpaid, function(iwa) {\n return numbers_add_oref(iwa, tswpsaid);\n });\n rsstdata[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(i) }],\n [{ type: 0, data: write_varint49(1) }],\n [],\n [],\n [],\n [],\n [],\n [],\n [{ type: 2, data: write_TSP_Reference(rtpaid) }]\n ]) });\n numbers_add_oref(rsstroot, rtpaid);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, rsstref, rtpaid);\n numbers_meta_add_dep(mlist, deps, rtpaid, tswpsaid);\n numbers_meta_add_dep(mlist, deps, tswpsaid, tswpsarefs);\n numbers_meta_add_dep(mlist, deps, tswpsaid, style_indices);\n ai.messages[0].data = write_shallow(mlist);\n });\n });\n rsstroot.messages[0].data = write_shallow(rsstdata);\n });\n if (LUT.cmnt.length > 1) {\n var cmntref = parse_TSP_Reference(store[19][0].data);\n var authors = {}, iauthor = 0;\n numbers_iwa_doit(cfb, deps, cmntref, function(cmntroot) {\n var cmntdata = parse_shallow(cmntroot.messages[0].data);\n {\n cmntdata[3] = [];\n LUT.cmnt.forEach(function(cc, i) {\n if (i == 0)\n return;\n var replies = [];\n if (cc.replies)\n cc.replies.forEach(function(c) {\n if (!authors[c.a || \"\"])\n authors[c.a || \"\"] = numbers_add_msg(cfb, 212, [\n [],\n [{ type: 2, data: stru8(c.a || \"\") }],\n [{ type: 2, data: get_author_color(++iauthor) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ], \"/Index/Tables/DataList\", deps);\n var aaaid2 = authors[c.a || \"\"];\n var csaid2 = numbers_add_msg(cfb, 3056, [\n [],\n [{ type: 2, data: stru8(c.t || \"\") }],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]\n ]) }],\n [{ type: 2, data: write_TSP_Reference(aaaid2) }]\n ], \"/Index/Tables/DataList\", deps);\n numbers_iwa_doit(cfb, deps, csaid2, function(iwa) {\n return numbers_add_oref(iwa, aaaid2);\n });\n replies.push(csaid2);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, csaid2, aaaid2);\n ai.messages[0].data = write_shallow(mlist);\n });\n });\n if (!authors[cc.a || \"\"])\n authors[cc.a || \"\"] = numbers_add_msg(cfb, 212, [\n [],\n [{ type: 2, data: stru8(cc.a || \"\") }],\n [{ type: 2, data: get_author_color(++iauthor) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ], \"/Index/Tables/DataList\", deps);\n var aaaid = authors[cc.a || \"\"];\n var csaid = numbers_add_msg(cfb, 3056, [\n [],\n [{ type: 2, data: stru8(cc.t || \"\") }],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]\n ]) }],\n [{ type: 2, data: write_TSP_Reference(aaaid) }],\n replies.map(function(r) {\n return { type: 2, data: write_TSP_Reference(r) };\n }),\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(i) }],\n [{ type: 0, data: write_varint49(0) }]\n ]) }]\n ], \"/Index/Tables/DataList\", deps);\n numbers_iwa_doit(cfb, deps, csaid, function(iwa) {\n numbers_add_oref(iwa, aaaid);\n replies.forEach(function(r) {\n return numbers_add_oref(iwa, r);\n });\n });\n cmntdata[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(i) }],\n [{ type: 0, data: write_varint49(1) }],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [{ type: 2, data: write_TSP_Reference(csaid) }]\n ]) });\n numbers_add_oref(cmntroot, csaid);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, cmntref, csaid);\n numbers_meta_add_dep(mlist, deps, csaid, aaaid);\n if (replies.length)\n numbers_meta_add_dep(mlist, deps, csaid, replies);\n ai.messages[0].data = write_shallow(mlist);\n });\n });\n }\n cmntdata[2][0].data = write_varint49(LUT.cmnt.length + 1);\n cmntroot.messages[0].data = write_shallow(cmntdata);\n });\n }\n }\n pb[4][0].data = write_shallow(store);\n }\n tmaroot.messages[0].data = write_shallow(pb);\n}\nfunction fix_opts_func(defaults/*:Array >*/)/*:{(o:any):void}*/ {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nfunction fix_read_opts(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\n\nfunction fix_write_opts(opts) {\nfix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\nfunction get_sheet_type(n/*:string*/)/*:string*/ {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction parse_sheet_legacy_drawing(sheet, type, zip, path, idx, opts, wb, comments) {\n\tif(!sheet || !sheet['!legdrawel']) return;\n\tvar dfile = resolve_path(sheet['!legdrawel'].Target, path);\n\tvar draw = getzipstr(zip, dfile, true);\n\tif(draw) parse_vml(utf8read(draw), sheet, comments||[]);\n}\n\nfunction safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/*:number*/, sheetRels, sheets, stype/*:string*/, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments and threaded comments */\n\t\tvar comments = [], tcomments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tvar dfile = \"\";\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tcomments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments, false);\n\t\t\t}\n\t\t\tif(sheetRels[sheet][n].Type == RELS.TCMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\ttcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));\n\t\t\t}\n\t\t});\n\t\tif(tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);\n\t\tparse_sheet_legacy_drawing(_ws, stype, zip, path, idx, opts, wb, comments);\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x/*:string*/)/*:string*/ { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tmake_ssf();\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) {\n\t\tif(typeof Uint8Array == \"undefined\") throw new Error('NUMBERS file parsing requires Uint8Array support');\n\t\tif(typeof parse_numbers_iwa != \"undefined\") {\n\t\t\tif(zip.FileIndex) return parse_numbers_iwa(zip, opts);\n\t\t\tvar _zip = CFB.utils.cfb_new();\n\t\t\tzipentries(zip).forEach(function(e) { zip_add_file(_zip, e, getzipbin(zip, e)); });\n\t\t\treturn parse_numbers_iwa(_zip, opts);\n\t\t}\n\t\tthrow new Error('Unsupported NUMBERS file');\n\t}\n\tif(!safegetzipfile(zip, '[Content_Types].xml')) {\n\t\tif(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');\n\t\tif(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');\n\t\tvar index_zip = CFB.find(zip, 'Index.zip');\n\t\tif(index_zip) {\n\t\t\topts = dup(opts);\n\t\t\tdelete opts.type;\n\t\t\tif(typeof index_zip.content == \"string\") opts.type = \"binary\";\n\t\t\t// TODO: Bun buffer bug\n\t\t\tif(typeof Bun !== \"undefined\" && Buffer.isBuffer(index_zip.content)) return readSync(new Uint8Array(index_zip.content), opts);\n\t\t\treturn readSync(index_zip.content, opts);\n\t\t}\n\t\tthrow new Error('Unsupported ZIP file');\n\t}\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')/*:?any*/));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({}/*:any*/);\n\tvar styles = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\", opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({}/*:any*/);\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({}/*:any*/);\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, \"s5s\"));\n\n\tif((dir.metadata || []).length >= 1) {\n\t\t/* TODO: MDX and other types of metadata */\n\t\topts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])),dir.metadata[0],opts);\n\t}\n\n\tif((dir.people || []).length >= 1) {\n\t\topts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])),opts);\n\t}\n\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/[\\S\\s]*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: dup(table_fmt)\n\t}/*:any*/);\n\tif(opts && opts.bookFiles) {\n\t\tif(zip.files) {\n\t\t\tout.keys = entries;\n\t\t\tout.files = zip.files;\n\t\t} else {\n\t\t\tout.keys = [];\n\t\t\tout.files = {};\n\t\t\tzip.FullPaths.forEach(function(p, idx) {\n\t\t\t\tp = p.replace(/^Root Entry[\\/]/, \"\");\n\t\t\t\tout.keys.push(p);\n\t\t\t\tout.files[p] = zip.FileIndex[idx];\n\t\t\t});\n\t\t}\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\t// TODO: pass back content types metadata for xlsm/xlsx resolution\n\tout.bookType = xlsb ? \"xlsb\" : \"xlsx\";\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\n/*:: declare var decrypt_agile:any; */\n\tif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\n/*:: declare var decrypt_std76:any; */\n\tif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"bin\";\n\tvar vbafmt = true;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".xml\";\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".xml\", RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_bin(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_bin(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_bin(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tvar ww = write_theme(wb.Themes, opts);\n\tzip_add_file(zip, f, ww);\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_bin(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_bin());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction write_zip_xlsx(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_xml(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".xml\";\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".xml\", RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_xml(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_xml(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_xml(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_xml(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_xml());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:Array*/ {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64_decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb/*:CFBContainer*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data/*:string*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64_decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\to.type = \"binary\";\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64_decode(d);\n\tif(typeof ArrayBuffer !== \"undefined\" && data instanceof ArrayBuffer) d = new Uint8Array(data);\n\td = typeof $cptable !== \"undefined\" ? $cptable.utils.decode(1200, d.slice(2), 'str') : (\n\t\t(has_buf && Buffer.isBuffer(data)) ? data.slice(2).toString(\"utf16le\") :\n\t\t(typeof Uint8Array !== \"undefined\" && d instanceof Uint8Array) ? (\n\t\t\ttypeof TextDecoder !== \"undefined\" ? new TextDecoder(\"utf-16le\").decode(d.slice(2)) : utf16lereadu(d.slice(2))\n\t\t) : utf16leread(d.slice(2))\n\t);\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data/*:string*/)/*:string*/ {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\treset_cp();\n\tvar o = opts||{};\n\tif(o.codepage && typeof $cptable === \"undefined\") console.error(\"Codepage tables are not loaded. Non-ASCII characters may not give expected results\");\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n\tif(typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== \"undefined\" ? \"buffer\" : \"array\";\n\tvar d = data, n = [0,0,0,0], str = false;\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); if(typeof Uint8Array !== 'undefined' && !has_buf) o.type = \"array\"; }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x08) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49:\n\t\t\tif(n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n\t\t\tif(n[1] === 0x44) return read_wb_ID(d, o);\n\t\t\tbreak;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF:\n\t\t\tif(n[1] === 0xFE) { return read_utf16(d, o); }\n\t\t\telse if(n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\tbreak;\n\t\tcase 0x00:\n\t\t\tif(n[1] === 0x00) {\n\t\t\t\tif(n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\t\tif(n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return rtf_to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t\tcase 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error(\"PNG Image File is not a spreadsheet\"); break;\n\t\tcase 0x08: if(n[1] === 0xE7) throw new Error(\"Unsupported Multiplan 1.x file!\"); break;\n\t\tcase 0x0C:\n\t\t\tif(n[1] === 0xEC) throw new Error(\"Unsupported Multiplan 2.x file!\");\n\t\t\tif(n[1] === 0xED) throw new Error(\"Unsupported Multiplan 3.x file!\");\n\t\t\tbreak;\n\t}\n\tif(DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\nfunction write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tswitch(opts.bookType) {\n\t\tcase \"ods\": return write_ods(wb, opts);\n\t\tcase \"numbers\": return write_numbers_iwa(wb, opts);\n\t\tcase \"xlsb\": return write_zip_xlsb(wb, opts);\n\t\tdefault: return write_zip_xlsx(wb, opts);\n\t}\n}\n\n/*:: declare var encrypt_agile:any; */\nfunction write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_typeXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip_xlsx(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_denouement(z/*:any*/, o/*:?WriteOpts*/)/*:any*/ {\n\tvar oopts = {};\n\tvar ftype = has_buf ? \"nodebuffer\" : (typeof Uint8Array !== \"undefined\" ? \"array\" : \"string\");\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = ftype;\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = ftype; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: /*::(*/{\"nodebuffer\": \"buffer\", \"string\": \"binary\"}/*:: :any)*/[oopts.type] || oopts.type, compression: !!o.compression}) : z.generate(oopts);\n\tif(typeof Deno !== \"undefined\") {\n\t\tif(typeof out == \"string\") {\n\t\t\tif(o.type == \"binary\" || o.type == \"base64\") return out;\n\t\t\tout = new Uint8Array(s2ab(out));\n\t\t}\n\t}\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(/*::(*/out/*:: :any)*/) : out;\n}\n\nfunction write_cfb_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = opts||{};\n\tvar cfb/*:CFBContainer*/ = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out/*:string*/, opts/*:WriteOpts*/, bom/*:?string*/)/*:any*/ {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse if(typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(o);\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out/*:string*/, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode_pass(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSyncXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSyncXLSX(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\treturn write_zip_typeXLSX(wb, o);\n}\n\nfunction writeSync(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSync(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\tvar idx = 0;\n\tif(o.sheet) {\n\t\tif(typeof o.sheet == \"number\") idx = o.sheet;\n\t\telse idx = wb.SheetNames.indexOf(o.sheet);\n\t\tif(!wb.SheetNames[idx]) throw new Error(\"Sheet not found: \" + o.sheet + \" : \" + (typeof o.sheet));\n\t}\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'txt': return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'csv': return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'dbf': return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'prn': return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'rtf': return write_string_type(sheet_to_rtf(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'eth': return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'wk1': return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'wk3': return write_binary_type(WK_.book_to_wk3(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'numbers':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o/*:WriteFileOpts*/) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileSyncXLSX(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSyncXLSX(wb, o);\n}\n\n\nfunction writeFileAsync(filename/*:string*/, wb/*:Workbook*/, opts/*:?WriteFileOpts*/, cb/*:?(e?:ErrnoError)=>void*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts/*:any*/);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\n/*::\ntype MJRObject = {\n\trow: any;\n\tisempty: boolean;\n};\n*/\nfunction make_json_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, header/*:number*/, hdr/*:Array*/, o/*:Sheet2JSONOpts*/)/*:MJRObject*/ {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true, dense = (sheet[\"!data\"] != null);\n\tvar row/*:any*/ = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[\"!data\"][R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? (sheet[\"!data\"][R]||[])[C] : sheet[cols[C] + rr];\n\t\tif(val == null || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = (v == 0 ? null : void 0); break;\n\t\t\tcase 's': case 'b':\n\t\t\tcase 'n': if(!val.z || !fmt_is_date(val.z)) break;\n\t\t\tv = numdate(v); // TODO: date1904 setting should also be stored in worksheet object\n\t\t\tif(typeof v == \"number\") break;\n\t\t\t/* falls through */\n\t\t\tcase 'd': if(!(o && (o.UTC||(o.raw === false)))) v = utc_to_local(new Date(v)); break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(val.t == \"e\" && v === null) row[hdr[C]] = null;\n\t\t\t\telse if(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = (val.t === 'n' && typeof o.rawNumbers === 'boolean' ? o.rawNumbers : raw) ? v : format_cell(val, v, o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar out/*:Array*/ = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = sheet[\"!data\"] != null;\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[\"!data\"][R]) sheet[\"!data\"][R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[\"!data\"][R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, fs/*:number*/, rs/*:number*/, FS/*:string*/, o/*:Sheet2CSVOpts*/)/*:?string*/ {\n\tvar isempty = true;\n\tvar row/*:Array*/ = [], txt = \"\", rr = encode_row(R);\n\tvar dense = sheet[\"!data\"] != null;\n\tvar datarow = dense && sheet[\"!data\"][R] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = dense ? datarow[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.strip) while(row[row.length - 1] === \"\") --row.length;\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar row = \"\", cols/*:Array*/ = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar w = 0;\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(row || (o.blankrows !== false)) out.push((w++ ? RS : \"\") + row);\n\t}\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof $cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = $cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet/*:Worksheet*/)/*:Array*/ {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols/*:Array*/ = [], C;\n\tvar cmds/*:Array*/ = [];\n\tvar dense = sheet[\"!data\"] != null;\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[\"!data\"][R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws/*:?Worksheet*/, js/*:Array*/, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? (_ws[\"!data\"] != null) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar offset = +!o.skipHeader;\n\tvar ws/*:Worksheet*/ = _ws || ({});\n\tif(!_ws && dense) ws[\"!data\"] = [];\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr/*:Array*/ = o.header || [], C = 0;\n\tvar ROW = [];\n\tjs.forEach(function (JS, R/*:number*/) {\n\t\tif(dense && !ws[\"!data\"][_R + R + offset]) ws[\"!data\"][_R + R + offset] = [];\n\t\tif(dense) ROW = ws[\"!data\"][_R + R + offset];\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = dense ? \"\" : (encode_col(_C + C) + encode_row(_R + R + offset));\n\t\t\tvar cell/*:Cell*/ = dense ? ROW[_C + C] : ws[ref];\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tif(dense) ROW[_C + C] = v;\n\t\t\t\telse ws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.UTC) v = local_to_utc(v);\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (cell != null && cell.z && fmt_is_date(cell.z)) ? cell.z : (o.dateNF || table_fmt[14]);\n\t\t\t\t}\n\t\t\t\telse if(v === null && o.nullError) { t = 'e'; v = 0; }\n\t\t\t\tif(!cell) {\n\t\t\t\t\tif(!dense) ws[ref] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\t\telse ROW[_C + C] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\t} else {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(dense && !ws[\"!data\"][_R]) ws[\"!data\"][_R] = [];\n\tif(offset) for(C = 0; C < hdr.length; ++C) {\n\t\tif(dense) ws[\"!data\"][_R][C + _C] = {t:'s', v:hdr[C]};\n\t\telse ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\t}\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js/*:Array*/, opts)/*:Worksheet*/ { return sheet_add_json(null, js, opts); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws/*:Worksheet*/, R, C/*:?number*/)/*:Cell*/ {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\tif(ws[\"!data\"] != null) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[\"!data\"][RC.r]) ws[\"!data\"][RC.r] = [];\n\t\t\treturn ws[\"!data\"][RC.r][RC.c] || (ws[\"!data\"][RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_col(C||0) + encode_row(R));\n}\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank or single-sheet workbook object */\nfunction book_new(ws/*:?Worksheet*/, wsname/*:?string*/)/*:Workbook*/ {\n\tvar wb = { SheetNames: [], Sheets: {} };\n\tif(ws) book_append_sheet(wb, ws, wsname || \"Sheet1\");\n\treturn wb;\n}\n\n/* add a worksheet to the end of a given workbook */\nfunction book_append_sheet(wb/*:Workbook*/, ws/*:Worksheet*/, name/*:?string*/, roll/*:?boolean*/)/*:string*/ {\n\tvar i = 1;\n\tif(!name) for(; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tif(roll && wb.SheetNames.indexOf(name) >= 0 && name.length < 32) {\n\t\tvar m = name.match(/\\d+$/); // at this point, name length is capped at 32\n\t\ti = m && +m[0] || 0;\n\t\tvar root = m && name.slice(0, m.index) || name;\n\t\tfor(++i; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = root + i) == -1) break;\n\t}\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n\treturn name;\n}\n\n/* set sheet visibility (visible/hidden/very hidden) */\nfunction book_set_sheet_visibility(wb/*:Workbook*/, sh/*:number|string*/, vis/*:number*/) {\n\tif(!wb.Workbook) wb.Workbook = {};\n\tif(!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tif(!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n}\n\n/* set number format */\nfunction cell_set_number_format(cell/*:Cell*/, fmt/*:string|number*/) {\n\tcell.z = fmt;\n\treturn cell;\n}\n\n/* set cell hyperlink */\nfunction cell_set_hyperlink(cell/*:Cell*/, target/*:string*/, tooltip/*:?string*/) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target }/*:Hyperlink*/);\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n}\nfunction cell_set_internal_link(cell/*:Cell*/, range/*:string*/, tooltip/*:?string*/) { return cell_set_hyperlink(cell, \"#\" + range, tooltip); }\n\n/* add to cell comments */\nfunction cell_add_comment(cell/*:Cell*/, text/*:string*/, author/*:?string*/) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n}\n\n/* set array formula and flush related cells */\nfunction sheet_set_array_formula(ws/*:Worksheet*/, range, formula/*:string*/, dynamic/*:boolean*/) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) {\n\t\t\tcell.f = formula;\n\t\t\tif(dynamic) cell.D = true;\n\t\t}\n\t}\n\tvar wsr = decode_range(ws[\"!ref\"]);\n\tif(wsr.s.r > rng.s.r) wsr.s.r = rng.s.r;\n\tif(wsr.s.c > rng.s.c) wsr.s.c = rng.s.c;\n\tif(wsr.e.r < rng.e.r) wsr.e.r = rng.e.r;\n\tif(wsr.e.c < rng.e.c) wsr.e.c = rng.e.c;\n\tws[\"!ref\"] = encode_range(wsr);\n\treturn ws;\n}\n\nvar utils/*:any*/ = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tsheet_new: sheet_new,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: sheet_to_html,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json,\n\tsheet_get_cell: ws_get_cell_stub,\n\tbook_new: book_new,\n\tbook_append_sheet: book_append_sheet,\n\tbook_set_sheet_visibility: book_set_sheet_visibility,\n\tcell_set_number_format: cell_set_number_format,\n\tcell_set_hyperlink: cell_set_hyperlink,\n\tcell_set_internal_link: cell_set_internal_link,\n\tcell_add_comment: cell_add_comment,\n\tsheet_set_array_formula: sheet_set_array_formula,\n\tconsts: {\n\t\tSHEET_VISIBLE: 0,\n\t\tSHEET_HIDDEN: 1,\n\t\tSHEET_VERY_HIDDEN: 2\n\t}\n};\n\nvar _Readable;\nfunction set_readable(R) { _Readable = R; }\n\nfunction write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable();\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar row/*:?string*/ = \"\", cols/*:Array*/ = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar R = r.s.r;\n\tvar BOM = false, w = 0;\n\tstream._read = function() {\n\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\twhile(R <= r.e.r) {\n\t\t\t++R;\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\tif(row != null) {\n\t\t\t\tif(row || (o.blankrows !== false)) return stream.push((w++ ? RS : \"\") + row);\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nfunction write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) {\n\tvar stream = _Readable();\n\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tstream.push(header);\n\tvar r = decode_range(ws['!ref']);\n\tstream.push(make_html_preamble(ws, r, o));\n\tvar R = r.s.r;\n\tvar end = false;\n\tstream._read = function() {\n\t\tif(R > r.e.r) {\n\t\t\tif(!end) { end = true; stream.push(\"\" + footer); }\n\t\t\treturn stream.push(null);\n\t\t}\n\t\twhile(R <= r.e.r) {\n\t\t\tstream.push(make_html_row(ws, r, R, o));\n\t\t\t++R;\n\t\t\tbreak;\n\t\t}\n\t};\n\treturn stream;\n}\n\nfunction write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable({objectMode:true});\n\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar counter = 0;\n\tvar dense = sheet[\"!data\"] != null;\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[\"!data\"][R]) sheet[\"!data\"][R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[\"!data\"][R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tR = r.s.r + offset;\n\tstream._read = function() {\n\t\twhile(R <= r.e.r) {\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, o);\n\t\t\t++R;\n\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\tstream.push(row.row);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nvar __stream = {\n\tto_json: write_json_stream,\n\tto_html: write_html_stream,\n\tto_csv: write_csv_stream,\n\tset_readable: set_readable\n};\nexport const version = XLSX.version;\nexport {\n\tparse_xlscfb,\n\tparse_zip,\n\treadSync as read,\n\treadFileSync as readFile,\n\treadFileSync,\n\twriteSync as write,\n\twriteFileSync as writeFile,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteSyncXLSX as writeXLSX,\n\twriteFileSyncXLSX as writeFileXLSX,\n\tutils,\n\tset_fs,\n\tset_cptable,\n\t__stream as stream,\n\tSSF,\n\tCFB\n};\nexport default {\n\tparse_xlscfb,\n\tparse_zip,\n\tread: readSync,\n\treadFile: readFileSync,\n\treadFileSync,\n\twrite: writeSync,\n\twriteFile: writeFileSync,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteXLSX: writeSyncXLSX,\n\twriteFileXLSX: writeFileSyncXLSX,\n\tutils,\n\tset_fs,\n\tset_cptable,\n\tstream: __stream,\n\tSSF,\n\tCFB\n}\n","import { modifier } from 'ember-modifier';\nexport default modifier void, (destroying: Element) => void]>(\n (element, [inserted, destroying]) => {\n inserted(element);\n return () => {\n if (destroying) {\n destroying(element);\n }\n };\n },\n { eager: false },\n);\n","import * as XLSX from 'xlsx';\nimport type { DeviceColumn, DeviceData } from '../components/aditools-device-table.ts';\nimport { downloadFile } from './download.ts';\n\n////////////////////////////////////////////////////////////////////////////////////\n// export-to-excel - Class containing functions for export to excel (xlsx format) //\n////////////////////////////////////////////////////////////////////////////////////\n\nexport default {\n ////////////////////////////////////////////////////////////////////////////////\n // Functions //\n ////////////////////////////////////////////////////////////////////////////////\n\n getVersion(): string {\n return XLSX.version;\n },\n exportTable(\n columns: DeviceColumn[],\n rows: DeviceData[],\n locale: string,\n dataSourceName: string | undefined,\n ): void {\n const workBook = XLSX.utils.book_new();\n const now = new Date();\n const createDateStamp =\n ('0' + (now.getMonth() + 1)).slice(-2) +\n '/' +\n ('0' + now.getDate()).slice(-2) +\n '/' +\n now.getFullYear() +\n ' ' +\n ('0' + (((now.getHours() + 11) % 12) + 1)).slice(-2) +\n ':' +\n ('0' + now.getMinutes()).slice(-2) +\n ':' +\n ('0' + now.getSeconds()).slice(-2) +\n ' ' +\n (now.getHours() >= 12 ? 'PM' : 'AM');\n workBook.Props = {\n Title: 'Table Export',\n Subject: 'Exporting Table Data',\n CreatedDate: now,\n };\n workBook.SheetNames.push('Cover');\n workBook.SheetNames.push('Web Display');\n workBook.SheetNames.push('Raw Data Display');\n\n // Build Cover\n const coverData: Array> = [];\n coverData.push(['Date Created:', createDateStamp]);\n coverData.push(['Product Type:', dataSourceName ? dataSourceName : '']);\n\n // Build Display and Raw Worksheets\n const displaySheetData: Array> = [];\n const rawSheetData: Array> = [];\n const headerNameRowLine: Array = [];\n const headerContextRowLine: Array = [];\n const headerUnitRowLine: Array = [];\n\n columns.forEach((column) => {\n const name = column.name + (column.minMaxTyp ? ` (${column.minMaxTyp})` : '');\n const context = column.fieldContext ? column.fieldContext : '';\n const unit = column.unit && column.unit !== 'n/a' ? column.unit : '';\n headerNameRowLine.push(name);\n headerContextRowLine.push(context);\n headerUnitRowLine.push(unit);\n });\n\n const hasContextRow = headerContextRowLine.filter((item) => item !== '').length > 0;\n displaySheetData.push(headerNameRowLine);\n rawSheetData.push(headerNameRowLine);\n if (hasContextRow) {\n displaySheetData.push(headerContextRowLine);\n rawSheetData.push(headerContextRowLine);\n }\n displaySheetData.push(headerUnitRowLine);\n rawSheetData.push(headerUnitRowLine);\n rows.forEach((row) => {\n const rawRow: Array = [];\n const displayRow: Array = [];\n columns.forEach((column) => {\n if (column.id !== '0') {\n const displayId = row['display_' + column.id] ? 'display_' + column.id : (column.id as string);\n const rawId = row['value_' + column.id] ? 'value_' + column.id : (column.id as string);\n const displayField: string = row[displayId]\n ? Array.isArray(row[displayId])\n ? ((row[displayId] as Array).join(', ') as string)\n : (row[displayId] as string)\n : '';\n const rawField: string | number = row[rawId]\n ? Array.isArray(row[rawId])\n ? ((row[rawId] as Array).join(', ') as string)\n : typeof row[rawId] === 'number'\n ? (row[rawId] as number)\n : (row[rawId] as string)\n : '';\n displayRow.push(displayField);\n rawRow.push(rawField);\n } else {\n displayRow.push(row['partNumber'] as string);\n rawRow.push(row['partNumber'] as string);\n }\n });\n displaySheetData.push(displayRow);\n rawSheetData.push(rawRow);\n });\n workBook.Sheets['Cover'] = XLSX.utils.aoa_to_sheet(coverData);\n workBook.Sheets['Web Display'] = XLSX.utils.aoa_to_sheet(displaySheetData);\n workBook.Sheets['Raw Data Display'] = XLSX.utils.aoa_to_sheet(rawSheetData);\n\n // Add links to the part numbers\n const wRange = XLSX.utils.decode_range(workBook.Sheets['Web Display']['!ref'] as string);\n const rowCount = wRange.e.r - wRange.s.r + 1;\n const dataStartRow = hasContextRow ? 4 : 3;\n for (let i = dataStartRow; i <= rowCount; i++) {\n const cell = 'A' + i.toString();\n workBook.Sheets['Web Display'][cell].l = {\n Target: 'https://www.analog.com/' + locale + '/' + workBook.Sheets['Web Display'][cell].v,\n };\n workBook.Sheets['Raw Data Display'][cell].l = {\n Target: 'https://www.analog.com/' + locale + '/' + workBook.Sheets['Raw Data Display'][cell].v,\n };\n }\n\n // Format Column Widths for Cover\n let columnMaxLength: Array = [];\n coverData.forEach((arr) => {\n arr.forEach((value, key) => {\n columnMaxLength[key] = Math.max(columnMaxLength[key] ?? 0, value.length);\n });\n });\n workBook.Sheets['Cover']['!cols'] = columnMaxLength.map((width) => {\n return { width: width + 2 };\n });\n\n // Format Column Widths for Web Display\n columnMaxLength = [];\n displaySheetData.forEach((arr) => {\n arr.forEach((value, key) => {\n columnMaxLength[key] = Math.max(columnMaxLength[key] ?? 0, value.length);\n });\n });\n workBook.Sheets['Web Display']['!cols'] = columnMaxLength.map((width) => {\n return { width: width + 2 };\n });\n\n // Format Column Widths for Raw Display\n columnMaxLength = [];\n rawSheetData.forEach((arr) => {\n arr.forEach((value, key) => {\n let len = 0;\n switch (typeof value) {\n case 'number':\n len = 10;\n break;\n case 'string':\n len = value.length;\n break;\n default:\n len = 10;\n break;\n }\n columnMaxLength[key] = Math.max(columnMaxLength[key] ?? 0, len);\n });\n });\n workBook.Sheets['Raw Data Display']['!cols'] = columnMaxLength.map((width) => {\n return { width: width + 2 };\n });\n downloadFile(\n 'application/octet-stream',\n 'Export.xlsx',\n new Blob([XLSX.write(workBook, { type: 'array', bookType: 'xlsx' })]),\n );\n },\n};\n","// Remove extension of Navigator (and code below that uses msSaveBlob) when we're really, truly done with IE11 support\ndeclare global {\n interface Navigator {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n msSaveBlob: (blob: any, defaultName?: string) => boolean;\n }\n}\n\nexport function downloadFile(contentType: string, fileName: string, fileData: Blob | null): boolean {\n let success = false;\n if (fileData) {\n const blob = new Blob([fileData], { type: contentType });\n if (typeof window.navigator.msSaveBlob !== 'undefined') {\n window.navigator.msSaveBlob(blob, fileName);\n } else {\n const URL = window.URL || window.webkitURL;\n const downloadUrl: string = URL.createObjectURL(blob);\n\n if (fileName) {\n const a = document.createElement('a');\n a.setAttribute('id', 'download-design-link');\n if (typeof a.download === 'undefined') {\n window.location.href = downloadUrl;\n } else {\n a.href = downloadUrl;\n a.download = fileName;\n a.click();\n }\n } else {\n window.location.href = downloadUrl;\n }\n URL.revokeObjectURL(downloadUrl);\n }\n success = true;\n }\n\n return success;\n}\n","/**!\n * Sortable 1.15.3\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\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}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _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}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.3\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","/**\r\n * Contains core SlickGrid classes.\r\n * @module Core\r\n * @namespace Slick\r\n */\r\n\r\nimport type {\r\n AnyFunction,\r\n CSSStyleDeclarationWritable,\r\n EditController,\r\n ElementEventListener,\r\n Handler,\r\n InferDOMType,\r\n MergeTypes\r\n} from './models/index';\r\n\r\nexport interface BasePubSub {\r\n publish(_eventName: string | any, _data?: ArgType): any;\r\n subscribe(_eventName: string | Function, _callback: (data: ArgType) => void): any;\r\n}\r\n\r\n/**\r\n * An event object for passing data to event handlers and letting them control propagation.\r\n *

This is pretty much identical to how W3C and jQuery implement events.

\r\n * @class EventData\r\n * @constructor\r\n */\r\nexport class SlickEventData {\r\n protected _isPropagationStopped = false;\r\n protected _isImmediatePropagationStopped = false;\r\n protected _isDefaultPrevented = false;\r\n protected returnValues: string[] = [];\r\n protected returnValue: any = undefined;\r\n protected _eventTarget?: EventTarget | null;\r\n protected nativeEvent?: Event | null;\r\n protected arguments_?: ArgType;\r\n\r\n // public props that can be optionally pulled from the provided Event in constructor\r\n // they are all optional props because it really depends on the type of Event provided (KeyboardEvent, MouseEvent, ...)\r\n readonly altKey?: boolean;\r\n readonly ctrlKey?: boolean;\r\n readonly metaKey?: boolean;\r\n readonly shiftKey?: boolean;\r\n readonly key?: string;\r\n readonly keyCode?: number;\r\n readonly clientX?: number;\r\n readonly clientY?: number;\r\n readonly offsetX?: number;\r\n readonly offsetY?: number;\r\n readonly pageX?: number;\r\n readonly pageY?: number;\r\n readonly bubbles?: boolean;\r\n readonly target?: HTMLElement;\r\n readonly type?: string;\r\n readonly which?: number;\r\n readonly x?: number;\r\n readonly y?: number;\r\n\r\n get defaultPrevented() {\r\n return this._isDefaultPrevented;\r\n }\r\n\r\n constructor(protected event?: Event | null, protected args?: ArgType) {\r\n this.nativeEvent = event;\r\n this.arguments_ = args;\r\n\r\n // when we already have an event, we want to keep some of the event properties\r\n // looping through some props is the only way to keep and sync these properties to the returned EventData\r\n if (event) {\r\n [\r\n 'altKey', 'ctrlKey', 'metaKey', 'shiftKey', 'key', 'keyCode',\r\n 'clientX', 'clientY', 'offsetX', 'offsetY', 'pageX', 'pageY',\r\n 'bubbles', 'target', 'type', 'which', 'x', 'y'\r\n ].forEach(key => (this as any)[key] = event[key as keyof Event]);\r\n }\r\n this._eventTarget = this.nativeEvent ? this.nativeEvent.target : undefined;\r\n }\r\n\r\n /**\r\n * Stops event from propagating up the DOM tree.\r\n * @method stopPropagation\r\n */\r\n stopPropagation() {\r\n this._isPropagationStopped = true;\r\n this.nativeEvent?.stopPropagation();\r\n }\r\n\r\n /**\r\n * Returns whether stopPropagation was called on this event object.\r\n * @method isPropagationStopped\r\n * @return {Boolean}\r\n */\r\n isPropagationStopped() {\r\n return this._isPropagationStopped;\r\n }\r\n\r\n /**\r\n * Prevents the rest of the handlers from being executed.\r\n * @method stopImmediatePropagation\r\n */\r\n stopImmediatePropagation() {\r\n this._isImmediatePropagationStopped = true;\r\n if (this.nativeEvent) {\r\n this.nativeEvent.stopImmediatePropagation();\r\n }\r\n };\r\n\r\n /**\r\n * Returns whether stopImmediatePropagation was called on this event object.\\\r\n * @method isImmediatePropagationStopped\r\n * @return {Boolean}\r\n */\r\n isImmediatePropagationStopped() {\r\n return this._isImmediatePropagationStopped;\r\n };\r\n\r\n getNativeEvent() {\r\n return this.nativeEvent as E;\r\n }\r\n\r\n preventDefault() {\r\n if (this.nativeEvent) {\r\n this.nativeEvent.preventDefault();\r\n }\r\n this._isDefaultPrevented = true;\r\n }\r\n\r\n isDefaultPrevented() {\r\n if (this.nativeEvent) {\r\n return this.nativeEvent.defaultPrevented;\r\n }\r\n return this._isDefaultPrevented;\r\n }\r\n\r\n addReturnValue(value: any) {\r\n this.returnValues.push(value);\r\n if (this.returnValue === undefined && value !== undefined) {\r\n this.returnValue = value;\r\n }\r\n }\r\n\r\n getReturnValue() {\r\n return this.returnValue;\r\n }\r\n\r\n getArguments() {\r\n return this.arguments_;\r\n }\r\n}\r\n\r\n/**\r\n * A simple publisher-subscriber implementation.\r\n * @class Event\r\n * @constructor\r\n */\r\nexport class SlickEvent {\r\n protected _handlers: Handler[] = [];\r\n protected _pubSubService?: BasePubSub;\r\n\r\n get subscriberCount() {\r\n return this._handlers.length;\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param {String} [eventName] - event name that could be used for dispatching CustomEvent (when enabled)\r\n * @param {BasePubSub} [pubSubService] - event name that could be used for dispatching CustomEvent (when enabled)\r\n */\r\n constructor(protected readonly eventName?: string, protected readonly pubSub?: BasePubSub) {\r\n this._pubSubService = pubSub;\r\n }\r\n\r\n /**\r\n * Adds an event handler to be called when the event is fired.\r\n *

Event handler will receive two arguments - an EventData and the data\r\n * object the event was fired with.

\r\n * @method subscribe\r\n * @param {Function} fn - Event handler.\r\n */\r\n subscribe(fn: Handler) {\r\n this._handlers.push(fn);\r\n }\r\n\r\n /**\r\n * Removes an event handler added with subscribe(fn).\r\n * @method unsubscribe\r\n * @param {Function} [fn] - Event handler to be removed.\r\n */\r\n unsubscribe(fn?: Handler) {\r\n for (let i = this._handlers.length - 1; i >= 0; i--) {\r\n if (this._handlers[i] === fn) {\r\n this._handlers.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Fires an event notifying all subscribers.\r\n * @method notify\r\n * @param {Object} args Additional data object to be passed to all handlers.\r\n * @param {EventData} [event] - An EventData object to be passed to all handlers.\r\n * For DOM events, an existing W3C event object can be passed in.\r\n * @param {Object} [scope] - The scope (\"this\") within which the handler will be executed.\r\n * If not specified, the scope will be set to the Event instance.\r\n */\r\n notify(args: ArgType, evt?: SlickEventData | Event | MergeTypes, Event> | null, scope?: any) {\r\n const sed: SlickEventData = evt instanceof SlickEventData\r\n ? evt\r\n : new SlickEventData(evt, args);\r\n scope = scope || this;\r\n\r\n for (let i = 0; i < this._handlers.length && !(sed.isPropagationStopped() || sed.isImmediatePropagationStopped()); i++) {\r\n const returnValue = this._handlers[i].call(scope, sed, args);\r\n sed.addReturnValue(returnValue);\r\n }\r\n\r\n // user can optionally add a global PubSub Service which makes it easy to publish/subscribe to events\r\n if (typeof this._pubSubService?.publish === 'function' && this.eventName) {\r\n const ret = this._pubSubService.publish<{ args: ArgType; eventData?: SlickEventData; nativeEvent?: Event; }>(this.eventName, { args, eventData: sed });\r\n sed.addReturnValue(ret);\r\n }\r\n return sed;\r\n }\r\n\r\n setPubSubService(pubSub: BasePubSub) {\r\n this._pubSubService = pubSub;\r\n }\r\n}\r\n\r\nexport class SlickEventHandler {\r\n protected handlers: Array<{ event: SlickEvent; handler: Handler; }> = [];\r\n\r\n subscribe(event: SlickEvent, handler: Handler) {\r\n this.handlers.push({ event, handler });\r\n event.subscribe(handler);\r\n\r\n return this as SlickEventHandler; // allow chaining\r\n }\r\n\r\n unsubscribe(event: SlickEvent, handler: Handler) {\r\n let i = this.handlers.length;\r\n while (i--) {\r\n if (this.handlers[i].event === event &&\r\n this.handlers[i].handler === handler) {\r\n this.handlers.splice(i, 1);\r\n event.unsubscribe(handler);\r\n return;\r\n }\r\n }\r\n\r\n return this as SlickEventHandler; // allow chaining\r\n }\r\n\r\n unsubscribeAll() {\r\n let i = this.handlers.length;\r\n while (i--) {\r\n this.handlers[i].event.unsubscribe(this.handlers[i].handler);\r\n }\r\n this.handlers = [];\r\n\r\n return this as SlickEventHandler; // allow chaining\r\n }\r\n}\r\n\r\n/**\r\n * A structure containing a range of cells.\r\n * @class Range\r\n * @constructor\r\n * @param fromRow {Integer} Starting row.\r\n * @param fromCell {Integer} Starting cell.\r\n * @param toRow {Integer} Optional. Ending row. Defaults to fromRow.\r\n * @param toCell {Integer} Optional. Ending cell. Defaults to fromCell.\r\n */\r\nexport class SlickRange {\r\n fromRow: number;\r\n fromCell: number;\r\n toCell: number;\r\n toRow: number;\r\n\r\n constructor(fromRow: number, fromCell: number, toRow?: number, toCell?: number) {\r\n if (toRow === undefined && toCell === undefined) {\r\n toRow = fromRow;\r\n toCell = fromCell;\r\n }\r\n\r\n /**\r\n * @property fromRow\r\n * @type {Integer}\r\n */\r\n this.fromRow = Math.min(fromRow, toRow as number);\r\n\r\n /**\r\n * @property fromCell\r\n * @type {Integer}\r\n */\r\n this.fromCell = Math.min(fromCell, toCell as number);\r\n\r\n /**\r\n * @property toCell\r\n * @type {Integer}\r\n */\r\n this.toCell = Math.max(fromCell, toCell as number);\r\n\r\n /**\r\n * @property toRow\r\n * @type {Integer}\r\n */\r\n this.toRow = Math.max(fromRow, toRow as number);\r\n }\r\n\r\n\r\n /**\r\n * Returns whether a range represents a single row.\r\n * @method isSingleRow\r\n * @return {Boolean}\r\n */\r\n isSingleRow() {\r\n return this.fromRow === this.toRow;\r\n }\r\n\r\n /**\r\n * Returns whether a range represents a single cell.\r\n * @method isSingleCell\r\n * @return {Boolean}\r\n */\r\n isSingleCell() {\r\n return this.fromRow === this.toRow && this.fromCell === this.toCell;\r\n }\r\n\r\n /**\r\n * Returns whether a range contains a given cell.\r\n * @method contains\r\n * @param row {Integer}\r\n * @param cell {Integer}\r\n * @return {Boolean}\r\n */\r\n contains(row: number, cell: number) {\r\n return row >= this.fromRow && row <= this.toRow &&\r\n cell >= this.fromCell && cell <= this.toCell;\r\n }\r\n\r\n /**\r\n * Returns a readable representation of a range.\r\n * @method toString\r\n * @return {String}\r\n */\r\n toString() {\r\n if (this.isSingleCell()) {\r\n return `(${this.fromRow}:${this.fromCell})`;\r\n }\r\n else {\r\n return `(${this.fromRow}:${this.fromCell} - ${this.toRow}:${this.toCell})`;\r\n }\r\n };\r\n}\r\n\r\n\r\n/**\r\n * A base class that all special / non-data rows (like Group and GroupTotals) derive from.\r\n * @class NonDataItem\r\n * @constructor\r\n */\r\nexport class SlickNonDataItem {\r\n __nonDataRow = true;\r\n}\r\n\r\n\r\n/**\r\n * Information about a group of rows.\r\n * @class Group\r\n * @extends Slick.NonDataItem\r\n * @constructor\r\n */\r\nexport class SlickGroup extends SlickNonDataItem {\r\n __group = true;\r\n\r\n /**\r\n * Grouping level, starting with 0.\r\n * @property level\r\n * @type {Number}\r\n */\r\n level = 0;\r\n\r\n /**\r\n * Number of rows in the group.\r\n * @property count\r\n * @type {Integer}\r\n */\r\n count = 0;\r\n\r\n /**\r\n * Grouping value.\r\n * @property value\r\n * @type {Object}\r\n */\r\n value = null;\r\n\r\n /**\r\n * Formatted display value of the group.\r\n * @property title\r\n * @type {String}\r\n */\r\n title: string | null = null;\r\n\r\n /**\r\n * Whether a group is collapsed.\r\n * @property collapsed\r\n * @type {Boolean}\r\n */\r\n collapsed: boolean | number = false;\r\n\r\n /**\r\n * Whether a group selection checkbox is checked.\r\n * @property selectChecked\r\n * @type {Boolean}\r\n */\r\n selectChecked = false;\r\n\r\n /**\r\n * GroupTotals, if any.\r\n * @property totals\r\n * @type {GroupTotals}\r\n */\r\n totals: SlickGroupTotals = null as any;\r\n\r\n /**\r\n * Rows that are part of the group.\r\n * @property rows\r\n * @type {Array}\r\n */\r\n rows: number[] = [];\r\n\r\n /**\r\n * Sub-groups that are part of the group.\r\n * @property groups\r\n * @type {Array}\r\n */\r\n groups: any[] = null as any;\r\n\r\n /**\r\n * A unique key used to identify the group. This key can be used in calls to DataView\r\n * collapseGroup() or expandGroup().\r\n * @property groupingKey\r\n * @type {Object}\r\n */\r\n groupingKey: any = null;\r\n\r\n constructor() {\r\n super();\r\n }\r\n /**\r\n * Compares two Group instances.\r\n * @method equals\r\n * @return {Boolean}\r\n * @param group {Group} Group instance to compare to.\r\n */\r\n equals(group: SlickGroup): boolean {\r\n return this.value === group.value &&\r\n this.count === group.count &&\r\n this.collapsed === group.collapsed &&\r\n this.title === group.title;\r\n };\r\n}\r\n\r\n/**\r\n * Information about group totals.\r\n * An instance of GroupTotals will be created for each totals row and passed to the aggregators\r\n * so that they can store arbitrary data in it. That data can later be accessed by group totals\r\n * formatters during the display.\r\n * @class GroupTotals\r\n * @extends Slick.NonDataItem\r\n * @constructor\r\n */\r\nexport class SlickGroupTotals extends SlickNonDataItem {\r\n __groupTotals = true;\r\n\r\n /**\r\n * Parent Group.\r\n * @param group\r\n * @type {Group}\r\n */\r\n group: SlickGroup = null as any;\r\n\r\n /**\r\n * Whether the totals have been fully initialized / calculated.\r\n * Will be set to false for lazy-calculated group totals.\r\n * @param initialized\r\n * @type {Boolean}\r\n */\r\n initialized = false;\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/**\r\n * A locking helper to track the active edit controller and ensure that only a single controller\r\n * can be active at a time. This prevents a whole class of state and validation synchronization\r\n * issues. An edit controller (such as SlickGrid) can query if an active edit is in progress\r\n * and attempt a commit or cancel before proceeding.\r\n * @class EditorLock\r\n * @constructor\r\n */\r\nexport class SlickEditorLock {\r\n activeEditController: any = null;\r\n\r\n /**\r\n * Returns true if a specified edit controller is active (has the edit lock).\r\n * If the parameter is not specified, returns true if any edit controller is active.\r\n * @method isActive\r\n * @param editController {EditController}\r\n * @return {Boolean}\r\n */\r\n isActive(editController?: EditController): boolean {\r\n return (editController ? this.activeEditController === editController : this.activeEditController !== null);\r\n };\r\n\r\n /**\r\n * Sets the specified edit controller as the active edit controller (acquire edit lock).\r\n * If another edit controller is already active, and exception will be throw new Error(.\r\n * @method activate\r\n * @param editController {EditController} edit controller acquiring the lock\r\n */\r\n activate(editController: EditController) {\r\n if (editController === this.activeEditController) { // already activated?\r\n return;\r\n }\r\n if (this.activeEditController !== null) {\r\n throw new Error(`Slick.EditorLock.activate: an editController is still active, can't activate another editController`);\r\n }\r\n if (!editController.commitCurrentEdit) {\r\n throw new Error('Slick.EditorLock.activate: editController must implement .commitCurrentEdit()');\r\n }\r\n if (!editController.cancelCurrentEdit) {\r\n throw new Error('Slick.EditorLock.activate: editController must implement .cancelCurrentEdit()');\r\n }\r\n this.activeEditController = editController;\r\n };\r\n\r\n /**\r\n * Unsets the specified edit controller as the active edit controller (release edit lock).\r\n * If the specified edit controller is not the active one, an exception will be throw new Error(.\r\n * @method deactivate\r\n * @param editController {EditController} edit controller releasing the lock\r\n */\r\n deactivate(editController: EditController) {\r\n if (!this.activeEditController) {\r\n return;\r\n }\r\n if (this.activeEditController !== editController) {\r\n throw new Error('Slick.EditorLock.deactivate: specified editController is not the currently active one');\r\n }\r\n this.activeEditController = null;\r\n };\r\n\r\n /**\r\n * Attempts to commit the current edit by calling \"commitCurrentEdit\" method on the active edit\r\n * controller and returns whether the commit attempt was successful (commit may fail due to validation\r\n * errors, etc.). Edit controller's \"commitCurrentEdit\" must return true if the commit has succeeded\r\n * and false otherwise. If no edit controller is active, returns true.\r\n * @method commitCurrentEdit\r\n * @return {Boolean}\r\n */\r\n commitCurrentEdit(): boolean {\r\n return (this.activeEditController ? this.activeEditController.commitCurrentEdit() : true);\r\n };\r\n\r\n /**\r\n * Attempts to cancel the current edit by calling \"cancelCurrentEdit\" method on the active edit\r\n * controller and returns whether the edit was successfully cancelled. If no edit controller is\r\n * active, returns true.\r\n * @method cancelCurrentEdit\r\n * @return {Boolean}\r\n */\r\n cancelCurrentEdit(): boolean {\r\n return (this.activeEditController ? this.activeEditController.cancelCurrentEdit() : true);\r\n };\r\n}\r\n\r\nfunction regexSanitizer(dirtyHtml: string) {\r\n return dirtyHtml.replace(/(\\b)(on[a-z]+)(\\s*)=|javascript:([^>]*)[^>]*|(<\\s*)(\\/*)script([<>]*).*(<\\s*)(\\/*)script(>*)|(<)(\\/*)(script|script defer)(.*)(>|>\">)/gi, '');\r\n}\r\n\r\n/**\r\n * A simple binding event service to keep track of all JavaScript events with callback listeners,\r\n * it allows us to unbind event(s) and their listener(s) by calling a simple unbind method call.\r\n * Unbinding is a necessary step to make sure that all event listeners are removed to avoid memory leaks when destroing the grid\r\n */\r\nexport class BindingEventService {\r\n protected _boundedEvents: ElementEventListener[] = [];\r\n\r\n getBoundedEvents() {\r\n return this._boundedEvents;\r\n }\r\n\r\n destroy() {\r\n this.unbindAll();\r\n }\r\n\r\n /** Bind an event listener to any element */\r\n bind(element: Element | Window, eventName: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions, groupName = '') {\r\n if (element) {\r\n element.addEventListener(eventName, listener, options);\r\n this._boundedEvents.push({ element, eventName, listener, groupName });\r\n }\r\n }\r\n\r\n /** Unbind all will remove every every event handlers that were bounded earlier */\r\n unbind(element: Element | Window, eventName: string, listener: EventListenerOrEventListenerObject) {\r\n if (element?.removeEventListener) {\r\n element.removeEventListener(eventName, listener);\r\n }\r\n }\r\n\r\n unbindByEventName(element: Element | Window, eventName: string) {\r\n const boundedEvent = this._boundedEvents.find(e => e.element === element && e.eventName === eventName);\r\n if (boundedEvent) {\r\n this.unbind(boundedEvent.element, boundedEvent.eventName, boundedEvent.listener);\r\n }\r\n }\r\n\r\n /**\r\n * Unbind all event listeners that were bounded, optionally provide a group name to unbind all listeners assigned to that specific group only.\r\n */\r\n unbindAll(groupName?: string | string[]) {\r\n if (groupName) {\r\n const groupNames = Array.isArray(groupName) ? groupName : [groupName];\r\n\r\n // unbind only the bounded event with a specific group\r\n // Note: we need to loop in reverse order to avoid array reindexing (causing index offset) after a splice is called\r\n for (let i = this._boundedEvents.length - 1; i >= 0; --i) {\r\n const boundedEvent = this._boundedEvents[i];\r\n if (groupNames.some(g => g === boundedEvent.groupName)) {\r\n const { element, eventName, listener } = boundedEvent;\r\n this.unbind(element, eventName, listener);\r\n this._boundedEvents.splice(i, 1);\r\n }\r\n }\r\n } else {\r\n // unbind everything\r\n while (this._boundedEvents.length > 0) {\r\n const boundedEvent = this._boundedEvents.pop() as ElementEventListener;\r\n const { element, eventName, listener } = boundedEvent;\r\n this.unbind(element, eventName, listener);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class Utils {\r\n // jQuery's extend\r\n private static getProto = Object.getPrototypeOf;\r\n private static class2type: any = {};\r\n private static toString = Utils.class2type.toString;\r\n private static hasOwn = Utils.class2type.hasOwnProperty;\r\n private static fnToString = Utils.hasOwn.toString;\r\n private static ObjectFunctionString = Utils.fnToString.call(Object);\r\n public static storage = {\r\n // https://stackoverflow.com/questions/29222027/vanilla-alternative-to-jquery-data-function-any-native-javascript-alternati\r\n _storage: new WeakMap(),\r\n // eslint-disable-next-line object-shorthand\r\n put: function (element: any, key: string, obj: any) {\r\n if (!this._storage.has(element)) {\r\n this._storage.set(element, new Map());\r\n }\r\n this._storage.get(element).set(key, obj);\r\n },\r\n // eslint-disable-next-line object-shorthand\r\n get: function (element: any, key: string) {\r\n const el = this._storage.get(element);\r\n if (el) {\r\n return el.get(key);\r\n }\r\n return null;\r\n },\r\n // eslint-disable-next-line object-shorthand\r\n remove: function (element: any, key: string) {\r\n const ret = this._storage.get(element).delete(key);\r\n if (!(this._storage.get(element).size === 0)) {\r\n this._storage.delete(element);\r\n }\r\n return ret;\r\n }\r\n };\r\n\r\n public static isFunction(obj: any) {\r\n return typeof obj === 'function' && typeof obj.nodeType !== 'number' && typeof obj.item !== 'function';\r\n }\r\n\r\n public static isPlainObject(obj: any) {\r\n if (!obj || Utils.toString.call(obj) !== '[object Object]') {\r\n return false;\r\n }\r\n\r\n const proto = Utils.getProto(obj);\r\n if (!proto) {\r\n return true;\r\n }\r\n const Ctor = Utils.hasOwn.call(proto, 'constructor') && proto.constructor;\r\n return typeof Ctor === 'function' && Utils.fnToString.call(Ctor) === Utils.ObjectFunctionString;\r\n }\r\n\r\n public static calculateAvailableSpace(element: HTMLElement) {\r\n let bottom = 0, top = 0, left = 0, right = 0;\r\n\r\n const windowHeight = window.innerHeight || 0;\r\n const windowWidth = window.innerWidth || 0;\r\n const scrollPosition = Utils.windowScrollPosition();\r\n const pageScrollTop = scrollPosition.top;\r\n const pageScrollLeft = scrollPosition.left;\r\n const elmOffset = Utils.offset(element);\r\n\r\n if (elmOffset) {\r\n const elementOffsetTop = elmOffset.top || 0;\r\n const elementOffsetLeft = elmOffset.left || 0;\r\n top = elementOffsetTop - pageScrollTop;\r\n bottom = windowHeight - (elementOffsetTop - pageScrollTop);\r\n left = elementOffsetLeft - pageScrollLeft;\r\n right = windowWidth - (elementOffsetLeft - pageScrollLeft);\r\n }\r\n\r\n return { top, bottom, left, right };\r\n }\r\n\r\n public static extend(...args: any[]): T {\r\n let options, name, src, copy, copyIsArray, clone,\r\n target = args[0],\r\n i = 1,\r\n deep = false;\r\n const length = args.length;\r\n\r\n if (typeof target === 'boolean') {\r\n deep = target;\r\n target = args[i] || {};\r\n i++;\r\n } else {\r\n target = target || {};\r\n }\r\n if (typeof target !== 'object' && !Utils.isFunction(target)) {\r\n target = {};\r\n }\r\n if (i === length) {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n target = this;\r\n i--;\r\n }\r\n for (; i < length; i++) {\r\n if (Utils.isDefined(options = args[i])) {\r\n for (name in options) {\r\n copy = options[name];\r\n if (name === '__proto__' || target === copy) {\r\n continue;\r\n }\r\n if (deep && copy && (Utils.isPlainObject(copy) ||\r\n (copyIsArray = Array.isArray(copy)))) {\r\n src = target[name];\r\n if (copyIsArray && !Array.isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !Utils.isPlainObject(src)) {\r\n clone = {};\r\n } else {\r\n clone = src;\r\n }\r\n copyIsArray = false;\r\n target[name] = Utils.extend(deep, clone, copy);\r\n } else if (copy !== undefined) {\r\n target[name] = copy;\r\n }\r\n }\r\n }\r\n }\r\n return target as T;\r\n }\r\n\r\n /**\r\n * Create a DOM Element with any optional attributes or properties.\r\n * It will only accept valid DOM element properties that `createElement` would accept.\r\n * For example: `createDomElement('div', { className: 'my-css-class' })`,\r\n * for style or dataset you need to use nested object `{ style: { display: 'none' }}\r\n * The last argument is to optionally append the created element to a parent container element.\r\n * @param {String} tagName - html tag\r\n * @param {Object} options - element properties\r\n * @param {[HTMLElement]} appendToParent - parent element to append to\r\n */\r\n public static createDomElement(\r\n tagName: T,\r\n elementOptions?: null | { [P in K]: InferDOMType },\r\n appendToParent?: Element\r\n ): HTMLElementTagNameMap[T] {\r\n const elm = document.createElement(tagName);\r\n\r\n if (elementOptions) {\r\n Object.keys(elementOptions).forEach((elmOptionKey) => {\r\n if (elmOptionKey === 'innerHTML') {\r\n console.warn(`[SlickGrid] For better CSP (Content Security Policy) support, do not use \"innerHTML\" directly in \"createDomElement('${tagName}', { innerHTML: 'some html'})\"` +\r\n `, it is better as separate assignment: \"const elm = createDomElement('span'); elm.innerHTML = 'some html';\"`);\r\n }\r\n\r\n const elmValue = elementOptions[elmOptionKey as keyof typeof elementOptions];\r\n if (typeof elmValue === 'object') {\r\n Object.assign(elm[elmOptionKey as K] as object, elmValue);\r\n } else {\r\n elm[elmOptionKey as K] = (elementOptions as any)[elmOptionKey as keyof typeof elementOptions];\r\n }\r\n });\r\n }\r\n if (appendToParent?.appendChild) {\r\n appendToParent.appendChild(elm);\r\n }\r\n return elm;\r\n }\r\n\r\n /**\r\n * From any input provided, return the HTML string (when a string is provided, it will be returned \"as is\" but when it's a number it will be converted to string)\r\n * When detecting HTMLElement/DocumentFragment, we can also specify which HTML type to retrieve innerHTML or outerHTML.\r\n * We can get the HTML by looping through all fragment `childNodes`\r\n * @param {DocumentFragment | HTMLElement | string | number} input\r\n * @param {'innerHTML' | 'outerHTML'} [type] - when the input is a DocumentFragment or HTMLElement, which type of HTML do you want to return? 'innerHTML' or 'outerHTML'\r\n * @returns {String}\r\n */\r\n public static getHtmlStringOutput(input: DocumentFragment | HTMLElement | string | number, type: 'innerHTML' | 'outerHTML' = 'innerHTML'): string {\r\n if (input instanceof DocumentFragment) {\r\n // a DocumentFragment doesn't have innerHTML/outerHTML, but we can loop through all children and concatenate them all to an HTML string\r\n return [].map.call(input.childNodes, (x: HTMLElement) => x[type]).join('') || input.textContent || '';\r\n } else if (input instanceof HTMLElement) {\r\n return input[type];\r\n }\r\n return String(input); // reaching this line means it's already a string (or number) so just return it as string\r\n }\r\n\r\n public static emptyElement(element?: T | null): T | undefined | null {\r\n while (element?.firstChild) {\r\n element.removeChild(element.firstChild);\r\n }\r\n return element;\r\n }\r\n\r\n /**\r\n * Accepts string containing the class or space-separated list of classes, and\r\n * returns list of individual classes.\r\n * Method properly takes into account extra whitespaces in the `className`\r\n * e.g.: \" class1 class2 \" => will result in `['class1', 'class2']`.\r\n * @param {String} className - space separated list of class names\r\n */\r\n public static classNameToList(className = ''): string[] {\r\n return className.split(' ').filter(cls => cls);\r\n }\r\n\r\n public static innerSize(elm: HTMLElement, type: 'height' | 'width') {\r\n let size = 0;\r\n\r\n if (elm) {\r\n const clientSize = type === 'height' ? 'clientHeight' : 'clientWidth';\r\n const sides = type === 'height' ? ['top', 'bottom'] : ['left', 'right'];\r\n size = elm[clientSize];\r\n for (const side of sides) {\r\n const sideSize = (parseFloat(Utils.getElementProp(elm, `padding-${side}`) || '') || 0);\r\n size -= sideSize;\r\n }\r\n }\r\n return size;\r\n }\r\n\r\n public static isDefined(value: T | undefined | null): value is T {\r\n return value !== undefined && value !== null && value !== '';\r\n }\r\n\r\n public static getElementProp(elm: HTMLElement & { getComputedStyle?: () => CSSStyleDeclaration }, property: string) {\r\n if (elm?.getComputedStyle) {\r\n return window.getComputedStyle(elm, null).getPropertyValue(property);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the function details (param & body) of a function.\r\n * It supports regular function and also ES6 arrow functions\r\n * @param {Function} fn - function to analyze\r\n * @param {Boolean} [addReturn] - when using ES6 function as single liner, we could add the missing `return ...`\r\n * @returns\r\n */\r\n public static getFunctionDetails(fn: AnyFunction, addReturn = true) {\r\n let isAsyncFn = false;\r\n\r\n const getFunctionBody = (func: AnyFunction) => {\r\n const fnStr = func.toString();\r\n isAsyncFn = fnStr.includes('async ');\r\n\r\n // when fn is one liner arrow fn returning an object in brackets e.g. `() => ({ hello: 'world' })`\r\n if ((fnStr.replaceAll(' ', '').includes('=>({'))) {\r\n const matches = fnStr.match(/(({.*}))/g) || [];\r\n return matches.length >= 1 ? `return ${matches[0]!.trimStart()}` : fnStr;\r\n }\r\n const isOneLinerArrowFn = (!fnStr.includes('{') && fnStr.includes('=>'));\r\n const body = fnStr.substring(\r\n (fnStr.indexOf('{') + 1) || (fnStr.indexOf('=>') + 2),\r\n fnStr.includes('}') ? fnStr.lastIndexOf('}') : fnStr.length\r\n );\r\n if (addReturn && isOneLinerArrowFn && !body.startsWith('return')) {\r\n return 'return ' + body.trimStart(); // add the `return ...` to the body for ES6 arrow fn\r\n }\r\n return body;\r\n };\r\n\r\n const getFunctionParams = (func: AnyFunction): string[] => {\r\n const STRIP_COMMENTS = /(\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/)|(\\s*=[^,)]*(('(?:\\\\'|[^'\\r\\n])*')|(\"(?:\\\\\"|[^\"\\r\\n])*\"))|(\\s*=[^,)]*))/mg;\r\n const ARG_NAMES = /([^\\s,]+)/g;\r\n const fnStr = func.toString().replace(STRIP_COMMENTS, '');\r\n return fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(ARG_NAMES) ?? [];\r\n };\r\n\r\n return {\r\n params: getFunctionParams(fn),\r\n body: getFunctionBody(fn),\r\n isAsync: isAsyncFn,\r\n };\r\n }\r\n\r\n public static insertAfterElement(referenceNode: HTMLElement, newNode: HTMLElement) {\r\n referenceNode.parentNode?.insertBefore(newNode, referenceNode.nextSibling);\r\n }\r\n\r\n public static isEmptyObject(obj: any) {\r\n if (obj === null || obj === undefined) {\r\n return true;\r\n }\r\n return Object.entries(obj).length === 0;\r\n }\r\n\r\n public static noop() { }\r\n\r\n public static offset(el: HTMLElement | null) {\r\n if (!el || !el.getBoundingClientRect) {\r\n return undefined;\r\n }\r\n const box = el.getBoundingClientRect();\r\n const docElem = document.documentElement;\r\n\r\n return {\r\n top: box.top + window.pageYOffset - docElem.clientTop,\r\n left: box.left + window.pageXOffset - docElem.clientLeft\r\n };\r\n }\r\n\r\n public static windowScrollPosition() {\r\n return {\r\n left: window.pageXOffset || document.documentElement.scrollLeft || 0,\r\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\r\n };\r\n }\r\n\r\n public static width(el: HTMLElement, value?: number | string): number | void {\r\n if (!el || !el.getBoundingClientRect) { return; }\r\n if (value === undefined) {\r\n return el.getBoundingClientRect().width;\r\n }\r\n Utils.setStyleSize(el, 'width', value);\r\n }\r\n\r\n public static height(el: HTMLElement, value?: number | string): number | void {\r\n if (!el) { return; }\r\n if (value === undefined) {\r\n return el.getBoundingClientRect().height;\r\n }\r\n Utils.setStyleSize(el, 'height', value);\r\n }\r\n\r\n public static setStyleSize(el: HTMLElement, style: string, val?: number | string | Function) {\r\n if (typeof val === 'function') {\r\n val = val();\r\n } else if (typeof val === 'string') {\r\n el.style[style as CSSStyleDeclarationWritable] = val;\r\n } else {\r\n el.style[style as CSSStyleDeclarationWritable] = val + 'px';\r\n }\r\n }\r\n\r\n public static contains(parent: HTMLElement, child: HTMLElement) {\r\n if (!parent || !child) {\r\n return false;\r\n }\r\n\r\n const parentList = Utils.parents(child);\r\n return !parentList.every((p) => {\r\n if (parent === p) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n public static isHidden(el: HTMLElement) {\r\n return el.offsetWidth === 0 && el.offsetHeight === 0;\r\n }\r\n\r\n public static parents(el: HTMLElement | ParentNode, selector?: string) {\r\n const parents: Array = [];\r\n const visible = selector === ':visible';\r\n const hidden = selector === ':hidden';\r\n\r\n while ((el = el.parentNode as ParentNode) && el !== document) {\r\n if (!el || !el.parentNode) {\r\n break;\r\n }\r\n if (hidden) {\r\n if (Utils.isHidden(el as HTMLElement)) {\r\n parents.push(el);\r\n }\r\n } else if (visible) {\r\n if (!Utils.isHidden(el as HTMLElement)) {\r\n parents.push(el);\r\n }\r\n } else if (!selector || (el as any).matches(selector)) {\r\n parents.push(el);\r\n }\r\n }\r\n return parents;\r\n }\r\n\r\n public static toFloat(value: string | number) {\r\n const x = parseFloat(value as string);\r\n if (isNaN(x)) {\r\n return 0;\r\n }\r\n return x;\r\n }\r\n\r\n public static show(el: HTMLElement | HTMLElement[], type = '') {\r\n if (Array.isArray(el)) {\r\n el.forEach((e) => e.style.display = type);\r\n } else {\r\n el.style.display = type;\r\n }\r\n }\r\n\r\n public static hide(el: HTMLElement | HTMLElement[]) {\r\n if (Array.isArray(el)) {\r\n el.forEach((e) => e.style.display = 'none');\r\n } else {\r\n el.style.display = 'none';\r\n }\r\n }\r\n\r\n public static slideUp(el: HTMLElement | HTMLElement[], callback: Function) {\r\n return Utils.slideAnimation(el, 'slideUp', callback);\r\n }\r\n\r\n public static slideDown(el: HTMLElement | HTMLElement[], callback: Function) {\r\n return Utils.slideAnimation(el, 'slideDown', callback);\r\n }\r\n\r\n public static slideAnimation(el: HTMLElement | HTMLElement[], slideDirection: 'slideDown' | 'slideUp', callback: Function) {\r\n if ((window as any).jQuery !== undefined) {\r\n (window as any).jQuery(el)[slideDirection]('fast', callback);\r\n return;\r\n }\r\n (slideDirection === 'slideUp') ? Utils.hide(el) : Utils.show(el);\r\n callback();\r\n }\r\n\r\n public static applyDefaults(targetObj: any, srcObj: any) {\r\n if (typeof srcObj === 'object') {\r\n Object.keys(srcObj).forEach(key => {\r\n if (srcObj.hasOwnProperty(key) && !targetObj.hasOwnProperty(key)) {\r\n targetObj[key] = srcObj[key];\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * User could optionally add PubSub Service to SlickEvent\r\n * When it is defined then a SlickEvent `notify()` call will also dispatch it by using the PubSub publish() method\r\n * @param {BasePubSub} [pubSubService]\r\n * @param {*} scope\r\n */\r\n public static addSlickEventPubSubWhenDefined(pubSub?: BasePubSub, scope?: T) {\r\n if (pubSub) {\r\n for (const prop in scope) {\r\n if (scope[prop] instanceof SlickEvent && typeof (scope[prop] as SlickEvent).setPubSubService === 'function') {\r\n (scope[prop] as SlickEvent).setPubSubService(pubSub);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const SlickGlobalEditorLock = new SlickEditorLock();\r\n\r\n// export Slick namespace on both global & window objects\r\nconst SlickCore = {\r\n Event: SlickEvent,\r\n EventData: SlickEventData,\r\n EventHandler: SlickEventHandler,\r\n Range: SlickRange,\r\n NonDataRow: SlickNonDataItem,\r\n Group: SlickGroup,\r\n GroupTotals: SlickGroupTotals,\r\n EditorLock: SlickEditorLock,\r\n RegexSanitizer: regexSanitizer,\r\n\r\n /**\r\n * A global singleton editor lock.\r\n * @class GlobalEditorLock\r\n * @static\r\n * @constructor\r\n */\r\n GlobalEditorLock: SlickGlobalEditorLock,\r\n\r\n keyCode: {\r\n SPACE: 8,\r\n BACKSPACE: 8,\r\n DELETE: 46,\r\n DOWN: 40,\r\n END: 35,\r\n ENTER: 13,\r\n ESCAPE: 27,\r\n HOME: 36,\r\n INSERT: 45,\r\n LEFT: 37,\r\n PAGE_DOWN: 34,\r\n PAGE_UP: 33,\r\n RIGHT: 39,\r\n TAB: 9,\r\n UP: 38,\r\n A: 65\r\n },\r\n preClickClassName: 'slick-edit-preclick',\r\n\r\n GridAutosizeColsMode: {\r\n None: 'NOA',\r\n LegacyOff: 'LOF',\r\n LegacyForceFit: 'LFF',\r\n IgnoreViewport: 'IGV',\r\n FitColsToViewport: 'FCV',\r\n FitViewportToCols: 'FVC'\r\n },\r\n\r\n 'ColAutosizeMode': {\r\n Locked: 'LCK',\r\n Guide: 'GUI',\r\n Content: 'CON',\r\n ContentExpandOnly: 'CXO',\r\n ContentIntelligent: 'CTI'\r\n },\r\n\r\n 'RowSelectionMode': {\r\n FirstRow: 'FS1',\r\n FirstNRows: 'FSN',\r\n AllRows: 'ALL',\r\n LastRow: 'LS1'\r\n },\r\n\r\n 'ValueFilterMode': {\r\n None: 'NONE',\r\n DeDuplicate: 'DEDP',\r\n GetGreatestAndSub: 'GR8T',\r\n GetLongestTextAndSub: 'LNSB',\r\n GetLongestText: 'LNSC'\r\n },\r\n\r\n WidthEvalMode: {\r\n Auto: 'AUTO',\r\n TextOnly: 'CANV',\r\n HTML: 'HTML'\r\n }\r\n};\r\n\r\nexport const {\r\n EditorLock, Event, EventData, EventHandler, Group, GroupTotals, NonDataRow, Range,\r\n RegexSanitizer, GlobalEditorLock, keyCode, preClickClassName, GridAutosizeColsMode, ColAutosizeMode,\r\n RowSelectionMode, ValueFilterMode, WidthEvalMode\r\n} = SlickCore;\r\n\r\n// also add to global object when exist\r\nif (IIFE_ONLY && typeof global !== 'undefined' && window.Slick) {\r\n global.Slick = window.Slick;\r\n}\r\n","import type { CSSStyleDeclarationWritable, CellRangeDecoratorOption, SlickPlugin } from '../models/index';\nimport { Utils as Utils_, type SlickRange } from '../slick.core';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n * Displays an overlay on top of a given cell range.\n *\n * TODO:\n * Currently, it blocks mouse events to DOM nodes behind it.\n * Use FF and WebKit-specific \"pointer-events\" CSS style, or some kind of event forwarding.\n * Could also construct the borders separately using 4 individual DIVs.\n *\n * @param {Grid} grid\n * @param {Object} options\n */\nexport class SlickCellRangeDecorator implements SlickPlugin {\n // --\n // public API\n pluginName = 'CellRangeDecorator' as const;\n\n // --\n // protected props\n protected _options: CellRangeDecoratorOption;\n protected _elem?: HTMLDivElement | null;\n protected _defaults = {\n selectionCssClass: 'slick-range-decorator',\n selectionCss: {\n zIndex: '9999',\n border: '2px dashed red'\n },\n offset: { top: -1, left: -1, height: -2, width: -2 }\n } as CellRangeDecoratorOption;\n\n constructor(protected readonly grid: SlickGrid, options?: Partial) {\n this._options = Utils.extend(true, {}, this._defaults, options);\n }\n\n destroy() {\n this.hide();\n }\n\n init() { }\n\n hide() {\n this._elem?.remove();\n this._elem = null;\n }\n\n show(range: SlickRange) {\n if (!this._elem) {\n this._elem = document.createElement('div');\n this._elem.className = this._options.selectionCssClass;\n Object.keys(this._options.selectionCss as CSSStyleDeclaration).forEach((cssStyleKey) => {\n this._elem!.style[cssStyleKey as CSSStyleDeclarationWritable] = this._options.selectionCss[cssStyleKey as CSSStyleDeclarationWritable];\n });\n this._elem.style.position = 'absolute';\n const canvasNode = this.grid.getActiveCanvasNode();\n if (canvasNode) {\n canvasNode.appendChild(this._elem);\n }\n }\n\n const from = this.grid.getCellNodeBox(range.fromRow, range.fromCell);\n const to = this.grid.getCellNodeBox(range.toRow, range.toCell);\n\n if (from && to && this._options?.offset) {\n this._elem.style.top = `${from.top + this._options.offset.top}px`;\n this._elem.style.left = `${from.left + this._options.offset.left}px`;\n this._elem.style.height = `${to.bottom - from.top + this._options.offset.height}px`;\n this._elem.style.width = `${to.right - from.left + this._options.offset.width}px`;\n }\n\n return this._elem;\n }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n Utils.extend(true, window, {\n Slick: {\n CellRangeDecorator: SlickCellRangeDecorator\n }\n });\n}\n","import type { DragItem, DragPosition, DraggableOption, MouseWheelOption, ResizableOption } from './models/index';\r\nimport { Utils as Utils_ } from './slick.core';\r\n\r\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\r\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\r\n\r\n/***\r\n * Interactions, add basic behaviors to any element.\r\n * All the packages are written in pure vanilla JS and supports both mouse & touch events.\r\n * @module Interactions\r\n * @namespace Slick\r\n */\r\n\r\n/**\r\n * Draggable Class, enables dragging functionality for any element for example cell & row selections.\r\n * Note that mouse/touch start is on the specified container element but all other events are on the document body.\r\n * code refs:\r\n * https://betterprogramming.pub/perfecting-drag-and-drop-in-pure-vanilla-javascript-a761184b797a\r\n * available optional options:\r\n * - containerElement: container DOM element, defaults to \"document\"\r\n * - allowDragFrom: when defined, only allow dragging from an element that matches a specific query selector\r\n * - allowDragFromClosest: when defined, only allow dragging from an element or its parent matching a specific .closest() query selector\r\n * - onDragInit: drag initialized callback\r\n * - onDragStart: drag started callback\r\n * - onDrag: drag callback\r\n * - onDragEnd: drag ended callback\r\n * @param {Object} options\r\n * @returns - Draggable instance which includes destroy method\r\n * @class Draggable\r\n */\r\nexport function Draggable(options: DraggableOption) {\r\n let { containerElement } = options;\r\n const { onDragInit, onDragStart, onDrag, onDragEnd, preventDragFromKeys } = options;\r\n let element: HTMLElement | null;\r\n let startX: number;\r\n let startY: number;\r\n let deltaX: number;\r\n let deltaY: number;\r\n let dragStarted: boolean;\r\n\r\n if (!containerElement) {\r\n containerElement = document.body;\r\n }\r\n\r\n let originaldd: Partial = {\r\n dragSource: containerElement,\r\n dragHandle: null,\r\n };\r\n\r\n function init() {\r\n if (containerElement) {\r\n containerElement.addEventListener('mousedown', userPressed as EventListener);\r\n containerElement.addEventListener('touchstart', userPressed as EventListener);\r\n }\r\n }\r\n\r\n function executeDragCallbackWhenDefined(callback?: (e: DragEvent, dd: DragItem) => boolean | void, evt?: MouseEvent | Touch | TouchEvent | KeyboardEvent, dd?: DragItem) {\r\n if (typeof callback === 'function') {\r\n return callback(evt as DragEvent, dd as DragItem);\r\n }\r\n }\r\n\r\n function destroy() {\r\n if (containerElement) {\r\n containerElement.removeEventListener('mousedown', userPressed as EventListener);\r\n containerElement.removeEventListener('touchstart', userPressed as EventListener);\r\n }\r\n }\r\n\r\n /** Do we want to prevent Drag events from happening (for example prevent onDrag when Ctrl key is pressed while dragging) */\r\n function preventDrag(event: MouseEvent | TouchEvent | KeyboardEvent) {\r\n let eventPrevented = false;\r\n if (preventDragFromKeys) {\r\n preventDragFromKeys.forEach(key => {\r\n if ((event as KeyboardEvent)[key]) {\r\n eventPrevented = true;\r\n }\r\n });\r\n }\r\n return eventPrevented;\r\n }\r\n\r\n function userPressed(event: MouseEvent | TouchEvent | KeyboardEvent) {\r\n if (!preventDrag(event)) {\r\n element = event.target as HTMLElement;\r\n const targetEvent: MouseEvent | Touch = (event as TouchEvent)?.touches?.[0] ?? event;\r\n const { target } = targetEvent;\r\n\r\n if (!options.allowDragFrom || (options.allowDragFrom && (element.matches(options.allowDragFrom)) || (options.allowDragFromClosest && element.closest(options.allowDragFromClosest)))) {\r\n originaldd.dragHandle = element as HTMLElement;\r\n const winScrollPos = Utils.windowScrollPosition();\r\n startX = winScrollPos.left + targetEvent.clientX;\r\n startY = winScrollPos.top + targetEvent.clientY;\r\n deltaX = targetEvent.clientX - targetEvent.clientX;\r\n deltaY = targetEvent.clientY - targetEvent.clientY;\r\n originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target });\r\n const result = executeDragCallbackWhenDefined(onDragInit as (e: DragEvent, dd: DragPosition) => boolean | void, event, originaldd as DragItem);\r\n\r\n if (result !== false) {\r\n document.body.addEventListener('mousemove', userMoved);\r\n document.body.addEventListener('touchmove', userMoved);\r\n document.body.addEventListener('mouseup', userReleased);\r\n document.body.addEventListener('touchend', userReleased);\r\n document.body.addEventListener('touchcancel', userReleased);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function userMoved(event: MouseEvent | TouchEvent | KeyboardEvent) {\r\n if (!preventDrag(event)) {\r\n const targetEvent: MouseEvent | Touch = (event as TouchEvent)?.touches?.[0] ?? event;\r\n deltaX = targetEvent.clientX - startX;\r\n deltaY = targetEvent.clientY - startY;\r\n const { target } = targetEvent;\r\n\r\n if (!dragStarted) {\r\n originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target });\r\n executeDragCallbackWhenDefined(onDragStart, event, originaldd as DragItem);\r\n dragStarted = true;\r\n }\r\n\r\n originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target });\r\n executeDragCallbackWhenDefined(onDrag, event, originaldd as DragItem);\r\n }\r\n }\r\n\r\n function userReleased(event: MouseEvent | TouchEvent) {\r\n document.body.removeEventListener('mousemove', userMoved);\r\n document.body.removeEventListener('touchmove', userMoved);\r\n document.body.removeEventListener('mouseup', userReleased);\r\n document.body.removeEventListener('touchend', userReleased);\r\n document.body.removeEventListener('touchcancel', userReleased);\r\n\r\n // trigger a dragEnd event only after dragging started and stopped\r\n if (dragStarted) {\r\n const { target } = event;\r\n originaldd = Object.assign(originaldd, { target });\r\n executeDragCallbackWhenDefined(onDragEnd, event, originaldd as DragItem);\r\n dragStarted = false;\r\n }\r\n }\r\n\r\n // initialize Slick.MouseWheel by attaching mousewheel event\r\n init();\r\n\r\n // public API\r\n return { destroy };\r\n}\r\n\r\n/**\r\n * MouseWheel Class, add mousewheel listeners and calculate delta values and return them in the callback function.\r\n * available optional options:\r\n * - element: optional DOM element to attach mousewheel values, if undefined we'll attach it to the \"window\" object\r\n * - onMouseWheel: mousewheel callback\r\n * @param {Object} options\r\n * @returns - MouseWheel instance which includes destroy method\r\n * @class MouseWheel\r\n */\r\nexport function MouseWheel(options: MouseWheelOption) {\r\n const { element, onMouseWheel } = options;\r\n\r\n function destroy() {\r\n element.removeEventListener('wheel', wheelHandler as EventListener);\r\n element.removeEventListener('mousewheel', wheelHandler as EventListener);\r\n }\r\n\r\n function init() {\r\n element.addEventListener('wheel', wheelHandler as EventListener);\r\n element.addEventListener('mousewheel', wheelHandler as EventListener);\r\n }\r\n\r\n // copy over the same event handler code used in jquery.mousewheel\r\n function wheelHandler(event: WheelEvent & { axis: number; wheelDelta: number; wheelDeltaX: number; wheelDeltaY: number; HORIZONTAL_AXIS: number; }) {\r\n const orgEvent = event || window.event;\r\n let delta = 0;\r\n let deltaX = 0;\r\n let deltaY = 0;\r\n\r\n // Old school scrollwheel delta\r\n if (orgEvent.wheelDelta) {\r\n delta = orgEvent.wheelDelta / 120;\r\n }\r\n if (orgEvent.detail) {\r\n delta = -orgEvent.detail / 3;\r\n }\r\n\r\n // New school multidimensional scroll (touchpads) deltas\r\n deltaY = delta;\r\n\r\n // Gecko\r\n if (orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS) {\r\n deltaY = 0;\r\n deltaX = -1 * delta;\r\n }\r\n\r\n // WebKit\r\n if (orgEvent.wheelDeltaY !== undefined) {\r\n deltaY = orgEvent.wheelDeltaY / 120;\r\n }\r\n if (orgEvent.wheelDeltaX !== undefined) {\r\n deltaX = -1 * orgEvent.wheelDeltaX / 120;\r\n }\r\n\r\n if (typeof onMouseWheel === 'function') {\r\n onMouseWheel(event, delta, deltaX, deltaY);\r\n }\r\n }\r\n\r\n // initialize Slick.MouseWheel by attaching mousewheel event\r\n init();\r\n\r\n // public API\r\n return { destroy };\r\n}\r\n\r\n/**\r\n * Resizable Class, enables resize functionality for any element\r\n * Code mostly comes from these 2 resources:\r\n * https://spin.atomicobject.com/2019/11/21/creating-a-resizable-html-element/\r\n * https://htmldom.dev/make-a-resizable-element/\r\n * available optional options:\r\n * - resizeableElement: resizable DOM element\r\n * - resizeableHandleElement: resizable DOM element\r\n * - onResizeStart: resize start callback\r\n * - onResize: resizing callback\r\n * - onResizeEnd: resize ended callback\r\n * @param {Object} options\r\n * @returns - Resizable instance which includes destroy method\r\n * @class Resizable\r\n */\r\nexport function Resizable(options: ResizableOption) {\r\n const { resizeableElement, resizeableHandleElement, onResizeStart, onResize, onResizeEnd } = options;\r\n if (!resizeableHandleElement || typeof resizeableHandleElement.addEventListener !== 'function') {\r\n throw new Error('[Slick.Resizable] You did not provide a valid html element that will be used for the handle to resize.');\r\n }\r\n\r\n function init() {\r\n // add event listeners on the draggable element\r\n resizeableHandleElement.addEventListener('mousedown', resizeStartHandler);\r\n resizeableHandleElement.addEventListener('touchstart', resizeStartHandler);\r\n }\r\n\r\n function destroy() {\r\n if (typeof resizeableHandleElement?.removeEventListener === 'function') {\r\n resizeableHandleElement.removeEventListener('mousedown', resizeStartHandler);\r\n resizeableHandleElement.removeEventListener('touchstart', resizeStartHandler);\r\n }\r\n }\r\n\r\n function executeResizeCallbackWhenDefined(callback?: Function, e?: MouseEvent | TouchEvent | Touch) {\r\n if (typeof callback === 'function') {\r\n return callback(e, { resizeableElement, resizeableHandleElement });\r\n }\r\n }\r\n\r\n function resizeStartHandler(e: MouseEvent | TouchEvent) {\r\n e.preventDefault();\r\n const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n const result = executeResizeCallbackWhenDefined(onResizeStart, event);\r\n if (result !== false) {\r\n document.body.addEventListener('mousemove', resizingHandler);\r\n document.body.addEventListener('mouseup', resizeEndHandler);\r\n document.body.addEventListener('touchmove', resizingHandler);\r\n document.body.addEventListener('touchend', resizeEndHandler);\r\n }\r\n }\r\n\r\n function resizingHandler(e: MouseEvent | TouchEvent) {\r\n if (e.preventDefault && e.type !== 'touchmove') {\r\n e.preventDefault();\r\n }\r\n const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n if (typeof onResize === 'function') {\r\n onResize(event, { resizeableElement, resizeableHandleElement });\r\n }\r\n }\r\n\r\n /** Remove all mouse/touch handlers */\r\n function resizeEndHandler(e: MouseEvent | TouchEvent) {\r\n const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n executeResizeCallbackWhenDefined(onResizeEnd, event);\r\n document.body.removeEventListener('mousemove', resizingHandler);\r\n document.body.removeEventListener('mouseup', resizeEndHandler);\r\n document.body.removeEventListener('touchmove', resizingHandler);\r\n document.body.removeEventListener('touchend', resizeEndHandler);\r\n }\r\n\r\n init();\r\n\r\n // public API\r\n return { destroy };\r\n}\r\n\r\n// extend Slick namespace on window object when building as iife\r\nif (IIFE_ONLY && window.Slick) {\r\n Utils.extend(Slick, {\r\n Draggable,\r\n MouseWheel,\r\n Resizable,\r\n });\r\n}\r\n","import { SlickEvent as SlickEvent_, type SlickEventData, SlickEventHandler as SlickEventHandler_, SlickRange as SlickRange_, Utils as Utils_ } from '../slick.core';\nimport { Draggable as Draggable_ } from '../slick.interactions';\nimport { SlickCellRangeDecorator as SlickCellRangeDecorator_ } from './slick.cellrangedecorator';\nimport type { CellRangeSelectorOption, DragPosition, DragRange, DragRowMove, GridOption, MouseOffsetViewport, OnScrollEventArgs, SlickPlugin } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\nconst SlickCellRangeDecorator = IIFE_ONLY ? Slick.CellRangeDecorator : SlickCellRangeDecorator_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport class SlickCellRangeSelector implements SlickPlugin {\n // --\n // public API\n pluginName = 'CellRangeSelector' as const;\n onBeforeCellRangeSelected = new SlickEvent<{ row: number; cell: number; }>('onBeforeCellRangeSelected');\n onCellRangeSelected = new SlickEvent<{ range: SlickRange_; }>('onCellRangeSelected');\n onCellRangeSelecting = new SlickEvent<{ range: SlickRange_; }>('onCellRangeSelecting');\n\n // --\n // protected props\n protected _grid!: SlickGrid;\n protected _currentlySelectedRange: DragRange | null = null;\n protected _canvas: HTMLElement | null = null;\n protected _decorator!: SlickCellRangeDecorator_;\n protected _gridOptions!: GridOption;\n protected _activeCanvas!: HTMLElement;\n protected _dragging = false;\n protected _handler = new SlickEventHandler();\n protected _options: CellRangeSelectorOption;\n protected _defaults = {\n autoScroll: true,\n minIntervalToShowNextCell: 30,\n maxIntervalToShowNextCell: 600, // better to a multiple of minIntervalToShowNextCell\n accelerateInterval: 5, // increase 5ms when cursor 1px outside the viewport.\n selectionCss: {\n border: '2px dashed blue'\n }\n } as CellRangeSelectorOption;\n\n // Frozen row & column variables\n protected _rowOffset = 0;\n protected _columnOffset = 0;\n protected _isRightCanvas = false;\n protected _isBottomCanvas = false;\n\n // autoScroll related constiables\n protected _activeViewport!: HTMLElement;\n protected _autoScrollTimerId?: NodeJS.Timeout;\n protected _draggingMouseOffset!: MouseOffsetViewport;\n protected _moveDistanceForOneCell!: { x: number; y: number; };\n protected _xDelayForNextCell = 0;\n protected _yDelayForNextCell = 0;\n protected _viewportHeight = 0;\n protected _viewportWidth = 0;\n protected _isRowMoveRegistered = false;\n\n // Scrollings\n protected _scrollLeft = 0;\n protected _scrollTop = 0;\n\n constructor(options?: Partial) {\n this._options = Utils.extend(true, {}, this._defaults, options);\n }\n\n init(grid: SlickGrid) {\n if (Draggable === undefined) {\n throw new Error('Slick.Draggable is undefined, make sure to import \"slick.interactions.js\"');\n }\n\n this._decorator = this._options.cellDecorator || new SlickCellRangeDecorator(grid, this._options);\n this._grid = grid;\n Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n this._canvas = this._grid.getCanvasNode();\n this._gridOptions = this._grid.getOptions();\n this._handler\n .subscribe(this._grid.onScroll, this.handleScroll.bind(this))\n .subscribe(this._grid.onDragInit, this.handleDragInit.bind(this))\n .subscribe(this._grid.onDragStart, this.handleDragStart.bind(this))\n .subscribe(this._grid.onDrag, this.handleDrag.bind(this))\n .subscribe(this._grid.onDragEnd, this.handleDragEnd.bind(this));\n }\n\n destroy() {\n this._handler.unsubscribeAll();\n this._activeCanvas = null as any;\n this._activeViewport = null as any;\n this._canvas = null;\n this._decorator?.destroy();\n }\n\n getCellDecorator() {\n return this._decorator;\n }\n\n protected handleScroll(_e: SlickEventData, args: OnScrollEventArgs) {\n this._scrollTop = args.scrollTop;\n this._scrollLeft = args.scrollLeft;\n }\n\n protected handleDragInit(e: SlickEventData) {\n // Set the active canvas node because the decorator needs to append its\n // box to the correct canvas\n this._activeCanvas = this._grid.getActiveCanvasNode(e);\n this._activeViewport = this._grid.getActiveViewportNode(e);\n\n const scrollbarDimensions = this._grid.getDisplayedScrollbarDimensions();\n this._viewportWidth = this._activeViewport.offsetWidth - scrollbarDimensions.width;\n this._viewportHeight = this._activeViewport.offsetHeight - scrollbarDimensions.height;\n\n this._moveDistanceForOneCell = {\n x: this._grid.getAbsoluteColumnMinWidth() / 2,\n y: this._grid.getOptions().rowHeight! / 2\n };\n this._isRowMoveRegistered = this.hasRowMoveManager();\n\n this._rowOffset = 0;\n this._columnOffset = 0;\n this._isBottomCanvas = this._activeCanvas.classList.contains('grid-canvas-bottom');\n\n if (this._gridOptions.frozenRow! > -1 && this._isBottomCanvas) {\n const canvasSelector = `.${this._grid.getUID()} .grid-canvas-${this._gridOptions.frozenBottom ? 'bottom' : 'top'}`;\n const canvasElm = document.querySelector(canvasSelector);\n if (canvasElm) {\n this._rowOffset = canvasElm.clientHeight || 0;\n }\n }\n\n this._isRightCanvas = this._activeCanvas.classList.contains('grid-canvas-right');\n\n if (this._gridOptions.frozenColumn! > -1 && this._isRightCanvas) {\n const canvasLeftElm = document.querySelector(`.${this._grid.getUID()} .grid-canvas-left`);\n if (canvasLeftElm) {\n this._columnOffset = canvasLeftElm.clientWidth || 0;\n }\n }\n\n // prevent the grid from cancelling drag'n'drop by default\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n\n protected handleDragStart(e: SlickEventData, dd: DragRowMove) {\n const cell = this._grid.getCellFromEvent(e);\n if (cell && this.onBeforeCellRangeSelected.notify(cell).getReturnValue() !== false && this._grid.canCellBeSelected(cell.row, cell.cell)) {\n this._dragging = true;\n e.stopImmediatePropagation();\n }\n if (!this._dragging) {\n return;\n }\n\n this._grid.focus();\n\n const canvasOffset = Utils.offset(this._canvas);\n\n let startX = dd.startX - (canvasOffset?.left ?? 0);\n if (this._gridOptions.frozenColumn! >= 0 && this._isRightCanvas) {\n startX += this._scrollLeft;\n }\n\n let startY = dd.startY - (canvasOffset?.top ?? 0);\n if (this._gridOptions.frozenRow! >= 0 && this._isBottomCanvas) {\n startY += this._scrollTop;\n }\n\n const start = this._grid.getCellFromPoint(startX, startY);\n\n dd.range = { start, end: {} };\n this._currentlySelectedRange = dd.range;\n return this._decorator.show(new SlickRange(start.row, start.cell));\n }\n\n protected handleDrag(evt: SlickEventData, dd: DragRowMove) {\n if (!this._dragging && !this._isRowMoveRegistered) {\n return;\n }\n if (!this._isRowMoveRegistered) {\n evt.stopImmediatePropagation();\n }\n\n const e = evt.getNativeEvent();\n if (this._options.autoScroll) {\n this._draggingMouseOffset = this.getMouseOffsetViewport(e, dd);\n if (this._draggingMouseOffset.isOutsideViewport) {\n return this.handleDragOutsideViewport();\n }\n }\n this.stopIntervalTimer();\n this.handleDragTo(e, dd);\n }\n\n protected getMouseOffsetViewport(e: MouseEvent | TouchEvent, dd: DragRowMove): MouseOffsetViewport {\n const targetEvent: MouseEvent | Touch = (e as TouchEvent)?.touches?.[0] ?? e;\n const viewportLeft = this._activeViewport.scrollLeft;\n const viewportTop = this._activeViewport.scrollTop;\n const viewportRight = viewportLeft + this._viewportWidth;\n const viewportBottom = viewportTop + this._viewportHeight;\n\n const viewportOffset = Utils.offset(this._activeViewport);\n const viewportOffsetLeft = viewportOffset?.left ?? 0;\n const viewportOffsetTop = viewportOffset?.top ?? 0;\n const viewportOffsetRight = viewportOffsetLeft + this._viewportWidth;\n const viewportOffsetBottom = viewportOffsetTop + this._viewportHeight;\n\n const result = {\n e,\n dd,\n viewport: {\n left: viewportLeft,\n top: viewportTop,\n right: viewportRight,\n bottom: viewportBottom,\n offset: {\n left: viewportOffsetLeft,\n top: viewportOffsetTop,\n right: viewportOffsetRight,\n bottom: viewportOffsetBottom\n }\n },\n // Consider the viewport as the origin, the `offset` is based on the coordinate system:\n // the cursor is on the viewport's left/bottom when it is less than 0, and on the right/top when greater than 0.\n offset: {\n x: 0,\n y: 0\n },\n isOutsideViewport: false\n };\n // ... horizontal\n if (targetEvent.pageX < viewportOffsetLeft) {\n result.offset.x = targetEvent.pageX - viewportOffsetLeft;\n } else if (targetEvent.pageX > viewportOffsetRight) {\n result.offset.x = targetEvent.pageX - viewportOffsetRight;\n }\n // ... vertical\n if (targetEvent.pageY < viewportOffsetTop) {\n result.offset.y = viewportOffsetTop - targetEvent.pageY;\n } else if (targetEvent.pageY > viewportOffsetBottom) {\n result.offset.y = viewportOffsetBottom - targetEvent.pageY;\n }\n result.isOutsideViewport = !!result.offset.x || !!result.offset.y;\n return result;\n }\n\n protected handleDragOutsideViewport() {\n this._xDelayForNextCell = this._options.maxIntervalToShowNextCell - Math.abs(this._draggingMouseOffset.offset.x) * this._options.accelerateInterval;\n this._yDelayForNextCell = this._options.maxIntervalToShowNextCell - Math.abs(this._draggingMouseOffset.offset.y) * this._options.accelerateInterval;\n // only one timer is created to handle the case that cursor outside the viewport\n if (!this._autoScrollTimerId) {\n let xTotalDelay = 0;\n let yTotalDelay = 0;\n this._autoScrollTimerId = setInterval(() => {\n let xNeedUpdate = false;\n let yNeedUpdate = false;\n // ... horizontal\n if (this._draggingMouseOffset.offset.x) {\n xTotalDelay += this._options.minIntervalToShowNextCell;\n xNeedUpdate = xTotalDelay >= this._xDelayForNextCell;\n } else {\n xTotalDelay = 0;\n }\n // ... vertical\n if (this._draggingMouseOffset.offset.y) {\n yTotalDelay += this._options.minIntervalToShowNextCell;\n yNeedUpdate = yTotalDelay >= this._yDelayForNextCell;\n } else {\n yTotalDelay = 0;\n }\n if (xNeedUpdate || yNeedUpdate) {\n if (xNeedUpdate) {\n xTotalDelay = 0;\n }\n if (yNeedUpdate) {\n yTotalDelay = 0;\n }\n this.handleDragToNewPosition(xNeedUpdate, yNeedUpdate);\n }\n }, this._options.minIntervalToShowNextCell);\n }\n }\n\n protected handleDragToNewPosition(xNeedUpdate: boolean, yNeedUpdate: boolean) {\n let pageX = this._draggingMouseOffset.e.pageX;\n let pageY = this._draggingMouseOffset.e.pageY;\n const mouseOffsetX = this._draggingMouseOffset.offset.x;\n const mouseOffsetY = this._draggingMouseOffset.offset.y;\n const viewportOffset = this._draggingMouseOffset.viewport.offset;\n // ... horizontal\n if (xNeedUpdate && mouseOffsetX) {\n if (mouseOffsetX > 0) {\n pageX = viewportOffset.right + this._moveDistanceForOneCell.x;\n } else {\n pageX = viewportOffset.left - this._moveDistanceForOneCell.x;\n }\n }\n // ... vertical\n if (yNeedUpdate && mouseOffsetY) {\n if (mouseOffsetY > 0) {\n pageY = viewportOffset.top - this._moveDistanceForOneCell.y;\n } else {\n pageY = viewportOffset.bottom + this._moveDistanceForOneCell.y;\n }\n }\n this.handleDragTo({ pageX, pageY }, this._draggingMouseOffset.dd);\n }\n\n protected stopIntervalTimer() {\n if (this._autoScrollTimerId) {\n clearInterval(this._autoScrollTimerId);\n this._autoScrollTimerId = undefined;\n }\n }\n\n protected handleDragTo(e: { pageX: number; pageY: number; }, dd: DragPosition) {\n const targetEvent: MouseEvent | Touch = (e as unknown as TouchEvent)?.touches?.[0] ?? e;\n const canvasOffset = Utils.offset(this._activeCanvas);\n const end = this._grid.getCellFromPoint(\n targetEvent.pageX - (canvasOffset?.left ?? 0) + this._columnOffset,\n targetEvent.pageY - (canvasOffset?.top ?? 0) + this._rowOffset\n );\n\n // ... frozen column(s),\n if (this._gridOptions.frozenColumn! >= 0 && (!this._isRightCanvas && (end.cell > this._gridOptions.frozenColumn!)) || (this._isRightCanvas && (end.cell <= this._gridOptions.frozenColumn!))) {\n return;\n }\n\n // ... or frozen row(s)\n if (this._gridOptions.frozenRow! >= 0 && (!this._isBottomCanvas && (end.row >= this._gridOptions.frozenRow!)) || (this._isBottomCanvas && (end.row < this._gridOptions.frozenRow!))) {\n return;\n }\n\n // scrolling the viewport to display the target `end` cell if it is not fully displayed\n if (this._options.autoScroll && this._draggingMouseOffset) {\n const endCellBox = this._grid.getCellNodeBox(end.row, end.cell);\n if (!endCellBox) {\n return;\n }\n const viewport = this._draggingMouseOffset.viewport;\n if (endCellBox.left < viewport.left || endCellBox.right > viewport.right\n || endCellBox.top < viewport.top || endCellBox.bottom > viewport.bottom) {\n this._grid.scrollCellIntoView(end.row, end.cell);\n }\n }\n\n // ... or regular grid (without any frozen options)\n if (!this._grid.canCellBeSelected(end.row, end.cell)) {\n return;\n }\n\n if (dd?.range) {\n dd.range.end = end;\n\n const range = new SlickRange(dd.range.start.row ?? 0, dd.range.start.cell ?? 0, end.row, end.cell);\n this._decorator.show(range);\n this.onCellRangeSelecting.notify({\n range\n });\n }\n }\n\n protected hasRowMoveManager() {\n return !!(this._grid.getPluginByName('RowMoveManager') || this._grid.getPluginByName('CrossGridRowMoveManager'));\n }\n\n protected handleDragEnd(e: SlickEventData, dd: DragPosition) {\n this._decorator.hide();\n if (!this._dragging) {\n return;\n }\n\n this._dragging = false;\n e.stopImmediatePropagation();\n\n this.stopIntervalTimer();\n this.onCellRangeSelected.notify({\n range: new SlickRange(\n dd.range.start.row ?? 0,\n dd.range.start.cell ?? 0,\n dd.range.end.row,\n dd.range.end.cell\n )\n });\n }\n\n getCurrentRange() {\n return this._currentlySelectedRange;\n }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n Utils.extend(Slick, {\n CellRangeSelector: SlickCellRangeSelector\n });\n}\n","import { keyCode as keyCode_, SlickEvent as SlickEvent_, SlickEventData as SlickEventData_, SlickEventHandler as SlickEventHandler_, SlickRange as SlickRange_, Utils as Utils_ } from '../slick.core';\nimport { Draggable as Draggable_ } from '../slick.interactions';\nimport { SlickCellRangeDecorator as SlickCellRangeDecorator_ } from './slick.cellrangedecorator';\nimport { SlickCellRangeSelector as SlickCellRangeSelector_ } from './slick.cellrangeselector';\nimport type { SlickCrossGridRowMoveManager as SlickCrossGridRowMoveManager_ } from './slick.crossgridrowmovemanager';\nimport type { SlickRowMoveManager as SlickRowMoveManager_ } from './slick.rowmovemanager';\nimport type { OnActiveCellChangedEventArgs, RowSelectionModelOption } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst SlickCellRangeDecorator = IIFE_ONLY ? Slick.CellRangeDecorator : SlickCellRangeDecorator_;\nconst SlickCellRangeSelector = IIFE_ONLY ? Slick.CellRangeSelector : SlickCellRangeSelector_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport class SlickRowSelectionModel {\n // --\n // public API\n pluginName = 'RowSelectionModel' as const;\n onSelectedRangesChanged = new SlickEvent('onSelectedRangesChanged');\n // _handler, _inHandler, _isRowMoveManagerHandler, _options, wrapHandler\n // --\n // protected props\n protected _grid!: SlickGrid;\n protected _ranges: SlickRange_[] = [];\n protected _eventHandler = new SlickEventHandler();\n protected _inHandler = false;\n protected _selector?: SlickCellRangeSelector_;\n protected _isRowMoveManagerHandler: any;\n protected _options: RowSelectionModelOption;\n protected _defaults: RowSelectionModelOption = {\n selectActiveRow: true,\n dragToSelect: false,\n autoScrollWhenDrag: true,\n cellRangeSelector: undefined\n };\n\n constructor(options?: Partial) {\n this._options = Utils.extend(true, {}, this._defaults, options);\n }\n\n init(grid: SlickGrid) {\n if (Draggable === undefined) {\n throw new Error('Slick.Draggable is undefined, make sure to import \"slick.interactions.js\"');\n }\n\n this._selector = this._options.cellRangeSelector;\n this._grid = grid;\n Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n\n if (!this._selector && this._options.dragToSelect) {\n if (!SlickCellRangeDecorator) {\n throw new Error('Slick.CellRangeDecorator is required when option dragToSelect set to true');\n }\n this._selector = new SlickCellRangeSelector({\n selectionCss: { border: 'none' } as CSSStyleDeclaration,\n autoScroll: this._options.autoScrollWhenDrag\n });\n }\n\n this._eventHandler.subscribe(this._grid.onActiveCellChanged, this.wrapHandler(this.handleActiveCellChange).bind(this));\n this._eventHandler.subscribe(this._grid.onKeyDown, this.wrapHandler(this.handleKeyDown).bind(this));\n this._eventHandler.subscribe(this._grid.onClick, this.wrapHandler(this.handleClick).bind(this));\n if (this._selector) {\n grid.registerPlugin(this._selector);\n this._selector.onCellRangeSelecting.subscribe(this.handleCellRangeSelected.bind(this));\n this._selector.onCellRangeSelected.subscribe(this.handleCellRangeSelected.bind(this));\n this._selector.onBeforeCellRangeSelected.subscribe(this.handleBeforeCellRangeSelected.bind(this));\n }\n }\n\n destroy() {\n this._eventHandler.unsubscribeAll();\n if (this._selector) {\n this._selector.onCellRangeSelecting.unsubscribe(this.handleCellRangeSelected.bind(this));\n this._selector.onCellRangeSelected.unsubscribe(this.handleCellRangeSelected.bind(this));\n this._selector.onBeforeCellRangeSelected.unsubscribe(this.handleBeforeCellRangeSelected.bind(this));\n this._grid.unregisterPlugin(this._selector);\n if (this._selector.destroy) {\n this._selector.destroy();\n }\n }\n }\n\n protected wrapHandler(handler: (...args: any) => void) {\n return (...args: any) => {\n if (!this._inHandler) {\n this._inHandler = true;\n handler.apply(this, args);\n this._inHandler = false;\n }\n };\n }\n\n protected rangesToRows(ranges: SlickRange_[]): number[] {\n const rows: number[] = [];\n for (let i = 0; i < ranges.length; i++) {\n for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n rows.push(j);\n }\n }\n return rows;\n }\n\n protected rowsToRanges(rows: number[]) {\n const ranges: SlickRange_[] = [];\n const lastCell = this._grid.getColumns().length - 1;\n rows.forEach(row => ranges.push(new SlickRange(row, 0, row, lastCell)));\n return ranges;\n }\n\n protected getRowsRange(from: number, to: number) {\n let i;\n const rows: number[] = [];\n for (i = from; i <= to; i++) {\n rows.push(i);\n }\n for (i = to; i < from; i++) {\n rows.push(i);\n }\n return rows;\n }\n\n getSelectedRows() {\n return this.rangesToRows(this._ranges);\n }\n\n setSelectedRows(rows: number[]) {\n this.setSelectedRanges(this.rowsToRanges(rows), 'SlickRowSelectionModel.setSelectedRows');\n }\n\n setSelectedRanges(ranges: SlickRange_[], caller = 'SlickRowSelectionModel.setSelectedRanges') {\n // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged\n if ((!this._ranges || this._ranges.length === 0) && (!ranges || ranges.length === 0)) {\n return;\n }\n this._ranges = ranges;\n\n // provide extra \"caller\" argument through SlickEventData event to avoid breaking the previous pubsub event structure\n // that only accepts an array of selected range `SlickRange[]`, the SlickEventData args will be merged and used later by `onSelectedRowsChanged`\n const eventData = new SlickEventData(new CustomEvent('click', { detail: { caller } }), this._ranges);\n this.onSelectedRangesChanged.notify(this._ranges, eventData);\n }\n\n getSelectedRanges() {\n return this._ranges;\n }\n\n refreshSelections() {\n this.setSelectedRows(this.getSelectedRows());\n }\n\n protected handleActiveCellChange(_e: SlickEventData_, args: OnActiveCellChangedEventArgs) {\n if (this._options.selectActiveRow && Utils.isDefined(args.row)) {\n this.setSelectedRanges([new SlickRange(args.row, 0, args.row, this._grid.getColumns().length - 1)]);\n }\n }\n\n protected handleKeyDown(e: KeyboardEvent) {\n const activeRow = this._grid.getActiveCell();\n if (this._grid.getOptions().multiSelect && activeRow\n && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey\n && (e.which === keyCode.UP || e.which === keyCode.DOWN)) {\n let selectedRows = this.getSelectedRows();\n selectedRows.sort(function (x, y) {\n return x - y;\n });\n\n if (!selectedRows.length) {\n selectedRows = [activeRow.row];\n }\n\n let top = selectedRows[0];\n let bottom = selectedRows[selectedRows.length - 1];\n let active: number;\n\n if (e.which === keyCode.DOWN) {\n active = activeRow.row < bottom || top === bottom ? ++bottom : ++top;\n } else {\n active = activeRow.row < bottom ? --bottom : --top;\n }\n\n if (active >= 0 && active < this._grid.getDataLength()) {\n this._grid.scrollRowIntoView(active);\n const tempRanges = this.rowsToRanges(this.getRowsRange(top, bottom));\n this.setSelectedRanges(tempRanges);\n }\n\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n protected handleClick(e: MouseEvent): boolean | void {\n const cell = this._grid.getCellFromEvent(e);\n if (!cell || !this._grid.canCellBeActive(cell.row, cell.cell)) {\n return false;\n }\n\n if (!this._grid.getOptions().multiSelect || (\n !e.ctrlKey && !e.shiftKey && !e.metaKey)) {\n return false;\n }\n\n let selection = this.rangesToRows(this._ranges);\n const idx = selection.indexOf(cell.row);\n\n if (idx === -1 && (e.ctrlKey || e.metaKey)) {\n selection.push(cell.row);\n this._grid.setActiveCell(cell.row, cell.cell);\n } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {\n selection = selection.filter((o) => o !== cell.row);\n this._grid.setActiveCell(cell.row, cell.cell);\n } else if (selection.length && e.shiftKey) {\n const last = selection.pop() as number;\n const from = Math.min(cell.row, last);\n const to = Math.max(cell.row, last);\n selection = [];\n for (let i = from; i <= to; i++) {\n if (i !== last) {\n selection.push(i);\n }\n }\n selection.push(last);\n this._grid.setActiveCell(cell.row, cell.cell);\n }\n\n const tempRanges = this.rowsToRanges(selection);\n this.setSelectedRanges(tempRanges);\n e.stopImmediatePropagation();\n\n return true;\n }\n\n protected handleBeforeCellRangeSelected(e: SlickEventData_, cell: { row: number; cell: number; }): boolean | void {\n if (!this._isRowMoveManagerHandler) {\n const rowMoveManager = this._grid.getPluginByName('RowMoveManager') || this._grid.getPluginByName('CrossGridRowMoveManager');\n this._isRowMoveManagerHandler = rowMoveManager ? rowMoveManager.isHandlerColumn : Utils.noop;\n }\n if (this._grid.getEditorLock().isActive() || this._isRowMoveManagerHandler(cell.cell)) {\n e.stopPropagation();\n return false;\n }\n this._grid.setActiveCell(cell.row, cell.cell);\n }\n\n protected handleCellRangeSelected(_e: SlickEventData_, args: { range: SlickRange_; }): boolean | void {\n if (!this._grid.getOptions().multiSelect || !this._options.selectActiveRow) {\n return false;\n }\n this.setSelectedRanges([new SlickRange(args.range.fromRow, 0, args.range.toRow, this._grid.getColumns().length - 1)]);\n }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n Utils.extend(true, window, {\n Slick: {\n RowSelectionModel: SlickRowSelectionModel\n }\n });\n}\n\n","import { type SlickEventData, SlickGroup as SlickGroup_, keyCode as keyCode_, Utils as Utils_ } from './slick.core';\nimport type { Column, GroupItemMetadataProviderOption, GroupingFormatterItem, ItemMetadata, SlickPlugin } from './models/index';\nimport type { SlickGrid } from './slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst SlickGroup = IIFE_ONLY ? Slick.Group : SlickGroup_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView.\n * This metadata overrides the default behavior and formatting of those rows so that they appear and function\n * correctly when processed by the grid.\n *\n * This class also acts as a grid plugin providing event handlers to expand & collapse groups.\n * If \"grid.registerPlugin(...)\" is not called, expand & collapse will not work.\n *\n * @class GroupItemMetadataProvider\n * @module Data\n * @namespace Slick.Data\n * @constructor\n * @param inputOptions\n */\nexport class SlickGroupItemMetadataProvider implements SlickPlugin {\n pluginName = 'GroupItemMetadataProvider' as const;\n\n protected _grid!: SlickGrid;\n protected _options: GroupItemMetadataProviderOption;\n protected _defaults: GroupItemMetadataProviderOption = {\n checkboxSelect: false,\n checkboxSelectCssClass: 'slick-group-select-checkbox',\n checkboxSelectPlugin: null,\n groupCssClass: 'slick-group',\n groupTitleCssClass: 'slick-group-title',\n totalsCssClass: 'slick-group-totals',\n groupFocusable: true,\n totalsFocusable: false,\n toggleCssClass: 'slick-group-toggle',\n toggleExpandedCssClass: 'expanded',\n toggleCollapsedCssClass: 'collapsed',\n enableExpandCollapse: true,\n groupFormatter: this.defaultGroupCellFormatter.bind(this),\n totalsFormatter: this.defaultTotalsCellFormatter.bind(this),\n includeHeaderTotals: false\n };\n\n constructor(inputOptions?: GroupItemMetadataProviderOption) {\n this._options = Utils.extend(true, {}, this._defaults, inputOptions);\n }\n\n /** Getter of SlickGrid DataView object */\n protected get dataView(): any {\n return this._grid?.getData?.() ?? {} as any;\n }\n\n getOptions() {\n return this._options;\n }\n\n setOptions(inputOptions: GroupItemMetadataProviderOption) {\n Utils.extend(true, this._options, inputOptions);\n }\n\n protected defaultGroupCellFormatter(_row: number, _cell: number, _value: any, _columnDef: Column, item: any) {\n if (!this._options.enableExpandCollapse) {\n return item.title;\n }\n\n const indentation = `${item.level * 15}px`;\n const toggleClass = item.collapsed ? this._options.toggleCollapsedCssClass : this._options.toggleExpandedCssClass;\n\n // use a DocumentFragment to avoid creating an extra div container\n const containerElm = document.createDocumentFragment();\n\n // 1. optional row checkbox span to select the entire group rows\n if (this._options.checkboxSelect) {\n containerElm.appendChild(Utils.createDomElement('span', { className: `${this._options.checkboxSelectCssClass} ${item.selectChecked ? 'checked' : 'unchecked'}` }));\n }\n\n // 2. group toggle span\n containerElm.appendChild(Utils.createDomElement('span', {\n className: `${this._options.toggleCssClass} ${toggleClass}`,\n ariaExpanded: String(!item.collapsed),\n style: { marginLeft: indentation }\n }));\n\n // 3. group title span\n const groupTitleElm = Utils.createDomElement('span', { className: this._options.groupTitleCssClass || '' });\n groupTitleElm.setAttribute('level', item.level);\n (item.title instanceof HTMLElement)\n ? groupTitleElm.appendChild(item.title)\n : this._grid.applyHtmlCode(groupTitleElm, item.title ?? '');\n containerElm.appendChild(groupTitleElm);\n\n return containerElm;\n }\n\n protected defaultTotalsCellFormatter(_row: number, _cell: number, _value: any, columnDef: Column, item: any, grid: SlickGrid) {\n return (columnDef?.groupTotalsFormatter?.(item, columnDef, grid)) ?? '';\n }\n\n\n init(grid: SlickGrid) {\n this._grid = grid;\n this._grid.onClick.subscribe(this.handleGridClick.bind(this));\n this._grid.onKeyDown.subscribe(this.handleGridKeyDown.bind(this));\n }\n\n destroy() {\n if (this._grid) {\n this._grid.onClick.unsubscribe(this.handleGridClick.bind(this));\n this._grid.onKeyDown.unsubscribe(this.handleGridKeyDown.bind(this));\n }\n }\n\n protected handleGridClick(e: SlickEventData, args: { row: number; cell: number; grid: SlickGrid; }) {\n const target = e.target as HTMLElement;\n const item = this._grid.getDataItem(args.row);\n if (item && item instanceof SlickGroup && target.classList.contains(this._options.toggleCssClass || '')) {\n this.handleDataViewExpandOrCollapse(item);\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n if (item && item instanceof SlickGroup && target.classList.contains(this._options.checkboxSelectCssClass || '')) {\n item.selectChecked = !item.selectChecked;\n target.classList.remove((item.selectChecked ? 'unchecked' : 'checked'));\n target.classList.add((item.selectChecked ? 'checked' : 'unchecked'));\n // get rowIndexes array\n const rowIndexes = this.dataView.mapItemsToRows(item.rows);\n if (item.selectChecked) { \n this._options.checkboxSelectPlugin.selectRows(rowIndexes); \n } else {\n this._options.checkboxSelectPlugin.deSelectRows(rowIndexes);\n }\n }\n }\n\n // TODO: add -/+ handling\n protected handleGridKeyDown(e: SlickEventData) {\n if (this._options.enableExpandCollapse && (e.which === keyCode.SPACE)) {\n const activeCell = this._grid.getActiveCell();\n if (activeCell) {\n const item = this._grid.getDataItem(activeCell.row);\n if (item && item instanceof SlickGroup) {\n this.handleDataViewExpandOrCollapse(item);\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n }\n }\n }\n\n protected handleDataViewExpandOrCollapse(item: any) {\n const range = this._grid.getRenderedRange();\n this.dataView.setRefreshHints({\n ignoreDiffsBefore: range.top,\n ignoreDiffsAfter: range.bottom + 1\n });\n\n if (item.collapsed) {\n this.dataView.expandGroup(item.groupingKey);\n } else {\n this.dataView.collapseGroup(item.groupingKey);\n }\n }\n\n getGroupRowMetadata(item: GroupingFormatterItem): ItemMetadata {\n const groupLevel = item?.level;\n return {\n selectable: false,\n focusable: this._options.groupFocusable,\n cssClasses: `${this._options.groupCssClass} slick-group-level-${groupLevel}`,\n formatter: (this._options.includeHeaderTotals && this._options.totalsFormatter) || undefined,\n columns: {\n 0: {\n colspan: this._options.includeHeaderTotals ? '1' : '*',\n formatter: this._options.groupFormatter,\n editor: null\n }\n }\n };\n }\n\n getTotalsRowMetadata(item: { group: GroupingFormatterItem }): ItemMetadata | null {\n const groupLevel = item?.group?.level;\n return {\n selectable: false,\n focusable: this._options.totalsFocusable,\n cssClasses: `${this._options.totalsCssClass} slick-group-level-${groupLevel}`,\n formatter: this._options.totalsFormatter,\n editor: null\n };\n }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n window.Slick.Data = window.Slick.Data || {};\n window.Slick.Data.GroupItemMetadataProvider = SlickGroupItemMetadataProvider;\n}\n","import type {\r\n Aggregator,\r\n AnyFunction,\r\n CssStyleHash,\r\n CustomDataView,\r\n DataViewHints,\r\n Grouping,\r\n GroupingFormatterItem,\r\n ItemMetadata,\r\n OnGroupCollapsedEventArgs,\r\n OnGroupExpandedEventArgs,\r\n OnRowCountChangedEventArgs,\r\n OnRowsChangedEventArgs,\r\n OnRowsOrCountChangedEventArgs,\r\n OnSelectedRowIdsChangedEventArgs,\r\n OnSetItemsCalledEventArgs,\r\n PagingInfo,\r\n SlickGridModel,\r\n} from './models/index';\r\nimport {\r\n type BasePubSub,\r\n SlickEvent as SlickEvent_,\r\n SlickEventData as SlickEventData_,\r\n SlickGroup as SlickGroup_,\r\n SlickGroupTotals as SlickGroupTotals_,\r\n Utils as Utils_,\r\n type SlickNonDataItem,\r\n} from './slick.core';\r\nimport { SlickGroupItemMetadataProvider as SlickGroupItemMetadataProvider_ } from './slick.groupitemmetadataprovider';\r\n\r\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\r\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\r\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\r\nconst SlickGroup = IIFE_ONLY ? Slick.Group : SlickGroup_;\r\nconst SlickGroupTotals = IIFE_ONLY ? Slick.GroupTotals : SlickGroupTotals_;\r\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\r\nconst SlickGroupItemMetadataProvider = IIFE_ONLY ? Slick.Data?.GroupItemMetadataProvider ?? {} : SlickGroupItemMetadataProvider_;\r\n\r\nexport interface DataViewOption {\r\n /** Optionally provide a GroupItemMetadataProvider in order to use Grouping/DraggableGrouping features */\r\n groupItemMetadataProvider: SlickGroupItemMetadataProvider_ | null;\r\n\r\n /** defaults to false, are we using inline filters? */\r\n inlineFilters: boolean;\r\n\r\n /**\r\n * defaults to false, option to use CSP Safe approach,\r\n * Note: it is an opt-in option because it is slightly slower (perf impact) when compared to the non-CSP safe approach.\r\n */\r\n useCSPSafeFilter: boolean;\r\n}\r\nexport type FilterFn = (item: T, args: any) => boolean;\r\nexport type FilterCspFn = (item: T[], args: any) => T[];\r\nexport type FilterWithCspCachingFn = (item: T[], args: any, filterCache: any[]) => T[];\r\nexport type DataIdType = number | string;\r\nexport type SlickDataItem = SlickNonDataItem | SlickGroup_ | SlickGroupTotals_ | any;\r\nexport type GroupGetterFn = (val: any) => string | number;\r\n\r\n/**\r\n * A simple Model implementation.\r\n * Provides a filtered view of the underlying data.\r\n * Relies on the data item having an \"id\" property uniquely identifying it.\r\n */\r\nexport class SlickDataView implements CustomDataView {\r\n protected defaults: DataViewOption = {\r\n groupItemMetadataProvider: null,\r\n inlineFilters: false,\r\n useCSPSafeFilter: false,\r\n };\r\n\r\n // private\r\n protected idProperty = 'id'; // property holding a unique row id\r\n protected items: TData[] = []; // data by index\r\n protected rows: TData[] = []; // data by row\r\n protected idxById = new Map(); // indexes by id\r\n protected rowsById: { [id: DataIdType]: number } | undefined = undefined; // rows by id; lazy-calculated\r\n protected filter: FilterFn | null = null; // filter function\r\n protected filterCSPSafe: FilterFn | null = null; // filter function\r\n protected updated: ({ [id: DataIdType]: boolean }) | null = null; // updated item ids\r\n protected suspend = false; // suspends the recalculation\r\n protected isBulkSuspend = false; // delays protectedious operations like the\r\n // index update and delete to efficient\r\n // versions at endUpdate\r\n protected bulkDeleteIds = new Map();\r\n protected sortAsc: boolean | undefined = true;\r\n protected fastSortField?: string | null | (() => string);\r\n protected sortComparer!: ((a: TData, b: TData) => number);\r\n protected refreshHints: DataViewHints = {};\r\n protected prevRefreshHints: DataViewHints = {};\r\n protected filterArgs: any;\r\n protected filteredItems: TData[] = [];\r\n protected compiledFilter?: FilterFn | null;\r\n protected compiledFilterCSPSafe?: FilterCspFn | null;\r\n protected compiledFilterWithCaching?: FilterFn | null;\r\n protected compiledFilterWithCachingCSPSafe?: FilterWithCspCachingFn | null;\r\n protected filterCache: any[] = [];\r\n protected _grid?: SlickGridModel; // grid object will be defined only after using \"syncGridSelection()\" method\"\r\n\r\n // grouping\r\n protected groupingInfoDefaults: Grouping = {\r\n getter: undefined,\r\n formatter: undefined,\r\n comparer: (a: { value: any; }, b: { value: any; }) => (a.value === b.value ? 0 : (a.value > b.value ? 1 : -1)),\r\n predefinedValues: [],\r\n aggregators: [],\r\n aggregateEmpty: false,\r\n aggregateCollapsed: false,\r\n aggregateChildGroups: false,\r\n collapsed: false,\r\n displayTotalsRow: true,\r\n lazyTotalsCalculation: false\r\n };\r\n protected groupingInfos: Array = [];\r\n protected groups: SlickGroup_[] = [];\r\n protected toggledGroupsByLevel: any[] = [];\r\n protected groupingDelimiter = ':|:';\r\n protected selectedRowIds: DataIdType[] = [];\r\n protected preSelectedRowIdsChangeFn?: (args?: any) => void;\r\n\r\n protected pagesize = 0;\r\n protected pagenum = 0;\r\n protected totalRows = 0;\r\n protected _options: DataViewOption;\r\n protected _container?: HTMLElement;\r\n\r\n // public events\r\n onBeforePagingInfoChanged: SlickEvent_;\r\n onGroupExpanded: SlickEvent_;\r\n onGroupCollapsed: SlickEvent_;\r\n onPagingInfoChanged: SlickEvent_;\r\n onRowCountChanged: SlickEvent_;\r\n onRowsChanged: SlickEvent_;\r\n onRowsOrCountChanged: SlickEvent_;\r\n onSelectedRowIdsChanged: SlickEvent_;\r\n onSetItemsCalled: SlickEvent_;\r\n\r\n constructor(options?: Partial, protected externalPubSub?: BasePubSub) {\r\n this.onBeforePagingInfoChanged = new SlickEvent('onBeforePagingInfoChanged', externalPubSub);\r\n this.onGroupExpanded = new SlickEvent('onGroupExpanded', externalPubSub);\r\n this.onGroupCollapsed = new SlickEvent('onGroupCollapsed', externalPubSub);\r\n this.onPagingInfoChanged = new SlickEvent('onPagingInfoChanged', externalPubSub);\r\n this.onRowCountChanged = new SlickEvent('onRowCountChanged', externalPubSub);\r\n this.onRowsChanged = new SlickEvent('onRowsChanged', externalPubSub);\r\n this.onRowsOrCountChanged = new SlickEvent('onRowsOrCountChanged', externalPubSub);\r\n this.onSelectedRowIdsChanged = new SlickEvent('onSelectedRowIdsChanged', externalPubSub);\r\n this.onSetItemsCalled = new SlickEvent('onSetItemsCalled', externalPubSub);\r\n\r\n this._options = Utils.extend(true, {}, this.defaults, options);\r\n }\r\n\r\n /**\r\n * Begins a bached update of the items in the data view.\r\n * including deletes and the related events are postponed to the endUpdate call.\r\n * As certain operations are postponed during this update, some methods might not\r\n * deliver fully consistent information.\r\n * @param {Boolean} [bulkUpdate] - if set to true, most data view modifications\r\n */\r\n beginUpdate(bulkUpdate?: boolean) {\r\n this.suspend = true;\r\n this.isBulkSuspend = bulkUpdate === true;\r\n }\r\n\r\n endUpdate() {\r\n const wasBulkSuspend = this.isBulkSuspend;\r\n this.isBulkSuspend = false;\r\n this.suspend = false;\r\n if (wasBulkSuspend) {\r\n this.processBulkDelete();\r\n this.ensureIdUniqueness();\r\n }\r\n this.refresh();\r\n }\r\n\r\n destroy() {\r\n this.items = [];\r\n this.idxById = null as any;\r\n this.rowsById = null as any;\r\n this.filter = null as any;\r\n this.filterCSPSafe = null as any;\r\n this.updated = null as any;\r\n this.sortComparer = null as any;\r\n this.filterCache = [];\r\n this.filteredItems = [];\r\n this.compiledFilter = null;\r\n this.compiledFilterCSPSafe = null;\r\n this.compiledFilterWithCaching = null;\r\n this.compiledFilterWithCachingCSPSafe = null;\r\n\r\n if (this._grid && this._grid.onSelectedRowsChanged && this._grid.onCellCssStylesChanged) {\r\n this._grid.onSelectedRowsChanged.unsubscribe();\r\n this._grid.onCellCssStylesChanged.unsubscribe();\r\n }\r\n if (this.onRowsOrCountChanged) {\r\n this.onRowsOrCountChanged.unsubscribe();\r\n }\r\n }\r\n\r\n /** provide some refresh hints as to what to rows needs refresh */\r\n setRefreshHints(hints: DataViewHints) {\r\n this.refreshHints = hints;\r\n }\r\n\r\n /** get extra filter arguments of the filter method */\r\n getFilterArgs() {\r\n return this.filterArgs;\r\n }\r\n\r\n /** add extra filter arguments to the filter method */\r\n setFilterArgs(args: any) {\r\n this.filterArgs = args;\r\n }\r\n\r\n /**\r\n * Processes all delete requests placed during bulk update\r\n * by recomputing the items and idxById members.\r\n */\r\n protected processBulkDelete() {\r\n if (!this.idxById) { return; }\r\n\r\n // the bulk update is processed by\r\n // recomputing the whole items array and the index lookup in one go.\r\n // this is done by placing the not-deleted items\r\n // from left to right into the array and shrink the array the the new\r\n // size afterwards.\r\n // see https://github.com/6pac/SlickGrid/issues/571 for further details.\r\n\r\n let id: DataIdType, item, newIdx = 0;\r\n for (let i = 0, l = this.items.length; i < l; i++) {\r\n item = this.items[i];\r\n id = item[this.idProperty as keyof TData] as DataIdType;\r\n if (id === undefined) {\r\n throw new Error(`[SlickGrid DataView] Each data element must implement a unique 'id' property`);\r\n }\r\n\r\n // if items have been marked as deleted we skip them for the new final items array\r\n // and we remove them from the lookup table.\r\n if (this.bulkDeleteIds.has(id)) {\r\n this.idxById.delete(id);\r\n } else {\r\n // for items which are not deleted, we add them to the\r\n // next free position in the array and register the index in the lookup.\r\n this.items[newIdx] = item;\r\n this.idxById.set(id, newIdx);\r\n ++newIdx;\r\n }\r\n }\r\n\r\n // here we shrink down the full item array to the ones actually\r\n // inserted in the cleanup loop above.\r\n this.items.length = newIdx;\r\n // and finally cleanup the deleted ids to start cleanly on the next update.\r\n this.bulkDeleteIds = new Map();\r\n }\r\n\r\n protected updateIdxById(startingIndex?: number) {\r\n if (this.isBulkSuspend || !this.idxById) { // during bulk update we do not reorganize\r\n return;\r\n }\r\n startingIndex = startingIndex || 0;\r\n let id: DataIdType;\r\n for (let i = startingIndex, l = this.items.length; i < l; i++) {\r\n id = this.items[i][this.idProperty as keyof TData] as DataIdType;\r\n if (id === undefined) {\r\n throw new Error(`[SlickGrid DataView] Each data element must implement a unique 'id' property`);\r\n }\r\n this.idxById.set(id, i);\r\n }\r\n }\r\n\r\n protected ensureIdUniqueness() {\r\n if (this.isBulkSuspend || !this.idxById) { // during bulk update we do not reorganize\r\n return;\r\n }\r\n let id: DataIdType;\r\n for (let i = 0, l = this.items.length; i < l; i++) {\r\n id = this.items[i][this.idProperty as keyof TData] as DataIdType;\r\n if (id === undefined || this.idxById.get(id) !== i) {\r\n throw new Error(`[SlickGrid DataView] Each data element must implement a unique 'id' property`);\r\n }\r\n }\r\n }\r\n\r\n /** Get all DataView Items */\r\n getItems() {\r\n return this.items;\r\n }\r\n\r\n /** Get the DataView Id property name to use (defaults to \"Id\" but could be customized to something else when instantiating the DataView) */\r\n getIdPropertyName() {\r\n return this.idProperty;\r\n }\r\n\r\n /**\r\n * Set the Items with a new Dataset and optionally pass a different Id property name\r\n * @param {Array<*>} data - array of data\r\n * @param {String} [objectIdProperty] - optional id property to use as primary id\r\n */\r\n setItems(data: TData[], objectIdProperty?: string) {\r\n if (objectIdProperty !== undefined) {\r\n this.idProperty = objectIdProperty;\r\n }\r\n this.items = this.filteredItems = data;\r\n this.onSetItemsCalled.notify({ idProperty: this.idProperty, itemCount: this.items.length }, null, this);\r\n this.idxById = new Map();\r\n this.updateIdxById();\r\n this.ensureIdUniqueness();\r\n this.refresh();\r\n }\r\n\r\n /** Set Paging Options */\r\n setPagingOptions(args: Partial) {\r\n if (this.onBeforePagingInfoChanged.notify(this.getPagingInfo(), null, this).getReturnValue() !== false) {\r\n if (Utils.isDefined(args.pageSize)) {\r\n this.pagesize = args.pageSize;\r\n this.pagenum = this.pagesize ? Math.min(this.pagenum, Math.max(0, Math.ceil(this.totalRows / this.pagesize) - 1)) : 0;\r\n }\r\n\r\n if (Utils.isDefined(args.pageNum)) {\r\n this.pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(this.totalRows / this.pagesize) - 1));\r\n }\r\n\r\n this.onPagingInfoChanged.notify(this.getPagingInfo(), null, this);\r\n\r\n this.refresh();\r\n }\r\n }\r\n\r\n /** Get Paging Options */\r\n getPagingInfo(): PagingInfo {\r\n const totalPages = this.pagesize ? Math.max(1, Math.ceil(this.totalRows / this.pagesize)) : 1;\r\n return { pageSize: this.pagesize, pageNum: this.pagenum, totalRows: this.totalRows, totalPages, dataView: this as SlickDataView };\r\n }\r\n\r\n /** Sort Method to use by the DataView */\r\n sort(comparer: (a: TData, b: TData) => number, ascending?: boolean) {\r\n this.sortAsc = ascending;\r\n this.sortComparer = comparer;\r\n this.fastSortField = null;\r\n if (ascending === false) {\r\n this.items.reverse();\r\n }\r\n this.items.sort(comparer);\r\n if (ascending === false) {\r\n this.items.reverse();\r\n }\r\n this.idxById = new Map();\r\n this.updateIdxById();\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Provides a workaround for the extremely slow sorting in IE.\r\n * Does a [lexicographic] sort on a give column by temporarily overriding Object.prototype.toString\r\n * to return the value of that field and then doing a native Array.sort().\r\n */\r\n fastSort(field: string | (() => string), ascending?: boolean) {\r\n this.sortAsc = ascending;\r\n this.fastSortField = field;\r\n this.sortComparer = null as any;\r\n const oldToString = Object.prototype.toString;\r\n Object.prototype.toString = (typeof field === 'function') ? field : function () {\r\n // @ts-ignore\r\n return this[field];\r\n };\r\n // an extra reversal for descending sort keeps the sort stable\r\n // (assuming a stable native sort implementation, which isn't true in some cases)\r\n if (ascending === false) {\r\n this.items.reverse();\r\n }\r\n this.items.sort();\r\n Object.prototype.toString = oldToString;\r\n if (ascending === false) {\r\n this.items.reverse();\r\n }\r\n this.idxById = new Map();\r\n this.updateIdxById();\r\n this.refresh();\r\n }\r\n\r\n /** Re-Sort the dataset */\r\n reSort() {\r\n if (this.sortComparer) {\r\n this.sort(this.sortComparer, this.sortAsc);\r\n } else if (this.fastSortField) {\r\n this.fastSort(this.fastSortField, this.sortAsc);\r\n }\r\n }\r\n\r\n /** Get only the DataView filtered items */\r\n getFilteredItems() {\r\n return this.filteredItems as T[];\r\n }\r\n\r\n /** Get the array length (count) of only the DataView filtered items */\r\n getFilteredItemCount() {\r\n return this.filteredItems.length;\r\n }\r\n\r\n /** Get current Filter used by the DataView */\r\n getFilter() {\r\n return this._options.useCSPSafeFilter ? this.filterCSPSafe : this.filter;\r\n }\r\n\r\n /**\r\n * Set a Filter that will be used by the DataView\r\n * @param {Function} fn - filter callback function\r\n */\r\n setFilter(filterFn: FilterFn) {\r\n this.filterCSPSafe = filterFn;\r\n this.filter = filterFn;\r\n if (this._options.inlineFilters) {\r\n this.compiledFilterCSPSafe = this.compileFilterCSPSafe;\r\n this.compiledFilterWithCachingCSPSafe = this.compileFilterWithCachingCSPSafe;\r\n this.compiledFilter = this.compileFilter(this._options.useCSPSafeFilter);\r\n this.compiledFilterWithCaching = this.compileFilterWithCaching(this._options.useCSPSafeFilter);\r\n }\r\n this.refresh();\r\n }\r\n\r\n /** Get current Grouping info */\r\n getGrouping(): Grouping[] {\r\n return this.groupingInfos;\r\n }\r\n\r\n /** Set some Grouping */\r\n setGrouping(groupingInfo: Grouping | Grouping[]) {\r\n if (!this._options.groupItemMetadataProvider) {\r\n this._options.groupItemMetadataProvider = new SlickGroupItemMetadataProvider();\r\n }\r\n\r\n this.groups = [];\r\n this.toggledGroupsByLevel = [];\r\n groupingInfo = groupingInfo || [];\r\n this.groupingInfos = ((groupingInfo instanceof Array) ? groupingInfo : [groupingInfo]) as any;\r\n\r\n for (let i = 0; i < this.groupingInfos.length; i++) {\r\n const gi = this.groupingInfos[i] = Utils.extend(true, {}, this.groupingInfoDefaults, this.groupingInfos[i]);\r\n gi.getterIsAFn = typeof gi.getter === 'function';\r\n\r\n // pre-compile accumulator loops\r\n gi.compiledAccumulators = [];\r\n let idx = gi.aggregators.length;\r\n while (idx--) {\r\n gi.compiledAccumulators[idx] = this.compileAccumulatorLoopCSPSafe(gi.aggregators[idx]);\r\n }\r\n\r\n this.toggledGroupsByLevel[i] = {};\r\n }\r\n\r\n this.refresh();\r\n }\r\n\r\n /** Get an item in the DataView by its row index */\r\n getItemByIdx(i: number) {\r\n return this.items[i] as T;\r\n }\r\n\r\n /** Get row index in the DataView by its Id */\r\n getIdxById(id: DataIdType) {\r\n return this.idxById?.get(id);\r\n }\r\n\r\n protected ensureRowsByIdCache() {\r\n if (!this.rowsById) {\r\n this.rowsById = {};\r\n for (let i = 0, l = this.rows.length; i < l; i++) {\r\n this.rowsById[this.rows[i][this.idProperty as keyof TData] as DataIdType] = i;\r\n }\r\n }\r\n }\r\n\r\n /** Get row number in the grid by its item object */\r\n getRowByItem(item: TData) {\r\n this.ensureRowsByIdCache();\r\n return this.rowsById?.[item[this.idProperty as keyof TData] as DataIdType];\r\n }\r\n\r\n /** Get row number in the grid by its Id */\r\n getRowById(id: DataIdType) {\r\n this.ensureRowsByIdCache();\r\n return this.rowsById?.[id];\r\n }\r\n\r\n /** Get an item in the DataView by its Id */\r\n getItemById(id: DataIdType) {\r\n return this.items[(this.idxById.get(id) as number)] as T;\r\n }\r\n\r\n /** From the items array provided, return the mapped rows */\r\n mapItemsToRows(itemArray: TData[]) {\r\n const rows: number[] = [];\r\n this.ensureRowsByIdCache();\r\n for (let i = 0, l = itemArray.length; i < l; i++) {\r\n const row = this.rowsById?.[itemArray[i][this.idProperty as keyof TData] as DataIdType];\r\n if (Utils.isDefined(row)) {\r\n rows[rows.length] = row as number;\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n /** From the Ids array provided, return the mapped rows */\r\n mapIdsToRows(idArray: DataIdType[]) {\r\n const rows: number[] = [];\r\n this.ensureRowsByIdCache();\r\n for (let i = 0, l = idArray.length; i < l; i++) {\r\n const row = this.rowsById?.[idArray[i]];\r\n if (Utils.isDefined(row)) {\r\n rows[rows.length] = row as number;\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n /** From the rows array provided, return the mapped Ids */\r\n mapRowsToIds(rowArray: number[]) {\r\n const ids: DataIdType[] = [];\r\n for (let i = 0, l = rowArray.length; i < l; i++) {\r\n if (rowArray[i] < this.rows.length) {\r\n const rowItem = this.rows[rowArray[i]];\r\n ids[ids.length] = rowItem![this.idProperty as keyof TData] as DataIdType;\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Performs the update operations of a single item by id without\r\n * triggering any events or refresh operations.\r\n * @param id The new id of the item.\r\n * @param item The item which should be the new value for the given id.\r\n */\r\n updateSingleItem(id: DataIdType, item: TData) {\r\n if (!this.idxById) { return; }\r\n\r\n // see also https://github.com/mleibman/SlickGrid/issues/1082\r\n if (!this.idxById.has(id)) {\r\n throw new Error('[SlickGrid DataView] Invalid id');\r\n }\r\n\r\n // What if the specified item also has an updated idProperty?\r\n // Then we'll have to update the index as well, and possibly the `updated` cache too.\r\n if (id !== item[this.idProperty as keyof TData]) {\r\n // make sure the new id is unique:\r\n const newId = item[this.idProperty as keyof TData] as DataIdType;\r\n if (!Utils.isDefined(newId)) {\r\n throw new Error('[SlickGrid DataView] Cannot update item to associate with a null id');\r\n }\r\n if (this.idxById.has(newId)) {\r\n throw new Error('[SlickGrid DataView] Cannot update item to associate with a non-unique id');\r\n }\r\n this.idxById.set(newId, this.idxById.get(id) as number);\r\n this.idxById.delete(id);\r\n\r\n // Also update the `updated` hashtable/markercache? Yes, `recalc()` inside `refresh()` needs that one!\r\n if (this.updated?.[id]) {\r\n delete this.updated[id];\r\n }\r\n\r\n // Also update the row indexes? no need since the `refresh()`, further down, blows away the `rowsById[]` cache!\r\n\r\n id = newId;\r\n }\r\n this.items[this.idxById.get(id) as number] = item;\r\n\r\n // Also update the rows? no need since the `refresh()`, further down, blows away the `rows[]` cache and recalculates it via `recalc()`!\r\n\r\n if (!this.updated) {\r\n this.updated = {};\r\n }\r\n this.updated[id] = true;\r\n }\r\n\r\n /**\r\n * Updates a single item in the data view given the id and new value.\r\n * @param id The new id of the item.\r\n * @param item The item which should be the new value for the given id.\r\n */\r\n updateItem(id: DataIdType, item: T) {\r\n this.updateSingleItem(id, item);\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Updates multiple items in the data view given the new ids and new values.\r\n * @param id {Array} The array of new ids which is in the same order as the items.\r\n * @param newItems {Array} The new items that should be set in the data view for the given ids.\r\n */\r\n updateItems(ids: DataIdType[], newItems: T[]) {\r\n if (ids.length !== newItems.length) {\r\n throw new Error('[SlickGrid DataView] Mismatch on the length of ids and items provided to update');\r\n }\r\n for (let i = 0, l = newItems.length; i < l; i++) {\r\n this.updateSingleItem(ids[i], newItems[i]);\r\n }\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Inserts a single item into the data view at the given position.\r\n * @param insertBefore {Number} The 0-based index before which the item should be inserted.\r\n * @param item The item to insert.\r\n */\r\n insertItem(insertBefore: number, item: TData) {\r\n this.items.splice(insertBefore, 0, item);\r\n this.updateIdxById(insertBefore);\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Inserts multiple items into the data view at the given position.\r\n * @param insertBefore {Number} The 0-based index before which the items should be inserted.\r\n * @param newItems {Array} The items to insert.\r\n */\r\n insertItems(insertBefore: number, newItems: TData[]) {\r\n // @ts-ignore\r\n Array.prototype.splice.apply(this.items, [insertBefore, 0].concat(newItems));\r\n this.updateIdxById(insertBefore);\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Adds a single item at the end of the data view.\r\n * @param item The item to add at the end.\r\n */\r\n addItem(item: TData) {\r\n this.items.push(item);\r\n this.updateIdxById(this.items.length - 1);\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Adds multiple items at the end of the data view.\r\n * @param {Array} newItems The items to add at the end.\r\n */\r\n addItems(newItems: TData[]) {\r\n this.items = this.items.concat(newItems);\r\n this.updateIdxById(this.items.length - newItems.length);\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Deletes a single item identified by the given id from the data view.\r\n * @param {String|Number} id The id identifying the object to delete.\r\n */\r\n deleteItem(id: DataIdType) {\r\n if (!this.idxById) { return; }\r\n if (this.isBulkSuspend) {\r\n this.bulkDeleteIds.set(id, true);\r\n } else {\r\n const idx = this.idxById.get(id);\r\n if (idx === undefined) {\r\n throw new Error('[SlickGrid DataView] Invalid id');\r\n }\r\n this.idxById.delete(id);\r\n this.items.splice(idx, 1);\r\n this.updateIdxById(idx);\r\n this.refresh();\r\n }\r\n }\r\n\r\n /**\r\n * Deletes multiple item identified by the given ids from the data view.\r\n * @param {Array} ids The ids of the items to delete.\r\n */\r\n deleteItems(ids: DataIdType[]) {\r\n if (ids.length === 0 || !this.idxById) {\r\n return;\r\n }\r\n\r\n if (this.isBulkSuspend) {\r\n for (let i = 0, l = ids.length; i < l; i++) {\r\n const id = ids[i];\r\n const idx = this.idxById.get(id);\r\n if (idx === undefined) {\r\n throw new Error('[SlickGrid DataView] Invalid id');\r\n }\r\n this.bulkDeleteIds.set(id, true);\r\n }\r\n } else {\r\n // collect all indexes\r\n const indexesToDelete: number[] = [];\r\n for (let i = 0, l = ids.length; i < l; i++) {\r\n const id = ids[i];\r\n const idx = this.idxById.get(id);\r\n if (idx === undefined) {\r\n throw new Error('[SlickGrid DataView] Invalid id');\r\n }\r\n this.idxById.delete(id);\r\n indexesToDelete.push(idx);\r\n }\r\n\r\n // Remove from back to front\r\n indexesToDelete.sort();\r\n for (let i = indexesToDelete.length - 1; i >= 0; --i) {\r\n this.items.splice(indexesToDelete[i], 1);\r\n }\r\n\r\n // update lookup from front to back\r\n this.updateIdxById(indexesToDelete[0]);\r\n this.refresh();\r\n }\r\n }\r\n\r\n /** Add an item in a sorted dataset (a Sort function must be defined) */\r\n sortedAddItem(item: TData) {\r\n if (!this.sortComparer) {\r\n throw new Error('[SlickGrid DataView] sortedAddItem() requires a sort comparer, use sort()');\r\n }\r\n this.insertItem(this.sortedIndex(item), item);\r\n }\r\n\r\n /** Update an item in a sorted dataset (a Sort function must be defined) */\r\n sortedUpdateItem(id: string | number, item: TData) {\r\n if (!this.idxById) { return; }\r\n if (!this.idxById.has(id) || id !== item[this.idProperty as keyof TData]) {\r\n throw new Error('[SlickGrid DataView] Invalid or non-matching id ' + this.idxById.get(id));\r\n }\r\n if (!this.sortComparer) {\r\n throw new Error('[SlickGrid DataView] sortedUpdateItem() requires a sort comparer, use sort()');\r\n }\r\n const oldItem = this.getItemById(id);\r\n if (this.sortComparer(oldItem, item) !== 0) {\r\n // item affects sorting -> must use sorted add\r\n this.deleteItem(id);\r\n this.sortedAddItem(item);\r\n } else { // update does not affect sorting -> regular update works fine\r\n this.updateItem(id, item);\r\n }\r\n }\r\n\r\n protected sortedIndex(searchItem: TData) {\r\n let low = 0;\r\n let high = this.items.length;\r\n\r\n while (low < high) {\r\n const mid = low + high >>> 1;\r\n if (this.sortComparer(this.items[mid], searchItem) === -1) {\r\n low = mid + 1;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n return low;\r\n }\r\n\r\n /** Get item count, that is the full dataset lenght of the DataView */\r\n getItemCount() {\r\n return this.items.length;\r\n }\r\n\r\n /** Get row count (rows displayed in current page) */\r\n getLength() {\r\n return this.rows.length;\r\n }\r\n\r\n /** Retrieve an item from the DataView at specific index */\r\n getItem(i: number) {\r\n const item = this.rows[i] as T;\r\n\r\n // if this is a group row, make sure totals are calculated and update the title\r\n if ((item as SlickGroup_)?.__group && (item as SlickGroup_).totals && !(item as SlickGroup_).totals?.initialized) {\r\n const gi = this.groupingInfos[(item as SlickGroup_).level];\r\n if (!gi.displayTotalsRow) {\r\n this.calculateTotals((item as SlickGroup_).totals);\r\n (item as SlickGroup_).title = gi.formatter ? gi.formatter((item as SlickGroup_)) : (item as SlickGroup_).value;\r\n }\r\n }\r\n // if this is a totals row, make sure it's calculated\r\n else if ((item as SlickGroupTotals_)?.__groupTotals && !(item as SlickGroupTotals_).initialized) {\r\n this.calculateTotals(item as SlickGroupTotals_);\r\n }\r\n\r\n return item;\r\n }\r\n\r\n getItemMetadata(i: number): ItemMetadata | null {\r\n const item = this.rows[i];\r\n if (item === undefined) {\r\n return null;\r\n }\r\n\r\n // overrides for grouping rows\r\n if ((item as SlickGroup_).__group) {\r\n return this._options.groupItemMetadataProvider!.getGroupRowMetadata(item as GroupingFormatterItem);\r\n }\r\n\r\n // overrides for totals rows\r\n if ((item as SlickGroupTotals_).__groupTotals) {\r\n return this._options.groupItemMetadataProvider!.getTotalsRowMetadata(item as { group: GroupingFormatterItem });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected expandCollapseAllGroups(level?: number, collapse?: boolean) {\r\n if (!Utils.isDefined(level)) {\r\n for (let i = 0; i < this.groupingInfos.length; i++) {\r\n this.toggledGroupsByLevel[i] = {};\r\n this.groupingInfos[i].collapsed = collapse;\r\n\r\n if (collapse === true) {\r\n this.onGroupCollapsed.notify({ level: i, groupingKey: null });\r\n } else {\r\n this.onGroupExpanded.notify({ level: i, groupingKey: null });\r\n }\r\n }\r\n } else {\r\n this.toggledGroupsByLevel[level] = {};\r\n this.groupingInfos[level].collapsed = collapse;\r\n\r\n if (collapse === true) {\r\n this.onGroupCollapsed.notify({ level, groupingKey: null });\r\n } else {\r\n this.onGroupExpanded.notify({ level, groupingKey: null });\r\n }\r\n }\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * @param {Number} [level] Optional level to collapse. If not specified, applies to all levels.\r\n */\r\n collapseAllGroups(level?: number) {\r\n this.expandCollapseAllGroups(level, true);\r\n }\r\n\r\n /**\r\n * @param {Number} [level] Optional level to expand. If not specified, applies to all levels.\r\n */\r\n expandAllGroups(level?: number) {\r\n this.expandCollapseAllGroups(level, false);\r\n }\r\n\r\n expandCollapseGroup(level: number, groupingKey: string, collapse?: boolean) {\r\n // @ts-ignore\r\n this.toggledGroupsByLevel[level][groupingKey] = this.groupingInfos[level].collapsed ^ collapse;\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\r\n * variable argument list of grouping values denoting a unique path to the row. For\r\n * example, calling collapseGroup('high', '10%') will collapse the '10%' subgroup of\r\n * the 'high' group.\r\n */\r\n collapseGroup(...args: any) {\r\n const calledArgs = Array.prototype.slice.call(args);\r\n const arg0 = calledArgs[0];\r\n let groupingKey: string;\r\n let level: number;\r\n\r\n if (args.length === 1 && arg0.indexOf(this.groupingDelimiter) !== -1) {\r\n groupingKey = arg0;\r\n level = arg0.split(this.groupingDelimiter).length - 1;\r\n } else {\r\n groupingKey = args.join(this.groupingDelimiter);\r\n level = args.length - 1;\r\n }\r\n\r\n this.expandCollapseGroup(level, groupingKey, true);\r\n this.onGroupCollapsed.notify({ level, groupingKey });\r\n }\r\n\r\n /**\r\n * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\r\n * variable argument list of grouping values denoting a unique path to the row. For\r\n * example, calling expandGroup('high', '10%') will expand the '10%' subgroup of\r\n * the 'high' group.\r\n */\r\n expandGroup(...args: any) {\r\n const calledArgs = Array.prototype.slice.call(args);\r\n const arg0 = calledArgs[0];\r\n let groupingKey: string;\r\n let level: number;\r\n\r\n if (args.length === 1 && arg0.indexOf(this.groupingDelimiter) !== -1) {\r\n level = arg0.split(this.groupingDelimiter).length - 1;\r\n groupingKey = arg0;\r\n } else {\r\n level = args.length - 1;\r\n groupingKey = args.join(this.groupingDelimiter);\r\n }\r\n\r\n this.expandCollapseGroup(level, groupingKey, false);\r\n this.onGroupExpanded.notify({ level, groupingKey });\r\n }\r\n\r\n getGroups() {\r\n return this.groups;\r\n }\r\n\r\n protected extractGroups(rows: any[], parentGroup?: SlickGroup_) {\r\n let group: SlickGroup_;\r\n let val: any;\r\n const groups: SlickGroup_[] = [];\r\n const groupsByVal: any = {};\r\n let r;\r\n const level = parentGroup ? parentGroup.level + 1 : 0;\r\n const gi = this.groupingInfos[level];\r\n\r\n for (let i = 0, l = gi.predefinedValues?.length ?? 0; i < l; i++) {\r\n val = gi.predefinedValues?.[i];\r\n group = groupsByVal[val];\r\n if (!group) {\r\n group = new SlickGroup();\r\n group.value = val;\r\n group.level = level;\r\n group.groupingKey = (parentGroup ? parentGroup.groupingKey + this.groupingDelimiter : '') + val;\r\n groups[groups.length] = group;\r\n groupsByVal[val] = group;\r\n }\r\n }\r\n\r\n for (let i = 0, l = rows.length; i < l; i++) {\r\n r = rows[i];\r\n val = gi.getterIsAFn ? (gi.getter as GroupGetterFn)(r) : r[gi.getter as keyof TData];\r\n group = groupsByVal[val];\r\n if (!group) {\r\n group = new SlickGroup();\r\n group.value = val;\r\n group.level = level;\r\n group.groupingKey = (parentGroup ? parentGroup.groupingKey + this.groupingDelimiter : '') + val;\r\n groups[groups.length] = group;\r\n groupsByVal[val] = group;\r\n }\r\n\r\n group.rows[group.count++] = r;\r\n }\r\n\r\n if (level < this.groupingInfos.length - 1) {\r\n for (let i = 0; i < groups.length; i++) {\r\n group = groups[i];\r\n group.groups = this.extractGroups(group.rows, group);\r\n }\r\n }\r\n\r\n if (groups.length) {\r\n this.addTotals(groups, level);\r\n }\r\n\r\n groups.sort(this.groupingInfos[level].comparer);\r\n\r\n return groups;\r\n }\r\n\r\n /** claculate Group Totals */\r\n protected calculateTotals(totals: SlickGroupTotals_) {\r\n const group = totals.group;\r\n const gi = this.groupingInfos[group.level ?? 0];\r\n const isLeafLevel = (group.level === this.groupingInfos.length);\r\n let agg: Aggregator;\r\n let idx = gi.aggregators.length;\r\n\r\n if (!isLeafLevel && gi.aggregateChildGroups) {\r\n // make sure all the subgroups are calculated\r\n let i = group.groups?.length ?? 0;\r\n while (i--) {\r\n if (!group.groups[i].totals.initialized) {\r\n this.calculateTotals(group.groups[i].totals);\r\n }\r\n }\r\n }\r\n\r\n while (idx--) {\r\n agg = gi.aggregators[idx];\r\n agg.init();\r\n if (!isLeafLevel && gi.aggregateChildGroups) {\r\n gi.compiledAccumulators[idx].call(agg, group.groups);\r\n } else {\r\n gi.compiledAccumulators[idx].call(agg, group.rows);\r\n }\r\n agg.storeResult(totals);\r\n }\r\n totals.initialized = true;\r\n }\r\n\r\n protected addGroupTotals(group: SlickGroup_) {\r\n const gi = this.groupingInfos[group.level];\r\n const totals = new SlickGroupTotals();\r\n totals.group = group;\r\n group.totals = totals;\r\n if (!gi.lazyTotalsCalculation) {\r\n this.calculateTotals(totals);\r\n }\r\n }\r\n\r\n protected addTotals(groups: SlickGroup_[], level?: number) {\r\n level = level || 0;\r\n const gi = this.groupingInfos[level];\r\n const groupCollapsed = gi.collapsed;\r\n const toggledGroups = this.toggledGroupsByLevel[level];\r\n let idx = groups.length, g;\r\n while (idx--) {\r\n g = groups[idx];\r\n\r\n if (g.collapsed && !gi.aggregateCollapsed) {\r\n continue;\r\n }\r\n\r\n // Do a depth-first aggregation so that parent group aggregators can access subgroup totals.\r\n if (g.groups) {\r\n this.addTotals(g.groups, level + 1);\r\n }\r\n\r\n if (gi.aggregators?.length && (\r\n gi.aggregateEmpty || g.rows.length || g.groups?.length)) {\r\n this.addGroupTotals(g);\r\n }\r\n\r\n g.collapsed = (groupCollapsed as any) ^ toggledGroups[g.groupingKey];\r\n g.title = gi.formatter ? gi.formatter(g) : g.value;\r\n }\r\n }\r\n\r\n protected flattenGroupedRows(groups: SlickGroup_[], level?: number) {\r\n level = level || 0;\r\n const gi = this.groupingInfos[level];\r\n const groupedRows: any[] = [];\r\n let rows: any[];\r\n let gl = 0;\r\n let g;\r\n for (let i = 0, l = groups.length; i < l; i++) {\r\n g = groups[i];\r\n groupedRows[gl++] = g;\r\n\r\n if (!g.collapsed) {\r\n rows = g.groups ? this.flattenGroupedRows(g.groups, level + 1) : g.rows;\r\n for (let j = 0, jj = rows.length; j < jj; j++) {\r\n groupedRows[gl++] = rows[j];\r\n }\r\n }\r\n\r\n if (g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed)) {\r\n groupedRows[gl++] = g.totals;\r\n }\r\n }\r\n return groupedRows;\r\n }\r\n\r\n protected compileAccumulatorLoopCSPSafe(aggregator: Aggregator) {\r\n if (aggregator.accumulate) {\r\n return function (items: any[]) {\r\n let result;\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n result = aggregator.accumulate!.call(aggregator, item);\r\n }\r\n return result;\r\n };\r\n } else {\r\n return function noAccumulator() { };\r\n }\r\n }\r\n\r\n protected compileFilterCSPSafe(items: TData[], args: any): TData[] {\r\n if (typeof this.filterCSPSafe !== 'function') {\r\n return [];\r\n }\r\n const _retval: TData[] = [];\r\n const _il = items.length;\r\n\r\n for (let _i = 0; _i < _il; _i++) {\r\n if (this.filterCSPSafe(items[_i], args)) {\r\n _retval.push(items[_i]);\r\n }\r\n }\r\n\r\n return _retval;\r\n }\r\n\r\n protected compileFilter(stopRunningIfCSPSafeIsActive = false): FilterFn | null {\r\n if (stopRunningIfCSPSafeIsActive) {\r\n return null as any;\r\n }\r\n const filterInfo = Utils.getFunctionDetails(this.filter as FilterFn);\r\n\r\n const filterPath1 = '{ continue _coreloop; }$1';\r\n const filterPath2 = '{ _retval[_idx++] = $item$; continue _coreloop; }$1';\r\n // make some allowances for minification - there's only so far we can go with RegEx\r\n const filterBody = filterInfo.body\r\n .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\r\n .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\r\n .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\r\n .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\r\n .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\r\n '{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2');\r\n\r\n // This preserves the function template code after JS compression,\r\n // so that replace() commands still work as expected.\r\n let tpl = [\r\n // 'function(_items, _args) { ',\r\n 'var _retval = [], _idx = 0; ',\r\n 'var $item$, $args$ = _args; ',\r\n '_coreloop: ',\r\n 'for (var _i = 0, _il = _items.length; _i < _il; _i++) { ',\r\n '$item$ = _items[_i]; ',\r\n '$filter$; ',\r\n '} ',\r\n 'return _retval; '\r\n // '}'\r\n ].join('');\r\n tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\r\n tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\r\n tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\r\n const fn: any = new Function('_items,_args', tpl);\r\n const fnName = 'compiledFilter';\r\n fn.displayName = fnName;\r\n fn.name = this.setFunctionName(fn, fnName);\r\n return fn;\r\n }\r\n\r\n protected compileFilterWithCaching(stopRunningIfCSPSafeIsActive = false) {\r\n if (stopRunningIfCSPSafeIsActive) {\r\n return null as any;\r\n }\r\n\r\n const filterInfo = Utils.getFunctionDetails(this.filter as FilterFn);\r\n\r\n const filterPath1 = '{ continue _coreloop; }$1';\r\n const filterPath2 = '{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1';\r\n // make some allowances for minification - there's only so far we can go with RegEx\r\n const filterBody = filterInfo.body\r\n .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\r\n .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\r\n .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\r\n .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\r\n .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\r\n '{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2');\r\n\r\n // This preserves the function template code after JS compression,\r\n // so that replace() commands still work as expected.\r\n let tpl = [\r\n // 'function(_items, _args, _cache) { ',\r\n 'var _retval = [], _idx = 0; ',\r\n 'var $item$, $args$ = _args; ',\r\n '_coreloop: ',\r\n 'for (var _i = 0, _il = _items.length; _i < _il; _i++) { ',\r\n '$item$ = _items[_i]; ',\r\n 'if (_cache[_i]) { ',\r\n '_retval[_idx++] = $item$; ',\r\n 'continue _coreloop; ',\r\n '} ',\r\n '$filter$; ',\r\n '} ',\r\n 'return _retval; '\r\n // '}'\r\n ].join('');\r\n tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\r\n tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\r\n tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\r\n\r\n const fn: any = new Function('_items,_args,_cache', tpl);\r\n const fnName = 'compiledFilterWithCaching';\r\n fn.displayName = fnName;\r\n fn.name = this.setFunctionName(fn, fnName);\r\n return fn;\r\n }\r\n\r\n protected compileFilterWithCachingCSPSafe(items: TData[], args: any, filterCache: any[]): TData[] {\r\n if (typeof this.filterCSPSafe !== 'function') {\r\n return [];\r\n }\r\n\r\n const retval: TData[] = [];\r\n const il = items.length;\r\n\r\n for (let _i = 0; _i < il; _i++) {\r\n if (filterCache[_i] || this.filterCSPSafe(items[_i], args)) {\r\n retval.push(items[_i]);\r\n }\r\n }\r\n\r\n return retval;\r\n }\r\n\r\n /**\r\n * In ES5 we could set the function name on the fly but in ES6 this is forbidden and we need to set it through differently\r\n * We can use Object.defineProperty and set it the property to writable, see MDN for reference\r\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\r\n * @param {*} fn\r\n * @param {string} fnName\r\n */\r\n protected setFunctionName(fn: any, fnName: string) {\r\n try {\r\n Object.defineProperty(fn, 'name', { writable: true, value: fnName });\r\n } catch (err) {\r\n fn.name = fnName;\r\n }\r\n }\r\n\r\n protected uncompiledFilter(items: TData[], args: any) {\r\n const retval: any[] = [];\r\n let idx = 0;\r\n\r\n for (let i = 0, ii = items.length; i < ii; i++) {\r\n if (this.filter?.(items[i], args)) {\r\n retval[idx++] = items[i];\r\n }\r\n }\r\n\r\n return retval;\r\n }\r\n\r\n protected uncompiledFilterWithCaching(items: TData[], args: any, cache: any) {\r\n const retval: any[] = [];\r\n let idx = 0,\r\n item: TData;\r\n\r\n for (let i = 0, ii = items.length; i < ii; i++) {\r\n item = items[i];\r\n if (cache[i]) {\r\n retval[idx++] = item;\r\n } else if (this.filter?.(item, args)) {\r\n retval[idx++] = item;\r\n cache[i] = true;\r\n }\r\n }\r\n\r\n return retval;\r\n }\r\n\r\n protected getFilteredAndPagedItems(items: TData[]) {\r\n if (this._options.useCSPSafeFilter ? this.filterCSPSafe : this.filter) {\r\n let batchFilter: AnyFunction;\r\n let batchFilterWithCaching: AnyFunction;\r\n if (this._options.useCSPSafeFilter) {\r\n batchFilter = (this._options.inlineFilters ? this.compiledFilterCSPSafe : this.uncompiledFilter) as AnyFunction;\r\n batchFilterWithCaching = (this._options.inlineFilters ? this.compiledFilterWithCachingCSPSafe : this.uncompiledFilterWithCaching) as AnyFunction;\r\n } else {\r\n batchFilter = (this._options.inlineFilters ? this.compiledFilter : this.uncompiledFilter) as AnyFunction;\r\n batchFilterWithCaching = (this._options.inlineFilters ? this.compiledFilterWithCaching : this.uncompiledFilterWithCaching) as AnyFunction;\r\n }\r\n if (this.refreshHints.isFilterNarrowing) {\r\n this.filteredItems = batchFilter.call(this, this.filteredItems, this.filterArgs);\r\n } else if (this.refreshHints.isFilterExpanding) {\r\n this.filteredItems = batchFilterWithCaching.call(this, items, this.filterArgs, this.filterCache);\r\n } else if (!this.refreshHints.isFilterUnchanged) {\r\n this.filteredItems = batchFilter.call(this, items, this.filterArgs);\r\n }\r\n } else {\r\n // special case: if not filtering and not paging, the resulting\r\n // rows collection needs to be a copy so that changes due to sort\r\n // can be caught\r\n this.filteredItems = this.pagesize ? items : items.concat();\r\n }\r\n\r\n // get the current page\r\n let paged: TData[];\r\n if (this.pagesize) {\r\n if (this.filteredItems.length <= this.pagenum * this.pagesize) {\r\n if (this.filteredItems.length === 0) {\r\n this.pagenum = 0;\r\n } else {\r\n this.pagenum = Math.floor((this.filteredItems.length - 1) / this.pagesize);\r\n }\r\n }\r\n paged = this.filteredItems.slice(this.pagesize * this.pagenum, this.pagesize * this.pagenum + this.pagesize);\r\n } else {\r\n paged = this.filteredItems;\r\n }\r\n return { totalRows: this.filteredItems.length, rows: paged };\r\n }\r\n\r\n protected getRowDiffs(rows: TData[], newRows: TData[]) {\r\n let item: TData | SlickNonDataItem | SlickDataItem | SlickGroup_;\r\n let r;\r\n let eitherIsNonData;\r\n const diff: number[] = [];\r\n let from = 0;\r\n let to = Math.max(newRows.length, rows.length);\r\n\r\n if (this.refreshHints?.ignoreDiffsBefore) {\r\n from = Math.max(0,\r\n Math.min(newRows.length, this.refreshHints.ignoreDiffsBefore));\r\n }\r\n\r\n if (this.refreshHints?.ignoreDiffsAfter) {\r\n to = Math.min(newRows.length,\r\n Math.max(0, this.refreshHints.ignoreDiffsAfter));\r\n }\r\n\r\n for (let i = from, rl = rows.length; i < to; i++) {\r\n if (i >= rl) {\r\n diff[diff.length] = i;\r\n } else {\r\n item = newRows[i];\r\n r = rows[i];\r\n\r\n if (!item || (this.groupingInfos.length && (eitherIsNonData = ((item as SlickNonDataItem).__nonDataRow) || ((r as SlickNonDataItem).__nonDataRow)) &&\r\n (item as SlickGroup_).__group !== (r as SlickGroup_).__group ||\r\n (item as SlickGroup_).__group && !(item as SlickGroup_).equals(r as SlickGroup_))\r\n || (eitherIsNonData &&\r\n // no good way to compare totals since they are arbitrary DTOs\r\n // deep object comparison is pretty expensive\r\n // always considering them 'dirty' seems easier for the time being\r\n ((item as SlickGroupTotals_).__groupTotals || (r as SlickGroupTotals_).__groupTotals))\r\n || item[this.idProperty as keyof TData] !== r[this.idProperty as keyof TData]\r\n || (this.updated?.[item[this.idProperty as keyof TData]])\r\n ) {\r\n diff[diff.length] = i;\r\n }\r\n }\r\n }\r\n return diff;\r\n }\r\n\r\n protected recalc(_items: TData[]) {\r\n this.rowsById = undefined;\r\n\r\n if (this.refreshHints.isFilterNarrowing !== this.prevRefreshHints.isFilterNarrowing ||\r\n this.refreshHints.isFilterExpanding !== this.prevRefreshHints.isFilterExpanding) {\r\n this.filterCache = [];\r\n }\r\n\r\n const filteredItems = this.getFilteredAndPagedItems(_items);\r\n this.totalRows = filteredItems.totalRows;\r\n let newRows: TData[] = filteredItems.rows;\r\n\r\n this.groups = [];\r\n if (this.groupingInfos.length) {\r\n this.groups = this.extractGroups(newRows);\r\n if (this.groups.length) {\r\n newRows = this.flattenGroupedRows(this.groups);\r\n }\r\n }\r\n\r\n const diff = this.getRowDiffs(this.rows, newRows as TData[]);\r\n\r\n this.rows = newRows as TData[];\r\n\r\n return diff;\r\n }\r\n\r\n refresh() {\r\n if (this.suspend) {\r\n return;\r\n }\r\n\r\n const previousPagingInfo = Utils.extend(true, {}, this.getPagingInfo());\r\n\r\n const countBefore = this.rows.length;\r\n const totalRowsBefore = this.totalRows;\r\n\r\n let diff = this.recalc(this.items); // pass as direct refs to avoid closure perf hit\r\n\r\n // if the current page is no longer valid, go to last page and recalc\r\n // we suffer a performance penalty here, but the main loop (recalc) remains highly optimized\r\n if (this.pagesize && this.totalRows < this.pagenum * this.pagesize) {\r\n this.pagenum = Math.max(0, Math.ceil(this.totalRows / this.pagesize) - 1);\r\n diff = this.recalc(this.items);\r\n }\r\n\r\n this.updated = null;\r\n this.prevRefreshHints = this.refreshHints;\r\n this.refreshHints = {};\r\n\r\n if (totalRowsBefore !== this.totalRows) {\r\n // use the previously saved paging info\r\n if (this.onBeforePagingInfoChanged.notify(previousPagingInfo, null, this).getReturnValue() !== false) {\r\n this.onPagingInfoChanged.notify(this.getPagingInfo(), null, this);\r\n }\r\n }\r\n if (countBefore !== this.rows.length) {\r\n this.onRowCountChanged.notify({ previous: countBefore, current: this.rows.length, itemCount: this.items.length, dataView: this, callingOnRowsChanged: (diff.length > 0) }, null, this);\r\n }\r\n if (diff.length > 0) {\r\n this.onRowsChanged.notify({ rows: diff, itemCount: this.items.length, dataView: this, calledOnRowCountChanged: (countBefore !== this.rows.length) }, null, this);\r\n }\r\n if (countBefore !== this.rows.length || diff.length > 0) {\r\n this.onRowsOrCountChanged.notify({\r\n rowsDiff: diff, previousRowCount: countBefore, currentRowCount: this.rows.length, itemCount: this.items.length,\r\n rowCountChanged: countBefore !== this.rows.length, rowsChanged: diff.length > 0, dataView: this\r\n }, null, this);\r\n }\r\n }\r\n\r\n /**\r\n * Wires the grid and the DataView together to keep row selection tied to item ids.\r\n * This is useful since, without it, the grid only knows about rows, so if the items\r\n * move around, the same rows stay selected instead of the selection moving along\r\n * with the items.\r\n *\r\n * NOTE: This doesn't work with cell selection model.\r\n *\r\n * @param {SlickGrid} grid - The grid to sync selection with.\r\n * @param {Boolean} preserveHidden - Whether to keep selected items that go out of the\r\n * view due to them getting filtered out.\r\n * @param {Boolean} [preserveHiddenOnSelectionChange] - Whether to keep selected items\r\n * that are currently out of the view (see preserveHidden) as selected when selection\r\n * changes.\r\n * @return {Event} An event that notifies when an internal list of selected row ids\r\n * changes. This is useful since, in combination with the above two options, it allows\r\n * access to the full list selected row ids, and not just the ones visible to the grid.\r\n * @method syncGridSelection\r\n */\r\n syncGridSelection(grid: SlickGridModel, preserveHidden: boolean, preserveHiddenOnSelectionChange?: boolean) {\r\n this._grid = grid;\r\n let inHandler: boolean;\r\n this.selectedRowIds = this.mapRowsToIds(grid.getSelectedRows());\r\n\r\n /** @param {Array} rowIds */\r\n const setSelectedRowIds = (rowIds: DataIdType[] | false) => {\r\n if (rowIds === false) {\r\n this.selectedRowIds = [];\r\n } else {\r\n if (this.selectedRowIds!.sort().join(',') !== rowIds.sort().join(',')) {\r\n this.selectedRowIds = rowIds;\r\n }\r\n }\r\n };\r\n\r\n const update = () => {\r\n if ((this.selectedRowIds || []).length > 0 && !inHandler) {\r\n inHandler = true;\r\n const selectedRows = this.mapIdsToRows(this.selectedRowIds || []);\r\n if (!preserveHidden) {\r\n const selectedRowsChangedArgs = {\r\n grid: this._grid,\r\n ids: this.mapRowsToIds(selectedRows),\r\n rows: selectedRows,\r\n dataView: this\r\n };\r\n this.preSelectedRowIdsChangeFn!(selectedRowsChangedArgs);\r\n this.onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {\r\n selectedRowIds: this.selectedRowIds,\r\n filteredIds: this.getAllSelectedFilteredIds() as DataIdType[],\r\n }), new SlickEventData(), this);\r\n }\r\n grid.setSelectedRows(selectedRows);\r\n inHandler = false;\r\n }\r\n };\r\n\r\n grid.onSelectedRowsChanged.subscribe((_e: SlickEventData_, args: { rows: number[]; }) => {\r\n if (!inHandler) {\r\n const newSelectedRowIds = this.mapRowsToIds(args.rows);\r\n const selectedRowsChangedArgs = {\r\n grid: this._grid,\r\n ids: newSelectedRowIds,\r\n rows: args.rows,\r\n added: true,\r\n dataView: this\r\n };\r\n this.preSelectedRowIdsChangeFn!(selectedRowsChangedArgs);\r\n this.onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {\r\n selectedRowIds: this.selectedRowIds,\r\n filteredIds: this.getAllSelectedFilteredIds() as DataIdType[],\r\n }), new SlickEventData(), this);\r\n }\r\n });\r\n\r\n this.preSelectedRowIdsChangeFn = (args: { ids: DataIdType[]; added?: boolean; }) => {\r\n if (!inHandler) {\r\n inHandler = true;\r\n const overwrite = (typeof args.added === typeof undefined);\r\n\r\n if (overwrite) {\r\n setSelectedRowIds(args.ids);\r\n } else {\r\n let rowIds: DataIdType[];\r\n if (args.added) {\r\n if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) {\r\n // find the ones that are hidden\r\n const hiddenSelectedRowIds = this.selectedRowIds?.filter((id) => this.getRowById(id) === undefined);\r\n // add the newly selected ones\r\n rowIds = hiddenSelectedRowIds!.concat(args.ids);\r\n } else {\r\n rowIds = args.ids;\r\n }\r\n } else {\r\n if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) {\r\n // remove rows whose id is on the list\r\n rowIds = this.selectedRowIds!.filter((id) => args.ids.indexOf(id) === -1);\r\n } else {\r\n rowIds = [];\r\n }\r\n }\r\n setSelectedRowIds(rowIds);\r\n }\r\n inHandler = false;\r\n }\r\n };\r\n\r\n this.onRowsOrCountChanged.subscribe(update.bind(this));\r\n\r\n return this.onSelectedRowIdsChanged;\r\n }\r\n\r\n /**\r\n * Get all selected IDs\r\n * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\r\n */\r\n getAllSelectedIds() {\r\n return this.selectedRowIds;\r\n }\r\n\r\n /**\r\n * Get all selected filtered IDs (similar to \"getAllSelectedIds\" but only return filtered data)\r\n * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\r\n */\r\n getAllSelectedFilteredIds() {\r\n return this.getAllSelectedFilteredItems().map((item) => item[this.idProperty as keyof TData]);\r\n }\r\n\r\n /**\r\n * Set current row selected IDs array (regardless of Pagination)\r\n * NOTE: This will NOT change the selection in the grid, if you need to do that then you still need to call\r\n * \"grid.setSelectedRows(rows)\"\r\n * @param {Array} selectedIds - list of IDs which have been selected for this action\r\n * @param {Object} options\r\n * - `isRowBeingAdded`: defaults to true, are the new selected IDs being added (or removed) as new row selections\r\n * - `shouldTriggerEvent`: defaults to true, should we trigger `onSelectedRowIdsChanged` event\r\n * - `applyRowSelectionToGrid`: defaults to true, should we apply the row selections to the grid in the UI\r\n */\r\n setSelectedIds(selectedIds: Array, options?: Partial<{ isRowBeingAdded: boolean; shouldTriggerEvent: boolean; applyRowSelectionToGrid: boolean; }>) {\r\n let isRowBeingAdded = options?.isRowBeingAdded;\r\n const shouldTriggerEvent = options?.shouldTriggerEvent;\r\n const applyRowSelectionToGrid = options?.applyRowSelectionToGrid;\r\n\r\n if (isRowBeingAdded !== false) {\r\n isRowBeingAdded = true;\r\n }\r\n const selectedRows = this.mapIdsToRows(selectedIds);\r\n const selectedRowsChangedArgs = {\r\n grid: this._grid,\r\n ids: selectedIds,\r\n rows: selectedRows,\r\n added: isRowBeingAdded,\r\n dataView: this\r\n };\r\n this.preSelectedRowIdsChangeFn?.(selectedRowsChangedArgs);\r\n\r\n if (shouldTriggerEvent !== false) {\r\n this.onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {\r\n selectedRowIds: this.selectedRowIds,\r\n filteredIds: this.getAllSelectedFilteredIds() as DataIdType[],\r\n }), new SlickEventData(), this);\r\n }\r\n\r\n // should we also apply the row selection in to the grid (UI) as well?\r\n if (applyRowSelectionToGrid !== false && this._grid) {\r\n this._grid.setSelectedRows(selectedRows);\r\n }\r\n }\r\n\r\n /**\r\n * Get all selected dataContext items\r\n * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\r\n */\r\n getAllSelectedItems() {\r\n const selectedData: TData[] = [];\r\n const selectedIds = this.getAllSelectedIds();\r\n selectedIds!.forEach((id) => {\r\n selectedData.push(this.getItemById(id));\r\n });\r\n return selectedData as T[];\r\n }\r\n\r\n /**\r\n * Get all selected filtered dataContext items (similar to \"getAllSelectedItems\" but only return filtered data)\r\n * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\r\n */\r\n getAllSelectedFilteredItems() {\r\n if (!Array.isArray(this.selectedRowIds)) {\r\n return [];\r\n }\r\n\r\n const intersection = this.filteredItems.filter((a) => this.selectedRowIds!.some((b) => a[this.idProperty as keyof TData] === b));\r\n return (intersection || []) as T[];\r\n }\r\n\r\n syncGridCellCssStyles(grid: SlickGridModel, key: string) {\r\n let hashById: any;\r\n let inHandler: boolean;\r\n\r\n const storeCellCssStyles = (hash: CssStyleHash) => {\r\n hashById = {};\r\n if (typeof hash === 'object') {\r\n Object.keys(hash).forEach(row => {\r\n if (hash) {\r\n const id = this.rows[row as any][this.idProperty as keyof TData];\r\n hashById[id] = hash[row];\r\n }\r\n });\r\n }\r\n };\r\n\r\n // since this method can be called after the cell styles have been set,\r\n // get the existing ones right away\r\n storeCellCssStyles(grid.getCellCssStyles(key));\r\n\r\n const update = () => {\r\n if (typeof hashById === 'object') {\r\n inHandler = true;\r\n this.ensureRowsByIdCache();\r\n const newHash: CssStyleHash = {};\r\n Object.keys(hashById).forEach(id => {\r\n const row = this.rowsById?.[id];\r\n if (Utils.isDefined(row)) {\r\n newHash[row as number] = hashById[id];\r\n }\r\n });\r\n grid.setCellCssStyles(key, newHash);\r\n inHandler = false;\r\n }\r\n };\r\n\r\n grid.onCellCssStylesChanged.subscribe((_e: SlickEventData_, args: any) => {\r\n if (inHandler) { return; }\r\n if (key !== args.key) { return; }\r\n if (args.hash) {\r\n storeCellCssStyles(args.hash);\r\n } else {\r\n grid.onCellCssStylesChanged.unsubscribe();\r\n this.onRowsOrCountChanged.unsubscribe(update);\r\n }\r\n });\r\n\r\n this.onRowsOrCountChanged.subscribe(update.bind(this));\r\n }\r\n}\r\n\r\nexport class AvgAggregator implements Aggregator {\r\n private _nonNullCount = 0;\r\n private _sum = 0;\r\n private _field: number | string;\r\n private _type = 'avg' as const;\r\n\r\n constructor(field: number | string) {\r\n this._field = field;\r\n }\r\n\r\n get field(): number | string {\r\n return this._field;\r\n }\r\n\r\n get type(): string {\r\n return this._type;\r\n }\r\n\r\n init(): void {\r\n this._nonNullCount = 0;\r\n this._sum = 0;\r\n }\r\n\r\n accumulate(item: T) {\r\n const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\r\n if (val !== null && val !== '' && !isNaN(val)) {\r\n this._nonNullCount++;\r\n this._sum += parseFloat(val);\r\n }\r\n }\r\n\r\n storeResult(groupTotals: SlickGroupTotals_ & { avg: Record; }) {\r\n if (!groupTotals || groupTotals[this._type] === undefined) {\r\n (groupTotals as any)[this._type] = {};\r\n }\r\n if (this._nonNullCount !== 0) {\r\n groupTotals[this._type][this._field] = this._sum / this._nonNullCount;\r\n }\r\n }\r\n}\r\n\r\nexport class MinAggregator implements Aggregator {\r\n private _min: number | null = null;\r\n private _field: number | string;\r\n private _type = 'min' as const;\r\n\r\n constructor(field: number | string) {\r\n this._field = field;\r\n }\r\n\r\n get field(): number | string {\r\n return this._field;\r\n }\r\n\r\n get type(): string {\r\n return this._type;\r\n }\r\n\r\n init() {\r\n this._min = null;\r\n }\r\n\r\n accumulate(item: T) {\r\n const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\r\n if (val !== null && val !== '' && !isNaN(val)) {\r\n if (this._min === null || val < this._min) {\r\n this._min = parseFloat(val);\r\n }\r\n }\r\n }\r\n\r\n storeResult(groupTotals: SlickGroupTotals_ & { min: Record; }) {\r\n if (!groupTotals || groupTotals[this._type] === undefined) {\r\n groupTotals[this._type] = {};\r\n }\r\n groupTotals[this._type][this._field] = this._min;\r\n }\r\n}\r\n\r\nexport class MaxAggregator implements Aggregator {\r\n private _max: number | null = null;\r\n private _field: number | string;\r\n private _type = 'max' as const;\r\n\r\n constructor(field: number | string) {\r\n this._field = field;\r\n }\r\n\r\n get field(): number | string {\r\n return this._field;\r\n }\r\n\r\n get type(): string {\r\n return this._type;\r\n }\r\n\r\n init(): void {\r\n this._max = null;\r\n }\r\n\r\n accumulate(item: T) {\r\n const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\r\n if (val !== null && val !== '' && !isNaN(val)) {\r\n if (this._max === null || val > this._max) {\r\n this._max = parseFloat(val);\r\n }\r\n }\r\n }\r\n\r\n storeResult(groupTotals: SlickGroupTotals_ & { max: Record; }) {\r\n if (!groupTotals || groupTotals[this._type] === undefined) {\r\n groupTotals[this._type] = {};\r\n }\r\n groupTotals[this._type][this._field] = this._max;\r\n }\r\n}\r\n\r\nexport class SumAggregator implements Aggregator {\r\n private _sum = 0;\r\n private _field: number | string;\r\n private _type = 'sum' as const;\r\n\r\n constructor(field: number | string) {\r\n this._field = field;\r\n }\r\n\r\n get field(): number | string {\r\n return this._field;\r\n }\r\n\r\n get type(): string {\r\n return this._type;\r\n }\r\n\r\n init() {\r\n this._sum = 0;\r\n }\r\n\r\n accumulate(item: T) {\r\n const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\r\n if (val !== null && val !== '' && !isNaN(val)) {\r\n this._sum += parseFloat(val);\r\n }\r\n }\r\n\r\n storeResult(groupTotals: SlickGroupTotals_ & { sum: Record; }) {\r\n if (!groupTotals || groupTotals[this._type] === undefined) {\r\n groupTotals[this._type] = {};\r\n }\r\n groupTotals[this._type][this._field] = this._sum;\r\n }\r\n}\r\n\r\nexport class CountAggregator implements Aggregator {\r\n private _field: number | string;\r\n private _type = 'count' as const;\r\n\r\n constructor(field: number | string) {\r\n this._field = field;\r\n }\r\n\r\n get field(): number | string {\r\n return this._field;\r\n }\r\n\r\n get type(): string {\r\n return this._type;\r\n }\r\n\r\n init(): void {\r\n }\r\n\r\n storeResult(groupTotals: SlickGroupTotals_ & { count: Record; }) {\r\n if (!groupTotals || groupTotals[this._type] === undefined) {\r\n groupTotals[this._type] = {};\r\n }\r\n groupTotals[this._type][this._field] = groupTotals.group.rows.length;\r\n }\r\n}\r\n\r\n// TODO: add more built-in aggregators\r\n// TODO: merge common aggregators in one to prevent needless iterating\r\n\r\nexport const Aggregators = {\r\n Avg: AvgAggregator,\r\n Min: MinAggregator,\r\n Max: MaxAggregator,\r\n Sum: SumAggregator,\r\n Count: CountAggregator\r\n};\r\n\r\n// extend Slick namespace on window object when building as iife\r\nif (IIFE_ONLY && window.Slick) {\r\n window.Slick.Data = window.Slick.Data || {};\r\n window.Slick.Data.DataView = SlickDataView;\r\n window.Slick.Data.Aggregators = Aggregators;\r\n}","import type { Column, Editor, EditorArguments, EditorValidationResult, ElementPosition, GridOption, OnCompositeEditorChangeEventArgs } from './models/index';\r\nimport { keyCode as keyCode_, Utils as Utils_ } from './slick.core';\r\n\r\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\r\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\r\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\r\n\r\n/***\r\n * Contains basic SlickGrid editors.\r\n * @module Editors\r\n * @namespace Slick\r\n */\r\n\r\nexport class TextEditor = Column, O extends GridOption = GridOption> implements Editor {\r\n protected input!: HTMLInputElement;\r\n protected defaultValue?: number | string;\r\n protected navOnLR?: boolean;\r\n\r\n constructor(protected readonly args: EditorArguments) {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\r\n this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\r\n this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n this.input.focus();\r\n this.input.select();\r\n\r\n // don't show Save/Cancel when it's a Composite Editor and also trigger a onCompositeEditorChange event when input changes\r\n if (this.args.compositeEditorOptions) {\r\n this.input.addEventListener('change', this.onChange.bind(this));\r\n }\r\n }\r\n\r\n onChange() {\r\n const activeCell = this.args.grid.getActiveCell();\r\n\r\n // when valid, we'll also apply the new value to the dataContext item object\r\n if (this.validate().valid) {\r\n this.applyValue(this.args.item, this.serializeValue());\r\n }\r\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n this.args.grid.onCompositeEditorChange.notify({\r\n row: activeCell?.row ?? 0,\r\n cell: activeCell?.cell ?? 0,\r\n item: this.args.item,\r\n column: this.args.column,\r\n formValues: this.args.compositeEditorOptions.formValues,\r\n grid: this.args.grid,\r\n editors: this.args.compositeEditorOptions.editors\r\n } as unknown as OnCompositeEditorChangeEventArgs);\r\n }\r\n\r\n destroy() {\r\n this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n this.input.removeEventListener('change', this.onChange.bind(this));\r\n this.input.remove();\r\n }\r\n\r\n focus() {\r\n this.input.focus();\r\n }\r\n\r\n getValue() {\r\n return this.input.value;\r\n }\r\n\r\n setValue(val: string) {\r\n this.input.value = val;\r\n }\r\n\r\n loadValue(item: any) {\r\n this.defaultValue = item[this.args.column.field] || '';\r\n this.input.value = String(this.defaultValue ?? '');\r\n this.input.defaultValue = String(this.defaultValue ?? '');\r\n this.input.select();\r\n }\r\n\r\n serializeValue() {\r\n return this.input.value;\r\n }\r\n\r\n applyValue(item: any, state: any) {\r\n item[this.args.column.field] = state;\r\n }\r\n\r\n isValueChanged() {\r\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n }\r\n\r\n validate() {\r\n if (this.args.column.validator) {\r\n const validationResults = this.args.column.validator(this.input.value, this.args);\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n }\r\n}\r\n\r\nexport class IntegerEditor = Column, O extends GridOption = GridOption> implements Editor {\r\n protected input!: HTMLInputElement;\r\n protected defaultValue?: string | number;\r\n protected navOnLR?: boolean;\r\n\r\n constructor(protected readonly args: EditorArguments) {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\r\n this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\r\n this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n this.input.focus();\r\n this.input.select();\r\n\r\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n if (this.args.compositeEditorOptions) {\r\n this.input.addEventListener('change', this.onChange.bind(this));\r\n }\r\n }\r\n\r\n onChange() {\r\n const activeCell = this.args.grid.getActiveCell();\r\n\r\n // when valid, we'll also apply the new value to the dataContext item object\r\n if (this.validate().valid) {\r\n this.applyValue(this.args.item, this.serializeValue());\r\n }\r\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n this.args.grid.onCompositeEditorChange.notify({\r\n row: activeCell?.row ?? 0,\r\n cell: activeCell?.cell ?? 0,\r\n item: this.args.item,\r\n column: this.args.column,\r\n formValues: this.args.compositeEditorOptions.formValues,\r\n grid: this.args.grid,\r\n editors: this.args.compositeEditorOptions.editors\r\n } as unknown as OnCompositeEditorChangeEventArgs);\r\n }\r\n\r\n destroy() {\r\n this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n this.input.removeEventListener('change', this.onChange.bind(this));\r\n this.input.remove();\r\n }\r\n\r\n focus() {\r\n this.input.focus();\r\n }\r\n\r\n loadValue(item: any) {\r\n this.defaultValue = item[this.args.column.field];\r\n this.input.value = String(this.defaultValue ?? '');\r\n this.input.defaultValue = String(this.defaultValue ?? '');\r\n this.input.select();\r\n }\r\n\r\n serializeValue() {\r\n return parseInt(this.input.value, 10) || 0;\r\n }\r\n\r\n applyValue(item: any, state: any) {\r\n item[this.args.column.field] = state;\r\n }\r\n\r\n isValueChanged() {\r\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n }\r\n\r\n validate() {\r\n if (isNaN(this.input.value as unknown as number)) {\r\n return {\r\n valid: false,\r\n msg: 'Please enter a valid integer'\r\n };\r\n }\r\n\r\n if (this.args.column.validator) {\r\n const validationResults = this.args.column.validator(this.input.value, this.args);\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n }\r\n}\r\n\r\nexport class FloatEditor = Column, O extends GridOption = GridOption> implements Editor {\r\n protected input!: HTMLInputElement;\r\n protected defaultValue?: string | number;\r\n protected navOnLR?: boolean;\r\n\r\n /** Default number of decimal places to use with FloatEditor */\r\n static DefaultDecimalPlaces?: number = undefined;\r\n\r\n /** Should we allow empty value when using FloatEditor */\r\n static AllowEmptyValue = false;\r\n\r\n constructor(protected readonly args: EditorArguments) {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\r\n this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\r\n this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n this.input.focus();\r\n this.input.select();\r\n\r\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n if (this.args.compositeEditorOptions) {\r\n this.input.addEventListener('change', this.onChange.bind(this));\r\n }\r\n };\r\n\r\n onChange() {\r\n const activeCell = this.args.grid.getActiveCell();\r\n\r\n // when valid, we'll also apply the new value to the dataContext item object\r\n if (this.validate().valid) {\r\n this.applyValue(this.args.item, this.serializeValue());\r\n }\r\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n this.args.grid.onCompositeEditorChange.notify({\r\n row: activeCell?.row ?? 0,\r\n cell: activeCell?.cell ?? 0,\r\n item: this.args.item,\r\n column: this.args.column,\r\n formValues: this.args.compositeEditorOptions.formValues,\r\n grid: this.args.grid,\r\n editors: this.args.compositeEditorOptions.editors\r\n } as unknown as OnCompositeEditorChangeEventArgs);\r\n };\r\n\r\n destroy() {\r\n this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\r\n this.input.removeEventListener('change', this.onChange.bind(this));\r\n this.input.remove();\r\n };\r\n\r\n focus() {\r\n this.input.focus();\r\n }\r\n\r\n getDecimalPlaces() {\r\n // returns the number of fixed decimal places or null\r\n let rtn: number | undefined = this.args.column.editorFixedDecimalPlaces;\r\n if (!Utils.isDefined(rtn)) {\r\n rtn = FloatEditor.DefaultDecimalPlaces;\r\n }\r\n return (!rtn && rtn !== 0 ? null : rtn);\r\n }\r\n\r\n loadValue(item: any) {\r\n this.defaultValue = item[this.args.column.field];\r\n\r\n const decPlaces = this.getDecimalPlaces();\r\n if (decPlaces !== null\r\n && (this.defaultValue || this.defaultValue === 0)\r\n && (this.defaultValue as number)?.toFixed) {\r\n this.defaultValue = (this.defaultValue as number).toFixed(decPlaces);\r\n }\r\n\r\n this.input.value = String(this.defaultValue ?? '');\r\n this.input.defaultValue = String(this.defaultValue ?? '');\r\n this.input.select();\r\n }\r\n\r\n serializeValue() {\r\n let rtn: number | undefined = parseFloat(this.input.value);\r\n if (FloatEditor.AllowEmptyValue) {\r\n if (!rtn && rtn !== 0) {\r\n rtn = undefined;\r\n }\r\n } else {\r\n rtn = rtn || 0;\r\n }\r\n\r\n const decPlaces = this.getDecimalPlaces();\r\n if (decPlaces !== null\r\n && (rtn || rtn === 0)\r\n && rtn.toFixed) {\r\n rtn = parseFloat(rtn.toFixed(decPlaces));\r\n }\r\n\r\n return rtn as number;\r\n }\r\n\r\n applyValue(item: any, state: number | string) {\r\n item[this.args.column.field] = state;\r\n }\r\n\r\n isValueChanged() {\r\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n }\r\n\r\n validate() {\r\n if (isNaN(this.input.value as unknown as number)) {\r\n return {\r\n valid: false,\r\n msg: 'Please enter a valid number'\r\n };\r\n }\r\n\r\n if (this.args.column.validator) {\r\n const validationResults = this.args.column.validator(this.input.value, this.args);\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n }\r\n}\r\n\r\nexport class FlatpickrEditor = Column, O extends GridOption = GridOption> implements Editor {\r\n protected input!: HTMLInputElement;\r\n protected defaultValue?: string | number;\r\n protected flatpickrInstance: any;\r\n\r\n constructor(protected readonly args: EditorArguments) {\r\n this.init();\r\n if (typeof flatpickr === 'undefined') {\r\n throw new Error('Flatpickr not loaded but required in SlickGrid.Editors, refer to Flatpickr documentation: https://flatpickr.js.org/getting-started/');\r\n }\r\n }\r\n\r\n init() {\r\n this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\r\n this.input.focus();\r\n this.input.select();\r\n const editorOptions = this.args.column.params?.editorOptions; // i.e.: { id: 'start', params: { editorOptions: {altFormat: 'd/m/Y', dateFormat: 'd/m/Y'}} }\r\n this.flatpickrInstance = flatpickr(this.input, {\r\n closeOnSelect: true,\r\n allowInput: true,\r\n altInput: true,\r\n altFormat: editorOptions?.altFormat ?? 'm/d/Y',\r\n dateFormat: editorOptions?.dateFormat ?? 'm/d/Y',\r\n onChange: () => {\r\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n if (this.args.compositeEditorOptions) {\r\n const activeCell = this.args.grid.getActiveCell();\r\n\r\n // when valid, we'll also apply the new value to the dataContext item object\r\n if (this.validate().valid) {\r\n this.applyValue(this.args.item, this.serializeValue());\r\n }\r\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n this.args.grid.onCompositeEditorChange.notify({\r\n row: activeCell?.row ?? 0,\r\n cell: activeCell?.cell ?? 0,\r\n item: this.args.item,\r\n column: this.args.column,\r\n formValues: this.args.compositeEditorOptions.formValues,\r\n grid: this.args.grid,\r\n editors: this.args.compositeEditorOptions.editors\r\n } as unknown as OnCompositeEditorChangeEventArgs);\r\n }\r\n },\r\n });\r\n\r\n if (!this.args.compositeEditorOptions) {\r\n setTimeout(() => {\r\n this.show();\r\n this.focus();\r\n }, 50);\r\n }\r\n\r\n Utils.width(this.input, (Utils.width(this.input) as number) - (!this.args.compositeEditorOptions ? 18 : 28));\r\n }\r\n\r\n destroy() {\r\n this.hide();\r\n if (this.flatpickrInstance) {\r\n this.flatpickrInstance.destroy();\r\n }\r\n this.input.remove();\r\n }\r\n\r\n show() {\r\n if (!this.args.compositeEditorOptions && this.flatpickrInstance) {\r\n this.flatpickrInstance.open();\r\n }\r\n }\r\n\r\n hide() {\r\n if (!this.args.compositeEditorOptions && this.flatpickrInstance) {\r\n this.flatpickrInstance.close();\r\n }\r\n }\r\n\r\n focus() {\r\n this.input.focus();\r\n }\r\n\r\n loadValue(item: any) {\r\n this.defaultValue = item[this.args.column.field];\r\n this.input.value = String(this.defaultValue ?? '');\r\n this.input.defaultValue = String(this.defaultValue ?? '');\r\n this.input.select();\r\n if (this.flatpickrInstance) {\r\n this.flatpickrInstance.setDate(this.defaultValue);\r\n }\r\n }\r\n\r\n serializeValue() {\r\n return this.input.value;\r\n }\r\n\r\n applyValue(item: any, state: any) {\r\n item[this.args.column.field] = state;\r\n }\r\n\r\n isValueChanged() {\r\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n }\r\n\r\n validate() {\r\n if (this.args.column.validator) {\r\n const validationResults = this.args.column.validator(this.input.value, this.args);\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n }\r\n}\r\n\r\nexport class YesNoSelectEditor = Column, O extends GridOption = GridOption> implements Editor {\r\n protected select!: HTMLSelectElement;\r\n protected defaultValue?: string | number;\r\n\r\n constructor(protected readonly args: EditorArguments) {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.select = Utils.createDomElement('select', { tabIndex: 0, className: 'editor-yesno' }, this.args.container);\r\n Utils.createDomElement('option', { value: 'yes', textContent: 'Yes' }, this.select);\r\n Utils.createDomElement('option', { value: 'no', textContent: 'No' }, this.select);\r\n\r\n this.select.focus();\r\n\r\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n if (this.args.compositeEditorOptions) {\r\n this.select.addEventListener('change', this.onChange.bind(this));\r\n }\r\n }\r\n\r\n onChange() {\r\n const activeCell = this.args.grid.getActiveCell();\r\n\r\n // when valid, we'll also apply the new value to the dataContext item object\r\n if (this.validate().valid) {\r\n this.applyValue(this.args.item, this.serializeValue());\r\n }\r\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n this.args.grid.onCompositeEditorChange.notify({\r\n row: activeCell?.row ?? 0,\r\n cell: activeCell?.cell ?? 0,\r\n item: this.args.item,\r\n column: this.args.column,\r\n formValues: this.args.compositeEditorOptions.formValues,\r\n grid: this.args.grid,\r\n editors: this.args.compositeEditorOptions.editors\r\n } as unknown as OnCompositeEditorChangeEventArgs);\r\n }\r\n\r\n destroy() {\r\n this.select.removeEventListener('change', this.onChange.bind(this));\r\n this.select.remove();\r\n }\r\n\r\n focus() {\r\n this.select.focus();\r\n }\r\n\r\n loadValue(item: any) {\r\n this.select.value = ((this.defaultValue = item[this.args.column.field]) ? 'yes' : 'no');\r\n }\r\n\r\n serializeValue() {\r\n return this.select.value === 'yes';\r\n }\r\n\r\n applyValue(item: any, state: any) {\r\n item[this.args.column.field] = state;\r\n }\r\n\r\n isValueChanged() {\r\n return this.select.value !== this.defaultValue;\r\n }\r\n\r\n validate() {\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n }\r\n}\r\n\r\nexport class CheckboxEditor = Column, O extends GridOption = GridOption> implements Editor {\r\n protected input!: HTMLInputElement;\r\n protected defaultValue?: boolean;\r\n\r\n constructor(protected readonly args: EditorArguments) {\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.input = Utils.createDomElement('input', { className: 'editor-checkbox', type: 'checkbox', value: 'true' }, this.args.container);\r\n this.input.focus();\r\n\r\n // trigger onCompositeEditorChange event when input checkbox changes and it's a Composite Editor\r\n if (this.args.compositeEditorOptions) {\r\n this.input.addEventListener('change', this.onChange.bind(this));\r\n }\r\n };\r\n\r\n onChange() {\r\n const activeCell = this.args.grid.getActiveCell();\r\n\r\n // when valid, we'll also apply the new value to the dataContext item object\r\n if (this.validate().valid) {\r\n this.applyValue(this.args.item, this.serializeValue());\r\n }\r\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n this.args.grid.onCompositeEditorChange.notify({\r\n row: activeCell?.row ?? 0,\r\n cell: activeCell?.cell ?? 0,\r\n item: this.args.item,\r\n column: this.args.column,\r\n formValues: this.args.compositeEditorOptions.formValues,\r\n grid: this.args.grid,\r\n editors: this.args.compositeEditorOptions.editors\r\n } as unknown as OnCompositeEditorChangeEventArgs);\r\n };\r\n\r\n destroy() {\r\n this.input.removeEventListener('change', this.onChange.bind(this));\r\n this.input.remove();\r\n };\r\n\r\n focus() {\r\n this.input.focus();\r\n };\r\n\r\n loadValue(item: any) {\r\n this.defaultValue = !!(item[this.args.column.field]);\r\n if (this.defaultValue) {\r\n this.input.checked = true;\r\n } else {\r\n this.input.checked = false;\r\n }\r\n };\r\n\r\n serializeValue() {\r\n return this.input.checked;\r\n };\r\n\r\n applyValue(item: any, state: any) {\r\n item[this.args.column.field] = state;\r\n }\r\n\r\n isValueChanged() {\r\n return (this.serializeValue() !== this.defaultValue);\r\n }\r\n\r\n validate(): EditorValidationResult {\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n }\r\n}\r\n\r\nexport class PercentCompleteEditor = Column, O extends GridOption = GridOption> implements Editor {\r\n protected input!: HTMLInputElement;\r\n protected defaultValue?: number;\r\n protected picker!: HTMLDivElement;\r\n protected slider!: HTMLInputElement | null;\r\n\r\n constructor(protected readonly args: EditorArguments) {\r\n this.init();\r\n }\r\n\r\n sliderInputHandler(e: MouseEvent & { target: HTMLButtonElement }) {\r\n this.input.value = e.target.value;\r\n }\r\n\r\n sliderChangeHandler() {\r\n // trigger onCompositeEditorChange event when slider stops and it's a Composite Editor\r\n if (this.args.compositeEditorOptions) {\r\n const activeCell = this.args.grid.getActiveCell();\r\n\r\n // when valid, we'll also apply the new value to the dataContext item object\r\n if (this.validate().valid) {\r\n this.applyValue(this.args.item, this.serializeValue());\r\n }\r\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n this.args.grid.onCompositeEditorChange.notify({\r\n row: activeCell?.row ?? 0,\r\n cell: activeCell?.cell ?? 0,\r\n item: this.args.item,\r\n column: this.args.column,\r\n formValues: this.args.compositeEditorOptions.formValues,\r\n grid: this.args.grid,\r\n editors: this.args.compositeEditorOptions.editors\r\n } as unknown as OnCompositeEditorChangeEventArgs);\r\n }\r\n }\r\n\r\n init() {\r\n this.input = Utils.createDomElement('input', { className: 'editor-percentcomplete', type: 'text' }, this.args.container);\r\n Utils.width(this.input, this.args.container.clientWidth - 25);\r\n\r\n this.picker = Utils.createDomElement('div', { className: 'editor-percentcomplete-picker' }, this.args.container);\r\n Utils.createDomElement('span', { className: 'editor-percentcomplete-picker-icon' }, this.picker);\r\n const containerHelper = Utils.createDomElement('div', { className: 'editor-percentcomplete-helper' }, this.picker);\r\n const containerWrapper = Utils.createDomElement('div', { className: 'editor-percentcomplete-wrapper' }, containerHelper);\r\n Utils.createDomElement('div', { className: 'editor-percentcomplete-slider' }, containerWrapper);\r\n this.slider = Utils.createDomElement('input', { className: 'editor-percentcomplete-slider', type: 'range', value: String(this.defaultValue ?? '') }, containerWrapper);\r\n const containerButtons = Utils.createDomElement('div', { className: 'editor-percentcomplete-buttons' }, containerWrapper);\r\n Utils.createDomElement('button', { value: '0', className: 'slick-btn slick-btn-default', textContent: 'Not started' }, containerButtons);\r\n containerButtons.appendChild(document.createElement('br'));\r\n Utils.createDomElement('button', { value: '50', className: 'slick-btn slick-btn-default', textContent: 'In Progress' }, containerButtons);\r\n containerButtons.appendChild(document.createElement('br'));\r\n Utils.createDomElement('button', { value: '100', className: 'slick-btn slick-btn-default', textContent: 'Complete' }, containerButtons);\r\n\r\n this.input.focus();\r\n this.input.select();\r\n\r\n this.slider.addEventListener('input', this.sliderInputHandler.bind(this) as EventListener);\r\n this.slider.addEventListener('change', this.sliderChangeHandler.bind(this));\r\n\r\n const buttons = this.picker.querySelectorAll('.editor-percentcomplete-buttons button');\r\n [].forEach.call(buttons, (button: HTMLButtonElement) => {\r\n button.addEventListener('click', this.onClick.bind(this) as EventListener);\r\n });\r\n };\r\n\r\n onClick(e: MouseEvent & { target: HTMLButtonElement }) {\r\n this.input.value = String(e.target.value ?? '');\r\n this.slider!.value = String(e.target.value ?? '');\r\n };\r\n\r\n destroy() {\r\n this.slider?.removeEventListener('input', this.sliderInputHandler.bind(this) as EventListener);\r\n this.slider?.removeEventListener('change', this.sliderChangeHandler.bind(this));\r\n this.picker.querySelectorAll('.editor-percentcomplete-buttons button')\r\n .forEach(button => button.removeEventListener('click', this.onClick.bind(this) as EventListener));\r\n this.input.remove();\r\n this.picker.remove();\r\n };\r\n\r\n focus() {\r\n this.input.focus();\r\n };\r\n\r\n loadValue(item: any) {\r\n this.defaultValue = item[this.args.column.field];\r\n this.slider!.value = String(this.defaultValue ?? '');\r\n this.input.value = String(this.defaultValue);\r\n this.input.select();\r\n };\r\n\r\n serializeValue() {\r\n return parseInt(this.input.value, 10) || 0;\r\n };\r\n\r\n applyValue(item: any, state: any) {\r\n item[this.args.column.field] = state;\r\n };\r\n\r\n isValueChanged() {\r\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && ((parseInt(this.input.value as any, 10) || 0) !== this.defaultValue);\r\n };\r\n\r\n validate(): EditorValidationResult {\r\n if (isNaN(parseInt(this.input.value, 10))) {\r\n return {\r\n valid: false,\r\n msg: 'Please enter a valid positive number'\r\n };\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n}\r\n\r\n/*\r\n * An example of a 'detached' editor.\r\n * The UI is added onto document BODY and .position(), .show() and .hide() are implemented.\r\n * KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.\r\n */\r\nexport class LongTextEditor = Column, O extends GridOption = GridOption> implements Editor {\r\n protected input!: HTMLTextAreaElement;\r\n protected wrapper!: HTMLDivElement;\r\n protected defaultValue?: string;\r\n protected selectionStart = 0;\r\n\r\n constructor(protected readonly args: EditorArguments) {\r\n this.init();\r\n }\r\n\r\n init() {\r\n const compositeEditorOptions = this.args.compositeEditorOptions;\r\n this.args.grid.getOptions().editorCellNavOnLRKeys;\r\n const container = compositeEditorOptions ? this.args.container : document.body;\r\n\r\n this.wrapper = Utils.createDomElement('div', { className: 'slick-large-editor-text' }, container);\r\n if (compositeEditorOptions) {\r\n this.wrapper.style.position = 'relative';\r\n Utils.setStyleSize(this.wrapper, 'padding', 0);\r\n Utils.setStyleSize(this.wrapper, 'border', 0);\r\n } else {\r\n this.wrapper.style.position = 'absolute';\r\n }\r\n\r\n this.input = Utils.createDomElement('textarea', { rows: 5, style: { background: 'white', width: '250px', height: '80px', border: '0', outline: '0' } }, this.wrapper);\r\n\r\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\r\n if (compositeEditorOptions) {\r\n this.input.addEventListener('change', this.onChange.bind(this));\r\n } else {\r\n const btnContainer = Utils.createDomElement('div', { style: 'text-align:right' }, this.wrapper);\r\n Utils.createDomElement('button', { id: 'save', className: 'slick-btn slick-btn-primary', textContent: 'Save' }, btnContainer);\r\n Utils.createDomElement('button', { id: 'cancel', className: 'slick-btn slick-btn-default', textContent: 'Cancel' }, btnContainer);\r\n\r\n this.wrapper.querySelector('#save')!.addEventListener('click', this.save.bind(this));\r\n this.wrapper.querySelector('#cancel')!.addEventListener('click', this.cancel.bind(this));\r\n this.input.addEventListener('keydown', this.handleKeyDown.bind(this) as EventListener);\r\n this.position(this.args.position as ElementPosition);\r\n }\r\n\r\n this.input.focus();\r\n this.input.select();\r\n };\r\n\r\n onChange() {\r\n const activeCell = this.args.grid.getActiveCell();\r\n\r\n // when valid, we'll also apply the new value to the dataContext item object\r\n if (this.validate().valid) {\r\n this.applyValue(this.args.item, this.serializeValue());\r\n }\r\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\r\n this.args.grid.onCompositeEditorChange.notify({\r\n row: activeCell?.row ?? 0,\r\n cell: activeCell?.cell ?? 0,\r\n item: this.args.item,\r\n column: this.args.column,\r\n formValues: this.args.compositeEditorOptions.formValues,\r\n grid: this.args.grid,\r\n editors: this.args.compositeEditorOptions.editors\r\n } as unknown as OnCompositeEditorChangeEventArgs);\r\n };\r\n\r\n handleKeyDown(e: KeyboardEvent & { target: HTMLInputElement }) {\r\n if (e.which === keyCode.ENTER && e.ctrlKey) {\r\n this.save();\r\n } else if (e.which === keyCode.ESCAPE) {\r\n e.preventDefault();\r\n this.cancel();\r\n } else if (e.which === keyCode.TAB && e.shiftKey) {\r\n e.preventDefault();\r\n this.args.grid.navigatePrev();\r\n } else if (e.which === keyCode.TAB) {\r\n e.preventDefault();\r\n this.args.grid.navigateNext();\r\n } else if (e.which === keyCode.LEFT || e.which === keyCode.RIGHT) {\r\n if (this.args.grid.getOptions().editorCellNavOnLRKeys) {\r\n const cursorPosition = this.selectionStart;\r\n const textLength = e.target.value.length;\r\n if (e.keyCode === keyCode.LEFT && cursorPosition === 0) {\r\n this.args.grid.navigatePrev();\r\n }\r\n if (e.keyCode === keyCode.RIGHT && cursorPosition >= textLength - 1) {\r\n this.args.grid.navigateNext();\r\n }\r\n }\r\n }\r\n };\r\n\r\n save() {\r\n const gridOptions = this.args.grid.getOptions() || {};\r\n if (gridOptions.autoCommitEdit) {\r\n this.args.grid.getEditorLock().commitCurrentEdit();\r\n } else {\r\n this.args.commitChanges();\r\n }\r\n };\r\n\r\n cancel() {\r\n this.input.value = String(this.defaultValue ?? '');\r\n this.args.cancelChanges();\r\n };\r\n\r\n hide() {\r\n Utils.hide(this.wrapper);\r\n };\r\n\r\n show() {\r\n Utils.show(this.wrapper);\r\n };\r\n\r\n position(position: ElementPosition) {\r\n Utils.setStyleSize(this.wrapper, 'top', (position.top || 0) - 5);\r\n Utils.setStyleSize(this.wrapper, 'left', (position.left || 0) - 2);\r\n };\r\n\r\n destroy() {\r\n if (this.args.compositeEditorOptions) {\r\n this.input.removeEventListener('change', this.onChange.bind(this));\r\n } else {\r\n this.wrapper.querySelector('#save')!.removeEventListener('click', this.save.bind(this));\r\n this.wrapper.querySelector('#cancel')!.removeEventListener('click', this.cancel.bind(this));\r\n this.input.removeEventListener('keydown', this.handleKeyDown.bind(this) as EventListener);\r\n }\r\n this.wrapper.remove();\r\n };\r\n\r\n focus() {\r\n this.input.focus();\r\n };\r\n\r\n loadValue(item: any) {\r\n this.input.value = this.defaultValue = item[this.args.column.field];\r\n this.input.select();\r\n };\r\n\r\n serializeValue() {\r\n return this.input.value;\r\n };\r\n\r\n applyValue(item: any, state: any) {\r\n item[this.args.column.field] = state;\r\n };\r\n\r\n isValueChanged() {\r\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\r\n };\r\n\r\n validate() {\r\n if (this.args.column.validator) {\r\n const validationResults = this.args.column.validator(this.input.value, this.args);\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n}\r\n\r\n/*\r\n * Depending on the value of Grid option 'editorCellNavOnLRKeys', us\r\n * Navigate to the cell on the left if the cursor is at the beginning of the input string\r\n * and to the right cell if it's at the end. Otherwise, move the cursor within the text\r\n */\r\nfunction handleKeydownLRNav(e: KeyboardEvent & { target: HTMLInputElement; selectionStart: number; }) {\r\n const cursorPosition = e.selectionStart;\r\n const textLength = e.target.value.length;\r\n if ((e.keyCode === keyCode.LEFT && cursorPosition > 0) ||\r\n e.keyCode === keyCode.RIGHT && cursorPosition < textLength - 1) {\r\n e.stopImmediatePropagation();\r\n }\r\n}\r\n\r\nfunction handleKeydownLRNoNav(e: KeyboardEvent) {\r\n if (e.keyCode === keyCode.LEFT || e.keyCode === keyCode.RIGHT) {\r\n e.stopImmediatePropagation();\r\n }\r\n}\r\n\r\nexport const Editors = {\r\n Text: TextEditor,\r\n Integer: IntegerEditor,\r\n Float: FloatEditor,\r\n Flatpickr: FlatpickrEditor,\r\n YesNoSelect: YesNoSelectEditor,\r\n Checkbox: CheckboxEditor,\r\n PercentComplete: PercentCompleteEditor,\r\n LongText: LongTextEditor\r\n};\r\n\r\n// extend Slick namespace on window object when building as iife\r\nif (IIFE_ONLY && window.Slick) {\r\n Utils.extend(Slick, {\r\n Editors\r\n });\r\n}\r\n\r\n","// @ts-ignore\r\nimport type SortableInstance from 'sortablejs';\r\n\r\nimport type {\r\n AutoSize,\r\n CellViewportRange,\r\n Column,\r\n ColumnSort,\r\n CssStyleHash,\r\n CSSStyleDeclarationWritable,\r\n CustomDataView,\r\n DOMEvent,\r\n DragPosition,\r\n DragRowMove,\r\n Editor,\r\n EditorArguments,\r\n EditorConstructor,\r\n EditController,\r\n Formatter,\r\n FormatterOverrideCallback,\r\n FormatterResultObject,\r\n FormatterResultWithHtml,\r\n FormatterResultWithText,\r\n GridOption as BaseGridOption,\r\n InteractionBase,\r\n ItemMetadata,\r\n MenuCommandItemCallbackArgs,\r\n MultiColumnSort,\r\n OnActivateChangedOptionsEventArgs,\r\n OnActiveCellChangedEventArgs,\r\n OnAddNewRowEventArgs,\r\n OnAutosizeColumnsEventArgs,\r\n OnBeforeUpdateColumnsEventArgs,\r\n OnBeforeAppendCellEventArgs,\r\n OnBeforeCellEditorDestroyEventArgs,\r\n OnBeforeColumnsResizeEventArgs,\r\n OnBeforeEditCellEventArgs,\r\n OnBeforeHeaderCellDestroyEventArgs,\r\n OnBeforeHeaderRowCellDestroyEventArgs,\r\n OnBeforeFooterRowCellDestroyEventArgs,\r\n OnBeforeSetColumnsEventArgs,\r\n OnCellChangeEventArgs,\r\n OnCellCssStylesChangedEventArgs,\r\n OnClickEventArgs,\r\n OnColumnsDragEventArgs,\r\n OnColumnsReorderedEventArgs,\r\n OnColumnsResizedEventArgs,\r\n OnColumnsResizeDblClickEventArgs,\r\n OnCompositeEditorChangeEventArgs,\r\n OnDblClickEventArgs,\r\n OnFooterContextMenuEventArgs,\r\n OnFooterRowCellRenderedEventArgs,\r\n OnHeaderCellRenderedEventArgs,\r\n OnFooterClickEventArgs,\r\n OnHeaderClickEventArgs,\r\n OnHeaderContextMenuEventArgs,\r\n OnHeaderMouseEventArgs,\r\n OnHeaderRowCellRenderedEventArgs,\r\n OnKeyDownEventArgs,\r\n OnPreHeaderContextMenuEventArgs,\r\n OnPreHeaderClickEventArgs,\r\n OnRenderedEventArgs,\r\n OnSelectedRowsChangedEventArgs,\r\n OnSetOptionsEventArgs,\r\n OnScrollEventArgs,\r\n OnValidationErrorEventArgs,\r\n PagingInfo,\r\n RowInfo,\r\n SelectionModel,\r\n SingleColumnSort,\r\n SlickGridModel,\r\n SlickPlugin,\r\n} from './models/index';\r\nimport {\r\n type BasePubSub,\r\n BindingEventService as BindingEventService_,\r\n ColAutosizeMode as ColAutosizeMode_,\r\n GlobalEditorLock as GlobalEditorLock_,\r\n GridAutosizeColsMode as GridAutosizeColsMode_,\r\n keyCode as keyCode_,\r\n preClickClassName as preClickClassName_,\r\n RowSelectionMode as RowSelectionMode_,\r\n type SlickEditorLock,\r\n SlickEvent as SlickEvent_,\r\n SlickEventData as SlickEventData_,\r\n SlickRange as SlickRange_,\r\n Utils as Utils_,\r\n ValueFilterMode as ValueFilterMode_,\r\n WidthEvalMode as WidthEvalMode_,\r\n} from './slick.core';\r\nimport { Draggable as Draggable_, MouseWheel as MouseWheel_, Resizable as Resizable_ } from './slick.interactions';\r\n\r\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\r\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\r\nconst ColAutosizeMode = IIFE_ONLY ? Slick.ColAutosizeMode : ColAutosizeMode_;\r\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\r\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\r\nconst GlobalEditorLock = IIFE_ONLY ? Slick.GlobalEditorLock : GlobalEditorLock_;\r\nconst GridAutosizeColsMode = IIFE_ONLY ? Slick.GridAutosizeColsMode : GridAutosizeColsMode_;\r\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\r\nconst preClickClassName = IIFE_ONLY ? Slick.preClickClassName : preClickClassName_;\r\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\r\nconst RowSelectionMode = IIFE_ONLY ? Slick.RowSelectionMode : RowSelectionMode_;\r\nconst ValueFilterMode = IIFE_ONLY ? Slick.ValueFilterMode : ValueFilterMode_;\r\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\r\nconst WidthEvalMode = IIFE_ONLY ? Slick.WidthEvalMode : WidthEvalMode_;\r\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\r\nconst MouseWheel = IIFE_ONLY ? Slick.MouseWheel : MouseWheel_;\r\nconst Resizable = IIFE_ONLY ? Slick.Resizable : Resizable_;\r\n\r\n/**\r\n * @license\r\n * (c) 2009-present Michael Leibman\r\n * michael{dot}leibman{at}gmail{dot}com\r\n * http://github.com/mleibman/slickgrid\r\n *\r\n * Distributed under MIT license.\r\n * All rights reserved.\r\n *\r\n * SlickGrid v5.12.0\r\n *\r\n * NOTES:\r\n * Cell/row DOM manipulations are done directly bypassing JS DOM manipulation methods.\r\n * This increases the speed dramatically, but can only be done safely because there are no event handlers\r\n * or data associated with any cell/row DOM nodes. Cell editors must make sure they implement .destroy()\r\n * and do proper cleanup.\r\n */\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////////\r\n// SlickGrid class implementation (available as SlickGrid)\r\n\r\ninterface RowCaching {\r\n rowNode: HTMLElement[] | null,\r\n cellColSpans: Array;\r\n cellNodesByColumnIdx: HTMLElement[];\r\n cellRenderQueue: any[];\r\n}\r\n\r\nexport class SlickGrid = Column, O extends BaseGridOption = BaseGridOption> {\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // Public API\r\n slickGridVersion = '5.12.0';\r\n\r\n /** optional grid state clientId */\r\n cid = '';\r\n\r\n // Events\r\n onActiveCellChanged: SlickEvent_;\r\n onActiveCellPositionChanged: SlickEvent_<{ grid: SlickGrid; }>;\r\n onAddNewRow: SlickEvent_;\r\n onAutosizeColumns: SlickEvent_;\r\n onBeforeAppendCell: SlickEvent_;\r\n onBeforeCellEditorDestroy: SlickEvent_;\r\n onBeforeColumnsResize: SlickEvent_;\r\n onBeforeDestroy: SlickEvent_<{ grid: SlickGrid; }>;\r\n onBeforeEditCell: SlickEvent_;\r\n onBeforeFooterRowCellDestroy: SlickEvent_;\r\n onBeforeHeaderCellDestroy: SlickEvent_;\r\n onBeforeHeaderRowCellDestroy: SlickEvent_;\r\n onBeforeSetColumns: SlickEvent_;\r\n onBeforeSort: SlickEvent_;\r\n onBeforeUpdateColumns: SlickEvent_;\r\n onCellChange: SlickEvent_;\r\n onCellCssStylesChanged: SlickEvent_;\r\n onClick: SlickEvent_;\r\n onColumnsReordered: SlickEvent_;\r\n onColumnsDrag: SlickEvent_;\r\n onColumnsResized: SlickEvent_;\r\n onColumnsResizeDblClick: SlickEvent_;\r\n onCompositeEditorChange: SlickEvent_;\r\n onContextMenu: SlickEvent_;\r\n onDrag: SlickEvent_;\r\n onDblClick: SlickEvent_;\r\n onDragInit: SlickEvent_;\r\n onDragStart: SlickEvent_;\r\n onDragEnd: SlickEvent_;\r\n onFooterClick: SlickEvent_;\r\n onFooterContextMenu: SlickEvent_;\r\n onFooterRowCellRendered: SlickEvent_;\r\n onHeaderCellRendered: SlickEvent_;\r\n onHeaderClick: SlickEvent_;\r\n onHeaderContextMenu: SlickEvent_;\r\n onHeaderMouseEnter: SlickEvent_;\r\n onHeaderMouseLeave: SlickEvent_;\r\n onHeaderRowCellRendered: SlickEvent_;\r\n onHeaderRowMouseEnter: SlickEvent_;\r\n onHeaderRowMouseLeave: SlickEvent_;\r\n onPreHeaderContextMenu: SlickEvent_;\r\n onPreHeaderClick: SlickEvent_;\r\n onKeyDown: SlickEvent_;\r\n onMouseEnter: SlickEvent_;\r\n onMouseLeave: SlickEvent_;\r\n onRendered: SlickEvent_;\r\n onScroll: SlickEvent_;\r\n onSelectedRowsChanged: SlickEvent_;\r\n onSetOptions: SlickEvent_;\r\n onActivateChangedOptions: SlickEvent_;\r\n onSort: SlickEvent_;\r\n onValidationError: SlickEvent_;\r\n onViewportChanged: SlickEvent_<{ grid: SlickGrid; }>;\r\n\r\n // ---\r\n // protected variables\r\n\r\n // shared across all grids on the page\r\n protected scrollbarDimensions?: { height: number; width: number; };\r\n protected maxSupportedCssHeight!: number; // browser's breaking point\r\n\r\n protected canvas: HTMLCanvasElement | null = null;\r\n protected canvas_context: CanvasRenderingContext2D | null = null;\r\n\r\n // settings\r\n protected _options!: O;\r\n protected _defaults: BaseGridOption = {\r\n alwaysShowVerticalScroll: false,\r\n alwaysAllowHorizontalScroll: false,\r\n explicitInitialization: false,\r\n rowHeight: 25,\r\n defaultColumnWidth: 80,\r\n enableHtmlRendering: true,\r\n enableAddRow: false,\r\n leaveSpaceForNewRows: false,\r\n editable: false,\r\n autoEdit: true,\r\n autoEditNewRow: true,\r\n autoCommitEdit: false,\r\n suppressActiveCellChangeOnEdit: false,\r\n enableCellNavigation: true,\r\n enableColumnReorder: true,\r\n unorderableColumnCssClass: 'unorderable',\r\n asyncEditorLoading: false,\r\n asyncEditorLoadDelay: 100,\r\n forceFitColumns: false,\r\n enableAsyncPostRender: false,\r\n asyncPostRenderDelay: 50,\r\n enableAsyncPostRenderCleanup: false,\r\n asyncPostRenderCleanupDelay: 40,\r\n auto: false,\r\n nonce: '',\r\n editorLock: GlobalEditorLock,\r\n showColumnHeader: true,\r\n showHeaderRow: false,\r\n headerRowHeight: 25,\r\n createFooterRow: false,\r\n showFooterRow: false,\r\n footerRowHeight: 25,\r\n createPreHeaderPanel: false,\r\n createTopHeaderPanel: false,\r\n showPreHeaderPanel: false,\r\n showTopHeaderPanel: false,\r\n preHeaderPanelHeight: 25,\r\n showTopPanel: false,\r\n topPanelHeight: 25,\r\n preHeaderPanelWidth: 'auto', // mostly useful for Draggable Grouping dropzone to take full width\r\n topHeaderPanelHeight: 25,\r\n topHeaderPanelWidth: 'auto', // mostly useful for Draggable Grouping dropzone to take full width\r\n formatterFactory: null,\r\n editorFactory: null,\r\n cellFlashingCssClass: 'flashing',\r\n rowHighlightCssClass: 'highlight-animate',\r\n rowHighlightDuration: 400,\r\n selectedCellCssClass: 'selected',\r\n multiSelect: true,\r\n enableTextSelectionOnCells: false,\r\n dataItemColumnValueExtractor: null,\r\n frozenBottom: false,\r\n frozenColumn: -1,\r\n frozenRow: -1,\r\n frozenRightViewportMinWidth: 100,\r\n throwWhenFrozenNotAllViewable: false,\r\n fullWidthRows: false,\r\n multiColumnSort: false,\r\n numberedMultiColumnSort: false,\r\n tristateMultiColumnSort: false,\r\n sortColNumberInSeparateSpan: false,\r\n defaultFormatter: this.defaultFormatter,\r\n forceSyncScrolling: false,\r\n addNewRowCssClass: 'new-row',\r\n preserveCopiedSelectionOnPaste: false,\r\n preventDragFromKeys: ['ctrlKey', 'metaKey'],\r\n showCellSelection: true,\r\n viewportClass: undefined,\r\n minRowBuffer: 3,\r\n emulatePagingWhenScrolling: true, // when scrolling off bottom of viewport, place new row at top of viewport\r\n editorCellNavOnLRKeys: false,\r\n enableMouseWheelScrollHandler: true,\r\n doPaging: true,\r\n autosizeColsMode: GridAutosizeColsMode.LegacyOff,\r\n autosizeColPaddingPx: 4,\r\n rowTopOffsetRenderType: 'top',\r\n scrollRenderThrottling: 10,\r\n autosizeTextAvgToMWidthRatio: 0.75,\r\n viewportSwitchToScrollModeWidthPercent: undefined,\r\n viewportMinWidthPx: undefined,\r\n viewportMaxWidthPx: undefined,\r\n suppressCssChangesOnHiddenInit: false,\r\n ffMaxSupportedCssHeight: 6000000,\r\n maxSupportedCssHeight: 1000000000,\r\n sanitizer: undefined, // sanitize function, built in basic sanitizer is: Slick.RegexSanitizer(dirtyHtml)\r\n logSanitizedHtml: false, // log to console when sanitised - recommend true for testing of dev and production\r\n mixinDefaults: true,\r\n shadowRoot: undefined\r\n };\r\n\r\n protected _columnDefaults = {\r\n name: '',\r\n headerCssClass: null,\r\n defaultSortAsc: true,\r\n focusable: true,\r\n hidden: false,\r\n minWidth: 30,\r\n maxWidth: undefined,\r\n rerenderOnResize: false,\r\n reorderable: true,\r\n resizable: true,\r\n sortable: false,\r\n selectable: true,\r\n } as Partial;\r\n\r\n protected _columnAutosizeDefaults: AutoSize = {\r\n ignoreHeaderText: false,\r\n colValueArray: undefined,\r\n allowAddlPercent: undefined,\r\n formatterOverride: undefined,\r\n autosizeMode: ColAutosizeMode.ContentIntelligent,\r\n rowSelectionModeOnInit: undefined,\r\n rowSelectionMode: RowSelectionMode.FirstNRows,\r\n rowSelectionCount: 100,\r\n valueFilterMode: ValueFilterMode.None,\r\n widthEvalMode: WidthEvalMode.Auto,\r\n sizeToRemaining: undefined,\r\n widthPx: undefined,\r\n contentSizePx: 0,\r\n headerWidthPx: 0,\r\n colDataTypeOf: undefined\r\n };\r\n\r\n protected _columnResizeTimer?: any;\r\n protected _executionBlockTimer?: any;\r\n protected _flashCellTimer?: any;\r\n protected _highlightRowTimer?: any;\r\n\r\n // scroller\r\n protected th!: number; // virtual height\r\n protected h!: number; // real scrollable height\r\n protected ph!: number; // page height\r\n protected n!: number; // number of pages\r\n protected cj!: number; // \"jumpiness\" coefficient\r\n\r\n protected page = 0; // current page\r\n protected offset = 0; // current page offset\r\n protected vScrollDir = 1;\r\n protected _bindingEventService = new BindingEventService();\r\n protected initialized = false;\r\n protected _container!: HTMLElement;\r\n protected uid = `slickgrid_${Math.round(1000000 * Math.random())}`;\r\n protected _focusSink!: HTMLDivElement;\r\n protected _focusSink2!: HTMLDivElement;\r\n protected _groupHeaders: HTMLDivElement[] = [];\r\n protected _headerScroller: HTMLDivElement[] = [];\r\n protected _headers: HTMLDivElement[] = [];\r\n protected _headerRows!: HTMLDivElement[];\r\n protected _headerRowScroller!: HTMLDivElement[];\r\n protected _headerRowSpacerL!: HTMLDivElement;\r\n protected _headerRowSpacerR!: HTMLDivElement;\r\n protected _footerRow!: HTMLDivElement[];\r\n protected _footerRowScroller!: HTMLDivElement[];\r\n protected _footerRowSpacerL!: HTMLDivElement;\r\n protected _footerRowSpacerR!: HTMLDivElement;\r\n protected _preHeaderPanel!: HTMLDivElement;\r\n protected _preHeaderPanelScroller!: HTMLDivElement;\r\n protected _preHeaderPanelSpacer!: HTMLDivElement;\r\n protected _preHeaderPanelR!: HTMLDivElement;\r\n protected _preHeaderPanelScrollerR!: HTMLDivElement;\r\n protected _preHeaderPanelSpacerR!: HTMLDivElement;\r\n protected _topHeaderPanel!: HTMLDivElement;\r\n protected _topHeaderPanelScroller!: HTMLDivElement;\r\n protected _topHeaderPanelSpacer!: HTMLDivElement;\r\n protected _topPanelScrollers!: HTMLDivElement[];\r\n protected _topPanels!: HTMLDivElement[];\r\n protected _viewport!: HTMLDivElement[];\r\n protected _canvas!: HTMLDivElement[];\r\n protected _style?: HTMLStyleElement;\r\n protected _boundAncestors: HTMLElement[] = [];\r\n protected stylesheet?: { cssRules: Array<{ selectorText: string; }>; rules: Array<{ selectorText: string; }>; } | null;\r\n protected columnCssRulesL?: Array<{ selectorText: string; }>;\r\n protected columnCssRulesR?: Array<{ selectorText: string; }>;\r\n protected viewportH = 0;\r\n protected viewportW = 0;\r\n protected canvasWidth = 0;\r\n protected canvasWidthL = 0;\r\n protected canvasWidthR = 0;\r\n protected headersWidth = 0;\r\n protected headersWidthL = 0;\r\n protected headersWidthR = 0;\r\n protected viewportHasHScroll = false;\r\n protected viewportHasVScroll = false;\r\n protected headerColumnWidthDiff = 0;\r\n protected headerColumnHeightDiff = 0; // border+padding\r\n protected cellWidthDiff = 0;\r\n protected cellHeightDiff = 0;\r\n protected absoluteColumnMinWidth!: number;\r\n protected hasFrozenRows = false;\r\n protected frozenRowsHeight = 0;\r\n protected actualFrozenRow = -1;\r\n protected paneTopH = 0;\r\n protected paneBottomH = 0;\r\n protected viewportTopH = 0;\r\n protected viewportBottomH = 0;\r\n protected topPanelH = 0;\r\n protected headerRowH = 0;\r\n protected footerRowH = 0;\r\n\r\n protected tabbingDirection = 1;\r\n protected _activeCanvasNode!: HTMLDivElement;\r\n protected _activeViewportNode!: HTMLDivElement;\r\n protected activePosX!: number;\r\n protected activeRow!: number;\r\n protected activeCell!: number;\r\n protected activeCellNode: HTMLDivElement | null = null;\r\n protected currentEditor: Editor | null = null;\r\n protected serializedEditorValue: any;\r\n protected editController?: EditController;\r\n\r\n protected rowsCache: Array = {} as any;\r\n protected renderedRows = 0;\r\n protected numVisibleRows = 0;\r\n protected prevScrollTop = 0;\r\n protected scrollHeight = 0;\r\n protected scrollTop = 0;\r\n protected lastRenderedScrollTop = 0;\r\n protected lastRenderedScrollLeft = 0;\r\n protected prevScrollLeft = 0;\r\n protected scrollLeft = 0;\r\n\r\n protected selectionModel?: SelectionModel;\r\n protected selectedRows: number[] = [];\r\n\r\n protected plugins: SlickPlugin[] = [];\r\n protected cellCssClasses: CssStyleHash = {};\r\n\r\n protected columnsById: Record = {};\r\n protected sortColumns: ColumnSort[] = [];\r\n protected columnPosLeft: number[] = [];\r\n protected columnPosRight: number[] = [];\r\n\r\n protected pagingActive = false;\r\n protected pagingIsLastPage = false;\r\n\r\n protected scrollThrottle!: { enqueue: () => void; dequeue: () => void; };\r\n\r\n // async call handles\r\n protected h_editorLoader: any = null;\r\n protected h_render = null;\r\n protected h_postrender: any = null;\r\n protected h_postrenderCleanup: any = null;\r\n protected postProcessedRows: any = {};\r\n protected postProcessToRow: number = null as any;\r\n protected postProcessFromRow: number = null as any;\r\n protected postProcessedCleanupQueue: Array<{\r\n actionType: string;\r\n groupId: number;\r\n node: HTMLElement | HTMLElement[];\r\n columnIdx?: number;\r\n rowIdx?: number;\r\n }> = [];\r\n protected postProcessgroupId = 0;\r\n\r\n // perf counters\r\n protected counter_rows_rendered = 0;\r\n protected counter_rows_removed = 0;\r\n\r\n protected _paneHeaderL!: HTMLDivElement;\r\n protected _paneHeaderR!: HTMLDivElement;\r\n protected _paneTopL!: HTMLDivElement;\r\n protected _paneTopR!: HTMLDivElement;\r\n protected _paneBottomL!: HTMLDivElement;\r\n protected _paneBottomR!: HTMLDivElement;\r\n protected _headerScrollerL!: HTMLDivElement;\r\n protected _headerScrollerR!: HTMLDivElement;\r\n protected _headerL!: HTMLDivElement;\r\n protected _headerR!: HTMLDivElement;\r\n protected _groupHeadersL!: HTMLDivElement;\r\n protected _groupHeadersR!: HTMLDivElement;\r\n protected _headerRowScrollerL!: HTMLDivElement;\r\n protected _headerRowScrollerR!: HTMLDivElement;\r\n protected _footerRowScrollerL!: HTMLDivElement;\r\n protected _footerRowScrollerR!: HTMLDivElement;\r\n protected _headerRowL!: HTMLDivElement;\r\n protected _headerRowR!: HTMLDivElement;\r\n protected _footerRowL!: HTMLDivElement;\r\n protected _footerRowR!: HTMLDivElement;\r\n protected _topPanelScrollerL!: HTMLDivElement;\r\n protected _topPanelScrollerR!: HTMLDivElement;\r\n protected _topPanelL!: HTMLDivElement;\r\n protected _topPanelR!: HTMLDivElement;\r\n protected _viewportTopL!: HTMLDivElement;\r\n protected _viewportTopR!: HTMLDivElement;\r\n protected _viewportBottomL!: HTMLDivElement;\r\n protected _viewportBottomR!: HTMLDivElement;\r\n protected _canvasTopL!: HTMLDivElement;\r\n protected _canvasTopR!: HTMLDivElement;\r\n protected _canvasBottomL!: HTMLDivElement;\r\n protected _canvasBottomR!: HTMLDivElement;\r\n protected _viewportScrollContainerX!: HTMLDivElement;\r\n protected _viewportScrollContainerY!: HTMLDivElement;\r\n protected _headerScrollContainer!: HTMLDivElement;\r\n protected _headerRowScrollContainer!: HTMLDivElement;\r\n protected _footerRowScrollContainer!: HTMLDivElement;\r\n\r\n // store css attributes if display:none is active in container or parent\r\n protected cssShow = { position: 'absolute', visibility: 'hidden', display: 'block' };\r\n protected _hiddenParents: HTMLElement[] = [];\r\n protected oldProps: Array> = [];\r\n protected enforceFrozenRowHeightRecalc = false;\r\n protected columnResizeDragging = false;\r\n protected slickDraggableInstance: InteractionBase | null = null;\r\n protected slickMouseWheelInstances: Array = [];\r\n protected slickResizableInstances: Array = [];\r\n protected sortableSideLeftInstance?: SortableInstance;\r\n protected sortableSideRightInstance?: SortableInstance;\r\n protected logMessageCount = 0;\r\n protected logMessageMaxCount = 30;\r\n protected _pubSubService?: BasePubSub;\r\n\r\n /**\r\n * Creates a new instance of the grid.\r\n * @class SlickGrid\r\n * @constructor\r\n * @param {Node} container - Container node to create the grid in.\r\n * @param {Array|Object} data - An array of objects for databinding or an external DataView.\r\n * @param {Array} columns - An array of column definitions.\r\n * @param {Object} [options] - Grid Options\r\n * @param {Object} [externalPubSub] - optional External PubSub Service to use by SlickEvent\r\n **/\r\n constructor(protected readonly container: HTMLElement | string, protected data: CustomDataView | TData[], protected columns: C[], options: Partial, protected readonly externalPubSub?: BasePubSub) {\r\n this._container = typeof this.container === 'string'\r\n ? document.querySelector(this.container) as HTMLDivElement\r\n : this.container;\r\n\r\n if (!this._container) {\r\n throw new Error(`SlickGrid requires a valid container, ${this.container} does not exist in the DOM.`);\r\n }\r\n\r\n this._pubSubService = externalPubSub;\r\n this.onActiveCellChanged = new SlickEvent('onActiveCellChanged', externalPubSub);\r\n this.onActiveCellPositionChanged = new SlickEvent<{ grid: SlickGrid; }>('onActiveCellPositionChanged', externalPubSub);\r\n this.onAddNewRow = new SlickEvent('onAddNewRow', externalPubSub);\r\n this.onAutosizeColumns = new SlickEvent('onAutosizeColumns', externalPubSub);\r\n this.onBeforeAppendCell = new SlickEvent('onBeforeAppendCell', externalPubSub);\r\n this.onBeforeCellEditorDestroy = new SlickEvent('onBeforeCellEditorDestroy', externalPubSub);\r\n this.onBeforeColumnsResize = new SlickEvent('onBeforeColumnsResize', externalPubSub);\r\n this.onBeforeDestroy = new SlickEvent<{ grid: SlickGrid; }>('onBeforeDestroy', externalPubSub);\r\n this.onBeforeEditCell = new SlickEvent('onBeforeEditCell', externalPubSub);\r\n this.onBeforeFooterRowCellDestroy = new SlickEvent('onBeforeFooterRowCellDestroy', externalPubSub);\r\n this.onBeforeHeaderCellDestroy = new SlickEvent('onBeforeHeaderCellDestroy', externalPubSub);\r\n this.onBeforeHeaderRowCellDestroy = new SlickEvent('onBeforeHeaderRowCellDestroy', externalPubSub);\r\n this.onBeforeSetColumns = new SlickEvent('onBeforeSetColumns', externalPubSub);\r\n this.onBeforeSort = new SlickEvent('onBeforeSort', externalPubSub);\r\n this.onBeforeUpdateColumns = new SlickEvent('onBeforeUpdateColumns', externalPubSub);\r\n this.onCellChange = new SlickEvent('onCellChange', externalPubSub);\r\n this.onCellCssStylesChanged = new SlickEvent('onCellCssStylesChanged', externalPubSub);\r\n this.onClick = new SlickEvent('onClick', externalPubSub);\r\n this.onColumnsReordered = new SlickEvent('onColumnsReordered', externalPubSub);\r\n this.onColumnsDrag = new SlickEvent('onColumnsDrag', externalPubSub);\r\n this.onColumnsResized = new SlickEvent('onColumnsResized', externalPubSub);\r\n this.onColumnsResizeDblClick = new SlickEvent('onColumnsResizeDblClick', externalPubSub);\r\n this.onCompositeEditorChange = new SlickEvent('onCompositeEditorChange', externalPubSub);\r\n this.onContextMenu = new SlickEvent('onContextMenu', externalPubSub);\r\n this.onDrag = new SlickEvent('onDrag', externalPubSub);\r\n this.onDblClick = new SlickEvent('onDblClick', externalPubSub);\r\n this.onDragInit = new SlickEvent('onDragInit', externalPubSub);\r\n this.onDragStart = new SlickEvent('onDragStart', externalPubSub);\r\n this.onDragEnd = new SlickEvent('onDragEnd', externalPubSub);\r\n this.onFooterClick = new SlickEvent('onFooterClick', externalPubSub);\r\n this.onFooterContextMenu = new SlickEvent('onFooterContextMenu', externalPubSub);\r\n this.onFooterRowCellRendered = new SlickEvent('onFooterRowCellRendered', externalPubSub);\r\n this.onHeaderCellRendered = new SlickEvent('onHeaderCellRendered', externalPubSub);\r\n this.onHeaderClick = new SlickEvent('onHeaderClick', externalPubSub);\r\n this.onHeaderContextMenu = new SlickEvent('onHeaderContextMenu', externalPubSub);\r\n this.onHeaderMouseEnter = new SlickEvent('onHeaderMouseEnter', externalPubSub);\r\n this.onHeaderMouseLeave = new SlickEvent('onHeaderMouseLeave', externalPubSub);\r\n this.onHeaderRowCellRendered = new SlickEvent('onHeaderRowCellRendered', externalPubSub);\r\n this.onHeaderRowMouseEnter = new SlickEvent('onHeaderRowMouseEnter', externalPubSub);\r\n this.onHeaderRowMouseLeave = new SlickEvent('onHeaderRowMouseLeave', externalPubSub);\r\n this.onPreHeaderClick = new SlickEvent('onPreHeaderClick', externalPubSub);\r\n this.onPreHeaderContextMenu = new SlickEvent('onPreHeaderContextMenu', externalPubSub);\r\n this.onKeyDown = new SlickEvent('onKeyDown', externalPubSub);\r\n this.onMouseEnter = new SlickEvent('onMouseEnter', externalPubSub);\r\n this.onMouseLeave = new SlickEvent('onMouseLeave', externalPubSub);\r\n this.onRendered = new SlickEvent('onRendered', externalPubSub);\r\n this.onScroll = new SlickEvent('onScroll', externalPubSub);\r\n this.onSelectedRowsChanged = new SlickEvent('onSelectedRowsChanged', externalPubSub);\r\n this.onSetOptions = new SlickEvent('onSetOptions', externalPubSub);\r\n this.onActivateChangedOptions = new SlickEvent('onActivateChangedOptions', externalPubSub);\r\n this.onSort = new SlickEvent('onSort', externalPubSub);\r\n this.onValidationError = new SlickEvent('onValidationError', externalPubSub);\r\n this.onViewportChanged = new SlickEvent<{ grid: SlickGrid; }>('onViewportChanged', externalPubSub);\r\n\r\n this.initialize(options);\r\n }\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // Initialization\r\n\r\n /** Initializes the grid. */\r\n init() {\r\n this.finishInitialization();\r\n }\r\n\r\n /**\r\n * Apply HTML code by 3 different ways depending on what is provided as input and what options are enabled.\r\n * 1. value is an HTMLElement or DocumentFragment, then first empty the target and simply append the HTML to the target element.\r\n * 2. value is string and `enableHtmlRendering` is enabled, then use `target.innerHTML = value;`\r\n * 3. value is string and `enableHtmlRendering` is disabled, then use `target.textContent = value;`\r\n * @param target - target element to apply to\r\n * @param val - input value can be either a string or an HTMLElement\r\n * @param options -\r\n * `emptyTarget`, defaults to true, will empty the target.\r\n * `skipEmptyReassignment`, defaults to true, when enabled it will not try to reapply an empty value when the target is already empty\r\n */\r\n applyHtmlCode(target: HTMLElement, val: string | HTMLElement | DocumentFragment, options?: { emptyTarget?: boolean; skipEmptyReassignment?: boolean; }) {\r\n if (target) {\r\n if (val instanceof HTMLElement || val instanceof DocumentFragment) {\r\n // first empty target and then append new HTML element\r\n const emptyTarget = options?.emptyTarget !== false;\r\n if (emptyTarget) {\r\n Utils.emptyElement(target);\r\n }\r\n target.appendChild(val);\r\n } else {\r\n // when it's already empty and we try to reassign empty, it's probably ok to skip the assignment\r\n const skipEmptyReassignment = options?.skipEmptyReassignment !== false;\r\n if (skipEmptyReassignment && !Utils.isDefined(val) && !target.innerHTML) {\r\n return;\r\n }\r\n\r\n let sanitizedText = val;\r\n if (typeof sanitizedText === 'number' || typeof sanitizedText === 'boolean') {\r\n target.textContent = sanitizedText;\r\n } else {\r\n sanitizedText = this.sanitizeHtmlString(val as string);\r\n\r\n // apply HTML when enableHtmlRendering is enabled but make sure we do have a value (without a value, it will simply use `textContent` to clear text content)\r\n if (this._options.enableHtmlRendering && sanitizedText) {\r\n target.innerHTML = sanitizedText;\r\n } else {\r\n target.textContent = sanitizedText;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected initialize(options: Partial) {\r\n // calculate these only once and share between grid instances\r\n if (options?.mixinDefaults) {\r\n // use provided options and then assign defaults\r\n if (!this._options) { this._options = options as O; }\r\n Utils.applyDefaults(this._options, this._defaults);\r\n } else {\r\n this._options = Utils.extend(true, {}, this._defaults, options);\r\n }\r\n this.scrollThrottle = this.actionThrottle(this.render.bind(this), this._options.scrollRenderThrottling as number);\r\n this.maxSupportedCssHeight = this.maxSupportedCssHeight || this.getMaxSupportedCssHeight();\r\n this.validateAndEnforceOptions();\r\n this._columnDefaults.width = this._options.defaultColumnWidth;\r\n\r\n if (!this._options.suppressCssChangesOnHiddenInit) {\r\n this.cacheCssForHiddenInit();\r\n }\r\n\r\n this.updateColumnProps();\r\n\r\n // validate loaded JavaScript modules against requested options\r\n if (this._options.enableColumnReorder && (!Sortable || !Sortable.create)) {\r\n throw new Error('SlickGrid requires Sortable.js module to be loaded');\r\n }\r\n\r\n this.editController = {\r\n commitCurrentEdit: this.commitCurrentEdit.bind(this),\r\n cancelCurrentEdit: this.cancelCurrentEdit.bind(this),\r\n };\r\n\r\n Utils.emptyElement(this._container);\r\n this._container.style.outline = String(0);\r\n this._container.classList.add(this.uid);\r\n this._container.classList.add('ui-widget');\r\n this._container.setAttribute('role', 'grid');\r\n\r\n const containerStyles = window.getComputedStyle(this._container);\r\n if (!(/relative|absolute|fixed/).test(containerStyles.position)) {\r\n this._container.style.position = 'relative';\r\n }\r\n\r\n this._focusSink = Utils.createDomElement('div', { tabIndex: 0, style: { position: 'fixed', width: '0px', height: '0px', top: '0px', left: '0px', outline: '0px' } }, this._container);\r\n\r\n if (this._options.createTopHeaderPanel) {\r\n this._topHeaderPanelScroller = Utils.createDomElement('div', { className: 'slick-topheader-panel slick-state-default', style: { overflow: 'hidden', position: 'relative' } }, this._container);\r\n this._topHeaderPanelScroller.appendChild(document.createElement('div'));\r\n this._topHeaderPanel = Utils.createDomElement('div', null, this._topHeaderPanelScroller);\r\n this._topHeaderPanelSpacer = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._topHeaderPanelScroller);\r\n\r\n if (!this._options.showTopHeaderPanel) {\r\n Utils.hide(this._topHeaderPanelScroller);\r\n }\r\n }\r\n\r\n // Containers used for scrolling frozen columns and rows\r\n this._paneHeaderL = Utils.createDomElement('div', { className: 'slick-pane slick-pane-header slick-pane-left', tabIndex: 0 }, this._container);\r\n this._paneHeaderR = Utils.createDomElement('div', { className: 'slick-pane slick-pane-header slick-pane-right', tabIndex: 0 }, this._container);\r\n this._paneTopL = Utils.createDomElement('div', { className: 'slick-pane slick-pane-top slick-pane-left', tabIndex: 0 }, this._container);\r\n this._paneTopR = Utils.createDomElement('div', { className: 'slick-pane slick-pane-top slick-pane-right', tabIndex: 0 }, this._container);\r\n this._paneBottomL = Utils.createDomElement('div', { className: 'slick-pane slick-pane-bottom slick-pane-left', tabIndex: 0 }, this._container);\r\n this._paneBottomR = Utils.createDomElement('div', { className: 'slick-pane slick-pane-bottom slick-pane-right', tabIndex: 0 }, this._container);\r\n\r\n if (this._options.createPreHeaderPanel) {\r\n this._preHeaderPanelScroller = Utils.createDomElement('div', { className: 'slick-preheader-panel ui-state-default slick-state-default', style: { overflow: 'hidden', position: 'relative' } }, this._paneHeaderL);\r\n this._preHeaderPanelScroller.appendChild(document.createElement('div'));\r\n this._preHeaderPanel = Utils.createDomElement('div', null, this._preHeaderPanelScroller);\r\n this._preHeaderPanelSpacer = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._preHeaderPanelScroller);\r\n\r\n this._preHeaderPanelScrollerR = Utils.createDomElement('div', { className: 'slick-preheader-panel ui-state-default slick-state-default', style: { overflow: 'hidden', position: 'relative' } }, this._paneHeaderR);\r\n this._preHeaderPanelR = Utils.createDomElement('div', null, this._preHeaderPanelScrollerR);\r\n this._preHeaderPanelSpacerR = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._preHeaderPanelScrollerR);\r\n\r\n if (!this._options.showPreHeaderPanel) {\r\n Utils.hide(this._preHeaderPanelScroller);\r\n Utils.hide(this._preHeaderPanelScrollerR);\r\n }\r\n }\r\n\r\n // Append the header scroller containers\r\n this._headerScrollerL = Utils.createDomElement('div', { className: 'slick-header ui-state-default slick-state-default slick-header-left' }, this._paneHeaderL);\r\n this._headerScrollerR = Utils.createDomElement('div', { className: 'slick-header ui-state-default slick-state-default slick-header-right' }, this._paneHeaderR);\r\n\r\n // Cache the header scroller containers\r\n this._headerScroller.push(this._headerScrollerL);\r\n this._headerScroller.push(this._headerScrollerR);\r\n\r\n // Append the columnn containers to the headers\r\n this._headerL = Utils.createDomElement('div', { className: 'slick-header-columns slick-header-columns-left', role: 'row', style: { left: '-1000px' } }, this._headerScrollerL);\r\n this._headerR = Utils.createDomElement('div', { className: 'slick-header-columns slick-header-columns-right', role: 'row', style: { left: '-1000px' } }, this._headerScrollerR);\r\n\r\n // Cache the header columns\r\n this._headers = [this._headerL, this._headerR];\r\n\r\n this._headerRowScrollerL = Utils.createDomElement('div', { className: 'slick-headerrow ui-state-default slick-state-default' }, this._paneTopL);\r\n this._headerRowScrollerR = Utils.createDomElement('div', { className: 'slick-headerrow ui-state-default slick-state-default' }, this._paneTopR);\r\n\r\n this._headerRowScroller = [this._headerRowScrollerL, this._headerRowScrollerR];\r\n\r\n this._headerRowSpacerL = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._headerRowScrollerL);\r\n this._headerRowSpacerR = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._headerRowScrollerR);\r\n\r\n this._headerRowL = Utils.createDomElement('div', { className: 'slick-headerrow-columns slick-headerrow-columns-left' }, this._headerRowScrollerL);\r\n this._headerRowR = Utils.createDomElement('div', { className: 'slick-headerrow-columns slick-headerrow-columns-right' }, this._headerRowScrollerR);\r\n\r\n this._headerRows = [this._headerRowL, this._headerRowR];\r\n\r\n // Append the top panel scroller\r\n this._topPanelScrollerL = Utils.createDomElement('div', { className: 'slick-top-panel-scroller ui-state-default slick-state-default' }, this._paneTopL);\r\n this._topPanelScrollerR = Utils.createDomElement('div', { className: 'slick-top-panel-scroller ui-state-default slick-state-default' }, this._paneTopR);\r\n\r\n this._topPanelScrollers = [this._topPanelScrollerL, this._topPanelScrollerR];\r\n\r\n // Append the top panel\r\n this._topPanelL = Utils.createDomElement('div', { className: 'slick-top-panel', style: { width: '10000px' } }, this._topPanelScrollerL);\r\n this._topPanelR = Utils.createDomElement('div', { className: 'slick-top-panel', style: { width: '10000px' } }, this._topPanelScrollerR);\r\n\r\n this._topPanels = [this._topPanelL, this._topPanelR];\r\n\r\n if (!this._options.showColumnHeader) {\r\n this._headerScroller.forEach((el) => {\r\n Utils.hide(el);\r\n });\r\n }\r\n\r\n if (!this._options.showTopPanel) {\r\n this._topPanelScrollers.forEach((scroller) => {\r\n Utils.hide(scroller);\r\n });\r\n }\r\n\r\n if (!this._options.showHeaderRow) {\r\n this._headerRowScroller.forEach((scroller) => {\r\n Utils.hide(scroller);\r\n });\r\n }\r\n\r\n // Append the viewport containers\r\n this._viewportTopL = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-top slick-viewport-left', tabIndex: 0 }, this._paneTopL);\r\n this._viewportTopR = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-top slick-viewport-right', tabIndex: 0 }, this._paneTopR);\r\n this._viewportBottomL = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-bottom slick-viewport-left', tabIndex: 0 }, this._paneBottomL);\r\n this._viewportBottomR = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-bottom slick-viewport-right', tabIndex: 0 }, this._paneBottomR);\r\n\r\n // Cache the viewports\r\n this._viewport = [this._viewportTopL, this._viewportTopR, this._viewportBottomL, this._viewportBottomR];\r\n if (this._options.viewportClass) {\r\n this._viewport.forEach((view) => {\r\n view.classList.add(...Utils.classNameToList((this._options.viewportClass)));\r\n });\r\n }\r\n\r\n // Default the active viewport to the top left\r\n this._activeViewportNode = this._viewportTopL;\r\n\r\n // Append the canvas containers\r\n this._canvasTopL = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-top grid-canvas-left', tabIndex: 0 }, this._viewportTopL);\r\n this._canvasTopR = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-top grid-canvas-right', tabIndex: 0 }, this._viewportTopR);\r\n this._canvasBottomL = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-bottom grid-canvas-left', tabIndex: 0 }, this._viewportBottomL);\r\n this._canvasBottomR = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-bottom grid-canvas-right', tabIndex: 0 }, this._viewportBottomR);\r\n\r\n // Cache the canvases\r\n this._canvas = [this._canvasTopL, this._canvasTopR, this._canvasBottomL, this._canvasBottomR];\r\n\r\n this.scrollbarDimensions = this.scrollbarDimensions || this.measureScrollbar();\r\n\r\n // Default the active canvas to the top left\r\n this._activeCanvasNode = this._canvasTopL;\r\n\r\n // top-header\r\n if (this._topHeaderPanelSpacer) {\r\n Utils.width(this._topHeaderPanelSpacer, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n }\r\n\r\n // pre-header\r\n if (this._preHeaderPanelSpacer) {\r\n Utils.width(this._preHeaderPanelSpacer, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n }\r\n\r\n this._headers.forEach((el) => {\r\n Utils.width(el, this.getHeadersWidth());\r\n });\r\n\r\n Utils.width(this._headerRowSpacerL, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n Utils.width(this._headerRowSpacerR, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n\r\n // footer Row\r\n if (this._options.createFooterRow) {\r\n this._footerRowScrollerR = Utils.createDomElement('div', { className: 'slick-footerrow ui-state-default slick-state-default' }, this._paneTopR);\r\n this._footerRowScrollerL = Utils.createDomElement('div', { className: 'slick-footerrow ui-state-default slick-state-default' }, this._paneTopL);\r\n\r\n this._footerRowScroller = [this._footerRowScrollerL, this._footerRowScrollerR];\r\n\r\n this._footerRowSpacerL = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._footerRowScrollerL);\r\n Utils.width(this._footerRowSpacerL, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n this._footerRowSpacerR = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._footerRowScrollerR);\r\n Utils.width(this._footerRowSpacerR, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n\r\n this._footerRowL = Utils.createDomElement('div', { className: 'slick-footerrow-columns slick-footerrow-columns-left' }, this._footerRowScrollerL);\r\n this._footerRowR = Utils.createDomElement('div', { className: 'slick-footerrow-columns slick-footerrow-columns-right' }, this._footerRowScrollerR);\r\n\r\n this._footerRow = [this._footerRowL, this._footerRowR];\r\n\r\n if (!this._options.showFooterRow) {\r\n this._footerRowScroller.forEach((scroller) => {\r\n Utils.hide(scroller);\r\n });\r\n }\r\n }\r\n\r\n this._focusSink2 = this._focusSink.cloneNode(true) as HTMLDivElement;\r\n this._container.appendChild(this._focusSink2);\r\n\r\n if (!this._options.explicitInitialization) {\r\n this.finishInitialization();\r\n }\r\n }\r\n\r\n protected finishInitialization() {\r\n if (!this.initialized) {\r\n this.initialized = true;\r\n\r\n this.getViewportWidth();\r\n this.getViewportHeight();\r\n\r\n // header columns and cells may have different padding/border skewing width calculations (box-sizing, hello?)\r\n // calculate the diff so we can set consistent sizes\r\n this.measureCellPaddingAndBorder();\r\n\r\n // for usability reasons, all text selection in SlickGrid is disabled\r\n // with the exception of input and textarea elements (selection must\r\n // be enabled there so that editors work as expected); note that\r\n // selection in grid cells (grid body) is already unavailable in\r\n // all browsers except IE\r\n this.disableSelection(this._headers); // disable all text selection in header (including input and textarea)\r\n\r\n if (!this._options.enableTextSelectionOnCells) {\r\n // disable text selection in grid cells except in input and textarea elements\r\n // (this is IE-specific, because selectstart event will only fire in IE)\r\n this._viewport.forEach((view) => {\r\n this._bindingEventService.bind(view, 'selectstart', (event) => {\r\n if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\r\n return;\r\n }\r\n });\r\n });\r\n }\r\n\r\n this.setFrozenOptions();\r\n this.setPaneVisibility();\r\n this.setScroller();\r\n this.setOverflow();\r\n\r\n this.updateColumnCaches();\r\n this.createColumnHeaders();\r\n this.createColumnFooter();\r\n this.setupColumnSort();\r\n this.createCssRules();\r\n this.resizeCanvas();\r\n this.bindAncestorScrollEvents();\r\n\r\n this._bindingEventService.bind(this._container, 'resize', this.resizeCanvas.bind(this));\r\n this._viewport.forEach((view) => {\r\n this._bindingEventService.bind(view, 'scroll', this.handleScroll.bind(this));\r\n });\r\n\r\n if (this._options.enableMouseWheelScrollHandler) {\r\n this._viewport.forEach((view) => {\r\n this.slickMouseWheelInstances.push(MouseWheel({\r\n element: view,\r\n onMouseWheel: this.handleMouseWheel.bind(this)\r\n }));\r\n });\r\n }\r\n\r\n this._headerScroller.forEach((el) => {\r\n this._bindingEventService.bind(el, 'contextmenu', this.handleHeaderContextMenu.bind(this) as EventListener);\r\n this._bindingEventService.bind(el, 'click', this.handleHeaderClick.bind(this) as EventListener);\r\n });\r\n\r\n this._headerRowScroller.forEach((scroller) => {\r\n this._bindingEventService.bind(scroller, 'scroll', this.handleHeaderRowScroll.bind(this) as EventListener);\r\n });\r\n\r\n if (this._options.createFooterRow) {\r\n this._footerRow.forEach((footer) => {\r\n this._bindingEventService.bind(footer, 'contextmenu', this.handleFooterContextMenu.bind(this) as EventListener);\r\n this._bindingEventService.bind(footer, 'click', this.handleFooterClick.bind(this) as EventListener);\r\n });\r\n\r\n this._footerRowScroller.forEach((scroller) => {\r\n this._bindingEventService.bind(scroller, 'scroll', this.handleFooterRowScroll.bind(this) as EventListener);\r\n });\r\n }\r\n\r\n if (this._options.createTopHeaderPanel) {\r\n this._bindingEventService.bind(this._topHeaderPanelScroller, 'scroll', this.handleTopHeaderPanelScroll.bind(this) as EventListener);\r\n }\r\n\r\n if (this._options.createPreHeaderPanel) {\r\n this._bindingEventService.bind(this._preHeaderPanelScroller, 'scroll', this.handlePreHeaderPanelScroll.bind(this) as EventListener);\r\n this._bindingEventService.bind(this._preHeaderPanelScroller, 'contextmenu', this.handlePreHeaderContextMenu.bind(this) as EventListener);\r\n this._bindingEventService.bind(this._preHeaderPanelScrollerR, 'contextmenu', this.handlePreHeaderContextMenu.bind(this) as EventListener);\r\n this._bindingEventService.bind(this._preHeaderPanelScroller, 'click', this.handlePreHeaderClick.bind(this) as EventListener);\r\n this._bindingEventService.bind(this._preHeaderPanelScrollerR, 'click', this.handlePreHeaderClick.bind(this) as EventListener);\r\n }\r\n\r\n this._bindingEventService.bind(this._focusSink, 'keydown', this.handleKeyDown.bind(this) as EventListener);\r\n this._bindingEventService.bind(this._focusSink2, 'keydown', this.handleKeyDown.bind(this) as EventListener);\r\n\r\n this._canvas.forEach((element) => {\r\n this._bindingEventService.bind(element, 'keydown', this.handleKeyDown.bind(this) as EventListener);\r\n this._bindingEventService.bind(element, 'click', this.handleClick.bind(this) as EventListener);\r\n this._bindingEventService.bind(element, 'dblclick', this.handleDblClick.bind(this) as EventListener);\r\n this._bindingEventService.bind(element, 'contextmenu', this.handleContextMenu.bind(this) as EventListener);\r\n this._bindingEventService.bind(element, 'mouseover', this.handleCellMouseOver.bind(this) as EventListener);\r\n this._bindingEventService.bind(element, 'mouseout', this.handleCellMouseOut.bind(this) as EventListener);\r\n });\r\n\r\n if (Draggable) {\r\n this.slickDraggableInstance = Draggable({\r\n containerElement: this._container,\r\n allowDragFrom: 'div.slick-cell',\r\n // the slick cell parent must always contain `.dnd` and/or `.cell-reorder` class to be identified as draggable\r\n allowDragFromClosest: 'div.slick-cell.dnd, div.slick-cell.cell-reorder',\r\n preventDragFromKeys: this._options.preventDragFromKeys,\r\n onDragInit: this.handleDragInit.bind(this),\r\n onDragStart: this.handleDragStart.bind(this),\r\n onDrag: this.handleDrag.bind(this),\r\n onDragEnd: this.handleDragEnd.bind(this)\r\n });\r\n }\r\n\r\n if (!this._options.suppressCssChangesOnHiddenInit) {\r\n this.restoreCssFromHiddenInit();\r\n }\r\n }\r\n }\r\n\r\n /** handles \"display:none\" on container or container parents, related to issue: https://github.com/6pac/SlickGrid/issues/568 */\r\n cacheCssForHiddenInit() {\r\n this._hiddenParents = Utils.parents(this._container, ':hidden') as HTMLElement[];\r\n this._hiddenParents.forEach(el => {\r\n const old: Partial = {};\r\n Object.keys(this.cssShow).forEach(name => {\r\n if (this.cssShow) {\r\n old[name as any] = el.style[name as 'position' | 'visibility' | 'display'];\r\n el.style[name as any] = this.cssShow[name as 'position' | 'visibility' | 'display'];\r\n }\r\n });\r\n this.oldProps.push(old);\r\n });\r\n }\r\n\r\n restoreCssFromHiddenInit() {\r\n // finish handle display:none on container or container parents\r\n // - put values back the way they were\r\n let i = 0;\r\n if (this._hiddenParents) {\r\n this._hiddenParents.forEach(el => {\r\n const old = this.oldProps[i++];\r\n Object.keys(this.cssShow).forEach(name => {\r\n if (this.cssShow) {\r\n el.style[name as CSSStyleDeclarationWritable] = (old as any)[name];\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n protected hasFrozenColumns() {\r\n return this._options.frozenColumn! > -1;\r\n }\r\n\r\n /** Register an external Plugin */\r\n registerPlugin(plugin: T) {\r\n this.plugins.unshift(plugin);\r\n plugin.init(this as unknown as SlickGridModel);\r\n }\r\n\r\n /** Unregister (destroy) an external Plugin */\r\n unregisterPlugin(plugin: SlickPlugin) {\r\n for (let i = this.plugins.length; i >= 0; i--) {\r\n if (this.plugins[i] === plugin) {\r\n this.plugins[i]?.destroy();\r\n this.plugins.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /** Get a Plugin (addon) by its name */\r\n getPluginByName

(name: string) {\r\n for (let i = this.plugins.length - 1; i >= 0; i--) {\r\n if (this.plugins[i]?.pluginName === name) {\r\n return this.plugins[i] as P;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Unregisters a current selection model and registers a new one. See the definition of SelectionModel for more information.\r\n * @param {Object} selectionModel A SelectionModel.\r\n */\r\n setSelectionModel(model: SelectionModel) {\r\n if (this.selectionModel) {\r\n this.selectionModel.onSelectedRangesChanged.unsubscribe(this.handleSelectedRangesChanged.bind(this));\r\n if (this.selectionModel.destroy) {\r\n this.selectionModel.destroy();\r\n }\r\n }\r\n\r\n this.selectionModel = model;\r\n if (this.selectionModel) {\r\n this.selectionModel.init(this as unknown as SlickGridModel);\r\n this.selectionModel.onSelectedRangesChanged.subscribe(this.handleSelectedRangesChanged.bind(this));\r\n }\r\n }\r\n\r\n /** Returns the current SelectionModel. See here for more information about SelectionModels. */\r\n getSelectionModel() {\r\n return this.selectionModel;\r\n }\r\n\r\n /** Get Grid Canvas Node DOM Element */\r\n getCanvasNode(columnIdOrIdx?: number | string, rowIndex?: number) {\r\n return this._getContainerElement(this.getCanvases(), columnIdOrIdx, rowIndex) as HTMLDivElement;\r\n }\r\n\r\n /** Get the canvas DOM element */\r\n getActiveCanvasNode(e?: Event | SlickEventData_) {\r\n if (e === undefined) {\r\n return this._activeCanvasNode;\r\n }\r\n\r\n if (e instanceof SlickEventData) {\r\n e = e.getNativeEvent();\r\n }\r\n\r\n this._activeCanvasNode = (e as any)?.target.closest('.grid-canvas');\r\n return this._activeCanvasNode;\r\n }\r\n\r\n /** Get the canvas DOM element */\r\n getCanvases() {\r\n return this._canvas;\r\n }\r\n\r\n /** Get the Viewport DOM node element */\r\n getViewportNode(columnIdOrIdx?: number | string, rowIndex?: number) {\r\n return this._getContainerElement(this.getViewports(), columnIdOrIdx, rowIndex);\r\n }\r\n\r\n /** Get all the Viewport node elements */\r\n getViewports() {\r\n return this._viewport;\r\n }\r\n\r\n getActiveViewportNode(e: Event | SlickEventData_) {\r\n this.setActiveViewportNode(e);\r\n\r\n return this._activeViewportNode;\r\n }\r\n\r\n /** Sets an active viewport node */\r\n setActiveViewportNode(e: Event | SlickEventData_) {\r\n if (e instanceof SlickEventData) {\r\n e = e.getNativeEvent();\r\n }\r\n this._activeViewportNode = (e as any)?.target.closest('.slick-viewport');\r\n return this._activeViewportNode;\r\n }\r\n\r\n protected _getContainerElement(targetContainers: HTMLElement[], columnIdOrIdx?: number | string, rowIndex?: number) {\r\n if (!targetContainers) { return; }\r\n if (!columnIdOrIdx) { columnIdOrIdx = 0; }\r\n if (!rowIndex) { rowIndex = 0; }\r\n\r\n const idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n\r\n const isBottomSide = this.hasFrozenRows && rowIndex >= this.actualFrozenRow + (this._options.frozenBottom ? 0 : 1);\r\n const isRightSide = this.hasFrozenColumns() && idx > this._options.frozenColumn!;\r\n\r\n return targetContainers[(isBottomSide ? 2 : 0) + (isRightSide ? 1 : 0)];\r\n }\r\n\r\n protected measureScrollbar() {\r\n let className = '';\r\n this._viewport.forEach(v => className += v.className);\r\n const outerdiv = Utils.createDomElement('div', { className, style: { position: 'absolute', top: '-10000px', left: '-10000px', overflow: 'auto', width: '100px', height: '100px' } }, document.body);\r\n const innerdiv = Utils.createDomElement('div', { style: { width: '200px', height: '200px', overflow: 'auto' } }, outerdiv);\r\n const dim = {\r\n width: outerdiv.offsetWidth - outerdiv.clientWidth,\r\n height: outerdiv.offsetHeight - outerdiv.clientHeight\r\n };\r\n innerdiv.remove();\r\n outerdiv.remove();\r\n return dim;\r\n }\r\n\r\n /** Get the headers width in pixel */\r\n getHeadersWidth() {\r\n this.headersWidth = this.headersWidthL = this.headersWidthR = 0;\r\n const includeScrollbar = !this._options.autoHeight;\r\n\r\n let i = 0;\r\n const ii = this.columns.length;\r\n for (i = 0; i < ii; i++) {\r\n if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n const width = this.columns[i].width;\r\n\r\n if ((this._options.frozenColumn!) > -1 && (i > this._options.frozenColumn!)) {\r\n this.headersWidthR += width || 0;\r\n } else {\r\n this.headersWidthL += width || 0;\r\n }\r\n }\r\n\r\n if (includeScrollbar) {\r\n if ((this._options.frozenColumn!) > -1 && (i > this._options.frozenColumn!)) {\r\n this.headersWidthR += this.scrollbarDimensions?.width ?? 0;\r\n } else {\r\n this.headersWidthL += this.scrollbarDimensions?.width ?? 0;\r\n }\r\n }\r\n\r\n if (this.hasFrozenColumns()) {\r\n this.headersWidthL = this.headersWidthL + 1000;\r\n\r\n this.headersWidthR = Math.max(this.headersWidthR, this.viewportW) + this.headersWidthL;\r\n this.headersWidthR += this.scrollbarDimensions?.width ?? 0;\r\n } else {\r\n this.headersWidthL += this.scrollbarDimensions?.width ?? 0;\r\n this.headersWidthL = Math.max(this.headersWidthL, this.viewportW) + 1000;\r\n }\r\n\r\n this.headersWidth = this.headersWidthL + this.headersWidthR;\r\n return Math.max(this.headersWidth, this.viewportW) + 1000;\r\n }\r\n\r\n /** Get the grid canvas width */\r\n getCanvasWidth(): number {\r\n const availableWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n let i = this.columns.length;\r\n\r\n this.canvasWidthL = this.canvasWidthR = 0;\r\n\r\n while (i--) {\r\n if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n if (this.hasFrozenColumns() && (i > this._options.frozenColumn!)) {\r\n this.canvasWidthR += this.columns[i].width || 0;\r\n } else {\r\n this.canvasWidthL += this.columns[i].width || 0;\r\n }\r\n }\r\n let totalRowWidth = this.canvasWidthL + this.canvasWidthR;\r\n if (this._options.fullWidthRows) {\r\n const extraWidth = Math.max(totalRowWidth, availableWidth) - totalRowWidth;\r\n if (extraWidth > 0) {\r\n totalRowWidth += extraWidth;\r\n if (this.hasFrozenColumns()) {\r\n this.canvasWidthR += extraWidth;\r\n } else {\r\n this.canvasWidthL += extraWidth;\r\n }\r\n }\r\n }\r\n return totalRowWidth;\r\n }\r\n\r\n protected updateCanvasWidth(forceColumnWidthsUpdate?: boolean) {\r\n const oldCanvasWidth = this.canvasWidth;\r\n const oldCanvasWidthL = this.canvasWidthL;\r\n const oldCanvasWidthR = this.canvasWidthR;\r\n this.canvasWidth = this.getCanvasWidth();\r\n\r\n if (this._options.createTopHeaderPanel) {\r\n Utils.width(this._topHeaderPanel, this._options.topHeaderPanelWidth ?? this.canvasWidth);\r\n }\r\n\r\n const widthChanged = this.canvasWidth !== oldCanvasWidth || this.canvasWidthL !== oldCanvasWidthL || this.canvasWidthR !== oldCanvasWidthR;\r\n\r\n if (widthChanged || this.hasFrozenColumns() || this.hasFrozenRows) {\r\n Utils.width(this._canvasTopL, this.canvasWidthL);\r\n\r\n this.getHeadersWidth();\r\n\r\n Utils.width(this._headerL, this.headersWidthL);\r\n Utils.width(this._headerR, this.headersWidthR);\r\n\r\n if (this.hasFrozenColumns()) {\r\n const cWidth = Utils.width(this._container) || 0;\r\n if (cWidth > 0 && this.canvasWidthL > cWidth && this._options.throwWhenFrozenNotAllViewable) {\r\n throw new Error('[SlickGrid] Frozen columns cannot be wider than the actual grid container width. '\r\n + 'Make sure to have less columns freezed or make your grid container wider');\r\n }\r\n Utils.width(this._canvasTopR, this.canvasWidthR);\r\n\r\n Utils.width(this._paneHeaderL, this.canvasWidthL);\r\n Utils.setStyleSize(this._paneHeaderR, 'left', this.canvasWidthL);\r\n Utils.setStyleSize(this._paneHeaderR, 'width', this.viewportW - this.canvasWidthL);\r\n\r\n Utils.width(this._paneTopL, this.canvasWidthL);\r\n Utils.setStyleSize(this._paneTopR, 'left', this.canvasWidthL);\r\n Utils.width(this._paneTopR, this.viewportW - this.canvasWidthL);\r\n\r\n Utils.width(this._headerRowScrollerL, this.canvasWidthL);\r\n Utils.width(this._headerRowScrollerR, this.viewportW - this.canvasWidthL);\r\n\r\n Utils.width(this._headerRowL, this.canvasWidthL);\r\n Utils.width(this._headerRowR, this.canvasWidthR);\r\n\r\n if (this._options.createFooterRow) {\r\n Utils.width(this._footerRowScrollerL, this.canvasWidthL);\r\n Utils.width(this._footerRowScrollerR, this.viewportW - this.canvasWidthL);\r\n\r\n Utils.width(this._footerRowL, this.canvasWidthL);\r\n Utils.width(this._footerRowR, this.canvasWidthR);\r\n }\r\n if (this._options.createPreHeaderPanel) {\r\n Utils.width(this._preHeaderPanel, this._options.preHeaderPanelWidth ?? this.canvasWidth);\r\n }\r\n Utils.width(this._viewportTopL, this.canvasWidthL);\r\n Utils.width(this._viewportTopR, this.viewportW - this.canvasWidthL);\r\n\r\n if (this.hasFrozenRows) {\r\n Utils.width(this._paneBottomL, this.canvasWidthL);\r\n Utils.setStyleSize(this._paneBottomR, 'left', this.canvasWidthL);\r\n\r\n Utils.width(this._viewportBottomL, this.canvasWidthL);\r\n Utils.width(this._viewportBottomR, this.viewportW - this.canvasWidthL);\r\n\r\n Utils.width(this._canvasBottomL, this.canvasWidthL);\r\n Utils.width(this._canvasBottomR, this.canvasWidthR);\r\n }\r\n } else {\r\n Utils.width(this._paneHeaderL, '100%');\r\n Utils.width(this._paneTopL, '100%');\r\n Utils.width(this._headerRowScrollerL, '100%');\r\n Utils.width(this._headerRowL, this.canvasWidth);\r\n\r\n if (this._options.createFooterRow) {\r\n Utils.width(this._footerRowScrollerL, '100%');\r\n Utils.width(this._footerRowL, this.canvasWidth);\r\n }\r\n\r\n if (this._options.createPreHeaderPanel) {\r\n Utils.width(this._preHeaderPanel, this._options.preHeaderPanelWidth ?? this.canvasWidth);\r\n }\r\n Utils.width(this._viewportTopL, '100%');\r\n\r\n if (this.hasFrozenRows) {\r\n Utils.width(this._viewportBottomL, '100%');\r\n Utils.width(this._canvasBottomL, this.canvasWidthL);\r\n }\r\n }\r\n }\r\n\r\n this.viewportHasHScroll = (this.canvasWidth >= this.viewportW - (this.scrollbarDimensions?.width ?? 0));\r\n\r\n Utils.width(this._headerRowSpacerL, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n Utils.width(this._headerRowSpacerR, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n\r\n if (this._options.createFooterRow) {\r\n Utils.width(this._footerRowSpacerL, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n Utils.width(this._footerRowSpacerR, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n }\r\n\r\n if (widthChanged || forceColumnWidthsUpdate) {\r\n this.applyColumnWidths();\r\n }\r\n }\r\n\r\n protected disableSelection(target: HTMLElement[]) {\r\n target.forEach((el) => {\r\n el.setAttribute('unselectable', 'on');\r\n (el.style as any).mozUserSelect = 'none';\r\n this._bindingEventService.bind(el, 'selectstart', () => false);\r\n });\r\n }\r\n\r\n protected getMaxSupportedCssHeight() {\r\n let supportedHeight = 1000000;\r\n // FF reports the height back but still renders blank after ~6M px\r\n // let testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? 6000000 : 1000000000;\r\n const testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? this._options.ffMaxSupportedCssHeight : this._options.maxSupportedCssHeight;\r\n const div = Utils.createDomElement('div', { style: { display: 'hidden' } }, document.body);\r\n\r\n while (true) {\r\n const test = supportedHeight * 2;\r\n Utils.height(div, test);\r\n const height = Utils.height(div);\r\n\r\n if (test > testUpTo! || height !== test) {\r\n break;\r\n } else {\r\n supportedHeight = test;\r\n }\r\n }\r\n\r\n div.remove();\r\n return supportedHeight;\r\n }\r\n\r\n /** Get grid unique identifier */\r\n getUID() {\r\n return this.uid;\r\n }\r\n\r\n /** Get Header Column Width Difference in pixel */\r\n getHeaderColumnWidthDiff() {\r\n return this.headerColumnWidthDiff;\r\n }\r\n\r\n /** Get scrollbar dimensions */\r\n getScrollbarDimensions() {\r\n return this.scrollbarDimensions;\r\n }\r\n\r\n /** Get the displayed scrollbar dimensions */\r\n getDisplayedScrollbarDimensions() {\r\n return {\r\n width: this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0,\r\n height: this.viewportHasHScroll ? (this.scrollbarDimensions?.height ?? 0) : 0\r\n };\r\n }\r\n\r\n /** Get the absolute column minimum width */\r\n getAbsoluteColumnMinWidth(): number {\r\n return this.absoluteColumnMinWidth;\r\n }\r\n\r\n getPubSubService(): BasePubSub | undefined {\r\n return this._pubSubService;\r\n }\r\n\r\n // TODO: this is static. need to handle page mutation.\r\n protected bindAncestorScrollEvents() {\r\n let elem: HTMLElement | null = (this.hasFrozenRows && !this._options.frozenBottom) ? this._canvasBottomL : this._canvasTopL;\r\n while ((elem = elem!.parentNode as HTMLElement) !== document.body && elem) {\r\n // bind to scroll containers only\r\n if (elem === this._viewportTopL || elem.scrollWidth !== elem.clientWidth || elem.scrollHeight !== elem.clientHeight) {\r\n this._boundAncestors.push(elem);\r\n this._bindingEventService.bind(elem, 'scroll', this.handleActiveCellPositionChange.bind(this));\r\n }\r\n }\r\n }\r\n\r\n protected unbindAncestorScrollEvents() {\r\n this._boundAncestors.forEach((ancestor) => {\r\n this._bindingEventService.unbindByEventName(ancestor, 'scroll');\r\n });\r\n this._boundAncestors = [];\r\n }\r\n\r\n /**\r\n * Updates an existing column definition and a corresponding header DOM element with the new title and tooltip.\r\n * @param {Number|String} columnId Column id.\r\n * @param {string | HTMLElement | DocumentFragment} [title] New column name.\r\n * @param {String} [toolTip] New column tooltip.\r\n */\r\n updateColumnHeader(columnId: number | string, title?: string | HTMLElement | DocumentFragment, toolTip?: string) {\r\n if (this.initialized) {\r\n const idx = this.getColumnIndex(columnId);\r\n if (!Utils.isDefined(idx)) {\r\n return;\r\n }\r\n\r\n const columnDef = this.columns[idx];\r\n const header: HTMLElement | undefined = this.getColumnByIndex(idx);\r\n if (header) {\r\n if (title !== undefined) {\r\n this.columns[idx].name = title;\r\n }\r\n if (toolTip !== undefined) {\r\n this.columns[idx].toolTip = toolTip;\r\n }\r\n\r\n this.trigger(this.onBeforeHeaderCellDestroy, {\r\n node: header,\r\n column: columnDef,\r\n grid: this\r\n });\r\n\r\n header.setAttribute('title', toolTip || '');\r\n if (title !== undefined) {\r\n this.applyHtmlCode(header.children[0] as HTMLElement, title);\r\n }\r\n\r\n this.trigger(this.onHeaderCellRendered, {\r\n node: header,\r\n column: columnDef,\r\n grid: this\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the Header DOM element\r\n * @param {C} columnDef - column definition\r\n */\r\n getHeader(columnDef: C) {\r\n if (!columnDef) {\r\n return this.hasFrozenColumns() ? this._headers : this._headerL;\r\n }\r\n const idx = this.getColumnIndex(columnDef.id);\r\n return this.hasFrozenColumns() ? ((idx <= this._options.frozenColumn!) ? this._headerL : this._headerR) : this._headerL;\r\n }\r\n\r\n /**\r\n * Get a specific Header Column DOM element by its column Id or index\r\n * @param {Number|String} columnIdOrIdx - column Id or index\r\n */\r\n getHeaderColumn(columnIdOrIdx: number | string) {\r\n const idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n const targetHeader = this.hasFrozenColumns() ? ((idx <= this._options.frozenColumn!) ? this._headerL : this._headerR) : this._headerL;\r\n const targetIndex = this.hasFrozenColumns() ? ((idx <= this._options.frozenColumn!) ? idx : idx - this._options.frozenColumn! - 1) : idx;\r\n\r\n return targetHeader.children[targetIndex] as HTMLDivElement;\r\n }\r\n\r\n /** Get the Header Row DOM element */\r\n getHeaderRow() {\r\n return this.hasFrozenColumns() ? this._headerRows : this._headerRows[0];\r\n }\r\n\r\n /** Get the Footer DOM element */\r\n getFooterRow() {\r\n return this.hasFrozenColumns() ? this._footerRow : this._footerRow[0];\r\n }\r\n\r\n /** @alias `getPreHeaderPanelLeft` */\r\n getPreHeaderPanel() {\r\n return this._preHeaderPanel;\r\n }\r\n\r\n /** Get the Pre-Header Panel Left DOM node element */\r\n getPreHeaderPanelLeft() {\r\n return this._preHeaderPanel;\r\n }\r\n\r\n /** Get the Pre-Header Panel Right DOM node element */\r\n getPreHeaderPanelRight() {\r\n return this._preHeaderPanelR;\r\n }\r\n\r\n /** Get the Top-Header Panel DOM node element */\r\n getTopHeaderPanel() {\r\n return this._topHeaderPanel;\r\n }\r\n\r\n /**\r\n * Get Header Row Column DOM element by its column Id or index\r\n * @param {Number|String} columnIdOrIdx - column Id or index\r\n */\r\n getHeaderRowColumn(columnIdOrIdx: number | string) {\r\n let idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n let headerRowTarget: HTMLDivElement;\r\n\r\n if (this.hasFrozenColumns()) {\r\n if (idx <= this._options.frozenColumn!) {\r\n headerRowTarget = this._headerRowL;\r\n } else {\r\n headerRowTarget = this._headerRowR;\r\n idx -= this._options.frozenColumn! + 1;\r\n }\r\n } else {\r\n headerRowTarget = this._headerRowL;\r\n }\r\n\r\n return headerRowTarget.children[idx] as HTMLDivElement;\r\n }\r\n\r\n /**\r\n * Get the Footer Row Column DOM element by its column Id or index\r\n * @param {Number|String} columnIdOrIdx - column Id or index\r\n */\r\n getFooterRowColumn(columnIdOrIdx: number | string) {\r\n let idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n let footerRowTarget: HTMLDivElement;\r\n\r\n if (this.hasFrozenColumns()) {\r\n if (idx <= this._options.frozenColumn!) {\r\n footerRowTarget = this._footerRowL;\r\n } else {\r\n footerRowTarget = this._footerRowR;\r\n\r\n idx -= this._options.frozenColumn! + 1;\r\n }\r\n } else {\r\n footerRowTarget = this._footerRowL;\r\n }\r\n\r\n return footerRowTarget.children[idx] as HTMLDivElement;\r\n }\r\n\r\n protected createColumnFooter() {\r\n if (this._options.createFooterRow) {\r\n this._footerRow.forEach((footer) => {\r\n const columnElements = footer.querySelectorAll('.slick-footerrow-column');\r\n columnElements.forEach((column) => {\r\n const columnDef = Utils.storage.get(column, 'column');\r\n this.trigger(this.onBeforeFooterRowCellDestroy, {\r\n node: column,\r\n column: columnDef,\r\n grid: this\r\n });\r\n });\r\n });\r\n\r\n Utils.emptyElement(this._footerRowL);\r\n Utils.emptyElement(this._footerRowR);\r\n\r\n for (let i = 0; i < this.columns.length; i++) {\r\n const m = this.columns[i];\r\n if (!m || m.hidden) { continue; }\r\n\r\n const footerRowCell = Utils.createDomElement('div', { className: `ui-state-default slick-state-default slick-footerrow-column l${i} r${i}` }, this.hasFrozenColumns() && (i > this._options.frozenColumn!) ? this._footerRowR : this._footerRowL);\r\n const className = this.hasFrozenColumns() && i <= this._options.frozenColumn! ? 'frozen' : null;\r\n if (className) {\r\n footerRowCell.classList.add(className);\r\n }\r\n\r\n Utils.storage.put(footerRowCell, 'column', m);\r\n\r\n this.trigger(this.onFooterRowCellRendered, {\r\n node: footerRowCell,\r\n column: m,\r\n grid: this\r\n });\r\n }\r\n }\r\n }\r\n\r\n protected handleHeaderMouseHoverOn(e: Event | SlickEventData_) {\r\n (e as any)?.target.classList.add('ui-state-hover', 'slick-state-hover');\r\n }\r\n\r\n protected handleHeaderMouseHoverOff(e: Event | SlickEventData_) {\r\n (e as any)?.target.classList.remove('ui-state-hover', 'slick-state-hover');\r\n }\r\n\r\n protected createColumnHeaders() {\r\n this._headers.forEach((header) => {\r\n const columnElements = header.querySelectorAll('.slick-header-column');\r\n columnElements.forEach((column) => {\r\n const columnDef = Utils.storage.get(column, 'column');\r\n if (columnDef) {\r\n this.trigger(this.onBeforeHeaderCellDestroy, {\r\n node: column,\r\n column: columnDef,\r\n grid: this\r\n });\r\n }\r\n });\r\n });\r\n\r\n Utils.emptyElement(this._headerL);\r\n Utils.emptyElement(this._headerR);\r\n\r\n this.getHeadersWidth();\r\n\r\n Utils.width(this._headerL, this.headersWidthL);\r\n Utils.width(this._headerR, this.headersWidthR);\r\n\r\n this._headerRows.forEach((row) => {\r\n const columnElements = row.querySelectorAll('.slick-headerrow-column');\r\n columnElements.forEach((column) => {\r\n const columnDef = Utils.storage.get(column, 'column');\r\n if (columnDef) {\r\n this.trigger(this.onBeforeHeaderRowCellDestroy, {\r\n node: this,\r\n column: columnDef,\r\n grid: this\r\n });\r\n }\r\n });\r\n });\r\n\r\n Utils.emptyElement(this._headerRowL);\r\n Utils.emptyElement(this._headerRowR);\r\n\r\n if (this._options.createFooterRow) {\r\n const footerRowLColumnElements = this._footerRowL.querySelectorAll('.slick-footerrow-column');\r\n footerRowLColumnElements.forEach((column) => {\r\n const columnDef = Utils.storage.get(column, 'column');\r\n if (columnDef) {\r\n this.trigger(this.onBeforeFooterRowCellDestroy, {\r\n node: this,\r\n column: columnDef,\r\n grid: this\r\n });\r\n }\r\n });\r\n Utils.emptyElement(this._footerRowL);\r\n\r\n if (this.hasFrozenColumns()) {\r\n const footerRowRColumnElements = this._footerRowR.querySelectorAll('.slick-footerrow-column');\r\n footerRowRColumnElements.forEach((column) => {\r\n const columnDef = Utils.storage.get(column, 'column');\r\n if (columnDef) {\r\n this.trigger(this.onBeforeFooterRowCellDestroy, {\r\n node: this,\r\n column: columnDef,\r\n grid: this\r\n });\r\n }\r\n });\r\n Utils.emptyElement(this._footerRowR);\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.columns.length; i++) {\r\n const m: C = this.columns[i];\r\n if (m.hidden) { continue; }\r\n\r\n const headerTarget = this.hasFrozenColumns() ? ((i <= this._options.frozenColumn!) ? this._headerL : this._headerR) : this._headerL;\r\n const headerRowTarget = this.hasFrozenColumns() ? ((i <= this._options.frozenColumn!) ? this._headerRowL : this._headerRowR) : this._headerRowL;\r\n\r\n const header = Utils.createDomElement('div', { id: `${this.uid + m.id}`, dataset: { id: String(m.id) }, role: 'columnheader', className: 'ui-state-default slick-state-default slick-header-column' }, headerTarget);\r\n if (m.toolTip) {\r\n header.title = m.toolTip;\r\n }\r\n if (!m.reorderable) {\r\n header.classList.add(this._options.unorderableColumnCssClass!);\r\n }\r\n const colNameElm = Utils.createDomElement('span', { className: 'slick-column-name' }, header);\r\n this.applyHtmlCode(colNameElm, m.name as string);\r\n\r\n Utils.width(header, m.width! - this.headerColumnWidthDiff);\r\n\r\n let classname = m.headerCssClass || null;\r\n if (classname) {\r\n header.classList.add(...Utils.classNameToList(classname));\r\n }\r\n classname = this.hasFrozenColumns() && i <= this._options.frozenColumn! ? 'frozen' : null;\r\n if (classname) {\r\n header.classList.add(classname);\r\n }\r\n\r\n this._bindingEventService.bind(header, 'mouseenter', this.handleHeaderMouseEnter.bind(this) as EventListener);\r\n this._bindingEventService.bind(header, 'mouseleave', this.handleHeaderMouseLeave.bind(this) as EventListener);\r\n\r\n Utils.storage.put(header, 'column', m);\r\n\r\n if (this._options.enableColumnReorder || m.sortable) {\r\n this._bindingEventService.bind(header, 'mouseenter', this.handleHeaderMouseHoverOn.bind(this) as EventListener);\r\n this._bindingEventService.bind(header, 'mouseleave', this.handleHeaderMouseHoverOff.bind(this) as EventListener);\r\n }\r\n\r\n if (m.hasOwnProperty('headerCellAttrs') && m.headerCellAttrs instanceof Object) {\r\n Object.keys(m.headerCellAttrs).forEach(key => {\r\n if (m.headerCellAttrs.hasOwnProperty(key)) {\r\n header.setAttribute(key, m.headerCellAttrs[key]);\r\n }\r\n });\r\n }\r\n\r\n if (m.sortable) {\r\n header.classList.add('slick-header-sortable');\r\n Utils.createDomElement('div', { className: `slick-sort-indicator ${this._options.numberedMultiColumnSort && !this._options.sortColNumberInSeparateSpan ? ' slick-sort-indicator-numbered' : ''}` }, header);\r\n if (this._options.numberedMultiColumnSort && this._options.sortColNumberInSeparateSpan) {\r\n Utils.createDomElement('div', { className: 'slick-sort-indicator-numbered' }, header);\r\n }\r\n }\r\n\r\n this.trigger(this.onHeaderCellRendered, {\r\n node: header,\r\n column: m,\r\n grid: this\r\n });\r\n\r\n if (this._options.showHeaderRow) {\r\n const headerRowCell = Utils.createDomElement('div', { className: `ui-state-default slick-state-default slick-headerrow-column l${i} r${i}` }, headerRowTarget);\r\n const frozenClasses = this.hasFrozenColumns() && i <= this._options.frozenColumn! ? 'frozen' : null;\r\n if (frozenClasses) {\r\n headerRowCell.classList.add(frozenClasses);\r\n }\r\n\r\n this._bindingEventService.bind(headerRowCell, 'mouseenter', this.handleHeaderRowMouseEnter.bind(this) as EventListener);\r\n this._bindingEventService.bind(headerRowCell, 'mouseleave', this.handleHeaderRowMouseLeave.bind(this) as EventListener);\r\n\r\n Utils.storage.put(headerRowCell, 'column', m);\r\n\r\n this.trigger(this.onHeaderRowCellRendered, {\r\n node: headerRowCell,\r\n column: m,\r\n grid: this\r\n });\r\n }\r\n if (this._options.createFooterRow && this._options.showFooterRow) {\r\n const footerRowTarget = this.hasFrozenColumns() ? ((i <= this._options.frozenColumn!) ? this._footerRow[0] : this._footerRow[1]) : this._footerRow[0];\r\n const footerRowCell = Utils.createDomElement('div', { className: `ui-state-default slick-state-default slick-footerrow-column l${i} r${i}` }, footerRowTarget);\r\n Utils.storage.put(footerRowCell, 'column', m);\r\n\r\n this.trigger(this.onFooterRowCellRendered, {\r\n node: footerRowCell,\r\n column: m,\r\n grid: this\r\n });\r\n }\r\n }\r\n\r\n this.setSortColumns(this.sortColumns);\r\n this.setupColumnResize();\r\n if (this._options.enableColumnReorder) {\r\n if (typeof this._options.enableColumnReorder === 'function') {\r\n this._options.enableColumnReorder(this as unknown as SlickGridModel, this._headers, this.headerColumnWidthDiff, this.setColumns as any, this.setupColumnResize, this.columns, this.getColumnIndex, this.uid, this.trigger);\r\n } else {\r\n this.setupColumnReorder();\r\n }\r\n }\r\n }\r\n\r\n protected setupColumnSort() {\r\n this._headers.forEach((header) => {\r\n this._bindingEventService.bind(header, 'click', (e: any) => {\r\n if (this.columnResizeDragging) {\r\n return;\r\n }\r\n\r\n if (e.target.classList.contains('slick-resizable-handle')) {\r\n return;\r\n }\r\n\r\n const coll = e.target.closest('.slick-header-column');\r\n if (!coll) {\r\n return;\r\n }\r\n\r\n const column = Utils.storage.get(coll, 'column');\r\n if (column.sortable) {\r\n if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n const previousSortColumns = this.sortColumns.slice();\r\n let sortColumn: ColumnSort | null = null;\r\n let i = 0;\r\n for (; i < this.sortColumns.length; i++) {\r\n if (this.sortColumns[i].columnId === column.id) {\r\n sortColumn = this.sortColumns[i];\r\n sortColumn.sortAsc = !sortColumn.sortAsc;\r\n break;\r\n }\r\n }\r\n const hadSortCol = !!sortColumn;\r\n\r\n if (this._options.tristateMultiColumnSort) {\r\n if (!sortColumn) {\r\n sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc, sortCol: column };\r\n }\r\n if (hadSortCol && sortColumn.sortAsc) {\r\n // three state: remove sort rather than go back to ASC\r\n this.sortColumns.splice(i, 1);\r\n sortColumn = null;\r\n }\r\n if (!this._options.multiColumnSort) {\r\n this.sortColumns = [];\r\n }\r\n if (sortColumn && (!hadSortCol || !this._options.multiColumnSort)) {\r\n this.sortColumns.push(sortColumn);\r\n }\r\n } else {\r\n // legacy behaviour\r\n if (e.metaKey && this._options.multiColumnSort) {\r\n if (sortColumn) {\r\n this.sortColumns.splice(i, 1);\r\n }\r\n } else {\r\n if ((!e.shiftKey && !e.metaKey) || !this._options.multiColumnSort) {\r\n this.sortColumns = [];\r\n }\r\n\r\n if (!sortColumn) {\r\n sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc, sortCol: column };\r\n this.sortColumns.push(sortColumn);\r\n } else if (this.sortColumns.length === 0) {\r\n this.sortColumns.push(sortColumn);\r\n }\r\n }\r\n }\r\n\r\n let onSortArgs;\r\n if (!this._options.multiColumnSort) {\r\n onSortArgs = {\r\n multiColumnSort: false,\r\n previousSortColumns,\r\n columnId: (this.sortColumns.length > 0 ? column.id : null),\r\n sortCol: (this.sortColumns.length > 0 ? column : null),\r\n sortAsc: (this.sortColumns.length > 0 ? this.sortColumns[0].sortAsc : true)\r\n };\r\n } else {\r\n onSortArgs = {\r\n multiColumnSort: true,\r\n previousSortColumns,\r\n sortCols: this.sortColumns.map((col) => {\r\n const tempCol = this.columns[this.getColumnIndex(col.columnId)];\r\n return !tempCol || tempCol.hidden ? null : { columnId: tempCol.id, sortCol: tempCol, sortAsc: col.sortAsc };\r\n }).filter((el) => el)\r\n };\r\n }\r\n\r\n if (this.trigger(this.onBeforeSort, onSortArgs, e).getReturnValue() !== false) {\r\n this.setSortColumns(this.sortColumns);\r\n this.trigger(this.onSort, onSortArgs, e);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n protected setupColumnReorder() {\r\n this.sortableSideLeftInstance?.destroy();\r\n this.sortableSideRightInstance?.destroy();\r\n\r\n let columnScrollTimer: any = null;\r\n\r\n const scrollColumnsRight = () => this._viewportScrollContainerX.scrollLeft = this._viewportScrollContainerX.scrollLeft + 10;\r\n const scrollColumnsLeft = () => this._viewportScrollContainerX.scrollLeft = this._viewportScrollContainerX.scrollLeft - 10;\r\n\r\n let canDragScroll = false;\r\n const sortableOptions = {\r\n animation: 50,\r\n direction: 'horizontal',\r\n chosenClass: 'slick-header-column-active',\r\n ghostClass: 'slick-sortable-placeholder',\r\n draggable: '.slick-header-column',\r\n dragoverBubble: false,\r\n revertClone: true,\r\n scroll: !this.hasFrozenColumns(), // enable auto-scroll\r\n // lock unorderable columns by using a combo of filter + onMove\r\n filter: `.${this._options.unorderableColumnCssClass}`,\r\n onMove: (event: MouseEvent & { related: HTMLElement; }) => {\r\n return !event.related.classList.contains(this._options.unorderableColumnCssClass as string);\r\n },\r\n onStart: (e: { item: any; originalEvent: MouseEvent; }) => {\r\n canDragScroll = !this.hasFrozenColumns() ||\r\n Utils.offset(e.item)!.left > Utils.offset(this._viewportScrollContainerX)!.left;\r\n\r\n if (canDragScroll && e.originalEvent.pageX > this._container.clientWidth) {\r\n if (!(columnScrollTimer)) {\r\n columnScrollTimer = setInterval(scrollColumnsRight, 100);\r\n }\r\n } else if (canDragScroll && e.originalEvent.pageX < Utils.offset(this._viewportScrollContainerX)!.left) {\r\n if (!(columnScrollTimer)) {\r\n columnScrollTimer = setInterval(scrollColumnsLeft, 100);\r\n }\r\n } else {\r\n clearInterval(columnScrollTimer);\r\n columnScrollTimer = null;\r\n }\r\n },\r\n onEnd: (e: MouseEvent & { item: any; originalEvent: MouseEvent; }) => {\r\n clearInterval(columnScrollTimer);\r\n columnScrollTimer = null;\r\n\r\n if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n let reorderedIds = this.sortableSideLeftInstance?.toArray() ?? [];\r\n reorderedIds = reorderedIds.concat(this.sortableSideRightInstance?.toArray() ?? []);\r\n\r\n const reorderedColumns: C[] = [];\r\n for (let i = 0; i < reorderedIds.length; i++) {\r\n reorderedColumns.push(this.columns[this.getColumnIndex(reorderedIds[i])]);\r\n }\r\n this.setColumns(reorderedColumns);\r\n\r\n this.trigger(this.onColumnsReordered, { impactedColumns: this.columns });\r\n e.stopPropagation();\r\n this.setupColumnResize();\r\n if (this.activeCellNode) {\r\n this.setFocus(); // refocus on active cell\r\n }\r\n }\r\n };\r\n\r\n this.sortableSideLeftInstance = Sortable.create(this._headerL, sortableOptions);\r\n this.sortableSideRightInstance = Sortable.create(this._headerR, sortableOptions);\r\n }\r\n\r\n protected getHeaderChildren() {\r\n const a = Array.from(this._headers[0].children);\r\n const b = Array.from(this._headers[1].children);\r\n return a.concat(b) as HTMLElement[];\r\n }\r\n\r\n protected handleResizeableDoubleClick(evt: MouseEvent & { target: HTMLDivElement; }) {\r\n const triggeredByColumn = evt.target.parentElement!.id.replace(this.uid, '');\r\n this.trigger(this.onColumnsResizeDblClick, { triggeredByColumn });\r\n }\r\n\r\n protected setupColumnResize() {\r\n if (typeof Resizable === 'undefined') {\r\n throw new Error(`Slick.Resizable is undefined, make sure to import \"slick.interactions.js\"`);\r\n }\r\n\r\n let j: number;\r\n let k: number;\r\n let c: C;\r\n let pageX: number;\r\n let minPageX: number;\r\n let maxPageX: number;\r\n let firstResizable: number | undefined;\r\n let lastResizable = -1;\r\n let frozenLeftColMaxWidth = 0;\r\n\r\n const children: HTMLElement[] = this.getHeaderChildren();\r\n const vc = this.getVisibleColumns();\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n const handles = child.querySelectorAll('.slick-resizable-handle');\r\n handles.forEach((handle) => handle.remove());\r\n\r\n if (i >= vc.length || !vc[i]) {\r\n continue;\r\n }\r\n\r\n if (vc[i].resizable) {\r\n if (firstResizable === undefined) {\r\n firstResizable = i;\r\n }\r\n lastResizable = i;\r\n }\r\n }\r\n\r\n if (firstResizable === undefined) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < children.length; i++) {\r\n const colElm = children[i];\r\n\r\n if (i >= vc.length || !vc[i]) {\r\n continue;\r\n }\r\n if (i < firstResizable || (this._options.forceFitColumns && i >= lastResizable)) {\r\n continue;\r\n }\r\n\r\n const resizeableHandle = Utils.createDomElement('div', { className: 'slick-resizable-handle', role: 'separator', ariaOrientation: 'horizontal' }, colElm);\r\n this._bindingEventService.bind(resizeableHandle, 'dblclick', this.handleResizeableDoubleClick.bind(this) as EventListener);\r\n\r\n this.slickResizableInstances.push(\r\n Resizable({\r\n resizeableElement: colElm as HTMLElement,\r\n resizeableHandleElement: resizeableHandle,\r\n onResizeStart: (e, resizeElms): boolean | void => {\r\n const targetEvent = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n return false;\r\n }\r\n pageX = (targetEvent as MouseEvent).pageX;\r\n frozenLeftColMaxWidth = 0;\r\n resizeElms.resizeableElement.classList.add('slick-header-column-active');\r\n let shrinkLeewayOnRight: number | null = null;\r\n let stretchLeewayOnRight: number | null = null;\r\n // lock each column's width option to current width\r\n for (let pw = 0; pw < children.length; pw++) {\r\n if (pw >= vc.length || !vc[pw]) {\r\n continue;\r\n }\r\n vc[pw].previousWidth = children[pw].offsetWidth;\r\n }\r\n if (this._options.forceFitColumns) {\r\n shrinkLeewayOnRight = 0;\r\n stretchLeewayOnRight = 0;\r\n // colums on right affect maxPageX/minPageX\r\n for (j = i + 1; j < vc.length; j++) {\r\n c = vc[j];\r\n if (c?.resizable) {\r\n if (stretchLeewayOnRight !== null) {\r\n if (c.maxWidth) {\r\n stretchLeewayOnRight += c.maxWidth - (c.previousWidth || 0);\r\n } else {\r\n stretchLeewayOnRight = null;\r\n }\r\n }\r\n shrinkLeewayOnRight += (c.previousWidth || 0) - Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n }\r\n }\r\n }\r\n let shrinkLeewayOnLeft = 0;\r\n let stretchLeewayOnLeft: number | null = 0;\r\n for (j = 0; j <= i; j++) {\r\n // columns on left only affect minPageX\r\n c = vc[j];\r\n if (c?.resizable) {\r\n if (stretchLeewayOnLeft !== null) {\r\n if (c.maxWidth) {\r\n stretchLeewayOnLeft += c.maxWidth - (c.previousWidth || 0);\r\n } else {\r\n stretchLeewayOnLeft = null;\r\n }\r\n }\r\n shrinkLeewayOnLeft += (c.previousWidth || 0) - Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n }\r\n }\r\n if (shrinkLeewayOnRight === null) {\r\n shrinkLeewayOnRight = 100000;\r\n }\r\n if (shrinkLeewayOnLeft === null) {\r\n shrinkLeewayOnLeft = 100000;\r\n }\r\n if (stretchLeewayOnRight === null) {\r\n stretchLeewayOnRight = 100000;\r\n }\r\n if (stretchLeewayOnLeft === null) {\r\n stretchLeewayOnLeft = 100000;\r\n }\r\n maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft);\r\n minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);\r\n },\r\n onResize: (e, resizeElms) => {\r\n const targetEvent = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n this.columnResizeDragging = true;\r\n let actualMinWidth;\r\n const d = Math.min(maxPageX, Math.max(minPageX, (targetEvent as MouseEvent).pageX)) - pageX;\r\n let x;\r\n let newCanvasWidthL = 0;\r\n let newCanvasWidthR = 0;\r\n const viewportWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n\r\n if (d < 0) { // shrink column\r\n x = d;\r\n\r\n for (j = i; j >= 0; j--) {\r\n c = vc[j];\r\n if (c?.resizable && !c.hidden) {\r\n actualMinWidth = Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n if (x && (c.previousWidth || 0) + x < actualMinWidth) {\r\n x += (c.previousWidth || 0) - actualMinWidth;\r\n c.width = actualMinWidth;\r\n } else {\r\n c.width = (c.previousWidth || 0) + x;\r\n x = 0;\r\n }\r\n }\r\n }\r\n\r\n for (k = 0; k <= i; k++) {\r\n c = vc[k];\r\n if (!c || c.hidden) { continue; }\r\n\r\n if (this.hasFrozenColumns() && (k > this._options.frozenColumn!)) {\r\n newCanvasWidthR += c.width || 0;\r\n } else {\r\n newCanvasWidthL += c.width || 0;\r\n }\r\n }\r\n\r\n if (this._options.forceFitColumns) {\r\n x = -d;\r\n for (j = i + 1; j < vc.length; j++) {\r\n c = vc[j];\r\n if (!c || c.hidden) { continue; }\r\n if (c.resizable) {\r\n if (x && c.maxWidth && (c.maxWidth - (c.previousWidth || 0) < x)) {\r\n x -= c.maxWidth - (c.previousWidth || 0);\r\n c.width = c.maxWidth;\r\n } else {\r\n c.width = (c.previousWidth || 0) + x;\r\n x = 0;\r\n }\r\n\r\n if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n newCanvasWidthR += c.width || 0;\r\n } else {\r\n newCanvasWidthL += c.width || 0;\r\n }\r\n }\r\n }\r\n } else {\r\n for (j = i + 1; j < vc.length; j++) {\r\n c = vc[j];\r\n if (!c || c.hidden) { continue; }\r\n\r\n if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n newCanvasWidthR += c.width || 0;\r\n } else {\r\n newCanvasWidthL += c.width || 0;\r\n }\r\n }\r\n }\r\n\r\n if (this._options.forceFitColumns) {\r\n x = -d;\r\n for (j = i + 1; j < vc.length; j++) {\r\n c = vc[j];\r\n if (!c || c.hidden) { continue; }\r\n if (c.resizable) {\r\n if (x && c.maxWidth && (c.maxWidth - (c.previousWidth || 0) < x)) {\r\n x -= c.maxWidth - (c.previousWidth || 0);\r\n c.width = c.maxWidth;\r\n } else {\r\n c.width = (c.previousWidth || 0) + x;\r\n x = 0;\r\n }\r\n }\r\n }\r\n }\r\n } else { // stretch column\r\n x = d;\r\n\r\n newCanvasWidthL = 0;\r\n newCanvasWidthR = 0;\r\n\r\n for (j = i; j >= 0; j--) {\r\n c = vc[j];\r\n if (!c || c.hidden) { continue; }\r\n if (c.resizable) {\r\n if (x && c.maxWidth && (c.maxWidth - (c.previousWidth || 0) < x)) {\r\n x -= c.maxWidth - (c.previousWidth || 0);\r\n c.width = c.maxWidth;\r\n } else {\r\n const newWidth = (c.previousWidth || 0) + x;\r\n const resizedCanvasWidthL = this.canvasWidthL + x;\r\n\r\n if (this.hasFrozenColumns() && (j <= this._options.frozenColumn!)) {\r\n // if we're on the left frozen side, we need to make sure that our left section width never goes over the total viewport width\r\n if (newWidth > frozenLeftColMaxWidth && resizedCanvasWidthL < (viewportWidth - this._options.frozenRightViewportMinWidth!)) {\r\n frozenLeftColMaxWidth = newWidth; // keep max column width ref, if we go over the limit this number will stop increasing\r\n }\r\n c.width = ((resizedCanvasWidthL + this._options.frozenRightViewportMinWidth!) > viewportWidth) ? frozenLeftColMaxWidth : newWidth;\r\n } else {\r\n c.width = newWidth;\r\n }\r\n x = 0;\r\n }\r\n }\r\n }\r\n\r\n for (k = 0; k <= i; k++) {\r\n c = vc[k];\r\n if (!c || c.hidden) { continue; }\r\n\r\n if (this.hasFrozenColumns() && (k > this._options.frozenColumn!)) {\r\n newCanvasWidthR += c.width || 0;\r\n } else {\r\n newCanvasWidthL += c.width || 0;\r\n }\r\n }\r\n\r\n if (this._options.forceFitColumns) {\r\n x = -d;\r\n for (j = i + 1; j < vc.length; j++) {\r\n c = vc[j];\r\n if (!c || c.hidden) { continue; }\r\n if (c.resizable) {\r\n actualMinWidth = Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n if (x && (c.previousWidth || 0) + x < actualMinWidth) {\r\n x += (c.previousWidth || 0) - actualMinWidth;\r\n c.width = actualMinWidth;\r\n } else {\r\n c.width = (c.previousWidth || 0) + x;\r\n x = 0;\r\n }\r\n\r\n if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n newCanvasWidthR += c.width || 0;\r\n } else {\r\n newCanvasWidthL += c.width || 0;\r\n }\r\n }\r\n }\r\n } else {\r\n for (j = i + 1; j < vc.length; j++) {\r\n c = vc[j];\r\n if (!c || c.hidden) { continue; }\r\n\r\n if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n newCanvasWidthR += c.width || 0;\r\n } else {\r\n newCanvasWidthL += c.width || 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.hasFrozenColumns() && newCanvasWidthL !== this.canvasWidthL) {\r\n Utils.width(this._headerL, newCanvasWidthL + 1000);\r\n Utils.setStyleSize(this._paneHeaderR, 'left', newCanvasWidthL);\r\n }\r\n\r\n this.applyColumnHeaderWidths();\r\n if (this._options.syncColumnCellResize) {\r\n this.applyColumnWidths();\r\n }\r\n this.trigger(this.onColumnsDrag, {\r\n triggeredByColumn: resizeElms.resizeableElement,\r\n resizeHandle: resizeElms.resizeableHandleElement\r\n });\r\n },\r\n onResizeEnd: (_e, resizeElms) => {\r\n resizeElms.resizeableElement.classList.remove('slick-header-column-active');\r\n\r\n const triggeredByColumn = resizeElms.resizeableElement.id.replace(this.uid, '');\r\n if (this.trigger(this.onBeforeColumnsResize, { triggeredByColumn }).getReturnValue() === true) {\r\n this.applyColumnHeaderWidths();\r\n }\r\n let newWidth;\r\n for (j = 0; j < vc.length; j++) {\r\n c = vc[j];\r\n if (!c || c.hidden) { continue; }\r\n newWidth = children[j].offsetWidth;\r\n\r\n if (c.previousWidth !== newWidth && c.rerenderOnResize) {\r\n this.invalidateAllRows();\r\n }\r\n }\r\n this.updateCanvasWidth(true);\r\n this.render();\r\n this.trigger(this.onColumnsResized, { triggeredByColumn });\r\n clearTimeout(this._columnResizeTimer);\r\n this._columnResizeTimer = setTimeout(() => { this.columnResizeDragging = false; }, 300);\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n protected getVBoxDelta(el: HTMLElement) {\r\n const p = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];\r\n const styles = getComputedStyle(el);\r\n let delta = 0;\r\n p.forEach((val) => delta += Utils.toFloat(styles[val as any]));\r\n return delta;\r\n }\r\n\r\n protected setFrozenOptions() {\r\n this._options.frozenColumn = (this._options.frozenColumn! >= 0 && this._options.frozenColumn! < this.columns.length)\r\n ? parseInt(this._options.frozenColumn as unknown as string, 10)\r\n : -1;\r\n\r\n if (this._options.frozenRow! > -1) {\r\n this.hasFrozenRows = true;\r\n this.frozenRowsHeight = (this._options.frozenRow!) * this._options.rowHeight!;\r\n const dataLength = this.getDataLength();\r\n\r\n this.actualFrozenRow = (this._options.frozenBottom)\r\n ? (dataLength - this._options.frozenRow!)\r\n : this._options.frozenRow!;\r\n } else {\r\n this.hasFrozenRows = false;\r\n }\r\n }\r\n\r\n protected setPaneVisibility() {\r\n if (this.hasFrozenColumns()) {\r\n Utils.show(this._paneHeaderR);\r\n Utils.show(this._paneTopR);\r\n\r\n if (this.hasFrozenRows) {\r\n Utils.show(this._paneBottomL);\r\n Utils.show(this._paneBottomR);\r\n } else {\r\n Utils.hide(this._paneBottomR);\r\n Utils.hide(this._paneBottomL);\r\n }\r\n } else {\r\n Utils.hide(this._paneHeaderR);\r\n Utils.hide(this._paneTopR);\r\n Utils.hide(this._paneBottomR);\r\n\r\n if (this.hasFrozenRows) {\r\n Utils.show(this._paneBottomL);\r\n } else {\r\n Utils.hide(this._paneBottomR);\r\n Utils.hide(this._paneBottomL);\r\n }\r\n }\r\n }\r\n\r\n protected setOverflow() {\r\n this._viewportTopL.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'scroll') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'auto');\r\n this._viewportTopL.style.overflowY = (!this.hasFrozenColumns() && this._options.alwaysShowVerticalScroll) ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'hidden' : 'hidden') : (this.hasFrozenRows ? 'scroll' : 'auto'));\r\n\r\n this._viewportTopR.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'scroll') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'auto');\r\n this._viewportTopR.style.overflowY = this._options.alwaysShowVerticalScroll ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'scroll' : 'auto') : (this.hasFrozenRows ? 'scroll' : 'auto'));\r\n\r\n this._viewportBottomL.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'scroll' : 'auto') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'auto' : 'auto');\r\n this._viewportBottomL.style.overflowY = (!this.hasFrozenColumns() && this._options.alwaysShowVerticalScroll) ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'hidden' : 'hidden') : (this.hasFrozenRows ? 'scroll' : 'auto'));\r\n\r\n this._viewportBottomR.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'scroll' : 'auto') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'auto' : 'auto');\r\n this._viewportBottomR.style.overflowY = this._options.alwaysShowVerticalScroll ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'auto' : 'auto') : (this.hasFrozenRows ? 'auto' : 'auto'));\r\n\r\n if (this._options.viewportClass) {\r\n const viewportClassList = Utils.classNameToList(this._options.viewportClass);\r\n this._viewportTopL.classList.add(...viewportClassList);\r\n this._viewportTopR.classList.add(...viewportClassList);\r\n this._viewportBottomL.classList.add(...viewportClassList);\r\n this._viewportBottomR.classList.add(...viewportClassList);\r\n }\r\n }\r\n\r\n protected setScroller() {\r\n if (this.hasFrozenColumns()) {\r\n this._headerScrollContainer = this._headerScrollerR;\r\n this._headerRowScrollContainer = this._headerRowScrollerR;\r\n this._footerRowScrollContainer = this._footerRowScrollerR;\r\n\r\n if (this.hasFrozenRows) {\r\n if (this._options.frozenBottom) {\r\n this._viewportScrollContainerX = this._viewportBottomR;\r\n this._viewportScrollContainerY = this._viewportTopR;\r\n } else {\r\n this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportBottomR;\r\n }\r\n } else {\r\n this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportTopR;\r\n }\r\n } else {\r\n this._headerScrollContainer = this._headerScrollerL;\r\n this._headerRowScrollContainer = this._headerRowScrollerL;\r\n this._footerRowScrollContainer = this._footerRowScrollerL;\r\n\r\n if (this.hasFrozenRows) {\r\n if (this._options.frozenBottom) {\r\n this._viewportScrollContainerX = this._viewportBottomL;\r\n this._viewportScrollContainerY = this._viewportTopL;\r\n } else {\r\n this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportBottomL;\r\n }\r\n } else {\r\n this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportTopL;\r\n }\r\n }\r\n }\r\n\r\n protected measureCellPaddingAndBorder() {\r\n const h = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];\r\n const v = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];\r\n const header = this._headers[0];\r\n\r\n this.headerColumnWidthDiff = this.headerColumnHeightDiff = 0;\r\n this.cellWidthDiff = this.cellHeightDiff = 0;\r\n\r\n let el = Utils.createDomElement('div', { className: 'ui-state-default slick-state-default slick-header-column', style: { visibility: 'hidden' }, textContent: '-' }, header);\r\n let style = getComputedStyle(el);\r\n if (style.boxSizing !== 'border-box') {\r\n h.forEach((val) => this.headerColumnWidthDiff += Utils.toFloat(style[val as any]));\r\n v.forEach((val) => this.headerColumnHeightDiff += Utils.toFloat(style[val as any]));\r\n }\r\n el.remove();\r\n\r\n const r = Utils.createDomElement('div', { className: 'slick-row' }, this._canvas[0]);\r\n el = Utils.createDomElement('div', { className: 'slick-cell', id: '', style: { visibility: 'hidden' }, textContent: '-' }, r);\r\n style = getComputedStyle(el);\r\n if (style.boxSizing !== 'border-box') {\r\n h.forEach((val) => this.cellWidthDiff += Utils.toFloat(style[val as any]));\r\n v.forEach((val) => this.cellHeightDiff += Utils.toFloat(style[val as any]));\r\n }\r\n r.remove();\r\n\r\n this.absoluteColumnMinWidth = Math.max(this.headerColumnWidthDiff, this.cellWidthDiff);\r\n }\r\n\r\n protected createCssRules() {\r\n this._style = document.createElement('style');\r\n this._style.nonce = this._options.nonce || '';\r\n (this._options.shadowRoot || document.head).appendChild(this._style);\r\n\r\n const rowHeight = (this._options.rowHeight! - this.cellHeightDiff);\r\n const rules = [\r\n `.${this.uid} .slick-group-header-column { left: 1000px; }`,\r\n `.${this.uid} .slick-header-column { left: 1000px; }`,\r\n `.${this.uid} .slick-top-panel { height: ${this._options.topPanelHeight}px; }`,\r\n `.${this.uid} .slick-preheader-panel { height: ${this._options.preHeaderPanelHeight}px; }`,\r\n `.${this.uid} .slick-topheader-panel { height: ${this._options.topHeaderPanelHeight}px; }`,\r\n `.${this.uid} .slick-headerrow-columns { height: ${this._options.headerRowHeight}px; }`,\r\n `.${this.uid} .slick-footerrow-columns { height: ${this._options.footerRowHeight}px; }`,\r\n `.${this.uid} .slick-cell { height: ${rowHeight}px; }`,\r\n `.${this.uid} .slick-row { height: ${this._options.rowHeight}px; }`,\r\n ];\r\n\r\n const sheet = this._style.sheet;\r\n if (sheet) {\r\n rules.forEach(rule => {\r\n sheet.insertRule(rule);\r\n });\r\n\r\n for (let i = 0; i < this.columns.length; i++) {\r\n if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n sheet.insertRule(`.${this.uid} .l${i} { }`);\r\n sheet.insertRule(`.${this.uid} .r${i} { }`);\r\n }\r\n } else {\r\n // fallback in case the 1st approach doesn't work, let's use our previous way of creating the css rules which is what works in Salesforce :(\r\n this.createCssRulesAlternative(rules);\r\n }\r\n }\r\n\r\n /** Create CSS rules via template in case the first approach with createElement('style') doesn't work */\r\n protected createCssRulesAlternative(rules: string[]) {\r\n const template = document.createElement('template');\r\n template.innerHTML = '\n *\n * @class Yieldable\n */\nexport class Yieldable {\n constructor() {\n this[yieldableSymbol] = this[yieldableSymbol].bind(this);\n }\n\n /**\n * Defines what happens when the task encounters `yield myYieldable` and returns\n * a disposer function that handles any cleanup.\n *\n * The state parameter is provided by the runtime, and provides operations for\n * interacting with the yielding task instance and advancing, returning,\n * throwing, or canceling its execution.\n *\n * @method onYield\n * @memberof Yieldable\n * @param {YieldableState} state\n * @instance\n * @public\n */\n onYield() {}\n\n _deferable() {\n let def = { resolve: undefined, reject: undefined };\n\n def.promise = new Promise((resolve, reject) => {\n def.resolve = resolve;\n def.reject = reject;\n });\n\n return def;\n }\n\n _toPromise() {\n let def = this._deferable();\n\n let thinInstance = {\n proceed(_index, resumeType, value) {\n if (\n resumeType == YIELDABLE_CONTINUE ||\n resumeType == YIELDABLE_RETURN\n ) {\n def.resolve(value);\n } else {\n def.reject(value);\n }\n },\n };\n\n let maybeDisposer = this[yieldableSymbol](thinInstance, 0);\n def.promise[cancelableSymbol] = maybeDisposer;\n\n return def.promise;\n }\n\n /**\n * Returns a promise that resolves with the value yielded back to or returned\n * to the yielded task, or rejects with either the exception thrown from the\n * Yieldable, or an error with a `.name` property with value `\"TaskCancelation\"`.\n *\n * @method then\n * @memberof Yieldable\n * @instance\n * @return {Promise}\n */\n then(...args) {\n return this._toPromise().then(...args);\n }\n\n /**\n * @method catch\n * @memberof Yieldable\n * @instance\n * @return {Promise}\n */\n catch(...args) {\n return this._toPromise().catch(...args);\n }\n\n /**\n * @method finally\n * @memberof Yieldable\n * @instance\n * @return {Promise}\n */\n finally(...args) {\n return this._toPromise().finally(...args);\n }\n\n [yieldableSymbol](taskInstance, resumeIndex) {\n let state = new YieldableState(taskInstance, resumeIndex);\n\n return this.onYield(state);\n }\n}\n\nclass AnimationFrameYieldable extends Yieldable {\n onYield(state) {\n let timerId = requestAnimationFrame(() => state.next());\n\n return () => cancelAnimationFrame(timerId);\n }\n}\n\nclass ForeverYieldable extends Yieldable {\n onYield() {}\n}\n\nclass RawTimeoutYieldable extends Yieldable {\n constructor(ms) {\n super();\n this.ms = ms;\n }\n\n onYield(state) {\n let timerId = setTimeout(() => state.next(), this.ms);\n\n return () => clearTimeout(timerId);\n }\n}\n\n/**\n * Yielding `animationFrame()` will pause a task until after the next animation\n * frame using the native `requestAnimationFrame()` browser API.\n *\n * The task below, when performed, will print the time since the last loop run\n * for every animation frame.\n *\n * ```js\n * export default class MyComponent extends Component {\n * @task *myTask() {\n * let lastNow = performance.now();\n * while (true) {\n * yield animationFrame();\n *\n * let now = performance.now();\n * let dt = now - lastNow;\n * lastNow = now;\n *\n * console.log(dt);\n * }\n * }\n * }\n * ```\n */\nexport function animationFrame() {\n return new AnimationFrameYieldable();\n}\n\n/**\n *\n * Yielding `forever` will pause a task indefinitely until\n * it is cancelled (i.e. via host object destruction, the restartable modifier,\n * or manual cancellation).\n *\n * This is often useful in cases involving animation: if you're\n * using Liquid Fire, or some other animation scheme, sometimes you'll\n * notice buttons visibly reverting to their inactive states during\n * a route transition. By yielding `forever` in a Component task that drives a\n * button's active state, you can keep a task indefinitely running\n * until the animation runs to completion.\n *\n * NOTE: Liquid Fire also includes a useful `waitUntilIdle()` method\n * on the `liquid-fire-transitions` service that you can use in a lot\n * of these cases, but it won't cover cases of asynchrony that are\n * unrelated to animation, in which case `forever` might be better suited\n * to your needs.\n *\n * ```js\n * import { task, forever } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n * @service myService;\n * @task *myTask() {\n * yield this.myService.doSomethingThatCausesATransition();\n * yield forever;\n * }\n * }\n * ```\n */\nexport const forever = new ForeverYieldable();\n\n/**\n *\n * Yielding `rawTimeout(ms)` will pause a task for the duration\n * of time passed in, in milliseconds.\n *\n * The timeout will use the native `setTimeout()` browser API,\n * instead of the Ember runloop, which means that test helpers\n * will *not* wait for it to complete.\n *\n * The task below, when performed, will print a message to the\n * console every second.\n *\n * ```js\n * export default class MyComponent extends Component {\n * @task *myTask() {\n * while (true) {\n * console.log(\"Hello!\");\n * yield rawTimeout(1000);\n * }\n * }\n * }\n * ```\n *\n * @param {number} ms - the amount of time to sleep before resuming\n * the task, in milliseconds\n */\nexport function rawTimeout(ms) {\n return new RawTimeoutYieldable(ms);\n}\n","import { GeneratorState } from '../generator-state';\nimport { INITIAL_STATE } from './initial-state';\nimport {\n yieldableSymbol,\n YIELDABLE_CONTINUE,\n YIELDABLE_THROW,\n YIELDABLE_RETURN,\n YIELDABLE_CANCEL,\n cancelableSymbol,\n} from '../yieldables';\n\nimport {\n COMPLETION_SUCCESS,\n COMPLETION_ERROR,\n COMPLETION_CANCEL,\n} from './completion-states';\nimport {\n CancelRequest,\n CANCEL_KIND_YIELDABLE_CANCEL,\n CANCEL_KIND_LIFESPAN_END,\n CANCEL_KIND_PARENT_CANCEL,\n didCancel,\n TASK_CANCELATION_NAME,\n} from './cancelation';\n\nexport const PERFORM_TYPE_DEFAULT = 'PERFORM_TYPE_DEFAULT';\nexport const PERFORM_TYPE_UNLINKED = 'PERFORM_TYPE_UNLINKED';\nexport const PERFORM_TYPE_LINKED = 'PERFORM_TYPE_LINKED';\n\nconst CANCEL_RETURN_VALUE_SENTINEL = {};\nlet TASK_INSTANCE_STACK = [];\n\nexport function getRunningInstance() {\n return TASK_INSTANCE_STACK[TASK_INSTANCE_STACK.length - 1];\n}\n\nexport class TaskInstanceExecutor {\n constructor({ generatorFactory, env, debug }) {\n this.generatorState = new GeneratorState(generatorFactory);\n this.state = Object.assign({}, INITIAL_STATE);\n this.index = 1;\n this.disposers = [];\n this.finalizeCallbacks = [];\n this.env = env;\n this.debug = debug;\n this.cancelRequest = null;\n }\n\n start() {\n if (this.state.hasStarted || this.cancelRequest) {\n return;\n }\n this.setState({ hasStarted: true });\n this.proceedSync(YIELDABLE_CONTINUE, undefined);\n this.taskInstance.onStarted();\n }\n\n cancel(cancelRequest) {\n if (!this.requestCancel(cancelRequest)) {\n cancelRequest.finalize();\n return cancelRequest.promise;\n }\n\n if (this.state.hasStarted) {\n this.proceedWithCancelAsync();\n } else {\n this.finalizeWithCancel();\n }\n\n return this.cancelRequest.promise;\n }\n\n setState(state) {\n Object.assign(this.state, state);\n this.taskInstance.setState(this.state);\n }\n\n proceedChecked(index, yieldResumeType, value) {\n if (this.state.isFinished) {\n return;\n }\n if (!this.advanceIndex(index)) {\n return;\n }\n\n if (yieldResumeType === YIELDABLE_CANCEL) {\n this.requestCancel(\n new CancelRequest(CANCEL_KIND_YIELDABLE_CANCEL),\n value,\n );\n this.proceedWithCancelAsync();\n } else {\n this.proceedAsync(yieldResumeType, value);\n }\n }\n\n proceedWithCancelAsync() {\n this.proceedAsync(YIELDABLE_RETURN, CANCEL_RETURN_VALUE_SENTINEL);\n }\n\n proceedAsync(yieldResumeType, value) {\n this.advanceIndex(this.index);\n this.env.async(() => this.proceedSync(yieldResumeType, value));\n }\n\n proceedSync(yieldResumeType, value) {\n if (this.state.isFinished) {\n return;\n }\n\n this.dispose();\n\n if (this.generatorState.done) {\n this.handleResolvedReturnedValue(yieldResumeType, value);\n } else {\n this.handleResolvedContinueValue(yieldResumeType, value);\n }\n }\n\n /**\n * This method is called when a previously yielded value from\n * the generator has been resolved, and now it's time to pass\n * it back into the generator. There are 3 ways to \"resume\" a\n * generator:\n *\n * - call `.next(value)` on it, which is used to pass in a resolved\n * value (the fulfilled value of a promise), e.g. if a task generator fn\n * does `yield Promise.resolve(5)`, then we take that promise yielded\n * by the generator, detect that it's a promise, resolve it, and then\n * pass its fulfilled value `5` back into the generator function so\n * that it can continue executing.\n * - call `.throw(error)` on it, which throw an exception from where the\n * the generator previously yielded. We do this when the previously\n * yielded value resolves to an error value (e.g. a rejected promise\n * or a TaskInstance that finished with an error). Note that when you\n * resume a generator with a `.throw()`, it can still recover from that\n * thrown error and continue executing normally so long as the `yield`\n * was inside a `try/catch` statement.\n * - call `.return(value)` on it, causes the generator function to return\n * from where it previously `yield`ed. We use `.return()` when cancelling\n * a TaskInstance; by `.return`ing, rather than `.throw`ing, it allows\n * the generator function to skip `catch(e) {}` blocks, which is usually\n * reserved for actual errors/exceptions; if we `.throw`'d cancellations,\n * it would require all tasks that used try/catch to conditionally ignore\n * cancellations, which is annoying. So we `.return()` from generator functions\n * in the case of errors as a matter of convenience.\n *\n * @private\n */\n handleResolvedContinueValue(iteratorMethod, resumeValue) {\n let beforeIndex = this.index;\n let stepResult = this.generatorStep(resumeValue, iteratorMethod);\n\n // TODO: what is this doing? write breaking test.\n if (!this.advanceIndex(beforeIndex)) {\n return;\n }\n\n if (stepResult.errored) {\n this.finalize(stepResult.value, COMPLETION_ERROR);\n return;\n }\n\n this.handleYieldedValue(stepResult);\n }\n\n /**\n * This method is called when the generator function is all\n * out of values, and the last value returned from the function\n * (possible a thenable/yieldable/promise/etc) has been resolved.\n *\n * Possible cases:\n * - `return \"simple value\";` // resolved value is \"simple value\"\n * - `return undefined;` // (or omitted return) resolved value is undefined\n * - `return someTask.perform()` // resolved value is the value returned/resolved from someTask\n *\n * @private\n */\n handleResolvedReturnedValue(yieldResumeType, value) {\n switch (yieldResumeType) {\n case YIELDABLE_CONTINUE:\n case YIELDABLE_RETURN:\n this.finalize(value, COMPLETION_SUCCESS);\n break;\n case YIELDABLE_THROW:\n this.finalize(value, COMPLETION_ERROR);\n break;\n }\n }\n\n handleYieldedUnknownThenable(thenable) {\n let resumeIndex = this.index;\n thenable.then(\n (value) => {\n this.proceedChecked(resumeIndex, YIELDABLE_CONTINUE, value);\n },\n (error) => {\n this.proceedChecked(resumeIndex, YIELDABLE_THROW, error);\n },\n );\n }\n\n /**\n * The TaskInstance internally tracks an index/sequence number\n * (the `index` property) which gets incremented every time the\n * task generator function iterator takes a step. When a task\n * function is paused at a `yield`, there are two events that\n * cause the TaskInstance to take a step: 1) the yielded value\n * \"resolves\", thus resuming the TaskInstance's execution, or\n * 2) the TaskInstance is canceled. We need some mechanism to prevent\n * stale yielded value resolutions from resuming the TaskFunction\n * after the TaskInstance has already moved on (either because\n * the TaskInstance has since been canceled or because an\n * implementation of the Yieldable API tried to resume the\n * TaskInstance more than once). The `index` serves as\n * that simple mechanism: anyone resuming a TaskInstance\n * needs to pass in the `index` they were provided that acts\n * as a ticket to resume the TaskInstance that expires once\n * the TaskInstance has moved on.\n *\n * @private\n */\n advanceIndex(index) {\n if (this.index === index) {\n return ++this.index;\n }\n }\n\n handleYieldedValue(stepResult) {\n let yieldedValue = stepResult.value;\n if (!yieldedValue) {\n this.proceedWithSimpleValue(yieldedValue);\n return;\n }\n\n this.addDisposer(yieldedValue[cancelableSymbol]);\n\n if (yieldedValue[yieldableSymbol]) {\n this.invokeYieldable(yieldedValue);\n } else if (typeof yieldedValue.then === 'function') {\n this.handleYieldedUnknownThenable(yieldedValue);\n } else {\n this.proceedWithSimpleValue(yieldedValue);\n }\n }\n\n proceedWithSimpleValue(yieldedValue) {\n this.proceedAsync(YIELDABLE_CONTINUE, yieldedValue);\n }\n\n addDisposer(maybeDisposer) {\n if (typeof maybeDisposer !== 'function') {\n return;\n }\n\n this.disposers.push(maybeDisposer);\n }\n\n /**\n * Runs any disposers attached to the task's most recent `yield`.\n * For instance, when a task yields a TaskInstance, it registers that\n * child TaskInstance's disposer, so that if the parent task is canceled,\n * dispose() will run that disposer and cancel the child TaskInstance.\n *\n * @private\n */\n dispose() {\n let disposers = this.disposers;\n if (disposers.length === 0) {\n return;\n }\n this.disposers = [];\n disposers.forEach((disposer) => disposer());\n }\n\n /**\n * Calls .next()/.throw()/.return() on the task's generator function iterator,\n * essentially taking a single step of execution on the task function.\n *\n * @private\n */\n generatorStep(nextValue, iteratorMethod) {\n TASK_INSTANCE_STACK.push(this);\n let stepResult = this.generatorState.step(nextValue, iteratorMethod);\n TASK_INSTANCE_STACK.pop();\n\n // TODO: fix this!\n if (this._expectsLinkedYield) {\n let value = stepResult.value;\n if (!value || value.performType !== PERFORM_TYPE_LINKED) {\n // eslint-disable-next-line no-console\n console.warn(\n 'You performed a .linked() task without immediately yielding/returning it. This is currently unsupported (but might be supported in future version of ember-concurrency).',\n );\n }\n this._expectsLinkedYield = false;\n }\n\n return stepResult;\n }\n\n maybeResolveDefer() {\n if (!this.defer || !this.state.isFinished) {\n return;\n }\n\n if (this.state.completionState === COMPLETION_SUCCESS) {\n this.defer.resolve(this.state.value);\n } else {\n this.defer.reject(this.state.error);\n }\n }\n\n onFinalize(callback) {\n this.finalizeCallbacks.push(callback);\n\n if (this.state.isFinished) {\n this.runFinalizeCallbacks();\n }\n }\n\n runFinalizeCallbacks() {\n this.finalizeCallbacks.forEach((cb) => cb());\n this.finalizeCallbacks = [];\n this.maybeResolveDefer();\n this.maybeThrowUnhandledTaskErrorLater();\n }\n\n promise() {\n if (!this.defer) {\n this.defer = this.env.defer();\n this.asyncErrorsHandled = true;\n this.maybeResolveDefer();\n }\n return this.defer.promise;\n }\n\n maybeThrowUnhandledTaskErrorLater() {\n if (\n !this.asyncErrorsHandled &&\n this.state.completionState === COMPLETION_ERROR &&\n !didCancel(this.state.error)\n ) {\n this.env.async(() => {\n if (!this.asyncErrorsHandled) {\n this.env.reportUncaughtRejection(this.state.error);\n }\n });\n }\n }\n\n requestCancel(request) {\n if (this.cancelRequest || this.state.isFinished) {\n return false;\n }\n this.cancelRequest = request;\n return true;\n }\n\n finalize(value, completionState) {\n if (this.cancelRequest) {\n return this.finalizeWithCancel();\n }\n\n let state = { completionState };\n\n if (completionState === COMPLETION_SUCCESS) {\n state.isSuccessful = true;\n state.value = value;\n } else if (completionState === COMPLETION_ERROR) {\n state.isError = true;\n state.error = value;\n } else if (completionState === COMPLETION_CANCEL) {\n state.error = value;\n }\n\n this.finalizeShared(state);\n }\n\n finalizeWithCancel() {\n let cancelReason = this.taskInstance.formatCancelReason(\n this.cancelRequest.reason,\n );\n let error = new Error(cancelReason);\n\n if (this.debugEnabled()) {\n // eslint-disable-next-line no-console\n console.log(cancelReason);\n }\n\n error.name = TASK_CANCELATION_NAME;\n\n this.finalizeShared({\n isCanceled: true,\n completionState: COMPLETION_CANCEL,\n error,\n cancelReason,\n });\n\n this.cancelRequest.finalize();\n }\n\n debugEnabled() {\n return this.debug || this.env.globalDebuggingEnabled();\n }\n\n finalizeShared(state) {\n this.index++;\n state.isFinished = true;\n this.setState(state);\n this.runFinalizeCallbacks();\n this.dispatchFinalizeEvents(state.completionState);\n }\n\n dispatchFinalizeEvents(completionState) {\n switch (completionState) {\n case COMPLETION_SUCCESS:\n this.taskInstance.onSuccess();\n break;\n case COMPLETION_ERROR:\n this.taskInstance.onError(this.state.error);\n break;\n case COMPLETION_CANCEL:\n this.taskInstance.onCancel(this.state.cancelReason);\n break;\n }\n }\n\n invokeYieldable(yieldedValue) {\n try {\n let maybeDisposer = yieldedValue[yieldableSymbol](\n this.taskInstance,\n this.index,\n );\n this.addDisposer(maybeDisposer);\n } catch (e) {\n this.env.reportUncaughtRejection(e);\n }\n }\n\n /**\n * `onYielded` is called when this task instance has been\n * yielded in another task instance's execution. We take\n * this opportunity to conditionally link up the tasks\n * so that when the parent or child cancels, the other\n * is cancelled.\n *\n * Given the following case:\n *\n * ```js\n * parentTask: task(function * () {\n * yield otherTask.perform();\n * })\n * ```\n *\n * Then the `parent` param is the task instance that is executing, `this`\n * is the `otherTask` task instance that was yielded.\n *\n * @private\n */\n onYielded(parent, resumeIndex) {\n this.asyncErrorsHandled = true;\n\n this.onFinalize(() => {\n let completionState = this.state.completionState;\n if (completionState === COMPLETION_SUCCESS) {\n parent.proceed(resumeIndex, YIELDABLE_CONTINUE, this.state.value);\n } else if (completionState === COMPLETION_ERROR) {\n parent.proceed(resumeIndex, YIELDABLE_THROW, this.state.error);\n } else if (completionState === COMPLETION_CANCEL) {\n parent.proceed(resumeIndex, YIELDABLE_CANCEL, null);\n }\n });\n\n let performType = this.getPerformType();\n if (performType === PERFORM_TYPE_UNLINKED) {\n return;\n }\n\n return () => {\n this.detectSelfCancelLoop(performType, parent);\n this.cancel(new CancelRequest(CANCEL_KIND_PARENT_CANCEL));\n };\n }\n\n getPerformType() {\n return this.taskInstance.performType || PERFORM_TYPE_DEFAULT;\n }\n\n detectSelfCancelLoop(performType, parent) {\n if (performType !== PERFORM_TYPE_DEFAULT) {\n return;\n }\n\n let parentCancelRequest = parent.executor && parent.executor.cancelRequest;\n\n // Detect that the parent was cancelled by a lifespan ending and\n // that the child is still running and not cancelled.\n if (\n parentCancelRequest &&\n parentCancelRequest.kind === CANCEL_KIND_LIFESPAN_END &&\n !this.cancelRequest &&\n !this.state.isFinished\n ) {\n this.taskInstance.selfCancelLoopWarning(parent);\n }\n }\n}\n","import { Taskable } from './taskable';\nimport {\n PERFORM_TYPE_DEFAULT,\n PERFORM_TYPE_LINKED,\n PERFORM_TYPE_UNLINKED,\n getRunningInstance,\n TaskInstanceExecutor,\n} from '../task-instance/executor';\n\nclass TaskLinkProxy {\n constructor(task, performType, linkedObject) {\n this.task = task;\n this.performType = performType;\n this.linkedObject = linkedObject;\n }\n\n perform(...args) {\n return this.task._performShared(args, this.performType, this.linkedObject);\n }\n}\n\nexport class Task extends Taskable {\n constructor(options) {\n super(options);\n this.generatorFactory = options.generatorFactory;\n this.perform = this._perform.bind(this);\n }\n\n linked() {\n let linkedObject = getRunningInstance();\n if (!linkedObject) {\n throw new Error(`You can only call .linked() from within a task.`);\n }\n\n return new TaskLinkProxy(this, PERFORM_TYPE_LINKED, linkedObject);\n }\n\n unlinked() {\n return new TaskLinkProxy(this, PERFORM_TYPE_UNLINKED, null);\n }\n\n toString() {\n return ``;\n }\n\n _clone() {\n return new Task({\n context: this.context,\n debug: this.debug,\n env: this.env,\n generatorFactory: this.generatorFactory,\n group: this.group,\n hasEnabledEvents: this.hasEnabledEvents,\n name: this.name,\n onStateCallback: this.onStateCallback,\n scheduler: this.scheduler,\n });\n }\n\n _curry(...args) {\n let task = this._clone();\n task._curryArgs = [...(this._curryArgs || []), ...args];\n return task;\n }\n\n _perform(...args) {\n return this._performShared(args, PERFORM_TYPE_DEFAULT, null);\n }\n\n _performShared(args, performType, linkedObject) {\n let fullArgs = this._curryArgs ? [...this._curryArgs, ...args] : args;\n let taskInstance = this._taskInstanceFactory(\n fullArgs,\n performType,\n linkedObject,\n );\n\n if (performType === PERFORM_TYPE_LINKED) {\n linkedObject._expectsLinkedYield = true;\n }\n\n if (!this._isAlive) {\n // a task linked to a dead lifetime should immediately cancel.\n taskInstance.cancel();\n }\n\n this.scheduler.perform(taskInstance);\n return taskInstance;\n }\n\n // eslint-disable-next-line no-unused-vars\n _taskInstanceOptions(args, performType, _linkedObject) {\n let generatorFactory = () => this.generatorFactory(args);\n let taskInstanceOptions = {\n task: this,\n args,\n executor: new TaskInstanceExecutor({\n generatorFactory,\n env: this.env,\n debug: this.debug,\n }),\n performType,\n hasEnabledEvents: this.hasEnabledEvents,\n };\n\n return taskInstanceOptions;\n }\n}\n","import { Taskable } from './taskable';\n\nexport class TaskGroup extends Taskable {}\n","export class Environment {\n assert() {}\n\n async(callback) {\n Promise.resolve().then(callback);\n }\n\n reportUncaughtRejection() {\n this.async((error) => {\n throw error;\n });\n }\n\n defer() {\n let deferable = {\n promise: null,\n resolve: null,\n reject: null,\n };\n\n let promise = new Promise((resolve, reject) => {\n deferable.resolve = resolve;\n deferable.reject = reject;\n });\n\n deferable.promise = promise;\n\n return deferable;\n }\n\n globalDebuggingEnabled() {\n return false;\n }\n}\n\nexport const DEFAULT_ENVIRONMENT = new Environment();\n","import Scheduler from './scheduler/scheduler';\nimport UnboundedSchedulerPolicy from './scheduler/policies/unbounded-policy';\nimport EnqueueSchedulerPolicy from './scheduler/policies/enqueued-policy';\nimport DropSchedulerPolicy from './scheduler/policies/drop-policy';\nimport KeepLatestSchedulerPolicy from './scheduler/policies/keep-latest-policy';\nimport RestartableSchedulerPolicy from './scheduler/policies/restartable-policy';\nimport { Task } from './task/task';\nimport { TaskGroup } from './task/task-group';\nimport { DEFAULT_ENVIRONMENT } from './environment';\n\nfunction assertModifiersNotMixedWithGroup(obj) {\n if (obj._hasSetConcurrencyConstraint && obj._taskGroupPath) {\n throw new Error(\n `Cannot use both 'group' and other concurrency-constraining task modifiers (e.g. 'drop', 'enqueue', 'restartable')`,\n );\n }\n}\n\nfunction assertUnsetBufferPolicy(obj) {\n if (obj._hasSetBufferPolicy) {\n throw new Error(\n `Cannot set multiple buffer policies on a task or task group. ${obj._schedulerPolicyClass} has already been set for task or task group '${obj.name}'`,\n );\n }\n}\n\nconst MODIFIER_REGISTRY = {\n enqueue: (factory, value) =>\n value && factory.setBufferPolicy(EnqueueSchedulerPolicy),\n evented: (factory, value) => value && factory.setEvented(value),\n debug: (factory, value) => value && factory.setDebug(value),\n drop: (factory, value) =>\n value && factory.setBufferPolicy(DropSchedulerPolicy),\n group: (factory, groupName) => factory.setGroup(groupName),\n keepLatest: (factory, value) =>\n value && factory.setBufferPolicy(KeepLatestSchedulerPolicy),\n maxConcurrency: (factory, maxConcurrency) =>\n factory.setMaxConcurrency(maxConcurrency),\n onState: (factory, onStateCallback) => factory.setOnState(onStateCallback),\n restartable: (factory, value) =>\n value && factory.setBufferPolicy(RestartableSchedulerPolicy),\n};\n\n/**\n * Callback type defining a task modifier\n *\n * @callback TaskFactory~TaskModifier\n * @param {TaskFactory} factory\n * @param {*} taskModifierOption\n */\n\n/**\n * Registers a new modifier with the modifier registry\n *\n * @param {string} name Name of the modifier\n * @param {TaskFactory~TaskModifier} callback\n */\nexport function registerModifier(name, callback) {\n if (MODIFIER_REGISTRY[name]) {\n throw new Error(\n `A modifier with the name '${name}' has already been defined.`,\n );\n }\n\n MODIFIER_REGISTRY[name] = callback;\n}\n\n/**\n * Returns a specified modifier, if it exists in the registry\n *\n * @param {string} name Name of the modifier\n * @returns {TaskFactory~TaskModifier?}\n */\nexport function getModifier(name) {\n return MODIFIER_REGISTRY[name];\n}\n\n/**\n * Returns whether a specified modifier exists in the registry\n *\n * @param {string} name Name of the modifier\n * @returns {boolean}\n */\nexport function hasModifier(name) {\n return name in MODIFIER_REGISTRY;\n}\n\n/**\n * Factory used for instantiating Tasks and Task Groups. Mostly for internal\n * use, but some public APIs exposed via the Task Modifier APIs.\n *\n * \n *\n * @class TaskFactory\n */\nexport class TaskFactory {\n env = DEFAULT_ENVIRONMENT;\n\n _debug = null;\n _enabledModifiers = [];\n _hasSetConcurrencyConstraint = false;\n _hasSetBufferPolicy = false;\n _hasEnabledEvents = false;\n _maxConcurrency = null;\n _onStateCallback = (state, taskable) => taskable.setState(state);\n _schedulerPolicyClass = UnboundedSchedulerPolicy;\n _taskGroupPath = null;\n\n constructor(name = '', taskDefinition = null, options = {}) {\n this.name = name;\n this.taskDefinition = taskDefinition;\n this.options = options;\n this._processModifierOptions(options);\n }\n\n /**\n * Returns a new Task bound to the given context\n *\n * @protected\n * @param {*} context\n * @returns {Task}\n */\n createTask(context) {\n let options = this.getTaskOptions(context);\n\n return new Task(\n Object.assign(\n {\n generatorFactory: (args) => this.taskDefinition.apply(context, args),\n },\n options,\n ),\n );\n }\n\n /**\n * Returns a new TaskGroup bound to the given context\n *\n * @protected\n * @param {*} context\n * @returns {Task}\n */\n createTaskGroup(context) {\n let options = this.getTaskOptions(context);\n\n return new TaskGroup(options);\n }\n\n /**\n * Returns a modifier callback with the given name bound to this TaskFactory,\n * if registered.\n *\n * @protected\n * @param {string} name\n * @returns {TaskFactory~TaskModifier?}\n */\n getModifier(name) {\n if (hasModifier(name)) {\n return MODIFIER_REGISTRY[name].bind(null, this);\n }\n }\n\n /**\n * Returns the options provided to TaskFactory\n *\n * @public\n * @returns {object}\n */\n getOptions() {\n return this.options;\n }\n\n /**\n * Returns a new Scheduler instance\n *\n * @protected\n * @param {*} schedulerPolicy\n * @param {boolean} stateTrackingEnabled\n * @returns {Scheduler}\n */\n getScheduler(schedulerPolicy, stateTrackingEnabled) {\n return new Scheduler(schedulerPolicy, stateTrackingEnabled);\n }\n\n /**\n * Returns the options to pass to a Task or TaskGroup constructor\n *\n * @protected\n * @param {*} context\n * @returns {object}\n */\n getTaskOptions(context) {\n let group, scheduler;\n let onStateCallback = this._onStateCallback;\n\n if (this._taskGroupPath) {\n group = context[this._taskGroupPath];\n if (!(group instanceof TaskGroup)) {\n throw new Error(\n `Expected group '${this._taskGroupPath}' to be defined but was not found.`,\n );\n }\n\n scheduler = group.scheduler;\n } else {\n let schedulerPolicy = new this._schedulerPolicyClass(\n this._maxConcurrency,\n );\n scheduler = this.getScheduler(\n schedulerPolicy,\n onStateCallback && typeof onStateCallback === 'function',\n );\n }\n\n return {\n context,\n debug: this._debug,\n env: this.env,\n name: this.name,\n group,\n scheduler,\n hasEnabledEvents: this._hasEnabledEvents,\n onStateCallback,\n enabledModifiers: this._enabledModifiers,\n modifierOptions: this.getOptions(),\n };\n }\n\n /**\n * Sets the Scheduler buffer policy class to the specified value.\n *\n * Will raise an assertion if a buffer policy has already been specified\n *\n * @param {*} policy\n * @returns {TaskFactory}\n */\n setBufferPolicy(policy) {\n assertUnsetBufferPolicy(this);\n this._hasSetBufferPolicy = true;\n this._hasSetConcurrencyConstraint = true;\n this._schedulerPolicyClass = policy;\n assertModifiersNotMixedWithGroup(this);\n\n return this;\n }\n\n /**\n * Sets debug mode\n *\n * @param {boolean} enabled\n * @returns {TaskFactory}\n */\n setDebug(enabled) {\n this._debug = enabled;\n return this;\n }\n\n /**\n * Sets whether Task will dispatch Task events or not\n *\n * @param {boolean} enabled\n * @returns {TaskFactory}\n */\n setEvented(enabled) {\n this._hasEnabledEvents = enabled;\n return this;\n }\n\n /**\n * Sets Scheduling policy's `maxConcurrency`\n *\n * @param {number} maxConcurrency\n * @returns {TaskFactory}\n */\n setMaxConcurrency(maxConcurrency) {\n this._hasSetConcurrencyConstraint = true;\n this._maxConcurrency = maxConcurrency;\n return this;\n }\n\n /**\n * Assigns Task created from this factory to the specified group name\n *\n * @param {string} group\n * @returns {TaskFactory}\n */\n setGroup(group) {\n this._taskGroupPath = group;\n return this;\n }\n\n /**\n * Sets the name of tasks created from this factory\n *\n * @param {string} name\n * @returns {TaskFactory}\n */\n setName(name) {\n this.name = name;\n return this;\n }\n\n /**\n * Sets the callback used on state updates. Can be set to null to disable\n * state tracking on tasks.\n *\n * @param {function} onStateCallback\n * @returns {TaskFactory}\n */\n setOnState(onStateCallback) {\n this._onStateCallback = onStateCallback;\n return this;\n }\n\n /**\n * Sets the definition for tasks created from this factory\n *\n * @param {*} taskDefinition\n * @returns {TaskFactory}\n */\n setTaskDefinition(taskDefinition) {\n this.taskDefinition = taskDefinition;\n return this;\n }\n\n _processModifierOptions(options) {\n if (!options) {\n return;\n }\n\n for (let key of Object.keys(options)) {\n let value = options[key];\n let modifier = this.getModifier(key);\n\n if (typeof modifier === 'function' && modifier(value)) {\n this._enabledModifiers.push(key);\n }\n }\n }\n}\n","import { INITIAL_STATE } from './initial-state';\nimport { yieldableSymbol } from '../yieldables';\nimport { CancelRequest, CANCEL_KIND_EXPLICIT } from './cancelation';\nconst EXPLICIT_CANCEL_REASON = '.cancel() was explicitly called';\n\nexport class BaseTaskInstance {\n constructor({ task, args, executor, performType, hasEnabledEvents }) {\n this.task = task;\n this.args = args;\n this.performType = performType;\n this.executor = executor;\n this.executor.taskInstance = this;\n this.hasEnabledEvents = hasEnabledEvents;\n }\n\n setState() {}\n onStarted() {}\n onSuccess() {}\n onError() {}\n onCancel() {}\n formatCancelReason() {}\n selfCancelLoopWarning() {}\n\n onFinalize(callback) {\n this.executor.onFinalize(callback);\n }\n\n proceed(index, yieldResumeType, value) {\n this.executor.proceedChecked(index, yieldResumeType, value);\n }\n\n [yieldableSymbol](parentTaskInstance, resumeIndex) {\n return this.executor.onYielded(parentTaskInstance, resumeIndex);\n }\n\n cancel(cancelReason = EXPLICIT_CANCEL_REASON) {\n this.executor.cancel(new CancelRequest(CANCEL_KIND_EXPLICIT, cancelReason));\n }\n\n then(...args) {\n return this.executor.promise().then(...args);\n }\n\n catch(...args) {\n return this.executor.promise().catch(...args);\n }\n\n finally(...args) {\n return this.executor.promise().finally(...args);\n }\n\n toString() {\n return `${this.task} TaskInstance`;\n }\n\n start() {\n this.executor.start();\n return this;\n }\n}\n\nObject.assign(BaseTaskInstance.prototype, INITIAL_STATE);\nObject.assign(BaseTaskInstance.prototype, {\n state: 'waiting',\n isDropped: false,\n isRunning: true,\n});\n","import { tracked } from '@glimmer/tracking';\nimport { DEFAULT_STATE as INITIAL_TASK_STATE } from './external/task/default-state';\nimport { INITIAL_STATE as INITIAL_INSTANCE_STATE } from './external/task-instance/initial-state';\n\nfunction trackMixin(proto, obj, key) {\n const propDesc = Object.getOwnPropertyDescriptor(proto, key);\n propDesc.initializer = propDesc.initializer || (() => proto[key]);\n delete propDesc.value;\n const desc = tracked(obj, key, propDesc);\n obj[key] = desc;\n return obj;\n}\n\nfunction applyTracked(proto, initial) {\n return Object.keys(proto).reduce((acc, key) => {\n return trackMixin(proto, acc, key);\n }, initial);\n}\n\nexport let TRACKED_INITIAL_TASK_STATE;\nexport let TRACKED_INITIAL_INSTANCE_STATE;\n\nTRACKED_INITIAL_TASK_STATE = applyTracked(INITIAL_TASK_STATE, {});\nTRACKED_INITIAL_TASK_STATE = applyTracked(\n {\n numRunning: 0,\n numQueued: 0,\n isRunning: false,\n isQueued: false,\n isIdle: true,\n state: 'idle',\n },\n TRACKED_INITIAL_TASK_STATE,\n);\n\nTRACKED_INITIAL_INSTANCE_STATE = applyTracked(INITIAL_INSTANCE_STATE, {});\nTRACKED_INITIAL_INSTANCE_STATE = applyTracked(\n {\n state: 'waiting',\n isDropped: false,\n isRunning: false,\n },\n TRACKED_INITIAL_INSTANCE_STATE,\n);\n\nObject.freeze(TRACKED_INITIAL_TASK_STATE);\nObject.freeze(TRACKED_INITIAL_INSTANCE_STATE);\n","import { BaseTaskInstance } from './external/task-instance/base';\nimport { TRACKED_INITIAL_INSTANCE_STATE } from './tracked-state';\n\n/**\n A `TaskInstance` represent a single execution of a\n {@linkcode Task}. Every call to {@linkcode Task#perform} returns\n a `TaskInstance`.\n\n `TaskInstance`s are cancelable, either explicitly\n via {@linkcode TaskInstance#cancel} or {@linkcode Task#cancelAll},\n or automatically due to the host object being destroyed, or\n because concurrency policy enforced by a\n {@linkcode TaskProperty Task Modifier} canceled the task instance.\n\n \n\n @class TaskInstance\n*/\n\nexport class TaskInstance extends BaseTaskInstance {\n setState(props) {\n let state = this._recomputeState(props);\n Object.assign(this, {\n ...props,\n isRunning: !props.isFinished,\n isDropped: state === 'dropped',\n state,\n });\n }\n\n _recomputeState(props) {\n if (props.isDropped) {\n return 'dropped';\n } else if (props.isCanceled) {\n if (props.hasStarted) {\n return 'canceled';\n } else {\n return 'dropped';\n }\n } else if (props.isFinished) {\n return 'finished';\n } else if (props.hasStarted) {\n return 'running';\n } else {\n return 'waiting';\n }\n }\n\n onStarted() {\n this.triggerEvent('started', this);\n }\n\n onSuccess() {\n this.triggerEvent('succeeded', this);\n }\n\n onError(error) {\n this.triggerEvent('errored', this, error);\n }\n\n onCancel(cancelReason) {\n this.triggerEvent('canceled', this, cancelReason);\n }\n\n formatCancelReason(reason) {\n return `TaskInstance '${this.getName()}' was canceled because ${reason}. For more information, see: http://ember-concurrency.com/docs/task-cancelation-help`;\n }\n\n getName() {\n if (!this.name) {\n this.name = (this.task && this.task.name) || '';\n }\n return this.name;\n }\n\n selfCancelLoopWarning(parent) {\n let parentName = `\\`${parent.getName()}\\``;\n let childName = `\\`${this.getName()}\\``;\n // eslint-disable-next-line no-console\n console.warn(\n `ember-concurrency detected a potentially hazardous \"self-cancel loop\" between parent task ${parentName} and child task ${childName}. If you want child task ${childName} to be canceled when parent task ${parentName} is canceled, please change \\`.perform()\\` to \\`.linked().perform()\\`. If you want child task ${childName} to keep running after parent task ${parentName} is canceled, change it to \\`.unlinked().perform()\\``,\n );\n }\n\n triggerEvent(...allArgs) {\n if (!this.hasEnabledEvents) {\n return;\n }\n\n let taskInstance = this;\n let task = taskInstance.task;\n let host = task.context;\n let eventNamespace = task && task.name;\n\n if (host && host.trigger && eventNamespace) {\n let [eventType, ...args] = allArgs;\n host.trigger(`${eventNamespace}:${eventType}`, ...args);\n }\n }\n\n /**\n * Describes the state that the task instance is in. Can be used for debugging,\n * or potentially driving some UI state. Possible values are:\n *\n * - `\"dropped\"`: task instance was canceled before it started\n * - `\"canceled\"`: task instance was canceled before it could finish\n * - `\"finished\"`: task instance ran to completion (even if an exception was thrown)\n * - `\"running\"`: task instance is currently running (returns true even if\n * is paused on a yielded promise)\n * - `\"waiting\"`: task instance hasn't begun running yet (usually\n * because the task is using the {@linkcode TaskProperty#enqueue enqueue}\n * task modifier)\n *\n * The animated timeline examples on the [Task Concurrency](/docs/task-concurrency)\n * docs page make use of this property.\n *\n * @name state\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n\n /**\n * True if the TaskInstance was canceled before it could\n * ever start running. For example, calling\n * {@linkcode Task#perform .perform()} twice on a\n * task with the {@linkcode TaskProperty#drop drop} modifier applied\n * will result in the second task instance being dropped.\n *\n * @name isDropped\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n\n /**\n * True if the task is still running.\n *\n * @name isRunning\n * @memberof TaskInstance\n * @instance\n * @readOnly\n */\n\n /**\n * Event emitted when a new {@linkcode TaskInstance} starts executing.\n *\n * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n *\n * ```js\n * export default Component.extend({\n * doSomething: task(function * () {\n * // ... does something\n * }),\n *\n * onDoSomethingStarted: on('doSomething:started', function (taskInstance) {\n * // ...\n * })\n * });\n * ```\n *\n * @event TaskInstance#TASK_NAME:started\n * @param {TaskInstance} taskInstance - Task instance that was started\n */\n\n /**\n * Event emitted when a {@linkcode TaskInstance} succeeds.\n *\n * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n *\n * ```js\n * export default Component.extend({\n * doSomething: task(function * () {\n * // ... does something\n * }),\n *\n * onDoSomethingSucceeded: on('doSomething:succeeded', function (taskInstance) {\n * // ...\n * })\n * });\n * ```\n *\n * @event TaskInstance#TASK_NAME:succeeded\n * @param {TaskInstance} taskInstance - Task instance that was succeeded\n */\n\n /**\n * Event emitted when a {@linkcode TaskInstance} throws an an error that is\n * not handled within the task itself.\n *\n * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n *\n * ```js\n * export default Component.extend({\n * doSomething: task(function * () {\n * // ... does something\n * }),\n *\n * onDoSomethingErrored: on('doSomething:errored', function (taskInstance, error) {\n * // ...\n * })\n * });\n * ```\n *\n * @event TaskInstance#TASK_NAME:errored\n * @param {TaskInstance} taskInstance - Task instance that was started\n * @param {Error} error - Error that was thrown by the task instance\n */\n\n /**\n * Event emitted when a {@linkcode TaskInstance} is canceled.\n *\n * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n *\n * ```js\n * export default Component.extend({\n * doSomething: task(function * () {\n * // ... does something\n * }),\n *\n * onDoSomethingCanceled: on('doSomething:canceled', function (taskInstance, cancelationReason) {\n * // ...\n * })\n * });\n * ```\n *\n * @event TaskInstance#TASK_NAME:canceled\n * @param {TaskInstance} taskInstance - Task instance that was started\n * @param {string} cancelationReason - Cancelation reason that was was provided to {@linkcode TaskInstance#cancel}\n */\n\n /**\n * Cancels the task instance. Has no effect if the task instance has\n * already been canceled or has already finished running.\n *\n * @method cancel\n * @memberof TaskInstance\n * @instance\n * @async\n */\n\n /**\n * Returns a promise that resolves with the value returned\n * from the task's (generator) function, or rejects with\n * either the exception thrown from the task function, or\n * an error with a `.name` property with value `\"TaskCancelation\"`.\n *\n * @method then\n * @memberof TaskInstance\n * @instance\n * @return {Promise}\n */\n\n /**\n * @method catch\n * @memberof TaskInstance\n * @instance\n * @return {Promise}\n */\n\n /**\n * @method finally\n * @memberof TaskInstance\n * @instance\n * @return {Promise}\n */\n}\n\nif (TRACKED_INITIAL_INSTANCE_STATE) {\n Object.defineProperties(\n TaskInstance.prototype,\n TRACKED_INITIAL_INSTANCE_STATE,\n );\n}\n","export const TASKABLE_MIXIN = {\n _performCount: 0,\n\n setState(state) {\n this._performCount = this._performCount + (state.numPerformedInc || 0);\n\n let isRunning = state.numRunning > 0;\n let isQueued = state.numQueued > 0;\n let derivedState = Object.assign({}, state, {\n performCount: this._performCount,\n isRunning,\n isQueued,\n isIdle: !isRunning && !isQueued,\n state: isRunning ? 'running' : 'idle',\n });\n Object.assign(this, derivedState);\n },\n\n onState(state, task) {\n if (task.onStateCallback) {\n task.onStateCallback(state, task);\n }\n },\n};\n","import { setOwner, getOwner } from '@ember/application';\nimport EmberObject, { get, set } from '@ember/object';\nimport { isDestroying, registerDestructor } from '@ember/destroyable';\nimport { Task as BaseTask } from './external/task/task';\nimport { TaskInstance } from './task-instance';\nimport { TaskInstanceExecutor } from './external/task-instance/executor';\nimport { TASKABLE_MIXIN } from './taskable-mixin';\nimport { TRACKED_INITIAL_TASK_STATE } from './tracked-state';\nimport { CANCEL_KIND_LIFESPAN_END } from './external/task-instance/cancelation';\n\n/**\n The `Task` object lives on a host Ember object (e.g.\n a Component, Route, or Controller). You call the\n {@linkcode Task#perform .perform()} method on this object\n to create run individual {@linkcode TaskInstance}s,\n and at any point, you can call the {@linkcode Task#cancelAll .cancelAll()}\n method on this object to cancel all running or enqueued\n {@linkcode TaskInstance}s.\n\n \n\n @class Task\n*/\nexport class Task extends BaseTask {\n /**\n * `true` if any current task instances are running.\n *\n * @memberof Task\n * @member {boolean} isRunning\n * @instance\n * @readOnly\n */\n /**\n * `true` if any future task instances are queued.\n *\n * @memberof Task\n * @member {boolean} isQueued\n * @instance\n * @readOnly\n */\n /**\n * `true` if the task is not in the running or queued state.\n *\n * @memberof Task\n * @member {boolean} isIdle\n * @instance\n * @readOnly\n */\n /**\n * The current state of the task: `\"running\"`, `\"queued\"` or `\"idle\"`.\n *\n * @memberof Task\n * @member {string} state\n * @instance\n * @readOnly\n */\n /**\n * The most recently started task instance.\n *\n * @memberof Task\n * @member {TaskInstance} last\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that is currently running.\n *\n * @memberof Task\n * @member {TaskInstance} lastRunning\n * @instance\n * @readOnly\n */\n /**\n * The most recently performed task instance.\n *\n * @memberof Task\n * @member {TaskInstance} lastPerformed\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that succeeded.\n *\n * @memberof Task\n * @member {TaskInstance} lastSuccessful\n * @instance\n * @readOnly\n */\n /**\n * The most recently completed task instance.\n *\n * @memberof Task\n * @member {TaskInstance} lastComplete\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that errored.\n *\n * @memberof Task\n * @member {TaskInstance} lastErrored\n * @instance\n * @readOnly\n */\n /**\n * The most recently canceled task instance.\n *\n * @memberof Task\n * @member {TaskInstance} lastCanceled\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that is incomplete.\n *\n * @memberof Task\n * @member {TaskInstance} lastIncomplete\n * @instance\n * @readOnly\n */\n /**\n * The number of times this task has been performed.\n *\n * @memberof Task\n * @member {number} performCount\n * @instance\n * @readOnly\n */\n\n constructor(options) {\n super(options);\n\n if (!isDestroying(this.context)) {\n registerDestructor(this.context, () => {\n this.cancelAll({\n reason: 'the object it lives on was destroyed or unrendered',\n cancelRequestKind: CANCEL_KIND_LIFESPAN_END,\n });\n });\n }\n }\n\n /**\n * Flags the task as linked to the parent task's lifetime. Must be called\n * within another task's perform function. The task will be cancelled if the\n * parent task is canceled as well.\n *\n * ember-concurrency will indicate when this may be needed.\n *\n * @method linked\n * @memberof Task\n * @instance\n *\n */\n\n /**\n * Flags the task as not linked to the parent task's lifetime. Must be called\n * within another task's perform function. The task will NOT be cancelled if the\n * parent task is canceled.\n *\n * This is useful for avoiding the so-called \"self-cancel loop\" for tasks.\n * ember-concurrency will indicate when this may be needed.\n *\n * @method unlinked\n * @memberof Task\n * @instance\n *\n */\n\n /**\n * Creates a new {@linkcode TaskInstance} and attempts to run it right away.\n * If running this task instance would increase the task's concurrency\n * to a number greater than the task's maxConcurrency, this task\n * instance might be immediately canceled (dropped), or enqueued\n * to run at later time, after the currently running task(s) have finished.\n *\n * @method perform\n * @memberof Task\n * @param {*} arg* - args to pass to the task function\n * @instance\n *\n * @fires TaskInstance#TASK_NAME:started\n * @fires TaskInstance#TASK_NAME:succeeded\n * @fires TaskInstance#TASK_NAME:errored\n * @fires TaskInstance#TASK_NAME:canceled\n *\n */\n\n /**\n * Cancels all running or queued `TaskInstance`s for this Task.\n * If you're trying to cancel a specific TaskInstance (rather\n * than all of the instances running under this task) call\n * `.cancel()` on the specific TaskInstance.\n *\n * @method cancelAll\n * @memberof Task\n * @param options.reason A descriptive reason the task was\n * cancelled. Defaults to `\".cancelAll() was explicitly called\n * on the Task\"`.\n * @param options.resetState If true, will clear the task state\n * (`last*` and `performCount` properties will be set to initial\n * values). Defaults to false.\n * @instance\n * @async\n *\n */\n\n get _isAlive() {\n return !isDestroying(this.context);\n }\n\n _taskInstanceFactory(args, performType, linkedObject) {\n let options = this._taskInstanceOptions(args, performType, linkedObject);\n let taskInstance = new TaskInstance(options);\n return taskInstance;\n }\n\n _clone() {\n return new Task({\n context: this.context,\n debug: this.debug,\n env: this.env,\n generatorFactory: this.generatorFactory,\n group: this.group,\n hasEnabledEvents: this.hasEnabledEvents,\n name: this.name,\n onStateCallback: this.onStateCallback,\n scheduler: this.scheduler,\n });\n }\n}\n\nif (TRACKED_INITIAL_TASK_STATE) {\n Object.defineProperties(Task.prototype, TRACKED_INITIAL_TASK_STATE);\n}\n\nObject.assign(Task.prototype, TASKABLE_MIXIN);\n\nconst currentTaskInstanceSymbol = '__ec__encap_current_ti';\nexport class EncapsulatedTask extends Task {\n constructor(options) {\n super(options);\n this.taskObj = options.taskObj;\n this._encapsulatedTaskStates = new WeakMap();\n this._encapsulatedTaskInstanceProxies = new WeakMap();\n }\n\n _getEncapsulatedTaskClass() {\n let encapsulatedTaskImplClass = this._encapsulatedTaskImplClass;\n\n if (!encapsulatedTaskImplClass) {\n // eslint-disable-next-line ember/no-classic-classes\n encapsulatedTaskImplClass = EmberObject.extend(this.taskObj, {\n unknownProperty(key) {\n let currentInstance = this[currentTaskInstanceSymbol];\n return currentInstance ? currentInstance[key] : undefined;\n },\n });\n }\n\n return encapsulatedTaskImplClass;\n }\n\n _taskInstanceFactory(args, performType) {\n let owner = getOwner(this.context);\n let taskInstanceProxy;\n let encapsulatedTaskImpl = this._getEncapsulatedTaskClass().create({\n context: this.context,\n });\n setOwner(encapsulatedTaskImpl, owner);\n\n let generatorFactory = () =>\n encapsulatedTaskImpl.perform.apply(taskInstanceProxy, args);\n let taskInstance = new TaskInstance({\n task: this,\n args,\n executor: new TaskInstanceExecutor({\n generatorFactory,\n env: this.env,\n debug: this.debug,\n }),\n performType,\n hasEnabledEvents: this.hasEnabledEvents,\n });\n encapsulatedTaskImpl[currentTaskInstanceSymbol] = taskInstance;\n\n this._encapsulatedTaskStates.set(taskInstance, encapsulatedTaskImpl);\n\n taskInstanceProxy = this._wrappedEncapsulatedTaskInstance(taskInstance);\n\n return taskInstanceProxy;\n }\n\n _wrappedEncapsulatedTaskInstance(taskInstance) {\n if (!taskInstance) {\n return null;\n }\n\n let _encapsulatedTaskInstanceProxies =\n this._encapsulatedTaskInstanceProxies;\n let proxy = _encapsulatedTaskInstanceProxies.get(taskInstance);\n\n if (!proxy) {\n let encapsulatedTaskImpl = this._encapsulatedTaskStates.get(taskInstance);\n\n proxy = new Proxy(taskInstance, {\n get(obj, prop) {\n return prop in obj\n ? obj[prop]\n : get(encapsulatedTaskImpl, prop.toString());\n },\n set(obj, prop, value) {\n if (prop in obj) {\n obj[prop] = value;\n } else {\n set(encapsulatedTaskImpl, prop.toString(), value);\n }\n return true;\n },\n has(obj, prop) {\n return prop in obj || prop in encapsulatedTaskImpl;\n },\n ownKeys(obj) {\n return Reflect.ownKeys(obj).concat(\n Reflect.ownKeys(encapsulatedTaskImpl),\n );\n },\n defineProperty(obj, prop, descriptor) {\n // Ember < 3.16 uses a WeakMap for value storage, keyed to the proxy.\n // We need to ensure that when we use setProperties to update it, and\n // it creates Meta, that it uses the proxy to key, otherwise we'll\n // have two different values stores in Meta, one which won't render.\n let proxy = _encapsulatedTaskInstanceProxies.get(taskInstance);\n if (proxy) {\n if (descriptor.get) {\n descriptor.get = descriptor.get.bind(proxy);\n } else if (proxy && descriptor.set) {\n descriptor.set = descriptor.set.bind(proxy);\n }\n }\n\n return Reflect.defineProperty(encapsulatedTaskImpl, prop, descriptor);\n },\n getOwnPropertyDescriptor(obj, prop) {\n return prop in obj\n ? Reflect.getOwnPropertyDescriptor(obj, prop)\n : Reflect.getOwnPropertyDescriptor(encapsulatedTaskImpl, prop);\n },\n });\n\n _encapsulatedTaskInstanceProxies.set(taskInstance, proxy);\n }\n\n return proxy;\n }\n}\n","import Ember from 'ember';\n\nimport { computed } from '@ember/object';\n\nimport EnqueueSchedulerPolicy from './external/scheduler/policies/enqueued-policy';\nimport DropSchedulerPolicy from './external/scheduler/policies/drop-policy';\nimport KeepLatestSchedulerPolicy from './external/scheduler/policies/keep-latest-policy';\nimport RestartableSchedulerPolicy from './external/scheduler/policies/restartable-policy';\n\nexport let taskFactorySymbol = '__ec_task_factory';\n\nexport const propertyModifiers = {\n /**\n * Configures the task to cancel old currently task instances\n * to make room for a new one to perform. Sets default\n * maxConcurrency to 1.\n *\n * [See the Live Example](/docs/examples/route-tasks/1)\n *\n * @method restartable\n * @memberof TaskProperty\n * @instance\n */\n restartable() {\n this[taskFactorySymbol].setBufferPolicy(RestartableSchedulerPolicy);\n return this;\n },\n\n /**\n * Configures the task to run task instances one-at-a-time in\n * the order they were `.perform()`ed. Sets default\n * maxConcurrency to 1.\n *\n * @method enqueue\n * @memberof TaskProperty\n * @instance\n */\n enqueue() {\n this[taskFactorySymbol].setBufferPolicy(EnqueueSchedulerPolicy);\n return this;\n },\n\n /**\n * Configures the task to immediately cancel (i.e. drop) any\n * task instances performed when the task is already running\n * at maxConcurrency. Sets default maxConcurrency to 1.\n *\n * @method drop\n * @memberof TaskProperty\n * @instance\n */\n drop() {\n this[taskFactorySymbol].setBufferPolicy(DropSchedulerPolicy);\n return this;\n },\n\n /**\n * Configures the task to drop all but the most recently\n * performed {@linkcode TaskInstance }.\n *\n * @method keepLatest\n * @memberof TaskProperty\n * @instance\n */\n keepLatest() {\n this[taskFactorySymbol].setBufferPolicy(KeepLatestSchedulerPolicy);\n return this;\n },\n\n /**\n * Sets the maximum number of task instances that are allowed\n * to run at the same time. By default, with no task modifiers\n * applied, this number is Infinity (there is no limit\n * to the number of tasks that can run at the same time).\n * {@linkcode TaskProperty#restartable .restartable},\n * {@linkcode TaskProperty#enqueue .enqueue}, and\n * {@linkcode TaskProperty#drop .drop} set the default\n * maxConcurrency to 1, but you can override this value\n * to set the maximum number of concurrently running tasks\n * to a number greater than 1.\n *\n * [See the AJAX Throttling example](/docs/examples/ajax-throttling)\n *\n * The example below uses a task with `maxConcurrency(3)` to limit\n * the number of concurrent AJAX requests (for anyone using this task)\n * to 3.\n *\n * ```js\n * doSomeAjax: task(function * (url) {\n * return fetch(url);\n * }).maxConcurrency(3),\n *\n * elsewhere() {\n * this.doSomeAjax.perform(\"http://www.example.com/json\");\n * },\n * ```\n *\n * @method maxConcurrency\n * @memberof TaskProperty\n * @param {Number} n The maximum number of concurrently running tasks\n * @instance\n */\n maxConcurrency(n) {\n this[taskFactorySymbol].setMaxConcurrency(n);\n return this;\n },\n\n /**\n * Adds this task to a TaskGroup so that concurrency constraints\n * can be shared between multiple tasks.\n *\n * [See the Task Group docs for more information](/docs/task-groups)\n *\n * @method group\n * @memberof TaskProperty\n * @param {String} groupPath A path to the TaskGroup property\n * @instance\n */\n group(taskGroupPath) {\n this[taskFactorySymbol].setGroup(taskGroupPath);\n return this;\n },\n\n /**\n * Activates lifecycle events, allowing Evented host objects to react to task state\n * changes.\n *\n * ```js\n *\n * export default Component.extend({\n * uploadTask: task(function* (file) {\n * // ... file upload stuff\n * }).evented(),\n *\n * uploadedStarted: on('uploadTask:started', function(taskInstance) {\n * this.analytics.track(\"User Photo: upload started\");\n * }),\n * });\n * ```\n *\n * @method evented\n * @memberof TaskProperty\n * @instance\n */\n evented() {\n this[taskFactorySymbol].setEvented(true);\n return this;\n },\n\n /**\n * Logs lifecycle events to aid in debugging unexpected Task behavior.\n * Presently only logs cancelation events and the reason for the cancelation,\n * e.g. \"TaskInstance 'doStuff' was canceled because the object it lives on was destroyed or unrendered\"\n *\n * @method debug\n * @memberof TaskProperty\n * @instance\n */\n debug() {\n this[taskFactorySymbol].setDebug(true);\n return this;\n },\n\n /**\n * Configures the task to call the passed in callback for derived state updates,\n * overriding the default derived state tracking. You may call with `null` to\n * completely opt-out of derived state tracking.\n *\n * @method onState\n * @memberof TaskProperty\n * @param {function?} callback Callback to be called. Receives an object argument with the new state.\n * @instance\n */\n onState(callback) {\n this[taskFactorySymbol].setOnState(callback);\n return this;\n },\n};\n\n/**\n A {@link TaskProperty} is the Computed Property-like object returned\n from the {@linkcode task} function. You can call Task Modifier methods\n on this object to configure the behavior of the {@link Task}.\n\n See [Managing Task Concurrency](/docs/task-concurrency) for an\n overview of all the different task modifiers you can use and how\n they impact automatic cancelation / enqueueing of task instances.\n\n {@link TaskProperty} is only used for supporting \"classic\" Ember objects.\n When using Native JavaScript or TypeScript classes, you will use [task decorators](/docs/task-decorators)\n on methods instead.\n\n @class TaskProperty\n*/\nexport class TaskProperty {}\nexport class TaskGroupProperty {}\n\nObject.assign(TaskGroupProperty.prototype, propertyModifiers);\nObject.assign(TaskProperty.prototype, propertyModifiers, {\n setup(proto, key) {\n if (this.callSuperSetup) {\n this.callSuperSetup(...arguments);\n }\n\n this[taskFactorySymbol].setName(key);\n this[taskFactorySymbol]._setupEmberKVO(proto);\n },\n\n /**\n * Calling `task(...).on(eventName)` configures the task to be\n * automatically performed when the specified events fire. In\n * this way, it behaves like\n * [Ember.on](http://emberjs.com/api/classes/Ember.html#method_on).\n *\n * You can use `task(...).on('init')` to perform the task\n * when the host object is initialized.\n *\n * ```js\n * export default Component.extend({\n * pollForUpdates: task(function * () {\n * // ... this runs when the Component is first created\n * // because we specified .on('init')\n * }).on('init'),\n *\n * handleFoo: task(function * (a, b, c) {\n * // this gets performed automatically if the 'foo'\n * // event fires on this Component,\n * // e.g., if someone called component.trigger('foo')\n * }).on('foo'),\n * });\n * ```\n *\n * @method on\n * @memberof TaskProperty\n * @param {String} eventNames*\n * @instance\n */\n on() {\n this[taskFactorySymbol].addPerformEvents(...arguments);\n return this;\n },\n\n /**\n * This behaves like the {@linkcode TaskProperty#on task(...).on() modifier},\n * but instead will cause the task to be canceled if any of the\n * specified events fire on the parent object.\n *\n * [See the Live Example](/docs/examples/route-tasks/1)\n *\n * @method cancelOn\n * @memberof TaskProperty\n * @param {String} eventNames*\n * @instance\n */\n cancelOn() {\n this[taskFactorySymbol].addCancelEvents(...arguments);\n return this;\n },\n\n /**\n * This behaves like the {@linkcode TaskProperty#on task(...).on() modifier},\n * but instead will cause the task to be performed if any of the\n * specified properties on the parent object change.\n *\n * @method observes\n * @memberof TaskProperty\n * @param {String} keys*\n * @instance\n */\n observes() {\n this[taskFactorySymbol].addObserverKeys(...arguments);\n return this;\n },\n});\n\nconst setDecorator = Ember._setClassicDecorator || Ember._setComputedDecorator;\nexport function taskComputed(fn) {\n let cp = function (proto, key) {\n if (cp.setup !== undefined) {\n cp.setup(proto, key);\n }\n\n return computed(fn)(...arguments);\n };\n\n setDecorator(cp);\n\n return cp;\n}\n","import { TaskGroup as TaskGroupBase } from './external/task/task-group';\nimport { TASKABLE_MIXIN } from './taskable-mixin';\nimport { TRACKED_INITIAL_TASK_STATE } from './tracked-state';\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * Turns the decorated property into a task group.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task group. For instance `maxConcurrency` or `keepLatest`.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @taskGroup({ maxConcurrency: 5 }) chores;\n *\n * @task({ group: 'chores' })\n * *mowLawn() {}\n *\n * @task({ group: 'chores' })\n * *doDishes() {}\n * }\n * ```\n *\n * \n *\n * @class TaskGroup\n */\nexport class TaskGroup extends TaskGroupBase {\n /**\n * Cancels all running or queued `TaskInstance`s for this task group.\n * If you're trying to cancel a specific TaskInstance (rather\n * than all of the instances running under this task group) call\n * `.cancel()` on the specific TaskInstance.\n *\n * @method cancelAll\n * @memberof TaskGroup\n * @param options.reason A descriptive reason the task group was\n * cancelled. Defaults to `\".cancelAll() was explicitly called\n * on the Task\"`.\n * @param options.resetState If true, will clear the task group state\n * (`last*` and `performCount` properties will be set to initial\n * values). Defaults to false.\n * @instance\n * @async\n *\n */\n /**\n * `true` if any current task instances are running.\n *\n * @memberof TaskGroup\n * @member {boolean} isRunning\n * @instance\n * @readOnly\n */\n /**\n * `true` if any future task instances are queued.\n *\n * @memberof TaskGroup\n * @member {boolean} isQueued\n * @instance\n * @readOnly\n */\n /**\n * `true` if the task is not in the running or queued state.\n *\n * @memberof TaskGroup\n * @member {boolean} isIdle\n * @instance\n * @readOnly\n */\n /**\n * The current state of the task: `\"running\"`, `\"queued\"` or `\"idle\"`.\n *\n * @memberof TaskGroup\n * @member {string} state\n * @instance\n * @readOnly\n */\n /**\n * The most recently started task instance.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} last\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that is currently running.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastRunning\n * @instance\n * @readOnly\n */\n /**\n * The most recently performed task instance.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastPerformed\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that succeeded.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastSuccessful\n * @instance\n * @readOnly\n */\n /**\n * The most recently completed task instance.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastComplete\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that errored.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastErrored\n * @instance\n * @readOnly\n */\n /**\n * The most recently canceled task instance.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastCanceled\n * @instance\n * @readOnly\n */\n /**\n * The most recent task instance that is incomplete.\n *\n * @memberof TaskGroup\n * @member {TaskInstance} lastIncomplete\n * @instance\n * @readOnly\n */\n /**\n * The number of times this task has been performed.\n *\n * @memberof TaskGroup\n * @member {number} performCount\n * @instance\n * @readOnly\n */\n}\n\nif (TRACKED_INITIAL_TASK_STATE) {\n Object.defineProperties(TaskGroup.prototype, TRACKED_INITIAL_TASK_STATE);\n}\n\nObject.assign(TaskGroup.prototype, TASKABLE_MIXIN);\n","import Scheduler from '../external/scheduler/scheduler';\nimport { once } from '@ember/runloop';\n\nclass EmberScheduler extends Scheduler {\n scheduleRefresh() {\n once(this, this.refresh);\n }\n}\n\nexport default EmberScheduler;\n","import Ember from 'ember';\nimport { defer } from 'rsvp';\nimport { Environment } from './external/environment';\nimport { assert } from '@ember/debug';\nimport { join, next, schedule } from '@ember/runloop';\n\nexport class EmberEnvironment extends Environment {\n assert(...args) {\n assert(...args);\n }\n\n async(callback) {\n join(() => schedule('actions', callback));\n }\n\n reportUncaughtRejection(error) {\n next(null, function () {\n if (Ember.onerror) {\n Ember.onerror(error);\n } else {\n throw error;\n }\n });\n }\n\n defer() {\n return defer();\n }\n\n globalDebuggingEnabled() {\n return Ember.ENV.DEBUG_TASKS;\n }\n}\n\nexport const EMBER_ENVIRONMENT = new EmberEnvironment();\n","import { assert } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { addListener } from '@ember/object/events';\nimport { addObserver } from '@ember/object/observers';\nimport { scheduleOnce } from '@ember/runloop';\nimport {\n registerModifier,\n TaskFactory as BaseTaskFactory,\n} from './external/task-factory';\n\nimport { Task, EncapsulatedTask } from './task';\nimport { TaskProperty } from './task-properties';\nimport { TaskGroup } from './task-group';\nimport EmberScheduler from './scheduler/ember-scheduler';\nimport { EMBER_ENVIRONMENT } from './ember-environment';\n\nlet handlerCounter = 0;\n\nfunction registerOnPrototype(\n addListenerOrObserver,\n proto,\n names,\n taskName,\n taskMethod,\n once,\n) {\n if (names && names.length > 0) {\n for (let i = 0; i < names.length; ++i) {\n let name = names[i];\n\n let handlerName = `__ember_concurrency_handler_${handlerCounter++}`;\n proto[handlerName] = makeTaskCallback(taskName, taskMethod, once);\n addListenerOrObserver(proto, name, null, handlerName);\n }\n }\n}\n\nfunction makeTaskCallback(taskName, method, once) {\n return function () {\n let task = get(this, taskName);\n\n if (once) {\n scheduleOnce('actions', task, method, ...arguments);\n } else {\n task[method].apply(task, arguments);\n }\n };\n}\n\nconst ensureArray = (possibleArr) =>\n Array.isArray(possibleArr) ? possibleArr : [possibleArr];\n\nregisterModifier('cancelOn', (factory, eventNames) =>\n factory.addCancelEvents(...ensureArray(eventNames)),\n);\nregisterModifier('observes', (factory, propertyPaths) =>\n factory.addObserverKeys(...ensureArray(propertyPaths)),\n);\nregisterModifier('on', (factory, eventNames) =>\n factory.addPerformEvents(...ensureArray(eventNames)),\n);\n\nexport class TaskFactory extends BaseTaskFactory {\n env = EMBER_ENVIRONMENT;\n\n createTask(context) {\n assert(\n `Cannot create task if a task definition is not provided as generator function or encapsulated task.`,\n this.taskDefinition,\n );\n\n let options = this.getTaskOptions(context);\n\n if (typeof this.taskDefinition === 'object') {\n return new EncapsulatedTask(\n Object.assign({ taskObj: this.taskDefinition }, options),\n );\n } else {\n return new Task(\n Object.assign(\n {\n generatorFactory: (args) =>\n this.taskDefinition.apply(context, args),\n },\n options,\n ),\n );\n }\n }\n\n createTaskGroup(context) {\n assert(\n `A task definition is not expected for a task group.`,\n !this.taskDefinition,\n );\n let options = this.getTaskOptions(context);\n\n return new TaskGroup(options);\n }\n\n addCancelEvents(...cancelEventNames) {\n this._cancelEventNames = this._cancelEventNames || [];\n this._cancelEventNames.push(...cancelEventNames);\n return this;\n }\n\n addObserverKeys(...keys) {\n this._observes = this._observes || [];\n this._observes.push(...keys);\n return this;\n }\n\n addPerformEvents(...eventNames) {\n this._eventNames = this._eventNames || [];\n this._eventNames.push(...eventNames);\n return this;\n }\n\n getModifier(name) {\n let modifier = super.getModifier(name);\n if (!modifier && typeof TaskProperty.prototype[name] === 'function') {\n // Shim for compatibility with user-defined TaskProperty prototype\n // extensions. To be removed when replaced with proper public API.\n modifier = TaskProperty.prototype[name].bind(this);\n }\n\n assert(\n `Task option '${name}' is not recognized as a supported option.`,\n modifier,\n );\n\n return modifier;\n }\n\n getScheduler(schedulerPolicy, stateTrackingEnabled) {\n return new EmberScheduler(schedulerPolicy, stateTrackingEnabled);\n }\n\n _setupEmberKVO(proto) {\n // TODO: Does this make sense in a post-Ember object world?\n\n registerOnPrototype(\n addListener,\n proto,\n this._eventNames,\n this.name,\n 'perform',\n false,\n );\n registerOnPrototype(\n addListener,\n proto,\n this._cancelEventNames,\n this.name,\n 'cancelAll',\n false,\n );\n registerOnPrototype(\n addObserver,\n proto,\n this._observes,\n this.name,\n 'perform',\n true,\n );\n }\n\n // Provided for compatibility with ember-concurrency TaskProperty extension\n // methods\n get taskFn() {\n return this.taskDefinition;\n }\n\n set taskFn(fn) {\n this.setTaskDefinition(fn);\n }\n}\n","import { later, cancel } from '@ember/runloop';\nimport { EMBER_ENVIRONMENT } from './ember-environment';\nimport { Yieldable } from './external/yieldables';\n\nexport function isEventedObject(c) {\n return (\n c &&\n ((typeof c.one === 'function' && typeof c.off === 'function') ||\n (typeof c.on === 'function' && typeof c.off === 'function') ||\n (typeof c.addEventListener === 'function' &&\n typeof c.removeEventListener === 'function'))\n );\n}\n\nexport class EmberYieldable extends Yieldable {\n _deferable() {\n return EMBER_ENVIRONMENT.defer();\n }\n}\n\nclass TimeoutYieldable extends EmberYieldable {\n constructor(ms) {\n super();\n this.ms = ms;\n }\n\n onYield(state) {\n let timerId = later(() => state.next(), this.ms);\n\n return () => cancel(timerId);\n }\n}\n\n/**\n *\n * Yielding `timeout(ms)` will pause a task for the duration\n * of time passed in, in milliseconds.\n *\n * This timeout will be scheduled on the Ember runloop, which\n * means that test helpers will wait for it to complete before\n * continuing with the test. See `rawTimeout()` if you need\n * different behavior.\n *\n * The task below, when performed, will print a message to the\n * console every second.\n *\n * ```js\n * export default class MyComponent extends Component {\n * @task *myTask() {\n * while (true) {\n * console.log(\"Hello!\");\n * yield timeout(1000);\n * }\n * }\n * }\n * ```\n *\n * @param {number} ms - the amount of time to sleep before resuming\n * the task, in milliseconds\n */\nexport function timeout(ms) {\n return new TimeoutYieldable(ms);\n}\n\nexport function deprecatePrivateModule(moduleName) {\n // eslint-disable-next-line no-console\n console.warn(\n `an Ember addon is importing a private ember-concurrency module '${moduleName}' that has moved`,\n );\n}\n","import { TaskFactory } from './task-factory';\n\nfunction taskFromPropertyDescriptor(\n target,\n key,\n descriptor,\n params = [],\n factoryClass = TaskFactory,\n) {\n let { initializer, get, value } = descriptor;\n let taskFn;\n\n if (initializer) {\n taskFn = initializer.call(undefined);\n } else if (get) {\n taskFn = get.call(undefined);\n } else if (value) {\n taskFn = value;\n }\n\n taskFn.displayName = `${key} (task)`;\n\n let tasks = new WeakMap();\n let options = params[0] || {};\n let factory = new factoryClass(key, taskFn, options);\n factory._setupEmberKVO(target);\n\n return {\n get() {\n let task = tasks.get(this);\n\n if (!task) {\n task = factory.createTask(this);\n tasks.set(this, task);\n }\n\n return task;\n },\n };\n}\n\nfunction taskGroupPropertyDescriptor(\n _target,\n key,\n _descriptor,\n params = [],\n factoryClass = TaskFactory,\n) {\n let taskGroups = new WeakMap();\n let options = params[0] || {};\n let factory = new factoryClass(key, null, options);\n\n return {\n get() {\n let task = taskGroups.get(this);\n\n if (!task) {\n task = factory.createTaskGroup(this);\n taskGroups.set(this, task);\n }\n\n return task;\n },\n };\n}\n\n// Cribbed from @ember-decorators/utils\nfunction isFieldDescriptor(possibleDesc) {\n let [target, key, desc] = possibleDesc;\n\n return (\n possibleDesc.length === 3 &&\n typeof target === 'object' &&\n target !== null &&\n typeof key === 'string' &&\n ((typeof desc === 'object' &&\n desc !== null &&\n 'enumerable' in desc &&\n 'configurable' in desc) ||\n desc === undefined) // TS compatibility ???\n );\n}\n\nexport function decoratorWithParams(descriptorFn) {\n return function (...params) {\n if (isFieldDescriptor(params)) {\n return descriptorFn(...params);\n } else {\n return (...desc) => descriptorFn(...desc, params);\n }\n };\n}\n\nfunction createDecorator(fn, baseOptions = {}, factoryClass = TaskFactory) {\n return decoratorWithParams((target, key, descriptor, [userOptions] = []) => {\n let mergedOptions = Object.assign({}, { ...baseOptions, ...userOptions });\n\n return fn(target, key, descriptor, [mergedOptions], factoryClass);\n });\n}\n\nexport function createTaskDecorator(\n baseOptions = {},\n factoryClass = TaskFactory,\n) {\n return createDecorator(taskFromPropertyDescriptor, baseOptions, factoryClass);\n}\n\nexport function createTaskGroupDecorator(\n baseOptions = {},\n factoryClass = TaskFactory,\n) {\n return createDecorator(\n taskGroupPropertyDescriptor,\n baseOptions,\n factoryClass,\n );\n}\n\nexport const lastValue = decoratorWithParams(\n (_target, _key, descriptor, [taskName] = []) => {\n const { initializer } = descriptor;\n delete descriptor.initializer;\n\n return {\n get() {\n let lastInstance = this[taskName].lastSuccessful;\n\n if (lastInstance) {\n return lastInstance.value;\n }\n\n if (initializer) {\n return initializer.call(this);\n }\n\n return undefined;\n },\n };\n },\n);\n","import { assert } from '@ember/debug';\nimport RSVP, { Promise } from 'rsvp';\nimport { TaskInstance } from './task-instance';\nimport { cancelableSymbol, Yieldable } from './external/yieldables';\n\n/**\n * A cancelation-aware variant of [Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all).\n * The normal version of a `Promise.all` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `all()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `all()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `all` will be canceled\n * - if any of the {@linkcode TaskInstance}s (or regular promises) passed in reject (or\n * are canceled), all of the other unfinished `TaskInstance`s will\n * be automatically canceled.\n *\n * [Check out the \"Awaiting Multiple Child Tasks example\"](/docs/examples/joining-tasks)\n */\nexport const all = taskAwareVariantOf(RSVP.Promise, 'all', identity);\n\n/**\n * A cancelation-aware variant of [RSVP.allSettled](https://api.emberjs.com/ember/release/functions/rsvp/allSettled).\n * The normal version of a `RSVP.allSettled` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `allSettled()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `allSettled()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `allSettled` will be canceled\n */\nexport const allSettled = taskAwareVariantOf(RSVP, 'allSettled', identity);\n\n/**\n * A cancelation-aware variant of [Promise.race](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race).\n * The normal version of a `Promise.race` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `race()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `race()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `race` will be canceled\n * - once any of the tasks/promises passed in complete (either success, failure,\n * or cancelation), any of the {@linkcode TaskInstance}s passed in will be canceled\n *\n * [Check out the \"Awaiting Multiple Child Tasks example\"](/docs/examples/joining-tasks)\n */\nexport const race = taskAwareVariantOf(Promise, 'race', identity);\n\n/**\n * A cancelation-aware variant of [RSVP.hash](https://api.emberjs.com/ember/release/functions/rsvp/hash).\n * The normal version of a `RSVP.hash` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `hash()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `hash()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `hash` will be canceled\n * - if any of the items rejects/cancels, all other cancelable items\n * (e.g. {@linkcode TaskInstance}s) will be canceled\n */\nexport const hash = taskAwareVariantOf(RSVP, 'hash', getValues);\n\n/**\n * A cancelation-aware variant of [RSVP.hashSettled](https://api.emberjs.com/ember/release/functions/rsvp/hashSettled).\n * The normal version of a `RSVP.hashSettled` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `hashSettled()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `hashSettled()` is canceled, any of the\n * {@linkcode TaskInstance}s passed in to `hashSettled` will be canceled\n */\nexport const hashSettled = taskAwareVariantOf(RSVP, 'hashSettled', getValues);\n\nfunction identity(obj) {\n return obj;\n}\n\nfunction getValues(obj) {\n return Object.keys(obj).map((k) => obj[k]);\n}\n\nfunction castForPromiseHelper(castable) {\n if (castable) {\n if (castable instanceof TaskInstance) {\n // Mark TaskInstances, including those that performed synchronously and\n // have finished already, as having their errors handled, as if they had\n // been then'd, which this is emulating.\n castable.executor.asyncErrorsHandled = true;\n } else if (castable instanceof Yieldable) {\n // Cast to promise\n return castable._toPromise();\n }\n }\n\n return castable;\n}\n\nfunction castAwaitables(arrOrHash, callback) {\n if (Array.isArray(arrOrHash)) {\n return arrOrHash.map(callback);\n } else if (typeof arrOrHash === 'object' && arrOrHash !== null) {\n let obj = {};\n Object.keys(arrOrHash).forEach((key) => {\n obj[key] = callback(arrOrHash[key]);\n });\n return obj;\n } else {\n // :shruggie:\n return arrOrHash;\n }\n}\n\nfunction taskAwareVariantOf(obj, method, getItems) {\n return function (awaitable) {\n let awaitables = castAwaitables(awaitable, castForPromiseHelper);\n\n let items = getItems(awaitables);\n assert(`'${method}' expects an array.`, Array.isArray(items));\n\n let defer = RSVP.defer();\n\n obj[method](awaitables).then(defer.resolve, defer.reject);\n\n let hasCancelled = false;\n let cancelAll = () => {\n if (hasCancelled) {\n return;\n }\n hasCancelled = true;\n items.forEach((it) => {\n if (it) {\n if (it instanceof TaskInstance) {\n it.cancel();\n } else if (typeof it[cancelableSymbol] === 'function') {\n it[cancelableSymbol]();\n }\n }\n });\n };\n\n let promise = defer.promise.finally(cancelAll);\n promise[cancelableSymbol] = cancelAll;\n return promise;\n };\n}\n","import {\n createTaskDecorator,\n createTaskGroupDecorator,\n lastValue as nativeLastValue,\n} from './external/task-decorators';\nimport { TaskFactory as EmberTaskFactory } from './task-factory';\n\nexport const lastValue = nativeLastValue;\n\n/**\n * A Task is a cancelable, restartable, asynchronous operation that\n * is driven by a generator function. Tasks are automatically canceled\n * when the object they live on is destroyed (e.g. a Component\n * is unrendered).\n *\n * Turns the decorated generator function into a task.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, `group` or `keepLatest`.\n *\n * By default, tasks have no concurrency constraints\n * (multiple instances of a task can be running at the same time)\n * but much of a power of tasks lies in proper usage of Task Modifiers\n * that you can apply to a task.\n *\n * You can also define an\n * Encapsulated Task\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @task({ maxConcurrency: 5, keepLatest: true, cancelOn: 'click' })\n * *taskWithModifiers() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options\n * @param {string|string[]} [options.cancelOn] Events to cancel task on. Applies only to `@ember/component`\n * @param {boolean} [options.enqueue] Sets `enqueue` modifier on task if `true`\n * @param {boolean} [options.evented] Enables [task lifecycle events](/docs/advanced/lifecycle-events) for this Task, if `true`\n * @param {boolean} [options.debug] Enables task debugging if `true`\n * @param {boolean} [options.drop] Sets `drop` modifier on task if `true`\n * @param {string} [options.group] Associates task with the group specified\n * @param {boolean} [options.keepLatest] Sets `keepLatest` modifier on task if `true`\n * @param {number} [options.maxConcurrency] Sets the maximum number of running task instances for the task\n * @param {string|string[]} [options.observes] Properties to watch and cause task to be performed when they change\n * @param {string|string[]} [options.on] Events to perform task on. Applies only to `@ember/component`\n * @param {function?} [options.onState] Callback to use for state tracking. May be set to `null` to disable state tracking.\n * @param {boolean} [options.restartable] Sets `restartable` modifier on task if `true`\n * @return {Task}\n */\nexport const task = createTaskDecorator({}, EmberTaskFactory);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `drop` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * Encapsulated Task\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, dropTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @dropTask({ cancelOn: 'click' })\n * *myDropTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const dropTask = createTaskDecorator({ drop: true }, EmberTaskFactory);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `enqueue` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * Encapsulated Task\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, enqueueTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @enqueueTask({ cancelOn: 'click' })\n * *myEnqueueTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const enqueueTask = createTaskDecorator(\n {\n enqueue: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `keepLatest` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * Encapsulated Task\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, keepLatestTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @keepLatestTask({ cancelOn: 'click' })\n * *myKeepLatestTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const keepLatestTask = createTaskDecorator(\n {\n keepLatest: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `restartable` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * Encapsulated Task\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, restartableTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @task\n * *plainTask() {}\n *\n * @restartableTask({ cancelOn: 'click' })\n * *myRestartableTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const restartableTask = createTaskDecorator(\n {\n restartable: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * Turns the decorated property into a task group.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task group. For instance `maxConcurrency` or `keepLatest`.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n * @taskGroup({ maxConcurrency: 5 }) chores;\n *\n * @task({ group: 'chores' })\n * *mowLawn() {}\n *\n * @task({ group: 'chores' })\n * *doDishes() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const taskGroup = createTaskGroupDecorator({}, EmberTaskFactory);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `drop` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const dropTaskGroup = createTaskGroupDecorator(\n {\n drop: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `enqueue` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const enqueueTaskGroup = createTaskGroupDecorator(\n {\n enqueue: true,\n },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `keepLatest` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const keepLatestTaskGroup = createTaskGroupDecorator(\n { keepLatest: true },\n EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `restartable` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const restartableTaskGroup = createTaskGroupDecorator(\n { restartable: true },\n EmberTaskFactory,\n);\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, get } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { addObserver, removeObserver } from '@ember/object/observers';\nimport { scheduleTask } from 'ember-lifeline';\nimport { isEqual, isNone } from '@ember/utils';\nimport { assert, deprecate } from '@ember/debug';\nimport {\n indexOfOption,\n filterOptions,\n findOptionWithOffset,\n countOptions,\n defaultHighlighted,\n advanceSelectableOption,\n defaultMatcher,\n defaultTypeAheadMatcher,\n pathForOption,\n type MatcherFn,\n} from '../utils/group-utils.ts';\nimport { restartableTask, timeout } from 'ember-concurrency';\nimport { modifier } from 'ember-modifier';\nimport type {\n Dropdown,\n DropdownActions,\n TRootEventType,\n} from 'ember-basic-dropdown/components/basic-dropdown';\nimport Owner from '@ember/application';\nimport type { CalculatePosition } from 'ember-basic-dropdown/utils/calculate-position';\nimport { isArray } from '@ember/array';\nimport type { ComponentLike } from '@glint/template';\n\ninterface SelectActions extends DropdownActions {\n search: (term: string) => void;\n highlight: (option: any) => void;\n select: (selected: any, e?: Event) => void;\n choose: (selected: any, e?: Event) => void;\n scrollTo: (option: any) => void;\n labelClick: (e: MouseEvent) => void;\n}\nexport interface Select extends Dropdown {\n selected: any;\n highlighted: any;\n options: readonly any[];\n results: readonly any[];\n resultsCount: number;\n loading: boolean;\n isActive: boolean;\n searchText: string;\n lastSearchedText: string;\n actions: SelectActions;\n}\ninterface PromiseProxy extends Promise {\n content: any;\n}\ninterface CancellablePromise extends Promise {\n cancel: () => void;\n}\ninterface Sliceable {\n slice(): T[];\n}\n// Some args are not listed here because they are only accessed from the template. Should I list them?\nexport interface PowerSelectArgs {\n highlightOnHover?: boolean;\n placeholderComponent?: string | ComponentLike;\n searchMessage?: string;\n searchMessageComponent?: string | ComponentLike;\n noMatchesMessage?: string;\n noMatchesMessageComponent?: string | ComponentLike;\n matchTriggerWidth?: boolean;\n resultCountMessage?: (resultCount: number) => string;\n options?: readonly any[] | Promise;\n selected?: any | PromiseProxy;\n destination?: string;\n closeOnSelect?: boolean;\n renderInPlace?: boolean;\n preventScroll?: boolean;\n defaultHighlighted?: any;\n searchField?: string;\n labelClass?: string;\n labelText?: string;\n labelClickAction?: TLabelClickAction;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n loadingMessage?: string;\n placeholder?: string;\n dropdownClass?: string;\n allowClear?: boolean;\n searchEnabled?: boolean;\n animationEnabled?: boolean;\n tabindex?: number | string;\n searchPlaceholder?: string;\n verticalPosition?: string;\n horizontalPosition?: string;\n triggerId?: string;\n disabled?: boolean;\n title?: string;\n triggerRole?: string;\n required?: string;\n triggerClass?: string;\n ariaInvalid?: string;\n eventType?: string;\n rootEventType?: TRootEventType;\n ariaDescribedBy?: string;\n calculatePosition?: CalculatePosition;\n ebdTriggerComponent?: string | ComponentLike;\n ebdContentComponent?: string | ComponentLike;\n labelComponent?: string | ComponentLike;\n triggerComponent?: string | ComponentLike;\n selectedItemComponent?: string | ComponentLike;\n beforeOptionsComponent?: string | ComponentLike;\n optionsComponent?: string | ComponentLike;\n groupComponent?: string | ComponentLike;\n afterOptionsComponent?: string | ComponentLike;\n extra?: any;\n matcher?: MatcherFn;\n initiallyOpened?: boolean;\n typeAheadOptionMatcher?: MatcherFn;\n buildSelection?: (selected: any, select: Select) => any;\n onChange: (selection: any, select: Select, event?: Event) => void;\n search?: (\n term: string,\n select: Select,\n ) => readonly any[] | Promise;\n onOpen?: (select: Select, e: Event) => boolean | undefined;\n onClose?: (select: Select, e: Event) => boolean | undefined;\n onInput?: (term: string, select: Select, e: Event) => string | false | void;\n onKeydown?: (select: Select, e: KeyboardEvent) => boolean | undefined;\n onFocus?: (select: Select, event: FocusEvent) => void;\n onBlur?: (select: Select, event: FocusEvent) => void;\n scrollTo?: (option: any, select: Select) => void;\n registerAPI?: (select: Select) => void;\n}\n\nexport type TLabelClickAction = 'focus' | 'open';\n\nexport interface PowerSelectSignature {\n Element: HTMLElement;\n Args: PowerSelectArgs;\n Blocks: {\n default: [option: any, select: Select];\n };\n}\n\nconst isSliceable = (coll: any): coll is Sliceable => {\n return isArray(coll);\n};\n\nconst isPromiseLike = (thing: any): thing is Promise => {\n return typeof thing.then === 'function';\n};\n\nconst isPromiseProxyLike = (thing: any): thing is PromiseProxy => {\n return isPromiseLike(thing) && Object.hasOwnProperty.call(thing, 'content');\n};\n\nconst isCancellablePromise = (\n thing: any,\n): thing is CancellablePromise => {\n return typeof thing.cancel === 'function';\n};\n\nexport default class PowerSelectComponent extends Component {\n // Untracked properties\n _publicAPIActions = {\n search: this._search,\n highlight: this._highlight,\n select: this._select,\n choose: this._choose,\n scrollTo: this._scrollTo,\n labelClick: this._labelClick,\n };\n\n // Tracked properties\n @tracked private _resolvedOptions?: readonly any[];\n @tracked private _resolvedSelected?: any;\n @tracked private _repeatingChar = '';\n @tracked private _expirableSearchText = '';\n @tracked private _searchResult?: readonly any[];\n @tracked isActive = false;\n @tracked loading = false;\n @tracked searchText = '';\n @tracked lastSearchedText = '';\n @tracked highlighted?: any;\n storedAPI!: Select;\n\n private _uid = guidFor(this);\n private _lastOptionsPromise?: Promise;\n private _lastSelectedPromise?: PromiseProxy;\n private _lastSearchPromise?:\n | Promise\n | CancellablePromise;\n private _filterResultsCache: {\n results: any[];\n options: any[];\n searchText: string;\n } = { results: [], options: [], searchText: this.searchText };\n\n // Lifecycle hooks\n constructor(owner: Owner, args: PowerSelectArgs) {\n super(owner, args);\n assert(\n ' requires an `@onChange` function',\n this.args.onChange && typeof this.args.onChange === 'function',\n );\n }\n\n willDestroy() {\n if (\n this._lastSelectedPromise &&\n isPromiseProxyLike(this._lastSelectedPromise)\n ) {\n try {\n removeObserver(\n this._lastSelectedPromise,\n 'content',\n this,\n this._selectedObserverCallback,\n );\n // eslint-disable-next-line no-empty\n } catch {}\n this._lastSelectedPromise = undefined;\n }\n super.willDestroy();\n }\n\n // Getters\n get highlightOnHover(): boolean {\n return this.args.highlightOnHover === undefined\n ? true\n : this.args.highlightOnHover;\n }\n\n get labelClickAction(): TLabelClickAction {\n return this.args.labelClickAction === undefined\n ? 'focus'\n : this.args.labelClickAction;\n }\n\n get highlightedIndex(): string {\n const results = this.results;\n const highlighted = this.highlighted;\n return pathForOption(results, highlighted);\n }\n\n get searchMessage(): string {\n return this.args.searchMessage === undefined\n ? 'Type to search'\n : this.args.searchMessage;\n }\n\n get noMatchesMessage(): string {\n return this.args.noMatchesMessage === undefined\n ? 'No results found'\n : this.args.noMatchesMessage;\n }\n\n get resultCountMessage(): string {\n if (typeof this.args.resultCountMessage === 'function') {\n return this.args.resultCountMessage(this.resultsCount);\n }\n\n if (this.resultsCount === 1) {\n return `${this.resultsCount} result`;\n }\n\n return `${this.resultsCount} results`;\n }\n\n get matchTriggerWidth() {\n return this.args.matchTriggerWidth === undefined\n ? true\n : this.args.matchTriggerWidth;\n }\n\n get mustShowSearchMessage(): boolean {\n return (\n !this.loading &&\n this.searchText.length === 0 &&\n !!this.args.search &&\n !!this.searchMessage &&\n this.resultsCount === 0\n );\n }\n\n get mustShowNoMessages(): boolean {\n return (\n !this.loading &&\n this.resultsCount === 0 &&\n (!this.args.search || this.lastSearchedText.length > 0)\n );\n }\n\n get results(): any[] {\n if (this.searchText.length > 0) {\n if (this.args.search) {\n return toPlainArray(this._searchResult || this.options);\n } else {\n if (\n this._filterResultsCache.options === this.options &&\n this._filterResultsCache.searchText === this.searchText\n ) {\n // This is an optimization to avoid filtering several times, which may be a bit expensive\n // if there are many options, if neither the options nor the searchtext have changed\n return this._filterResultsCache.results;\n }\n const results = this._filter(this.options, this.searchText);\n // eslint-disable-next-line ember/no-side-effects\n this._filterResultsCache = {\n results,\n options: this.options,\n searchText: this.searchText,\n };\n return results;\n }\n } else {\n return this.options;\n }\n }\n\n get options(): any[] {\n if (this._resolvedOptions) return toPlainArray(this._resolvedOptions);\n if (this.args.options) {\n return toPlainArray(this.args.options as any[]);\n } else {\n return [];\n }\n }\n\n get resultsCount(): number {\n return countOptions(this.results);\n }\n\n get selected(): any {\n if (this._resolvedSelected) {\n return toPlainArray(this._resolvedSelected);\n } else if (\n !isNone(this.args.selected) &&\n typeof this.args.selected.then !== 'function'\n ) {\n return toPlainArray(this.args.selected);\n }\n return undefined;\n }\n\n get ariaMultiSelectable(): boolean {\n return isArray(this.args.selected);\n }\n\n get triggerId(): string {\n return this.args.triggerId || `${this._uid}-trigger`;\n }\n\n get labelId(): string {\n return `${this._uid}-label`;\n }\n\n get ariaLabelledBy(): string {\n if (this.args.ariaLabelledBy) {\n return this.args.ariaLabelledBy;\n }\n\n if (this.args.labelText || this.args.labelComponent) {\n return this.labelId;\n }\n\n return '';\n }\n\n // Actions\n @action\n handleOpen(_select: Select, e: Event): boolean | void {\n if (this.args.onOpen && this.args.onOpen(this.storedAPI, e) === false) {\n return false;\n }\n if (e) {\n if (\n e instanceof KeyboardEvent &&\n e.type === 'keydown' &&\n (e.keyCode === 38 || e.keyCode === 40)\n ) {\n e.preventDefault();\n }\n }\n this._resetHighlighted();\n }\n\n @action\n handleClose(_select: Select, e: Event): boolean | void {\n if (this.args.onClose && this.args.onClose(this.storedAPI, e) === false) {\n return false;\n }\n this._highlight(undefined);\n }\n\n @action\n handleInput(e: InputEvent): void {\n if (e.target === null) return;\n const term = (e.target as HTMLInputElement).value;\n let correctedTerm;\n if (this.args.onInput) {\n correctedTerm = this.args.onInput(term, this.storedAPI, e);\n if (correctedTerm === false) {\n return;\n }\n }\n this._publicAPIActions.search(\n typeof correctedTerm === 'string' ? correctedTerm : term,\n );\n }\n\n @action\n handleKeydown(e: KeyboardEvent) {\n if (\n this.args.onKeydown &&\n this.args.onKeydown(this.storedAPI, e) === false\n ) {\n return false;\n }\n return this._routeKeydown(this.storedAPI, e);\n }\n\n @action\n handleTriggerKeydown(e: KeyboardEvent) {\n if (\n this.args.onKeydown &&\n this.args.onKeydown(this.storedAPI, e) === false\n ) {\n e.stopImmediatePropagation();\n return;\n }\n if (e.ctrlKey || e.metaKey) {\n e.stopImmediatePropagation();\n return;\n }\n if ((e.keyCode >= 48 && e.keyCode <= 90) || isNumpadKeyEvent(e)) {\n // Keys 0-9, a-z or numpad keys\n this.triggerTypingTask.perform(e);\n } else if (e.keyCode === 32) {\n // Space\n this._handleKeySpace(this.storedAPI, e);\n } else {\n return this._routeKeydown(this.storedAPI, e);\n }\n }\n\n @action\n _labelClick(event: MouseEvent) {\n if (!this.storedAPI) {\n return;\n }\n\n // Double-click, do nothing\n if (event.detail > 1) {\n return;\n }\n\n if (this.labelClickAction === 'open') {\n this.storedAPI.actions.open();\n return;\n } else if (this.labelClickAction === 'focus') {\n const trigger = document.querySelector(\n `[data-ebd-id=\"${this.storedAPI.uniqueId}-trigger\"]`,\n ) as HTMLElement;\n\n if (!trigger) {\n return;\n }\n\n trigger.focus();\n }\n\n return true;\n }\n\n @action\n handleFocus(event: FocusEvent): void {\n if (!this.isDestroying) {\n scheduleTask(this, 'actions', this._updateIsActive, true);\n }\n if (this.args.onFocus) {\n this.args.onFocus(this.storedAPI, event);\n }\n }\n\n @action\n handleBlur(event: FocusEvent): void {\n if (!this.isDestroying) {\n scheduleTask(this, 'actions', this._updateIsActive, false);\n }\n if (this.args.onBlur) {\n this.args.onBlur(this.storedAPI, event);\n }\n }\n\n // Methods\n @action\n _search(term: string): void {\n if (this.searchText === term) return;\n this.searchText = term;\n if (!this.args.search) {\n this.lastSearchedText = term;\n this._resetHighlighted();\n }\n }\n\n @action\n _updateOptions(): void {\n deprecate(\n 'You are using power-select with ember/render-modifier. Replace {{did-insert this._updateOptions @options}} and {{did-update this._updateOptions @options}} with {{this.updateOptions @options}}.',\n false,\n {\n for: 'ember-power-select',\n id: 'ember-power-select.no-at-ember-render-modifiers',\n since: {\n enabled: '8.1',\n available: '8.1',\n },\n until: '9.0.0',\n },\n );\n\n this.__updateOptions();\n }\n\n @action\n _updateHighlighted(): void {\n if (this.storedAPI.isOpen) {\n this._resetHighlighted();\n }\n }\n\n @action\n _updateSelected(): void {\n deprecate(\n 'You are using power-select with ember/render-modifier. Replace {{did-insert this._updateSelected @selected}} and {{did-update this._updateSelected @selected}} with {{this.updateSelected @selected}}.',\n false,\n {\n for: 'ember-power-select',\n id: 'ember-power-select.no-at-ember-render-modifiers',\n since: {\n enabled: '8.1',\n available: '8.1',\n },\n until: '9.0.0',\n },\n );\n\n this.__updateSelected();\n }\n\n _selectedObserverCallback(): void {\n this._resolvedSelected = this._lastSelectedPromise;\n this._highlight(this._resolvedSelected);\n }\n\n @action\n _highlight(opt: any): void {\n if (!isNone(opt) && opt.disabled) {\n return;\n }\n this.highlighted = opt;\n }\n\n @action\n _select(selected: any, e?: Event): void {\n if (!isEqual(this.storedAPI.selected, selected)) {\n this.args.onChange(selected, this.storedAPI, e);\n }\n }\n\n @action\n _choose(selected: any, e?: Event): void {\n const selection = this.args.buildSelection\n ? this.args.buildSelection(selected, this.storedAPI)\n : selected;\n this.storedAPI.actions.select(selection, e);\n if (this.args.closeOnSelect !== false) {\n this.storedAPI.actions.close(e);\n // return false;\n }\n }\n\n @action\n _scrollTo(option: any): void {\n const select = this.storedAPI;\n if (!document || !option) {\n return;\n }\n if (this.args.scrollTo) {\n return this.args.scrollTo(option, select);\n }\n const optionsList = document.getElementById(\n `ember-power-select-options-${select.uniqueId}`,\n ) as HTMLElement;\n if (!optionsList) {\n return;\n }\n const index = indexOfOption(select.results, option);\n if (index === -1) {\n return;\n }\n const optionElement = optionsList.querySelector(\n `[data-option-index='${index}']`,\n ) as HTMLElement;\n if (!optionElement) {\n return;\n }\n const optionTopScroll = optionElement.offsetTop - optionsList.offsetTop;\n const optionBottomScroll = optionTopScroll + optionElement.offsetHeight;\n if (optionBottomScroll > optionsList.offsetHeight + optionsList.scrollTop) {\n optionsList.scrollTop = optionBottomScroll - optionsList.offsetHeight;\n } else if (optionTopScroll < optionsList.scrollTop) {\n optionsList.scrollTop = optionTopScroll;\n }\n }\n\n @action\n _registerAPI(triggerElement: Element, [publicAPI]: [Select]): void {\n deprecate(\n 'You are using power-select with ember/render-modifier. Replace {{did-insert this._registerAPI publicAPI}} and {{did-update this._registerAPI publicAPI}} with {{this.updateRegisterAPI publicAPI}}.',\n false,\n {\n for: 'ember-power-select',\n id: 'ember-power-select.no-at-ember-render-modifiers',\n since: {\n enabled: '8.1',\n available: '8.1',\n },\n until: '9.0.0',\n },\n );\n\n this.__registerAPI(triggerElement, [publicAPI]);\n }\n\n @action\n _performSearch(triggerElement: Element, [term]: [string]): void {\n deprecate(\n 'You are using power-select with ember/render-modifier. Replace {{did-update this._performSearch this.searchText}} with {{this.updatePerformSearch this.searchText}}.',\n false,\n {\n for: 'ember-power-select',\n id: 'ember-power-select.no-at-ember-render-modifiers',\n since: {\n enabled: '8.1',\n available: '8.1',\n },\n until: '9.0.0',\n },\n );\n\n this.__performSearch(triggerElement, [term]);\n }\n\n updateOptions = modifier(\n () => {\n this.__updateOptions();\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n { eager: false },\n );\n\n updateSelected = modifier(\n () => {\n this.__updateSelected();\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n { eager: false },\n );\n\n updateRegisterAPI = modifier(\n (triggerElement: Element, [publicAPI]: [Select]) => {\n this.__registerAPI(triggerElement, [publicAPI]);\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n { eager: false },\n );\n\n updatePerformSearch = modifier(\n (triggerElement: Element, [term]: [string]) => {\n this.__performSearch(triggerElement, [term]);\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n { eager: false },\n );\n\n private __updateOptions() {\n if (!this.args.options) return;\n if (isPromiseLike(this.args.options)) {\n if (this._lastOptionsPromise === this.args.options) return; // promise is still the same\n const currentOptionsPromise = this.args.options;\n this._lastOptionsPromise = currentOptionsPromise;\n this.loading = true;\n this._lastOptionsPromise\n .then((resolvedOptions) => {\n if (this._lastOptionsPromise === currentOptionsPromise) {\n this.loading = false;\n this._resolvedOptions = resolvedOptions;\n this._resetHighlighted();\n }\n })\n .catch(() => {\n if (this._lastOptionsPromise === currentOptionsPromise) {\n this.loading = false;\n }\n });\n } else {\n scheduleTask(this, 'actions', this._resetHighlighted);\n }\n }\n\n private __updateSelected(): void {\n if (isNone(this.args.selected)) return;\n if (typeof this.args.selected.then === 'function') {\n if (this._lastSelectedPromise === this.args.selected) return; // promise is still the same\n if (\n this._lastSelectedPromise &&\n isPromiseProxyLike(this._lastSelectedPromise)\n ) {\n removeObserver(\n this._lastSelectedPromise,\n 'content',\n this,\n this._selectedObserverCallback,\n );\n }\n\n const currentSelectedPromise: PromiseProxy = this.args.selected;\n currentSelectedPromise.then(() => {\n if (this.isDestroyed || this.isDestroying) return;\n if (isPromiseProxyLike(currentSelectedPromise)) {\n // eslint-disable-next-line ember/no-observers\n addObserver(\n currentSelectedPromise,\n 'content',\n this,\n this._selectedObserverCallback,\n );\n }\n });\n\n this._lastSelectedPromise = currentSelectedPromise;\n this._lastSelectedPromise.then((resolvedSelected) => {\n if (this._lastSelectedPromise === currentSelectedPromise) {\n this._resolvedSelected = resolvedSelected;\n this._highlight(resolvedSelected);\n }\n });\n } else {\n this._resolvedSelected = undefined;\n // Don't highlight args.selected array on multi-select\n if (!Array.isArray(this.args.selected)) {\n this._highlight(this.args.selected);\n }\n }\n }\n\n private __registerAPI(_: Element, [publicAPI]: [Select]): void {\n this.storedAPI = publicAPI;\n if (this.args.registerAPI) {\n scheduleTask(this, 'actions', this.args.registerAPI, publicAPI);\n }\n }\n\n private __performSearch(_: Element, [term]: [string]): void {\n if (!this.args.search) return;\n if (term === '') {\n this.loading = false;\n this.lastSearchedText = term;\n if (this._lastSearchPromise !== undefined) {\n if (isCancellablePromise(this._lastSearchPromise)) {\n this._lastSearchPromise.cancel(); // Cancel ember-concurrency tasks\n }\n this._lastSearchPromise = undefined;\n }\n return;\n }\n const searchResult = this.args.search(term, this.storedAPI);\n if (searchResult && isPromiseLike(searchResult)) {\n this.loading = true;\n if (\n this._lastSearchPromise !== undefined &&\n isCancellablePromise(this._lastSearchPromise)\n ) {\n this._lastSearchPromise.cancel(); // Cancel ember-concurrency tasks\n }\n this._lastSearchPromise = searchResult;\n searchResult\n .then((results) => {\n if (this._lastSearchPromise === searchResult) {\n this._searchResult = results;\n this.loading = false;\n this.lastSearchedText = term;\n scheduleTask(this, 'actions', this._resetHighlighted);\n }\n })\n .catch(() => {\n if (this._lastSearchPromise === searchResult) {\n this.loading = false;\n this.lastSearchedText = term;\n }\n });\n } else {\n this.lastSearchedText = term;\n this._searchResult = searchResult;\n scheduleTask(this, 'actions', this._resetHighlighted);\n }\n }\n\n _defaultBuildSelection(option: any): any {\n return option;\n }\n\n _routeKeydown(select: Select, e: KeyboardEvent): boolean | void {\n if (e.keyCode === 38 || e.keyCode === 40) {\n // Up & Down\n return this._handleKeyUpDown(select, e);\n } else if (e.keyCode === 13) {\n // ENTER\n return this._handleKeyEnter(select, e);\n } else if (e.keyCode === 9) {\n // Tab\n return this._handleKeyTab(select, e);\n } else if (e.keyCode === 27) {\n // ESC\n return this._handleKeyESC(select, e);\n }\n }\n\n _handleKeyTab(select: Select, e: KeyboardEvent): void {\n select.actions.close(e);\n }\n\n _handleKeyESC(select: Select, e: KeyboardEvent): void {\n select.actions.close(e);\n }\n\n _handleKeyEnter(select: Select, e: KeyboardEvent): boolean | void {\n if (select.isOpen && select.highlighted !== undefined) {\n select.actions.choose(select.highlighted, e);\n e.stopImmediatePropagation();\n return false;\n }\n }\n\n _handleKeySpace(select: Select, e: KeyboardEvent): void {\n if (\n e.target !== null &&\n ['TEXTAREA', 'INPUT'].includes((e.target as Element).nodeName)\n ) {\n e.stopImmediatePropagation();\n } else if (select.isOpen && select.highlighted !== undefined) {\n e.stopImmediatePropagation();\n e.preventDefault(); // Prevents scrolling of the page.\n select.actions.choose(select.highlighted, e);\n }\n }\n\n _handleKeyUpDown(select: Select, e: KeyboardEvent): void {\n if (select.isOpen) {\n e.preventDefault();\n e.stopPropagation();\n const step: 1 | -1 = e.keyCode === 40 ? 1 : -1;\n const newHighlighted = advanceSelectableOption(\n select.results,\n select.highlighted,\n step,\n );\n select.actions.highlight(newHighlighted);\n select.actions.scrollTo(newHighlighted);\n } else {\n select.actions.open(e);\n }\n }\n\n _resetHighlighted(): void {\n let highlighted;\n const defHighlighted = this.args.defaultHighlighted || defaultHighlighted;\n if (typeof defHighlighted === 'function') {\n highlighted = defHighlighted({\n results: this.results,\n highlighted: this.highlighted,\n selected: this.selected,\n });\n } else {\n highlighted = defHighlighted;\n }\n this._highlight(highlighted);\n }\n\n _filter(options: any[], term: string, skipDisabled = false): any[] {\n const matcher = this.args.matcher || defaultMatcher;\n const optionMatcher = getOptionMatcher(\n matcher,\n defaultMatcher,\n this.args.searchField,\n );\n return filterOptions(options || [], term, optionMatcher, skipDisabled);\n }\n\n _updateIsActive(value: boolean) {\n this.isActive = value;\n }\n\n findWithOffset(\n options: readonly any[],\n term: string,\n offset: number,\n skipDisabled = false,\n ): any {\n const typeAheadOptionMatcher = getOptionMatcher(\n this.args.typeAheadOptionMatcher || defaultTypeAheadMatcher,\n defaultTypeAheadMatcher,\n this.args.searchField,\n );\n return findOptionWithOffset(\n options || [],\n term,\n typeAheadOptionMatcher,\n offset,\n skipDisabled,\n );\n }\n\n // Tasks\n triggerTypingTask = restartableTask(async (e: KeyboardEvent) => {\n // In general, a user doing this interaction means to have a different result.\n let searchStartOffset = 1;\n let repeatingChar = this._repeatingChar;\n let charCode = e.keyCode;\n if (isNumpadKeyEvent(e)) {\n charCode -= 48; // Adjust char code offset for Numpad key codes. Check here for numapd key code behavior: https://goo.gl/Qwc9u4\n }\n let term;\n\n // Check if user intends to cycle through results. _repeatingChar can only be the first character.\n const c = String.fromCharCode(charCode);\n if (c === this._repeatingChar) {\n term = c;\n } else {\n term = this._expirableSearchText + c;\n }\n\n if (term.length > 1) {\n // If the term is longer than one char, the user is in the middle of a non-cycling interaction\n // so the offset is just zero (the current selection is a valid match).\n searchStartOffset = 0;\n repeatingChar = '';\n } else {\n repeatingChar = c;\n }\n\n // When the select is open, the \"selection\" is just highlighted.\n if (this.storedAPI.isOpen && this.storedAPI.highlighted) {\n searchStartOffset += indexOfOption(\n this.storedAPI.options,\n this.storedAPI.highlighted,\n );\n } else if (!this.storedAPI.isOpen && !isNone(this.selected)) {\n searchStartOffset += indexOfOption(this.storedAPI.options, this.selected);\n } else {\n searchStartOffset = 0;\n }\n\n // The char is always appended. That way, searching for words like \"Aaron\" will work even\n // if \"Aa\" would cycle through the results.\n this._expirableSearchText = this._expirableSearchText + c;\n this._repeatingChar = repeatingChar;\n const match = this.findWithOffset(\n this.storedAPI.options,\n term,\n searchStartOffset,\n true,\n );\n if (match !== undefined) {\n if (this.storedAPI.isOpen) {\n this.storedAPI.actions.highlight(match);\n this.storedAPI.actions.scrollTo(match);\n } else {\n this.storedAPI.actions.select(match, e);\n }\n }\n await timeout(1000);\n this._expirableSearchText = '';\n this._repeatingChar = '';\n });\n}\n\nfunction getOptionMatcher(\n matcher: MatcherFn,\n defaultMatcher: MatcherFn,\n searchField: string | undefined,\n): MatcherFn {\n if (searchField && matcher === defaultMatcher) {\n return (option: any, text: string) =>\n matcher(get(option, searchField), text);\n } else {\n return (option: any, text: string) => {\n assert(\n ' If you want the default filtering to work on options that are not plain strings, you need to provide `@searchField`',\n matcher !== defaultMatcher || typeof option === 'string',\n );\n return matcher(option, text);\n };\n }\n}\n\nfunction isNumpadKeyEvent(e: KeyboardEvent): boolean {\n return e.keyCode >= 96 && e.keyCode <= 105;\n}\n\nconst toPlainArray = (collection: T[] | Sliceable): T[] => {\n if (isSliceable(collection)) {\n return collection.slice();\n } else {\n return collection;\n }\n};\n","import { TaskFactory } from './task-factory';\n\n/**\n * This builder function is called by the transpiled code from\n * `task(async () => {})`. See async-arrow-task-transform.js\n *\n * @private\n */\nexport function buildTask(contextFn, options, taskName, bufferPolicyName) {\n let optionsWithBufferPolicy = options;\n\n if (bufferPolicyName) {\n optionsWithBufferPolicy = Object.assign({}, optionsWithBufferPolicy);\n optionsWithBufferPolicy[bufferPolicyName] = true;\n }\n\n const result = contextFn();\n\n const taskFactory = new TaskFactory(\n taskName || '',\n result.generator,\n optionsWithBufferPolicy,\n );\n return taskFactory.createTask(result.context);\n}\n","import Component from '@glimmer/component';\nimport { runTask } from 'ember-lifeline';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport type { Select } from '../power-select';\nimport { deprecate } from '@ember/debug';\n\ninterface PowerSelectBeforeOptionsSignature {\n Element: HTMLElement;\n Args: {\n select: Select;\n searchEnabled: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n role?: string;\n searchPlaceholder?: string;\n ariaActiveDescendant?: string;\n listboxId?: string;\n onKeydown: (e: KeyboardEvent) => false | void;\n onBlur: (e: FocusEvent) => void;\n onFocus: (e: FocusEvent) => void;\n onInput: (e: InputEvent) => boolean;\n autofocus?: boolean;\n };\n}\n\nexport default class PowerSelectBeforeOptionsComponent extends Component {\n didSetup: boolean = false;\n\n @action\n clearSearch(): void {\n deprecate(\n 'You are using power-select before-option component with ember/render-modifier. Replace {{will-destroy this.clearSearch}} with {{this.setupInput}}.',\n false,\n {\n for: 'ember-power-select',\n id: 'ember-power-select.no-at-ember-render-modifiers',\n since: {\n enabled: '8.1',\n available: '8.1',\n },\n until: '9.0.0',\n },\n );\n\n this.args.select.actions?.search('');\n }\n\n @action\n handleKeydown(e: KeyboardEvent): false | void {\n if (this.args.onKeydown(e) === false) {\n return false;\n }\n if (e.keyCode === 13) {\n this.args.select.actions.close(e);\n }\n }\n\n @action\n handleInput(event: Event): false | void {\n const e = event as InputEvent;\n if (this.args.onInput(e) === false) {\n return false;\n }\n }\n\n @action\n focusInput(el: HTMLElement) {\n deprecate(\n 'You are using power-select before-option component with ember/render-modifier. Replace {{did-insert this.focusInput}} with {{this.setupInput}}.',\n false,\n {\n for: 'ember-power-select',\n id: 'ember-power-select.no-at-ember-render-modifiers',\n since: {\n enabled: '8.1',\n available: '8.1',\n },\n until: '9.0.0',\n },\n );\n\n this._focusInput(el);\n }\n\n setupInput = modifier(\n (el: HTMLElement) => {\n if (this.didSetup) {\n return;\n }\n\n this.didSetup = true;\n\n this._focusInput(el);\n\n return () => {\n this.args.select.actions?.search('');\n };\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n { eager: false },\n );\n\n private _focusInput(el: HTMLElement) {\n runTask(\n this,\n () => {\n if (this.args.autofocus !== false) {\n el.focus();\n }\n },\n 0,\n );\n }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { Select } from '../power-select';\n\nexport interface PowerSelectLabelSignature {\n Element: HTMLElement;\n Args: {\n select: Select;\n labelText?: string;\n labelId: string;\n triggerId: string;\n extra: any;\n };\n}\n\nexport default class PowerSelectLabelComponent extends Component {\n @action\n onLabelClick(e: MouseEvent): void {\n if (!this.args.select) {\n return;\n }\n\n this.args.select.actions.labelClick(e);\n }\n}\n","import templateOnly from '@ember/component/template-only';\n\ninterface PowerSelectNoMatchesMessageSignature {\n Element: HTMLElement;\n Args: {\n noMatchesMessage: any;\n };\n}\n\nexport default templateOnly();\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport type { Select } from '../power-select';\nimport type { ComponentLike } from '@glint/template';\nimport { deprecate } from '@ember/debug';\ndeclare const FastBoot: any;\n\ninterface PowerSelectOptionsSignature {\n Element: HTMLElement;\n Args: PowerSelectOptionsArgs;\n Blocks: {\n default: [opt: PowerSelectOptionsArgs, select: Select];\n };\n}\n\ninterface PowerSelectOptionsArgs {\n select: Select;\n highlightOnHover?: boolean;\n listboxId: string;\n groupIndex: string;\n loadingMessage: string;\n options: any[];\n extra: any;\n groupComponent?: string | ComponentLike;\n optionsComponent?: string | ComponentLike;\n}\n\nconst isTouchDevice = !!window && 'ontouchstart' in window;\nif (typeof FastBoot === 'undefined') {\n (function (ElementProto) {\n if (typeof ElementProto.matches !== 'function') {\n ElementProto.matches =\n (ElementProto as any).msMatchesSelector ||\n (ElementProto as any).mozMatchesSelector ||\n ElementProto.webkitMatchesSelector;\n }\n\n if (typeof ElementProto.closest !== 'function') {\n ElementProto.closest = function closest(selector: string) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let element: Element | null = this;\n while (element !== null && element.nodeType === 1) {\n if (element.matches(selector)) {\n return element;\n }\n element = element.parentNode as Element;\n }\n return null;\n };\n }\n })(window.Element.prototype);\n}\n\nexport default class PowerSelectOptionsComponent extends Component {\n private isTouchDevice = this.args.extra?._isTouchDevice || isTouchDevice;\n private touchMoveEvent?: TouchEvent;\n private mouseOverHandler: EventListener = ((\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _: MouseEvent,\n ): void => {}) as EventListener;\n private mouseUpHandler: EventListener = ((\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _: MouseEvent,\n ): void => {}) as EventListener;\n private touchEndHandler: EventListener = ((\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _: TouchEvent,\n ): void => {}) as EventListener;\n private touchMoveHandler: EventListener = ((\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _: TouchEvent,\n ): void => {}) as EventListener;\n private touchStartHandler: EventListener = ((\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _: TouchEvent,\n ): void => {}) as EventListener;\n\n private _listElement: Element | null = null;\n private _didHandlerSetup: boolean = false;\n\n willDestroy(): void {\n super.willDestroy();\n if (this._listElement) {\n this._removeHandlers(this._listElement);\n }\n }\n\n @action\n addHandlers(element: Element) {\n deprecate(\n 'You are using power-select options component with ember/render-modifier. Replace {{did-insert this.addHandlers}} with {{this.setupHandlers}}.',\n false,\n {\n for: 'ember-power-select',\n id: 'ember-power-select.no-at-ember-render-modifiers',\n since: {\n enabled: '8.1',\n available: '8.1',\n },\n until: '9.0.0',\n },\n );\n\n this._addHandlers(element);\n }\n\n @action\n removeHandlers(element: Element) {\n deprecate(\n 'You are using power-select options component with ember/render-modifier. Replace {{will-destroy this.removeHandlers}} with {{this.setupHandlers}}.',\n false,\n {\n for: 'ember-power-select',\n id: 'ember-power-select.no-at-ember-render-modifiers',\n since: {\n enabled: '8.1',\n available: '8.1',\n },\n until: '9.0.0',\n },\n );\n\n this._removeHandlers(element);\n }\n\n setupHandlers = modifier((element: Element) => {\n if (this._didHandlerSetup) {\n return;\n }\n this._didHandlerSetup = true;\n this._listElement = element;\n this._addHandlers(element);\n });\n\n _optionFromIndex(index: string) {\n const parts = index.split('.');\n let option = this.args.options[parseInt(parts[0] ?? '', 10)];\n for (let i = 1; i < parts.length; i++) {\n option = option.options[parseInt(parts[i] ?? '', 10)];\n }\n return option;\n }\n\n _hasMoved(endEvent: TouchEvent): boolean {\n const moveEvent = this.touchMoveEvent;\n if (!moveEvent) {\n return false;\n }\n\n if (!moveEvent.changedTouches) {\n return false;\n }\n\n if (\n !endEvent.changedTouches?.[0] ||\n (moveEvent.changedTouches[0] as any).touchType !== 'stylus'\n ) {\n return true;\n }\n\n const changedTouch = moveEvent.changedTouches[0];\n\n // Distinguish stylus scroll and tap: if touch \"distance\" < 5px, we consider it a tap\n const horizontalDistance = Math.abs(\n (changedTouch?.pageX ?? 0) - endEvent.changedTouches[0].pageX,\n );\n const verticalDistance = Math.abs(\n (changedTouch?.pageY ?? 0) - endEvent.changedTouches[0].pageY,\n );\n return horizontalDistance >= 5 || verticalDistance >= 5;\n }\n\n private _addHandlers(element: Element) {\n const isGroup = element.getAttribute('data-optgroup') === 'true';\n if (isGroup) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n const findOptionAndPerform = (action: Function, e: MouseEvent): void => {\n if (e.target === null) return;\n const optionItem = (e.target as Element).closest('[data-option-index]');\n if (!optionItem) {\n return;\n }\n if (optionItem.closest('[aria-disabled=true]')) {\n return; // Abort if the item or an ancestor is disabled\n }\n const optionIndex = optionItem.getAttribute('data-option-index');\n if (optionIndex === null) return;\n action(this._optionFromIndex(optionIndex), e);\n };\n this.mouseUpHandler = ((e: MouseEvent): void =>\n findOptionAndPerform(\n this.args.select.actions.choose,\n e,\n )) as EventListener;\n element.addEventListener('mouseup', this.mouseUpHandler);\n if (this.args.highlightOnHover) {\n this.mouseOverHandler = ((e: MouseEvent): void =>\n findOptionAndPerform(\n this.args.select.actions.highlight,\n e,\n )) as EventListener;\n element.addEventListener('mouseover', this.mouseOverHandler);\n }\n if (this.isTouchDevice) {\n this.touchMoveHandler = ((e: TouchEvent): void => {\n this.touchMoveEvent = e;\n if (element) {\n element.removeEventListener('touchmove', this.touchMoveHandler);\n }\n }) as EventListener;\n // Add touch event handlers to detect taps\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.touchStartHandler = ((_: TouchEvent): void => {\n element.addEventListener('touchmove', this.touchMoveHandler);\n }) as EventListener;\n this.touchEndHandler = ((e: TouchEvent): void => {\n if (e.target === null) return;\n const optionItem = (e.target as Element).closest('[data-option-index]');\n if (optionItem === null) return;\n e.preventDefault();\n if (this._hasMoved(e)) {\n this.touchMoveEvent = undefined;\n return;\n }\n\n if (optionItem.closest('[aria-disabled=true]')) {\n return; // Abort if the item or an ancestor is disabled\n }\n\n const optionIndex = optionItem.getAttribute('data-option-index');\n if (optionIndex === null) return;\n this.args.select.actions.choose(this._optionFromIndex(optionIndex), e);\n }) as EventListener;\n element.addEventListener('touchstart', this.touchStartHandler);\n element.addEventListener('touchend', this.touchEndHandler);\n }\n\n this.args.select.actions.scrollTo(this.args.select.highlighted);\n }\n\n private _removeHandlers(element: Element) {\n element.removeEventListener('mouseup', this.mouseUpHandler);\n element.removeEventListener('mouseover', this.mouseOverHandler);\n element.removeEventListener('touchstart', this.touchStartHandler);\n element.removeEventListener('touchmove', this.touchMoveHandler);\n element.removeEventListener('touchend', this.touchEndHandler);\n }\n}\n","import templateOnly from '@ember/component/template-only';\n\ninterface PowerSelectPlaceholderSignature {\n Element: HTMLElement;\n Args: {\n isMultipleWithSearch: boolean;\n placeholder: any;\n inputComponent?: any;\n };\n}\n\nexport default templateOnly();\n","import Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\n\ninterface PowerSelectPowerSelectGroupSignature {\n Element: HTMLElement;\n Args: {\n group: any;\n };\n Blocks: {\n default: [];\n };\n}\n\nexport default class PowerSelectGroupComponent extends Component {\n uniqueId = guidFor(this);\n}\n","import templateOnly from '@ember/component/template-only';\n\ninterface PowerSelectSearchMessageSignature {\n Element: HTMLElement;\n Args: {\n searchMessage: string;\n };\n}\n\nexport default templateOnly();\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { Select } from '../power-select';\nimport type { ComponentLike } from '@glint/template';\n\ninterface PowerSelectTriggerSignature {\n Element: HTMLElement;\n Args: {\n select: Select;\n allowClear: boolean;\n extra: any;\n placeholder?: string;\n placeholderComponent?: string | ComponentLike;\n selectedItemComponent?: string | ComponentLike;\n };\n Blocks: {\n default: [selected: any, select: Select];\n };\n}\n\nexport default class PowerSelectTriggerComponent extends Component {\n @action\n clear(e: Event): false | void {\n e.stopPropagation();\n this.args.select.actions.select(null);\n if (e.type === 'touchstart') {\n return false;\n }\n }\n}\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nimport { isEqual } from '@ember/utils';\n\nexport function emberPowerSelectIsEqual(\n [option, selected]: [any, any] /* , hash*/,\n): boolean {\n if (selected === undefined || selected === null) {\n return false;\n }\n if (isEmberArray(selected)) {\n for (let i = 0; i < selected.length; i++) {\n if (isEqual(selected[i], option)) {\n return true;\n }\n }\n return false;\n } else {\n return isEqual(option, selected);\n }\n}\n\nexport default helper(emberPowerSelectIsEqual);\n","import { helper } from '@ember/component/helper';\nimport { isGroup } from '../utils/group-utils.ts';\n\nexport function emberPowerSelectIsGroup([maybeGroup]: [any]): boolean {\n return isGroup(maybeGroup);\n}\n\nexport default helper(emberPowerSelectIsGroup);\n","import { helper } from '@ember/component/helper';\nimport { isNone } from '@ember/utils';\n\nexport function emberPowerSelectIsSelectedPresent([value]: [any]): boolean {\n return !isNone(value);\n}\n\nexport default helper(emberPowerSelectIsSelectedPresent);\n","import { isEqual } from '@ember/utils';\n\nexport type MatcherFn = (option: any, text: string) => number;\nexport function isGroup(entry: any): boolean {\n return !!entry && !!entry.groupName && !!entry.options;\n}\n\nexport function countOptions(collection: any): number {\n let counter = 0;\n (function walk(collection): void {\n if (!collection) {\n return;\n }\n for (let i = 0; i < collection.length; i++) {\n const entry = collection.objectAt\n ? collection.objectAt(i)\n : collection[i];\n if (isGroup(entry)) {\n walk(entry.options);\n } else {\n counter++;\n }\n }\n })(collection);\n return counter;\n}\n\nexport function indexOfOption(collection: any, option: any): number {\n let index = 0;\n return (function walk(collection): number {\n if (!collection) {\n return -1;\n }\n for (let i = 0; i < collection.length; i++) {\n const entry = collection.objectAt\n ? collection.objectAt(i)\n : collection[i];\n if (isGroup(entry)) {\n const result = walk(entry.options);\n if (result > -1) {\n return result;\n }\n } else if (isEqual(entry, option)) {\n return index;\n } else {\n index++;\n }\n }\n return -1;\n })(collection);\n}\n\nexport function pathForOption(collection: any, option: any): string {\n return (function walk(collection): string {\n if (!collection) {\n return '';\n }\n for (let i = 0; i < collection.length; i++) {\n const entry = collection.objectAt\n ? collection.objectAt(i)\n : collection[i];\n if (isGroup(entry)) {\n const result = walk(entry.options);\n if (result.length > 0) {\n return i + '.' + result;\n }\n } else if (isEqual(entry, option)) {\n return i + '';\n }\n }\n return '';\n })(collection);\n}\n\nexport function optionAtIndex(\n originalCollection: any,\n index: number,\n): { disabled: boolean; option: any } {\n let counter = 0;\n return (\n (function walk(\n collection,\n ancestorIsDisabled,\n ): { disabled: boolean; option: any } | void {\n if (!collection || index < 0) {\n return { disabled: false, option: undefined };\n }\n let localCounter = 0;\n const length = collection.length;\n while (counter <= index && localCounter < length) {\n const entry = collection.objectAt\n ? collection.objectAt(localCounter)\n : collection[localCounter];\n if (isGroup(entry)) {\n const found = walk(\n entry.options,\n ancestorIsDisabled || !!entry.disabled,\n );\n if (found) {\n return found;\n }\n } else if (counter === index) {\n return {\n disabled: ancestorIsDisabled || !!entry.disabled,\n option: entry,\n };\n } else {\n counter++;\n }\n localCounter++;\n }\n })(originalCollection, false) || { disabled: false, option: undefined }\n );\n}\n\nexport interface Group {\n groupName: string;\n options: any[];\n disabled?: boolean;\n [key: string]: unknown;\n}\nfunction copyGroup(group: Group, suboptions: any[]): Group {\n const groupCopy: Group = { ...group, options: suboptions };\n if (Object.prototype.hasOwnProperty.call(group, 'disabled')) {\n groupCopy.disabled = group.disabled;\n }\n return groupCopy;\n}\n\nexport function findOptionWithOffset(\n options: any,\n text: string,\n matcher: MatcherFn,\n offset: number,\n skipDisabled = false,\n): any {\n let counter = 0;\n let foundBeforeOffset;\n let foundAfterOffset = false;\n const canStop = () => !!foundAfterOffset;\n\n (function walk(options: any, ancestorIsDisabled: boolean): any {\n const length = options.length;\n\n for (let i = 0; i < length; i++) {\n const entry = options.objectAt ? options.objectAt(i) : options[i];\n const entryIsDisabled = !!entry.disabled;\n if (!skipDisabled || !entryIsDisabled) {\n if (isGroup(entry)) {\n walk(entry.options, ancestorIsDisabled || entryIsDisabled);\n if (canStop()) {\n return;\n }\n } else if (matcher(entry, text) >= 0) {\n if (counter < offset) {\n if (!foundBeforeOffset) {\n foundBeforeOffset = entry;\n }\n } else {\n foundAfterOffset = entry;\n }\n counter++;\n } else {\n counter++;\n }\n\n if (canStop()) {\n return;\n }\n }\n }\n })(options, false);\n\n return foundAfterOffset ? foundAfterOffset : foundBeforeOffset;\n}\n\nexport function filterOptions(\n options: any,\n text: string,\n matcher: MatcherFn,\n skipDisabled = false,\n): any[] {\n const opts = [];\n const length = options.length;\n for (let i = 0; i < length; i++) {\n const entry = options.objectAt ? options.objectAt(i) : options[i];\n if (!skipDisabled || !entry.disabled) {\n if (isGroup(entry)) {\n const suboptions = filterOptions(\n entry.options,\n text,\n matcher,\n skipDisabled,\n );\n if (suboptions.length > 0) {\n opts.push(copyGroup(entry, suboptions));\n }\n } else if (matcher(entry, text) >= 0) {\n opts.push(entry);\n }\n }\n }\n return opts;\n}\n\nexport function defaultHighlighted({\n results,\n highlighted,\n selected,\n}: {\n results: T[];\n highlighted: T | undefined;\n selected: T | undefined;\n}): T {\n const option = highlighted || selected;\n if (option === undefined || indexOfOption(results, option) === -1) {\n return advanceSelectableOption(results, option, 1);\n }\n return option;\n}\n\nexport function advanceSelectableOption(\n options: any,\n currentOption: any,\n step: 1 | -1,\n) {\n const resultsLength = countOptions(options);\n let startIndex = Math.min(\n Math.max(indexOfOption(options, currentOption) + step, 0),\n resultsLength - 1,\n );\n let { disabled, option } = optionAtIndex(options, startIndex);\n while (option && disabled) {\n const next = optionAtIndex(options, (startIndex += step));\n disabled = next.disabled;\n option = next.option;\n }\n return option;\n}\n\nconst DIACRITICS: Record = {\n 'Ⓐ': 'A',\n A: 'A',\n À: 'A',\n Á: 'A',\n Â: 'A',\n Ầ: 'A',\n Ấ: 'A',\n Ẫ: 'A',\n Ẩ: 'A',\n Ã: 'A',\n Ā: 'A',\n Ă: 'A',\n Ằ: 'A',\n Ắ: 'A',\n Ẵ: 'A',\n Ẳ: 'A',\n Ȧ: 'A',\n Ǡ: 'A',\n Ä: 'A',\n Ǟ: 'A',\n Ả: 'A',\n Å: 'A',\n Ǻ: 'A',\n Ǎ: 'A',\n Ȁ: 'A',\n Ȃ: 'A',\n Ạ: 'A',\n Ậ: 'A',\n Ặ: 'A',\n Ḁ: 'A',\n Ą: 'A',\n Ⱥ: 'A',\n Ɐ: 'A',\n Ꜳ: 'AA',\n Æ: 'AE',\n Ǽ: 'AE',\n Ǣ: 'AE',\n Ꜵ: 'AO',\n Ꜷ: 'AU',\n Ꜹ: 'AV',\n Ꜻ: 'AV',\n Ꜽ: 'AY',\n 'Ⓑ': 'B',\n B: 'B',\n Ḃ: 'B',\n Ḅ: 'B',\n Ḇ: 'B',\n Ƀ: 'B',\n Ƃ: 'B',\n Ɓ: 'B',\n 'Ⓒ': 'C',\n C: 'C',\n Ć: 'C',\n Ĉ: 'C',\n Ċ: 'C',\n Č: 'C',\n Ç: 'C',\n Ḉ: 'C',\n Ƈ: 'C',\n Ȼ: 'C',\n Ꜿ: 'C',\n 'Ⓓ': 'D',\n D: 'D',\n Ḋ: 'D',\n Ď: 'D',\n Ḍ: 'D',\n Ḑ: 'D',\n Ḓ: 'D',\n Ḏ: 'D',\n Đ: 'D',\n Ƌ: 'D',\n Ɗ: 'D',\n Ɖ: 'D',\n Ꝺ: 'D',\n DZ: 'DZ',\n DŽ: 'DZ',\n Dz: 'Dz',\n Dž: 'Dz',\n 'Ⓔ': 'E',\n E: 'E',\n È: 'E',\n É: 'E',\n Ê: 'E',\n Ề: 'E',\n Ế: 'E',\n Ễ: 'E',\n Ể: 'E',\n Ẽ: 'E',\n Ē: 'E',\n Ḕ: 'E',\n Ḗ: 'E',\n Ĕ: 'E',\n Ė: 'E',\n Ë: 'E',\n Ẻ: 'E',\n Ě: 'E',\n Ȅ: 'E',\n Ȇ: 'E',\n Ẹ: 'E',\n Ệ: 'E',\n Ȩ: 'E',\n Ḝ: 'E',\n Ę: 'E',\n Ḙ: 'E',\n Ḛ: 'E',\n Ɛ: 'E',\n Ǝ: 'E',\n 'Ⓕ': 'F',\n F: 'F',\n Ḟ: 'F',\n Ƒ: 'F',\n Ꝼ: 'F',\n 'Ⓖ': 'G',\n G: 'G',\n Ǵ: 'G',\n Ĝ: 'G',\n Ḡ: 'G',\n Ğ: 'G',\n Ġ: 'G',\n Ǧ: 'G',\n Ģ: 'G',\n Ǥ: 'G',\n Ɠ: 'G',\n Ꞡ: 'G',\n Ᵹ: 'G',\n Ꝿ: 'G',\n 'Ⓗ': 'H',\n H: 'H',\n Ĥ: 'H',\n Ḣ: 'H',\n Ḧ: 'H',\n Ȟ: 'H',\n Ḥ: 'H',\n Ḩ: 'H',\n Ḫ: 'H',\n Ħ: 'H',\n Ⱨ: 'H',\n Ⱶ: 'H',\n Ɥ: 'H',\n 'Ⓘ': 'I',\n I: 'I',\n Ì: 'I',\n Í: 'I',\n Î: 'I',\n Ĩ: 'I',\n Ī: 'I',\n Ĭ: 'I',\n İ: 'I',\n Ï: 'I',\n Ḯ: 'I',\n Ỉ: 'I',\n Ǐ: 'I',\n Ȉ: 'I',\n Ȋ: 'I',\n Ị: 'I',\n Į: 'I',\n Ḭ: 'I',\n Ɨ: 'I',\n 'Ⓙ': 'J',\n J: 'J',\n Ĵ: 'J',\n Ɉ: 'J',\n 'Ⓚ': 'K',\n K: 'K',\n Ḱ: 'K',\n Ǩ: 'K',\n Ḳ: 'K',\n Ķ: 'K',\n Ḵ: 'K',\n Ƙ: 'K',\n Ⱪ: 'K',\n Ꝁ: 'K',\n Ꝃ: 'K',\n Ꝅ: 'K',\n Ꞣ: 'K',\n 'Ⓛ': 'L',\n L: 'L',\n Ŀ: 'L',\n Ĺ: 'L',\n Ľ: 'L',\n Ḷ: 'L',\n Ḹ: 'L',\n Ļ: 'L',\n Ḽ: 'L',\n Ḻ: 'L',\n Ł: 'L',\n Ƚ: 'L',\n Ɫ: 'L',\n Ⱡ: 'L',\n Ꝉ: 'L',\n Ꝇ: 'L',\n Ꞁ: 'L',\n LJ: 'LJ',\n Lj: 'Lj',\n 'Ⓜ': 'M',\n M: 'M',\n Ḿ: 'M',\n Ṁ: 'M',\n Ṃ: 'M',\n Ɱ: 'M',\n Ɯ: 'M',\n 'Ⓝ': 'N',\n N: 'N',\n Ǹ: 'N',\n Ń: 'N',\n Ñ: 'N',\n Ṅ: 'N',\n Ň: 'N',\n Ṇ: 'N',\n Ņ: 'N',\n Ṋ: 'N',\n Ṉ: 'N',\n Ƞ: 'N',\n Ɲ: 'N',\n Ꞑ: 'N',\n Ꞥ: 'N',\n NJ: 'NJ',\n Nj: 'Nj',\n 'Ⓞ': 'O',\n O: 'O',\n Ò: 'O',\n Ó: 'O',\n Ô: 'O',\n Ồ: 'O',\n Ố: 'O',\n Ỗ: 'O',\n Ổ: 'O',\n Õ: 'O',\n Ṍ: 'O',\n Ȭ: 'O',\n Ṏ: 'O',\n Ō: 'O',\n Ṑ: 'O',\n Ṓ: 'O',\n Ŏ: 'O',\n Ȯ: 'O',\n Ȱ: 'O',\n Ö: 'O',\n Ȫ: 'O',\n Ỏ: 'O',\n Ő: 'O',\n Ǒ: 'O',\n Ȍ: 'O',\n Ȏ: 'O',\n Ơ: 'O',\n Ờ: 'O',\n Ớ: 'O',\n Ỡ: 'O',\n Ở: 'O',\n Ợ: 'O',\n Ọ: 'O',\n Ộ: 'O',\n Ǫ: 'O',\n Ǭ: 'O',\n Ø: 'O',\n Ǿ: 'O',\n Ɔ: 'O',\n Ɵ: 'O',\n Ꝋ: 'O',\n Ꝍ: 'O',\n Ƣ: 'OI',\n Ꝏ: 'OO',\n Ȣ: 'OU',\n 'Ⓟ': 'P',\n P: 'P',\n Ṕ: 'P',\n Ṗ: 'P',\n Ƥ: 'P',\n Ᵽ: 'P',\n Ꝑ: 'P',\n Ꝓ: 'P',\n Ꝕ: 'P',\n 'Ⓠ': 'Q',\n Q: 'Q',\n Ꝗ: 'Q',\n Ꝙ: 'Q',\n Ɋ: 'Q',\n 'Ⓡ': 'R',\n R: 'R',\n Ŕ: 'R',\n Ṙ: 'R',\n Ř: 'R',\n Ȑ: 'R',\n Ȓ: 'R',\n Ṛ: 'R',\n Ṝ: 'R',\n Ŗ: 'R',\n Ṟ: 'R',\n Ɍ: 'R',\n Ɽ: 'R',\n Ꝛ: 'R',\n Ꞧ: 'R',\n Ꞃ: 'R',\n 'Ⓢ': 'S',\n S: 'S',\n ẞ: 'S',\n Ś: 'S',\n Ṥ: 'S',\n Ŝ: 'S',\n Ṡ: 'S',\n Š: 'S',\n Ṧ: 'S',\n Ṣ: 'S',\n Ṩ: 'S',\n Ș: 'S',\n Ş: 'S',\n Ȿ: 'S',\n Ꞩ: 'S',\n Ꞅ: 'S',\n 'Ⓣ': 'T',\n T: 'T',\n Ṫ: 'T',\n Ť: 'T',\n Ṭ: 'T',\n Ț: 'T',\n Ţ: 'T',\n Ṱ: 'T',\n Ṯ: 'T',\n Ŧ: 'T',\n Ƭ: 'T',\n Ʈ: 'T',\n Ⱦ: 'T',\n Ꞇ: 'T',\n Ꜩ: 'TZ',\n 'Ⓤ': 'U',\n U: 'U',\n Ù: 'U',\n Ú: 'U',\n Û: 'U',\n Ũ: 'U',\n Ṹ: 'U',\n Ū: 'U',\n Ṻ: 'U',\n Ŭ: 'U',\n Ü: 'U',\n Ǜ: 'U',\n Ǘ: 'U',\n Ǖ: 'U',\n Ǚ: 'U',\n Ủ: 'U',\n Ů: 'U',\n Ű: 'U',\n Ǔ: 'U',\n Ȕ: 'U',\n Ȗ: 'U',\n Ư: 'U',\n Ừ: 'U',\n Ứ: 'U',\n Ữ: 'U',\n Ử: 'U',\n Ự: 'U',\n Ụ: 'U',\n Ṳ: 'U',\n Ų: 'U',\n Ṷ: 'U',\n Ṵ: 'U',\n Ʉ: 'U',\n 'Ⓥ': 'V',\n V: 'V',\n Ṽ: 'V',\n Ṿ: 'V',\n Ʋ: 'V',\n Ꝟ: 'V',\n Ʌ: 'V',\n Ꝡ: 'VY',\n 'Ⓦ': 'W',\n W: 'W',\n Ẁ: 'W',\n Ẃ: 'W',\n Ŵ: 'W',\n Ẇ: 'W',\n Ẅ: 'W',\n Ẉ: 'W',\n Ⱳ: 'W',\n 'Ⓧ': 'X',\n X: 'X',\n Ẋ: 'X',\n Ẍ: 'X',\n 'Ⓨ': 'Y',\n Y: 'Y',\n Ỳ: 'Y',\n Ý: 'Y',\n Ŷ: 'Y',\n Ỹ: 'Y',\n Ȳ: 'Y',\n Ẏ: 'Y',\n Ÿ: 'Y',\n Ỷ: 'Y',\n Ỵ: 'Y',\n Ƴ: 'Y',\n Ɏ: 'Y',\n Ỿ: 'Y',\n 'Ⓩ': 'Z',\n Z: 'Z',\n Ź: 'Z',\n Ẑ: 'Z',\n Ż: 'Z',\n Ž: 'Z',\n Ẓ: 'Z',\n Ẕ: 'Z',\n Ƶ: 'Z',\n Ȥ: 'Z',\n Ɀ: 'Z',\n Ⱬ: 'Z',\n Ꝣ: 'Z',\n 'ⓐ': 'a',\n a: 'a',\n ẚ: 'a',\n à: 'a',\n á: 'a',\n â: 'a',\n ầ: 'a',\n ấ: 'a',\n ẫ: 'a',\n ẩ: 'a',\n ã: 'a',\n ā: 'a',\n ă: 'a',\n ằ: 'a',\n ắ: 'a',\n ẵ: 'a',\n ẳ: 'a',\n ȧ: 'a',\n ǡ: 'a',\n ä: 'a',\n ǟ: 'a',\n ả: 'a',\n å: 'a',\n ǻ: 'a',\n ǎ: 'a',\n ȁ: 'a',\n ȃ: 'a',\n ạ: 'a',\n ậ: 'a',\n ặ: 'a',\n ḁ: 'a',\n ą: 'a',\n ⱥ: 'a',\n ɐ: 'a',\n ꜳ: 'aa',\n æ: 'ae',\n ǽ: 'ae',\n ǣ: 'ae',\n ꜵ: 'ao',\n ꜷ: 'au',\n ꜹ: 'av',\n ꜻ: 'av',\n ꜽ: 'ay',\n 'ⓑ': 'b',\n b: 'b',\n ḃ: 'b',\n ḅ: 'b',\n ḇ: 'b',\n ƀ: 'b',\n ƃ: 'b',\n ɓ: 'b',\n 'ⓒ': 'c',\n c: 'c',\n ć: 'c',\n ĉ: 'c',\n ċ: 'c',\n č: 'c',\n ç: 'c',\n ḉ: 'c',\n ƈ: 'c',\n ȼ: 'c',\n ꜿ: 'c',\n ↄ: 'c',\n 'ⓓ': 'd',\n d: 'd',\n ḋ: 'd',\n ď: 'd',\n ḍ: 'd',\n ḑ: 'd',\n ḓ: 'd',\n ḏ: 'd',\n đ: 'd',\n ƌ: 'd',\n ɖ: 'd',\n ɗ: 'd',\n ꝺ: 'd',\n dz: 'dz',\n dž: 'dz',\n 'ⓔ': 'e',\n e: 'e',\n è: 'e',\n é: 'e',\n ê: 'e',\n ề: 'e',\n ế: 'e',\n ễ: 'e',\n ể: 'e',\n ẽ: 'e',\n ē: 'e',\n ḕ: 'e',\n ḗ: 'e',\n ĕ: 'e',\n ė: 'e',\n ë: 'e',\n ẻ: 'e',\n ě: 'e',\n ȅ: 'e',\n ȇ: 'e',\n ẹ: 'e',\n ệ: 'e',\n ȩ: 'e',\n ḝ: 'e',\n ę: 'e',\n ḙ: 'e',\n ḛ: 'e',\n ɇ: 'e',\n ɛ: 'e',\n ǝ: 'e',\n 'ⓕ': 'f',\n f: 'f',\n ḟ: 'f',\n ƒ: 'f',\n ꝼ: 'f',\n 'ⓖ': 'g',\n g: 'g',\n ǵ: 'g',\n ĝ: 'g',\n ḡ: 'g',\n ğ: 'g',\n ġ: 'g',\n ǧ: 'g',\n ģ: 'g',\n ǥ: 'g',\n ɠ: 'g',\n ꞡ: 'g',\n ᵹ: 'g',\n ꝿ: 'g',\n 'ⓗ': 'h',\n h: 'h',\n ĥ: 'h',\n ḣ: 'h',\n ḧ: 'h',\n ȟ: 'h',\n ḥ: 'h',\n ḩ: 'h',\n ḫ: 'h',\n ẖ: 'h',\n ħ: 'h',\n ⱨ: 'h',\n ⱶ: 'h',\n ɥ: 'h',\n ƕ: 'hv',\n 'ⓘ': 'i',\n i: 'i',\n ì: 'i',\n í: 'i',\n î: 'i',\n ĩ: 'i',\n ī: 'i',\n ĭ: 'i',\n ï: 'i',\n ḯ: 'i',\n ỉ: 'i',\n ǐ: 'i',\n ȉ: 'i',\n ȋ: 'i',\n ị: 'i',\n į: 'i',\n ḭ: 'i',\n ɨ: 'i',\n ı: 'i',\n 'ⓙ': 'j',\n j: 'j',\n ĵ: 'j',\n ǰ: 'j',\n ɉ: 'j',\n 'ⓚ': 'k',\n k: 'k',\n ḱ: 'k',\n ǩ: 'k',\n ḳ: 'k',\n ķ: 'k',\n ḵ: 'k',\n ƙ: 'k',\n ⱪ: 'k',\n ꝁ: 'k',\n ꝃ: 'k',\n ꝅ: 'k',\n ꞣ: 'k',\n 'ⓛ': 'l',\n l: 'l',\n ŀ: 'l',\n ĺ: 'l',\n ľ: 'l',\n ḷ: 'l',\n ḹ: 'l',\n ļ: 'l',\n ḽ: 'l',\n ḻ: 'l',\n ſ: 'l',\n ł: 'l',\n ƚ: 'l',\n ɫ: 'l',\n ⱡ: 'l',\n ꝉ: 'l',\n ꞁ: 'l',\n ꝇ: 'l',\n lj: 'lj',\n 'ⓜ': 'm',\n m: 'm',\n ḿ: 'm',\n ṁ: 'm',\n ṃ: 'm',\n ɱ: 'm',\n ɯ: 'm',\n 'ⓝ': 'n',\n n: 'n',\n ǹ: 'n',\n ń: 'n',\n ñ: 'n',\n ṅ: 'n',\n ň: 'n',\n ṇ: 'n',\n ņ: 'n',\n ṋ: 'n',\n ṉ: 'n',\n ƞ: 'n',\n ɲ: 'n',\n ʼn: 'n',\n ꞑ: 'n',\n ꞥ: 'n',\n nj: 'nj',\n 'ⓞ': 'o',\n o: 'o',\n ò: 'o',\n ó: 'o',\n ô: 'o',\n ồ: 'o',\n ố: 'o',\n ỗ: 'o',\n ổ: 'o',\n õ: 'o',\n ṍ: 'o',\n ȭ: 'o',\n ṏ: 'o',\n ō: 'o',\n ṑ: 'o',\n ṓ: 'o',\n ŏ: 'o',\n ȯ: 'o',\n ȱ: 'o',\n ö: 'o',\n ȫ: 'o',\n ỏ: 'o',\n ő: 'o',\n ǒ: 'o',\n ȍ: 'o',\n ȏ: 'o',\n ơ: 'o',\n ờ: 'o',\n ớ: 'o',\n ỡ: 'o',\n ở: 'o',\n ợ: 'o',\n ọ: 'o',\n ộ: 'o',\n ǫ: 'o',\n ǭ: 'o',\n ø: 'o',\n ǿ: 'o',\n ɔ: 'o',\n ꝋ: 'o',\n ꝍ: 'o',\n ɵ: 'o',\n ƣ: 'oi',\n ȣ: 'ou',\n ꝏ: 'oo',\n 'ⓟ': 'p',\n p: 'p',\n ṕ: 'p',\n ṗ: 'p',\n ƥ: 'p',\n ᵽ: 'p',\n ꝑ: 'p',\n ꝓ: 'p',\n ꝕ: 'p',\n 'ⓠ': 'q',\n q: 'q',\n ɋ: 'q',\n ꝗ: 'q',\n ꝙ: 'q',\n 'ⓡ': 'r',\n r: 'r',\n ŕ: 'r',\n ṙ: 'r',\n ř: 'r',\n ȑ: 'r',\n ȓ: 'r',\n ṛ: 'r',\n ṝ: 'r',\n ŗ: 'r',\n ṟ: 'r',\n ɍ: 'r',\n ɽ: 'r',\n ꝛ: 'r',\n ꞧ: 'r',\n ꞃ: 'r',\n 'ⓢ': 's',\n s: 's',\n ß: 's',\n ś: 's',\n ṥ: 's',\n ŝ: 's',\n ṡ: 's',\n š: 's',\n ṧ: 's',\n ṣ: 's',\n ṩ: 's',\n ș: 's',\n ş: 's',\n ȿ: 's',\n ꞩ: 's',\n ꞅ: 's',\n ẛ: 's',\n 'ⓣ': 't',\n t: 't',\n ṫ: 't',\n ẗ: 't',\n ť: 't',\n ṭ: 't',\n ț: 't',\n ţ: 't',\n ṱ: 't',\n ṯ: 't',\n ŧ: 't',\n ƭ: 't',\n ʈ: 't',\n ⱦ: 't',\n ꞇ: 't',\n ꜩ: 'tz',\n 'ⓤ': 'u',\n u: 'u',\n ù: 'u',\n ú: 'u',\n û: 'u',\n ũ: 'u',\n ṹ: 'u',\n ū: 'u',\n ṻ: 'u',\n ŭ: 'u',\n ü: 'u',\n ǜ: 'u',\n ǘ: 'u',\n ǖ: 'u',\n ǚ: 'u',\n ủ: 'u',\n ů: 'u',\n ű: 'u',\n ǔ: 'u',\n ȕ: 'u',\n ȗ: 'u',\n ư: 'u',\n ừ: 'u',\n ứ: 'u',\n ữ: 'u',\n ử: 'u',\n ự: 'u',\n ụ: 'u',\n ṳ: 'u',\n ų: 'u',\n ṷ: 'u',\n ṵ: 'u',\n ʉ: 'u',\n 'ⓥ': 'v',\n v: 'v',\n ṽ: 'v',\n ṿ: 'v',\n ʋ: 'v',\n ꝟ: 'v',\n ʌ: 'v',\n ꝡ: 'vy',\n 'ⓦ': 'w',\n w: 'w',\n ẁ: 'w',\n ẃ: 'w',\n ŵ: 'w',\n ẇ: 'w',\n ẅ: 'w',\n ẘ: 'w',\n ẉ: 'w',\n ⱳ: 'w',\n 'ⓧ': 'x',\n x: 'x',\n ẋ: 'x',\n ẍ: 'x',\n 'ⓨ': 'y',\n y: 'y',\n ỳ: 'y',\n ý: 'y',\n ŷ: 'y',\n ỹ: 'y',\n ȳ: 'y',\n ẏ: 'y',\n ÿ: 'y',\n ỷ: 'y',\n ẙ: 'y',\n ỵ: 'y',\n ƴ: 'y',\n ɏ: 'y',\n ỿ: 'y',\n 'ⓩ': 'z',\n z: 'z',\n ź: 'z',\n ẑ: 'z',\n ż: 'z',\n ž: 'z',\n ẓ: 'z',\n ẕ: 'z',\n ƶ: 'z',\n ȥ: 'z',\n ɀ: 'z',\n ⱬ: 'z',\n ꝣ: 'z',\n Ά: 'Α',\n Έ: 'Ε',\n Ή: 'Η',\n Ί: 'Ι',\n Ϊ: 'Ι',\n Ό: 'Ο',\n Ύ: 'Υ',\n Ϋ: 'Υ',\n Ώ: 'Ω',\n ά: 'α',\n έ: 'ε',\n ή: 'η',\n ί: 'ι',\n ϊ: 'ι',\n ΐ: 'ι',\n ό: 'ο',\n ύ: 'υ',\n ϋ: 'υ',\n ΰ: 'υ',\n ω: 'ω',\n ς: 'σ',\n};\n\n// Copied from Select2\nexport function stripDiacritics(text: string | number) {\n // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n function match(a: string) {\n return DIACRITICS[a] || a;\n }\n\n return `${text}`.replace(/[^\\u0000-\\u007E]/g, match); // eslint-disable-line\n}\n\nexport function defaultMatcher(value: string, text: string) {\n return stripDiacritics(value)\n .toUpperCase()\n .indexOf(stripDiacritics(text).toUpperCase());\n}\n\nexport function defaultTypeAheadMatcher(value: string, text: string) {\n return stripDiacritics(value)\n .toUpperCase()\n .startsWith(stripDiacritics(text).toUpperCase())\n ? 1\n : -1;\n}\n","import Modifier from 'ember-modifier';\nimport { dasherize } from '@ember/string';\nimport { assert } from '@ember/debug';\nimport { typeOf } from '@ember/utils';\nimport type * as CSS from 'csstype';\n\n// Cannot be typed as `Partial` because `CSSStyleDeclaration`\n// interface does _not_ included dashed CSS property names. It only includes the\n// camelCase version of a CSS property.\n// https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1672\ntype CSSStyles =\n | Partial\n | Partial\n | { readonly [key: `--${string}`]: string };\n\nfunction isObject(o: unknown): boolean {\n return typeof o === 'object' && Boolean(o);\n}\n\n/**\n * Returns a two-dimensional array, like:\n *\n * ```js\n * [\n * ['font-size', '16px'],\n * ['text-align', 'center'],\n * ['color', 'red']\n * ]\n * ```\n *\n * This data structure is slightly faster to process than an object / dictionary.\n */\nfunction compileStyles(\n positional: CSSStyles[],\n named: CSSStyles,\n): [string, string][] {\n return [...positional.filter(isObject), named]\n .map((obj) =>\n Object.entries(obj).map(\n ([k, v]) => [dasherize(k), v] as [string, string],\n ),\n )\n .flat();\n}\n\nexport interface StyleModifierSignature {\n Element: Element & ElementCSSInlineStyle;\n Args: {\n Positional: CSSStyles[];\n Named: CSSStyles;\n };\n}\n\nexport default class StyleModifier extends Modifier {\n existingStyles: Set = new Set();\n\n setStyles(\n element: StyleModifierSignature['Element'],\n newStyles: [string, string][],\n ) {\n const { existingStyles } = this;\n const rulesToRemove: Set = new Set(existingStyles);\n\n // clear cache of existing styles\n existingStyles.clear();\n\n newStyles.forEach(([property, value]) => {\n assert(\n `Your given value for property '${property}' is ${value} (${typeOf(\n value,\n )}). ` +\n 'Accepted types are string and undefined. Please change accordingly.',\n typeof value === 'undefined' || typeOf(value) === 'string',\n );\n\n // priority must be specified as separate argument\n // value must not contain \"!important\"\n let priority = '';\n if (value && value.includes('!important')) {\n priority = 'important';\n value = value.replace('!important', '');\n }\n\n // update CSSOM\n element.style.setProperty(property, value, priority);\n\n // should not remove rules that have been updated in this cycle\n rulesToRemove.delete(property);\n\n // cache styles that have been set for potential clean-up when argument changes\n existingStyles.add(property);\n });\n\n // remove rules that were present in last cycle but aren't present in this one\n rulesToRemove.forEach((rule) => element.style.removeProperty(rule));\n }\n\n modify(\n element: StyleModifierSignature['Element'],\n positional: [CSSStyles] | [],\n named: CSSStyles,\n ) {\n this.setStyles(element, compileStyles(positional, named));\n }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/**\n * https://github.com/Pomax/svg-path-reverse\n *\n * This code is in the public domain, except in jurisdictions that do\n * not recognise the public domain, where this code is MIT licensed.\n */\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory();\n } else {\n root.SVGPathEditor = factory();\n }\n}(this, function () {\n\n /**\n * Normalise an SVG path to absolute coordinates\n * and full commands, rather than relative coordinates\n * and/or shortcut commands.\n */\n function normalizePath(d) {\n // preprocess \"d\" so that we have spaces between values\n d = d.replace(/,/g,' ')\n .replace(/([^eE])-/g,'$1 -')\n .replace(/\\s*([achlmqstvzACHLMQSTVZ])\\s*/g,\" $1 \")\n .replace(/\\s+/g, ' ')\n .replace(/(\\d*\\.\\d+([eE]-?\\d+)?)((\\.\\d+)+)/g, (_, g1, g2, g3) => g1 + g3.replaceAll(\".\", \" .\"));\n\n // set up the variables used in this function\n var instructions = d.replace(/([achlmqstvzACHLMQSTVZ])\\s?/g,\"|$1\").split(\"|\"),\n instructionLength = instructions.length,\n i,\n instruction,\n op,\n lop,\n prevop,\n args = [],\n oargs = [],\n alen,\n a,\n sx = 0,\n sy = 0,\n x = 0,\n y = 0,\n cx = 0,\n cy = 0,\n cx2 = 0,\n cy2 = 0,\n rx = 0,\n ry = 0,\n xrot = 0,\n lflag = 0,\n sweep = 0,\n normalized = \"\";\n\n // we run through the instruction list starting at 1, not 0,\n // because we split up \"|M x y ....\" so the first element will\n // always be an empty string. By design.\n for (i = 1; i < instructionLength; i++) {\n\n // which instruction is this?\n instruction = instructions[i];\n op = instruction.substring(0,1);\n lop = op.toLowerCase();\n\n // what are the arguments? note that we need to convert\n // all strings into numbers, or + will do silly things.\n args = instruction.replace(op,'').trim().split(' ').filter(function(v) { return v !== ''; });\n oargs = args;\n args = args.map(parseFloat);\n alen = args.length;\n\n // we could use a switch, but elaborate code in a \"case\" with\n // fallthrough is just horrid to read. So let's use ifthen\n // statements instead.\n\n // moveto command (plus possible lineto)\n if(lop === \"m\") {\n normalized += \"M \";\n if (op === \"m\") {\n x += args[0];\n y += args[1];\n } else {\n x = args[0];\n y = args[1];\n }\n // records start position, for dealing\n // with the shape close operator ('Z')\n sx = x;\n sy = y;\n normalized += x + \" \" + y + \" \";\n if (alen > 2) {\n for (a = 0; a < alen; a += 2) {\n if (op === \"m\") {\n x += args[a];\n y += args[a+1];\n } else {\n x = args[a];\n y = args[a+1];\n }\n normalized += \"L \" + x + \" \" + y + \" \";\n }\n }\n }\n\n // lineto commands\n else if(lop === \"l\") {\n for (a = 0; a < alen; a += 2) {\n if (op === \"l\") {\n x += args[a];\n y += args[a+1];\n } else {\n x = args[a];\n y = args[a+1];\n }\n normalized += \"L \" + x + \" \" + y + \" \";\n }\n }\n else if(lop === \"h\") {\n for (a = 0; a < alen; a++) {\n if (op === \"h\") {\n x += args[a];\n } else {\n x = args[a];\n }\n normalized += \"L \" + x + \" \" + y + \" \";\n }\n }\n else if(lop === \"v\") {\n for (a = 0; a < alen; a++) {\n if (op === \"v\") {\n y += args[a];\n } else {\n y = args[a];\n }\n normalized += \"L \" + x + \" \" + y + \" \";\n }\n }\n\n // quadratic curveto commands\n else if(lop === \"q\") {\n for (a = 0; a < alen; a += 4) {\n if (op === \"q\") {\n cx = x + args[a];\n cy = y + args[a+1];\n x += args[a+2];\n y += args[a+3];\n } else {\n cx = args[a];\n cy = args[a+1];\n x = args[a+2];\n y = args[a+3];\n }\n normalized += \"Q \" + cx + \" \" + cy + \" \" + x + \" \" + y + \" \";\n }\n }\n else if(lop === \"t\") {\n for (a = 0; a < alen; a += 2) {\n if ([\"t\", \"q\"].indexOf(prevop) > -1) {\n // reflect previous cx/cy over x/y\n cx = x + (x-cx);\n cy = y + (y-cy);\n }\n else {\n cx = x;\n cy = y;\n }\n // then get real end point\n if (op === \"t\") {\n x += args[a];\n y += args[a+1];\n } else {\n x = args[a];\n y = args[a+1];\n }\n normalized += \"Q \" + cx + \" \" + cy + \" \" + x + \" \" + y + \" \";\n prevop = lop;\n }\n }\n\n // cubic curveto commands\n else if(lop === \"c\") {\n for (a = 0; a < alen; a += 6) {\n if (op === \"c\") {\n cx = x + args[a];\n cy = y + args[a+1];\n cx2 = x + args[a+2];\n cy2 = y + args[a+3];\n x += args[a+4];\n y += args[a+5];\n } else {\n cx = args[a];\n cy = args[a+1];\n cx2 = args[a+2];\n cy2 = args[a+3];\n x = args[a+4]\n y = args[a+5];\n }\n normalized += \"C \" + cx + \" \" + cy + \" \" + cx2 + \" \" + cy2 + \" \" + x + \" \" + y + \" \";\n }\n }\n else if(lop === \"s\") {\n for (a = 0; a < alen; a += 4) {\n cx = x;\n cy = y;\n if ([\"s\", \"c\"].indexOf(prevop) > -1) {\n cx += (x-cx2);\n cy += (y-cy2);\n }\n // then get real control and end point\n if (op === \"s\") {\n cx2 = x + args[a];\n cy2 = y + args[a+1];\n x += args[a+2];\n y += args[a+3];\n } else {\n cx2 = args[a];\n cy2 = args[a+1];\n x = args[a+2]\n y = args[a+3];\n }\n normalized += \"C \" + cx + \" \" + cy + \" \" + cx2 + \" \" + cy2 + \" \" + x + \" \" + y + \" \";\n }\n }\n\n // rx ry x-axis-rotation large-arc-flag sweep-flag x y\n // a 25,25 -30 0, 1 50,-25\n\n // arc command\n else if(lop === \"a\") {\n for (a = 0; a < alen; a += 7) {\n rx = args[a];\n ry = args[a+1];\n xrot = args[a+2];\n\n lflag = oargs[a+3]; // we need the original string to deal with leading zeroes\n let fixed = false;\n\n if(lflag.length > 1) {\n let b1 = parseInt(lflag[0]),\n b2 = parseInt(lflag[1]),\n rest = undefined;\n if(lflag.length > 2) rest = parseFloat(lflag.substring(2));\n args[a+3] = b1;\n args.splice(a+4, 0, b2);\n oargs.splice(a+4, 0, `+`);\n if (rest!==undefined) args.splice(a+5, 0, rest);\n fixed = true;\n }\n lflag = args[a+3];\n\n sweep = fixed ? args[a+4] : oargs[a+4]; // we need the original string to deal with leading zeroes\n if(!fixed && sweep.length > 1) {\n args[a+4] = parseInt(sweep[0]);\n args.splice(a+5, 0, parseFloat(sweep.substring(1)));\n }\n sweep = args[a+4];\n\n if (op === \"a\") {\n x += args[a+5];\n y += args[a+6];\n } else {\n x = args[a+5];\n y = args[a+6];\n }\n\n normalized += \"A \" + rx + \" \" + ry + \" \" + xrot + \" \" + lflag + \" \" + sweep + \" \" + x + \" \" + y + \" \";\n }\n }\n\n else if(lop === \"z\") {\n normalized += \"Z \";\n // not unimportant: path closing changes the current x/y coordinate\n x = sx;\n y = sy;\n }\n\n prevop = lop;\n }\n return normalized.trim();\n };\n\n /**\n * Reverse an SVG path.\n * As long as the input path is normalised, this is actually really\n * simple to do. As all pathing commands are symmetrical, meaning\n * that they render the same when you reverse the coordinate order,\n * the grand trick here is to reverse the path (making sure to keep\n * coordinates ordered pairwise) and shift the operators left by\n * one or two coordinate pairs depending on the operator:\n *\n * - Z is removed (after noting it existed),\n * - L moves to 2 spots earlier (skipping one coordinate),\n * - Q moves to 2 spots earlier (skipping one coordinate),\n * - C moves to 4 spots earlier (skipping two coordinates)\n * and its arguments get reversed,\n * - the path start becomes M.\n * - the path end becomes Z iff it was there to begin with.\n */\n function reverseNormalizedPath(normalized) {\n var terms = normalized.trim().split(' '),\n term,\n tlen = terms.length,\n tlen1 = tlen-1,\n t,\n reversed = [],\n x, y,\n pair, pairs,\n shift,\n matcher = new RegExp('[QAZLCM]',''),\n closed = terms.slice(-1)[0].toUpperCase() === 'Z';\n\n for (t = 0; t < tlen; t++) {\n term = terms[t];\n\n // Is this an operator? If it is, run through its\n // argument list, which we know is fixed length.\n if (matcher.test(term)) {\n\n // Arc processing relies on not-just-coordinates\n if (term === \"A\") {\n reversed.push(terms[t+5] === '0' ? '1' : '0');\n reversed.push(terms[t+4]);\n reversed.push(terms[t+3]);\n reversed.push(terms[t+2]);\n reversed.push(terms[t+1]);\n reversed.push(term);\n reversed.push(terms[t+7]);\n reversed.push(terms[t+6]);\n t += 7;\n continue;\n }\n\n // how many coordinate pairs do we need to read,\n // and by how many pairs should this operator be\n // shifted left?\n else if (term === \"C\") { pairs = 3; shift = 2; }\n else if (term === \"Q\") { pairs = 2; shift = 1; }\n else if (term === \"L\") { pairs = 1; shift = 1; }\n else if (term === \"M\") { pairs = 1; shift = 0; }\n else { continue; }\n\n // do the argument reading and operator shifting\n if (pairs === shift) {\n reversed.push(term);\n }\n for (pair = 0; pair < pairs; pair++) {\n if (pair === shift) {\n reversed.push(term);\n }\n x = terms[++t];\n y = terms[++t];\n reversed.push(y);\n reversed.push(x);\n }\n }\n // the code has been set up so that every time we\n // iterate because of the for() operation, the term\n // we see is a pathing operator, not a number. As\n // such, if we get to this \"else\" the path is malformed.\n else {\n var pre = terms.slice(Math.max(t-3,0),3).join(\" \");\n post = terms.slice(t+1,Math.min(t+4,tlen1)).join(\" \");\n range = pre + \" [\" + term + \"] \" + post;\n throw(\"Error while trying to reverse normalized SVG path, at position \"+t+\" (\"+range+\").\\n\" +\n \"Either the path is not normalised, or it's malformed.\"); }\n }\n\n reversed.push('M');\n\n // generating the reversed path string involves\n // running through our transformed terms in reverse.\n var revstring = \"\", rlen1 = reversed.length-1, r;\n for (r = rlen1; r > 0; r--) {\n revstring += reversed[r] + \" \";\n }\n if (closed) revstring += \"Z\";\n revstring = revstring.replace(/M M/g,'Z M');\n\n return revstring;\n };\n\n /**\n * This is the function that you'll actually want to\n * make use of, because it lets you reverse individual\n * subpaths in some \"d\" attribute.\n */\n function reverseSubPath(path, subpath) {\n subpath = parseInt(subpath)==subpath ? subpath : false;\n var path = normalizePath(path),\n paths = path.replace(/M/g,'|M').split(\"|\"),\n revpath;\n paths.splice(0,1);\n if (subpath !== false && subpath >= paths.length) {\n return path;\n }\n\n if (subpath === false) {\n paths = paths.map(function(spath) {\n return reverseNormalizedPath(spath.trim());\n });\n } else {\n var spath = paths[subpath];\n if (spath) {\n revpath = reverseNormalizedPath(spath.trim());\n paths[subpath] = revpath;\n }\n }\n\n return paths.reverse().join(\" \").replace(/ +/g,' ').trim();\n };\n\n /**\n * Our return object\n */\n var SVGPathEditor = {\n normalize: normalizePath,\n reverseNormalized: reverseNormalizedPath,\n reverse: reverseSubPath\n };\n\n return SVGPathEditor;\n}));\n","var __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nclass TrackedStorageImpl {\n constructor(initialValue, isEqual) {\n this._value = this._lastValue = initialValue;\n this._isEqual = isEqual;\n }\n}\n__decorate([tracked], TrackedStorageImpl.prototype, \"_value\", void 0);\nfunction tripleEq(a, b) {\n return a === b;\n}\nexport function createStorage(initialValue, isEqual = tripleEq) {\n assert('the second parameter to `createStorage` must be an equality function or undefined', typeof isEqual === 'function');\n return new TrackedStorageImpl(initialValue, isEqual);\n}\nexport function getValue(storage) {\n assert('getValue must be passed a tracked store created with `createStorage`.', storage instanceof TrackedStorageImpl);\n return storage._value;\n}\nexport function setValue(storage, value) {\n assert('setValue must be passed a tracked store created with `createStorage`.', storage instanceof TrackedStorageImpl);\n const {\n _isEqual: isEqual,\n _lastValue: lastValue\n } = storage;\n if (!isEqual(value, lastValue)) {\n storage._value = storage._lastValue = value;\n }\n}","import {\n TrackedStorage,\n createStorage,\n getValue,\n setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport class TrackedMap implements Map {\n private collection = createStorage(null, () => false);\n\n private storages: Map> = new Map();\n\n private vals: Map;\n\n private readStorageFor(key: K): void {\n const { storages } = this;\n let storage = storages.get(key);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n storages.set(key, storage);\n }\n\n getValue(storage);\n }\n\n private dirtyStorageFor(key: K): void {\n const storage = this.storages.get(key);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n\n constructor();\n constructor(entries: readonly (readonly [K, V])[] | null);\n constructor(iterable: Iterable);\n constructor(\n existing?:\n | readonly (readonly [K, V])[]\n | Iterable\n | null\n | undefined\n ) {\n // TypeScript doesn't correctly resolve the overloads for calling the `Map`\n // constructor for the no-value constructor. This resolves that.\n this.vals = existing ? new Map(existing) : new Map();\n }\n\n // **** KEY GETTERS ****\n get(key: K): V | undefined {\n // entangle the storage for the key\n this.readStorageFor(key);\n\n return this.vals.get(key);\n }\n\n has(key: K): boolean {\n this.readStorageFor(key);\n\n return this.vals.has(key);\n }\n\n // **** ALL GETTERS ****\n entries(): IterableIterator<[K, V]> {\n getValue(this.collection);\n\n return this.vals.entries();\n }\n\n keys(): IterableIterator {\n getValue(this.collection);\n\n return this.vals.keys();\n }\n\n values(): IterableIterator {\n getValue(this.collection);\n\n return this.vals.values();\n }\n\n forEach(fn: (value: V, key: K, map: Map) => void): void {\n getValue(this.collection);\n\n this.vals.forEach(fn);\n }\n\n get size(): number {\n getValue(this.collection);\n\n return this.vals.size;\n }\n\n [Symbol.iterator](): IterableIterator<[K, V]> {\n getValue(this.collection);\n\n return this.vals[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return this.vals[Symbol.toStringTag];\n }\n\n // **** KEY SETTERS ****\n set(key: K, value: V): this {\n this.dirtyStorageFor(key);\n setValue(this.collection, null);\n\n this.vals.set(key, value);\n\n return this;\n }\n\n delete(key: K): boolean {\n this.dirtyStorageFor(key);\n setValue(this.collection, null);\n\n return this.vals.delete(key);\n }\n\n // **** ALL SETTERS ****\n clear(): void {\n this.storages.forEach((s) => setValue(s, null));\n setValue(this.collection, null);\n\n this.vals.clear();\n }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedMap.prototype, Map.prototype);\n\nexport class TrackedWeakMap\n implements WeakMap\n{\n private storages: WeakMap> = new WeakMap();\n\n private vals: WeakMap;\n\n private readStorageFor(key: K): void {\n const { storages } = this;\n let storage = storages.get(key);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n storages.set(key, storage);\n }\n\n getValue(storage);\n }\n\n private dirtyStorageFor(key: K): void {\n const storage = this.storages.get(key);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n\n constructor();\n constructor(iterable: Iterable);\n constructor(entries: readonly [K, V][] | null);\n constructor(\n existing?: readonly [K, V][] | Iterable | null | undefined\n ) {\n // TypeScript doesn't correctly resolve the overloads for calling the `Map`\n // constructor for the no-value constructor. This resolves that.\n this.vals = existing ? new WeakMap(existing) : new WeakMap();\n }\n\n get(key: K): V | undefined {\n this.readStorageFor(key);\n\n return this.vals.get(key);\n }\n\n has(key: K): boolean {\n this.readStorageFor(key);\n\n return this.vals.has(key);\n }\n\n set(key: K, value: V): this {\n this.dirtyStorageFor(key);\n\n this.vals.set(key, value);\n\n return this;\n }\n\n delete(key: K): boolean {\n this.dirtyStorageFor(key);\n\n return this.vals.delete(key);\n }\n\n get [Symbol.toStringTag](): string {\n return this.vals[Symbol.toStringTag];\n }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedWeakMap.prototype, WeakMap.prototype);\n","import {\n TrackedStorage,\n createStorage,\n getValue,\n setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport class TrackedSet implements Set {\n private collection = createStorage(null, () => false);\n\n private storages: Map> = new Map();\n\n private vals: Set;\n\n private storageFor(key: T): TrackedStorage {\n const storages = this.storages;\n let storage = storages.get(key);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n storages.set(key, storage);\n }\n\n return storage;\n }\n\n private dirtyStorageFor(key: T): void {\n const storage = this.storages.get(key);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n\n constructor();\n constructor(values: readonly T[] | null);\n constructor(iterable: Iterable);\n constructor(existing?: readonly T[] | Iterable | null | undefined) {\n this.vals = new Set(existing);\n }\n\n // **** KEY GETTERS ****\n has(value: T): boolean {\n getValue(this.storageFor(value));\n\n return this.vals.has(value);\n }\n\n // **** ALL GETTERS ****\n entries(): IterableIterator<[T, T]> {\n getValue(this.collection);\n\n return this.vals.entries();\n }\n\n keys(): IterableIterator {\n getValue(this.collection);\n\n return this.vals.keys();\n }\n\n values(): IterableIterator {\n getValue(this.collection);\n\n return this.vals.values();\n }\n\n forEach(fn: (value1: T, value2: T, set: Set) => void): void {\n getValue(this.collection);\n\n this.vals.forEach(fn);\n }\n\n get size(): number {\n getValue(this.collection);\n\n return this.vals.size;\n }\n\n [Symbol.iterator](): IterableIterator {\n getValue(this.collection);\n\n return this.vals[Symbol.iterator]();\n }\n\n get [Symbol.toStringTag](): string {\n return this.vals[Symbol.toStringTag];\n }\n\n // **** KEY SETTERS ****\n add(value: T): this {\n this.dirtyStorageFor(value);\n setValue(this.collection, null);\n\n this.vals.add(value);\n\n return this;\n }\n\n delete(value: T): boolean {\n this.dirtyStorageFor(value);\n setValue(this.collection, null);\n\n return this.vals.delete(value);\n }\n\n // **** ALL SETTERS ****\n clear(): void {\n this.storages.forEach((s) => setValue(s, null));\n setValue(this.collection, null);\n\n this.vals.clear();\n }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedSet.prototype, Set.prototype);\n\nexport class TrackedWeakSet implements WeakSet {\n private storages: WeakMap> = new WeakMap();\n\n private vals: WeakSet;\n\n private storageFor(key: T): TrackedStorage {\n const storages = this.storages;\n let storage = storages.get(key);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n storages.set(key, storage);\n }\n\n return storage;\n }\n\n private dirtyStorageFor(key: T): void {\n const storage = this.storages.get(key);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n\n constructor(values?: readonly T[] | null) {\n this.vals = new WeakSet(values);\n }\n\n has(value: T): boolean {\n getValue(this.storageFor(value));\n\n return this.vals.has(value);\n }\n\n add(value: T): this {\n // Add to vals first to get better error message\n this.vals.add(value);\n\n this.dirtyStorageFor(value);\n\n return this;\n }\n\n delete(value: T): boolean {\n this.dirtyStorageFor(value);\n\n return this.vals.delete(value);\n }\n\n get [Symbol.toStringTag](): string {\n return this.vals[Symbol.toStringTag];\n }\n}\n\n// So instanceof works\nObject.setPrototypeOf(TrackedWeakSet.prototype, WeakSet.prototype);\n","import classApplyDescriptorGet from \"./classApplyDescriptorGet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"get\");\n return classApplyDescriptorGet(receiver, descriptor);\n}","export default function _classExtractFieldDescriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n }\n return privateMap.get(receiver);\n}","export default function _classApplyDescriptorGet(receiver, descriptor) {\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n return descriptor.value;\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\n// Unfortunately, TypeScript's ability to do inference *or* type-checking in a\n// `Proxy`'s body is very limited, so we have to use a number of casts `as any`\n// to make the internal accesses work. The type safety of these is guaranteed at\n// the *call site* instead of within the body: you cannot do `Array.blah` in TS,\n// and it will blow up in JS in exactly the same way, so it is safe to assume\n// that properties within the getter have the correct type in TS.\n\nimport {\n TrackedStorage,\n createStorage,\n getValue,\n setValue,\n} from 'ember-tracked-storage-polyfill';\n\nconst ARRAY_GETTER_METHODS = new Set([\n Symbol.iterator,\n 'concat',\n 'entries',\n 'every',\n 'filter',\n 'find',\n 'findIndex',\n 'flat',\n 'flatMap',\n 'forEach',\n 'includes',\n 'indexOf',\n 'join',\n 'keys',\n 'lastIndexOf',\n 'map',\n 'reduce',\n 'reduceRight',\n 'slice',\n 'some',\n 'values',\n]);\n\n// For these methods, `Array` itself immediately gets the `.length` to return\n// after invoking them.\nconst ARRAY_WRITE_THEN_READ_METHODS = new Set([\n 'fill',\n 'push',\n 'unshift',\n]);\n\nfunction convertToInt(prop: number | string | symbol): number | null {\n if (typeof prop === 'symbol') return null;\n\n const num = Number(prop);\n\n if (isNaN(num)) return null;\n\n return num % 1 === 0 ? num : null;\n}\n\nclass TrackedArray {\n /**\n * Creates an array from an iterable object.\n * @param iterable An iterable object to convert to an array.\n */\n static from(iterable: Iterable | ArrayLike): TrackedArray;\n\n /**\n * Creates an array from an iterable object.\n * @param iterable An iterable object to convert to an array.\n * @param mapfn A mapping function to call on every element of the array.\n * @param thisArg Value of 'this' used to invoke the mapfn.\n */\n static from(\n iterable: Iterable | ArrayLike,\n mapfn: (v: T, k: number) => U,\n thisArg?: unknown\n ): TrackedArray;\n\n static from(\n iterable: Iterable | ArrayLike,\n mapfn?: (v: T, k: number) => U,\n thisArg?: unknown\n ): TrackedArray | TrackedArray {\n return mapfn\n ? new TrackedArray(Array.from(iterable, mapfn, thisArg))\n : new TrackedArray(Array.from(iterable));\n }\n\n static of(...arr: T[]): TrackedArray {\n return new TrackedArray(arr);\n }\n\n constructor(arr: T[] = []) {\n let clone = arr.slice();\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let self = this;\n\n let boundFns = new Map any>();\n\n /**\n Flag to track whether we have *just* intercepted a call to `.push()` or\n `.unshift()`, since in those cases (and only those cases!) the `Array`\n itself checks `.length` to return from the function call.\n */\n let nativelyAccessingLengthFromPushOrUnshift = false;\n\n return new Proxy(clone, {\n get(target, prop /*, _receiver */) {\n let index = convertToInt(prop);\n\n if (index !== null) {\n self.#readStorageFor(index);\n getValue(self.#collection);\n\n return target[index];\n }\n\n if (prop === 'length') {\n // If we are reading `.length`, it may be a normal user-triggered\n // read, or it may be a read triggered by Array itself. In the latter\n // case, it is because we have just done `.push()` or `.unshift()`; in\n // that case it is safe not to mark this as a *read* operation, since\n // calling `.push()` or `.unshift()` cannot otherwise be part of a\n // \"read\" operation safely, and if done during an *existing* read\n // (e.g. if the user has already checked `.length` *prior* to this),\n // that will still trigger the mutation-after-consumption assertion.\n if (nativelyAccessingLengthFromPushOrUnshift) {\n nativelyAccessingLengthFromPushOrUnshift = false;\n } else {\n getValue(self.#collection);\n }\n\n return target[prop];\n }\n\n // Here, track that we are doing a `.push()` or `.unshift()` by setting\n // the flag to `true` so that when the `.length` is read by `Array` (see\n // immediately above), it knows not to dirty the collection.\n if (ARRAY_WRITE_THEN_READ_METHODS.has(prop)) {\n nativelyAccessingLengthFromPushOrUnshift = true;\n }\n\n if (ARRAY_GETTER_METHODS.has(prop)) {\n let fn = boundFns.get(prop);\n\n if (fn === undefined) {\n fn = (...args) => {\n getValue(self.#collection);\n return (target as any)[prop](...args);\n };\n\n boundFns.set(prop, fn);\n }\n\n return fn;\n }\n\n return (target as any)[prop];\n },\n\n set(target, prop, value /*, _receiver */) {\n (target as any)[prop] = value;\n\n let index = convertToInt(prop);\n\n if (index !== null) {\n self.#dirtyStorageFor(index);\n setValue(self.#collection, null);\n } else if (prop === 'length') {\n setValue(self.#collection, null);\n }\n\n return true;\n },\n\n getPrototypeOf() {\n return TrackedArray.prototype;\n },\n }) as TrackedArray;\n }\n\n #collection = createStorage(null, () => false);\n\n #storages = new Map>();\n\n #readStorageFor(index: number) {\n let storage = this.#storages.get(index);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n this.#storages.set(index, storage);\n }\n\n getValue(storage);\n }\n\n #dirtyStorageFor(index: number): void {\n const storage = this.#storages.get(index);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n}\n\n// This rule is correct in the general case, but it doesn't understand\n// declaration merging, which is how we're using the interface here. This says\n// `TrackedArray` acts just like `Array`, but also has the properties\n// declared via the `class` declaration above -- but without the cost of a\n// subclass, which is much slower that the proxied array behavior. That is: a\n// `TrackedArray` *is* an `Array`, just with a proxy in front of accessors and\n// setters, rather than a subclass of an `Array` which would be de-optimized by\n// the browsers.\n//\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface TrackedArray extends Array {}\n\nexport default TrackedArray;\n\n// Ensure instanceof works correctly\nObject.setPrototypeOf(TrackedArray.prototype, Array.prototype);\n","import {\n createStorage,\n getValue,\n setValue,\n} from 'ember-tracked-storage-polyfill';\n\nexport default class TrackedObject {\n static fromEntries(entries) {\n return new TrackedObject(Object.fromEntries(entries));\n }\n\n constructor(obj = {}) {\n let proto = Object.getPrototypeOf(obj);\n let descs = Object.getOwnPropertyDescriptors(obj);\n\n let clone = Object.create(proto);\n\n for (let prop in descs) {\n Object.defineProperty(clone, prop, descs[prop]);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let self = this;\n\n return new Proxy(clone, {\n get(target, prop) {\n self.#readStorageFor(prop);\n\n return target[prop];\n },\n\n has(target, prop) {\n self.#readStorageFor(prop);\n\n return prop in target;\n },\n\n ownKeys(target) {\n getValue(self.#collection);\n\n return Reflect.ownKeys(target);\n },\n\n set(target, prop, value) {\n target[prop] = value;\n\n self.#dirtyStorageFor(prop);\n self.#dirtyCollection();\n\n return true;\n },\n\n deleteProperty(target, prop) {\n if (prop in target) {\n delete target[prop];\n self.#dirtyStorageFor(prop);\n self.#dirtyCollection();\n }\n\n return true;\n },\n\n getPrototypeOf() {\n return TrackedObject.prototype;\n },\n });\n }\n\n #storages = new Map();\n\n #collection = createStorage(null, () => false);\n\n #readStorageFor(key) {\n let storage = this.#storages.get(key);\n\n if (storage === undefined) {\n storage = createStorage(null, () => false);\n this.#storages.set(key, storage);\n }\n\n getValue(storage);\n }\n\n #dirtyStorageFor(key) {\n const storage = this.#storages.get(key);\n\n if (storage) {\n setValue(storage, null);\n }\n }\n\n #dirtyCollection() {\n setValue(this.#collection, null);\n }\n}\n","import { tracked as glimmerTracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nimport { TrackedMap, TrackedWeakMap } from './map';\nimport { TrackedSet, TrackedWeakSet } from './set';\nimport TrackedArray from './array';\nimport TrackedObject from './object';\n\nexport default function tracked(obj: T[] | typeof Array): TrackedArray;\n\nexport default function tracked(obj: Set | typeof Set): TrackedSet;\n\nexport default function tracked(\n obj: Map | typeof Map\n): TrackedMap;\n\nexport default function tracked(\n obj: WeakSet | typeof WeakSet\n): TrackedWeakSet;\n\nexport default function tracked(\n obj: WeakMap | typeof WeakMap\n): TrackedWeakMap;\n\nexport default function tracked(obj: T | typeof Object): T;\n\nexport default function tracked(\n obj: object,\n key: string | symbol,\n desc?: PropertyDescriptor\n): void;\n\nexport default function tracked(\n obj: object,\n key?: string | symbol,\n desc?: PropertyDescriptor\n): unknown {\n if (key !== undefined && desc !== undefined) {\n return glimmerTracked(obj, key, desc);\n }\n\n if (Array.isArray(obj)) {\n return new TrackedArray(obj);\n }\n\n switch (obj) {\n case Object:\n return new TrackedObject();\n case Array:\n return new TrackedArray();\n case Map:\n return new TrackedMap();\n case WeakMap:\n return new TrackedWeakMap();\n case Set:\n return new TrackedSet();\n case WeakSet:\n return new TrackedWeakSet();\n }\n\n if (obj instanceof Map) {\n return new TrackedMap(obj);\n } else if (obj instanceof WeakMap) {\n return new TrackedWeakMap();\n } else if (obj instanceof Set) {\n return new TrackedSet(obj);\n } else if (obj instanceof WeakSet) {\n return new TrackedWeakSet();\n } else {\n assert(\n `You must either use tracked as a field decorator, or to wrap built-in class instances:\n\n class Example {\n @tracked field = 123;\n\n map = tracked(Map);\n map = tracked(new Map());\n }`,\n typeof obj === 'object' && obj !== null\n );\n\n return new TrackedObject(obj as Record);\n }\n}\n","export default function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n return desc;\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 _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}","export default function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\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}","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport default class Cache {\n public size = 0;\n public misses = 0;\n public hits = 0;\n\n constructor(\n private limit: number,\n private func: (obj: T) => V,\n private store?: any,\n ) {\n this.store = store || new Map();\n }\n\n get(key: T): V {\n let value = this.store.get(key);\n\n if (this.store.has(key)) {\n this.hits++;\n\n return this.store.get(key);\n } else {\n this.misses++;\n value = this.set(key, this.func(key));\n }\n\n return value;\n }\n\n set(key: T, value: V) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n\n return value;\n }\n\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","export interface Descriptor {\n configurable?: boolean;\n enumerable?: boolean;\n writable?: boolean;\n get?(): any;\n set?(v: any): void;\n initializer?: null | (() => any);\n value?: any;\n}\nexport type LegacyDecorator = (\n target: object,\n prop: unknown,\n desc: Descriptor\n) => Descriptor | null | undefined | void;\n\nexport type LegacyClassDecorator = (target: new (...args: any) => any) =>\n | {\n new (...args: any): any;\n }\n | null\n | undefined\n | void;\n\nconst deferred: WeakMap<\n object,\n Map\n> = new WeakMap();\n\nfunction deferDecorator(\n proto: object,\n prop: string | number | symbol,\n desc: Descriptor\n): void {\n let map = deferred.get(proto);\n if (!map) {\n map = new Map();\n deferred.set(proto, map);\n }\n map.set(prop, desc);\n}\n\nfunction findDeferredDecorator(\n target: object,\n prop: string | number | symbol\n): Descriptor | undefined {\n let cursor: object = (target as any).prototype;\n while (cursor) {\n let desc = deferred.get(cursor)?.get(prop);\n if (desc) {\n return desc;\n }\n cursor = (cursor as any).prototype;\n }\n}\n\nfunction decorateFieldV1(\n target: { prototype: object },\n prop: string | number | symbol,\n decorators: LegacyDecorator[],\n initializer?: () => any\n): void {\n return decorateFieldV2(target.prototype, prop, decorators, initializer);\n}\n\nfunction decorateFieldV2(\n prototype: object,\n prop: string | number | symbol,\n decorators: LegacyDecorator[],\n initializer?: () => any\n): void {\n let desc: Descriptor = {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null,\n };\n if (initializer) {\n desc.initializer = initializer;\n }\n for (let decorator of decorators) {\n desc = decorator(prototype, prop, desc) || desc;\n }\n if (desc.initializer === undefined) {\n Object.defineProperty(prototype, prop, desc);\n } else {\n deferDecorator(prototype, prop, desc);\n }\n}\n\nfunction decorateMethodV1(\n { prototype }: { prototype: object },\n prop: string | number | symbol,\n decorators: LegacyDecorator[]\n): void {\n return decorateMethodV2(prototype, prop, decorators);\n}\n\nfunction decorateMethodV2(\n prototype: object,\n prop: string | number | symbol,\n decorators: LegacyDecorator[]\n): void {\n const origDesc = Object.getOwnPropertyDescriptor(prototype, prop);\n let desc: Descriptor = { ...origDesc };\n for (let decorator of decorators) {\n desc = decorator(prototype, prop, desc) || desc;\n }\n if (desc.initializer !== undefined) {\n desc.value = desc.initializer ? desc.initializer.call(prototype) : void 0;\n desc.initializer = undefined;\n }\n Object.defineProperty(prototype, prop, desc);\n}\n\nfunction initializeDeferredDecorator(\n target: object,\n prop: string | number | symbol\n): void {\n let desc = findDeferredDecorator(target.constructor, prop);\n if (desc) {\n Object.defineProperty(target, prop, {\n enumerable: desc.enumerable,\n configurable: desc.configurable,\n writable: desc.writable,\n value: desc.initializer ? desc.initializer.call(target) : undefined,\n });\n }\n}\n\nfunction decorateClass(\n target: new (...args: any) => any,\n decorators: LegacyClassDecorator[]\n): new (...args: any) => any {\n return decorators.reduce(\n (accum, decorator) => decorator(accum) || accum,\n target\n );\n}\n\nfunction decoratePOJO(\n pojo: object,\n decorated: [\"field\" | \"method\", string | number | symbol, LegacyDecorator[]][]\n) {\n for (let [type, prop, decorators] of decorated) {\n if (type === \"field\") {\n decoratePojoField(pojo, prop, decorators);\n } else {\n decorateMethodV2(pojo, prop, decorators);\n }\n }\n return pojo;\n}\nfunction decoratePojoField(\n pojo: object,\n prop: string | number | symbol,\n decorators: LegacyDecorator[]\n) {\n let desc: Descriptor = {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: () => Object.getOwnPropertyDescriptor(pojo, prop)?.value,\n };\n for (let decorator of decorators) {\n desc = decorator(pojo, prop, desc) || desc;\n }\n if (desc.initializer) {\n desc.value = desc.initializer.call(pojo);\n delete desc.initializer;\n }\n Object.defineProperty(pojo, prop, desc);\n}\n\nexport {\n decorateFieldV1 as f,\n decorateFieldV2 as g,\n decorateMethodV1 as m,\n decorateMethodV2 as n,\n initializeDeferredDecorator as i,\n decorateClass as c,\n decoratePOJO as p,\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar 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\nexport function __extends(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\nexport var __assign = function() {\n __assign = Object.assign || function __assign(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)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __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});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\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); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\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; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(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}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","// 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// 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};","// 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 \"assets/chunk.\" + {\"185\":\"33d133a14b46d1b98e19\",\"695\":\"aeedd66d0b33118f722f\",\"829\":\"f9bc94e358f394afde14\",\"874\":\"6e84c0048a33e8625781\"}[chunkId] + \".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__.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};","__webpack_require__.p = \"/en/filterwizard/\";","// 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\t446: 0,\n\t237: 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(237 != chunkId) {\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} else installedChunks[chunkId] = 0;\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__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\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\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfilter_wizard\"] = self[\"webpackChunkfilter_wizard\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [237], () => (__webpack_require__(82542)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","m","window","require","default","__esModule","module","exports","requirejs","define","createTemplateFactory","resolveInitializer","moduleName","Error","initializer","name","slice","lastIndexOf","_endsWith","str","suffix","indexOf","length","App","Application","constructor","arguments","_defineProperty","config","modulePrefix","podModulePrefix","Resolver","app","prefix","initializerPrefix","instanceInitializerPrefix","initializers","instanceInitializers","moduleNames","Object","keys","_eak_seen","i","push","registerInitializers","instanceInitializer","registerInstanceInitializers","loadInitializers","d","esc","FastBoot","runningTests","create","mobile","tablet","desktop","Position","SpecMagnitudeAnnotation","Component","gainDB","gainUnit","this","args","model","specificationsInput","gain","result","FilterConstants","gainUnits","vv","Conversion","bandpassStopBandFrequency","stop","start","filterName","filterType","bandPass","stopband","stopbandFrequency","center","centerFrequency","Math","sqrt","isBandpassFilterType","filter","isChebyshevFilterResponse","responseType","chebyshev","responseTextPos","x1","y1","x2","y2","getResponsePosition","geometry","height","width","round","passbandRegion","x","y","w","h","limits","yScale","passbandAttenuation","lowPass","xScale","passbandFrequency","highPass","passband","passbandRegionLabelPos","area","passbandArrows","passbandAttenuationLabel","value","Format","fieldTypes","NumericDecimal","passbandFrequencyLabel","gainLine","Number","Engineering","anchor","stopbandRegion","w1","h1","w2","h2","stopbandAttenuation","start1","stop1","start2","stop2","stopbandRegionLabelPos","stopbandArrows","stopbandAttenuationLabel","stopbandFrequencyLabel","centerFrequencyLabel","stopbandStopStartFrequencyLabel","gainValueLabel","passbandRipple","labelX","labelY","rtx1","rtx2","rty1","rty2","rbx1","rbx2","rby1","rby2","order","nthOrder","responsevalue","filterResponseValue","label","rippleTop","rippleBottom","responsePosition","figureName","magnitudeDb","magnitudeVV","phaseDegrees","phaseRadians","phaseDelay","groupDelay","stepResponse","xPos","yPos","setComponentTemplate","TEMPLATE","SpecResponseAnnotation","StepResponseEnvelopeAnnotation","_class","xpos","ypos","showStepResponseHelp","showHelp","helpEnterKey","event","key","helpClick","_applyDecoratedDescriptor","prototype","action","getOwnPropertyDescriptor","templateOnlyComponent","BypassCapacitorCircuit","xTranslate","index","BypassCapacitorsContainer","adjustForReferences","DeviceTextCircuitAnnotation","_dec","service","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","url","item","siteconfig","AdiLocale","opamps","getOpAmp","generic","toUpperCase","intl","t","toString","hasUrl","hasChannel","undefined","c","channel","r","configurable","enumerable","writable","PartTextCircuitAnnotation","tolerance","direction","stageLetter","adjusted","numberToUserDisplay","showZeroes","unit","ReferenceCircuit","showReferenceStageHelp","referenceStageHelpClick","referenceStageHelpEnterKey","c1Item","assign","circuitValues","packageType","getCapacitorPackage","c2Item","c3Item","SpareDualStageCircuit","SpareSingleStageCircuit","SparesContainerCircuit","hasRefStage","hasCapacitors","adjustForBypassCapacitors","sparesPosition","bypassCapacitors","showOpAmpSparesHelp","opAmpSparesHelpClick","opAmpSparesHelpEnterKey","StageItem","yTranslate","c1","isFirstOrderLowPass","details","stageFilterType","stageOrder","stageImplementation","c2","c5Item","c5","r1Item","r1","StageTextCircuitAnnotation","toOrdinal","TantalumCapacitorToNegative","TantalumCapacitorToPositive","AlgorithmConfirmationDialog","owner","super","hideExpandText","processNewAlgorithm","algorithm","closeDialog","getAlgorithm","showExpandableArea","showProsAndCons","tracked","EvalboardConfirmationDialog","_proceedButtonText","proceedButtonText","_cancelButtonText","cancelButtonText","proceed","confirm","EvalboardDialog","shoppingCartEvalBoardUrl","replace","evalBoardShoppingUrl","parts","console","log","evalBoardDisplay","stage","stageType","stageChannel","evalBoardModelNumber","partsOnEvalBoard","hasStageInfo","evalBoardData","map","evalBoardOrder","reducedData","data","entries","evalBoard","modelNumber","quantity","setMotherboard","setParts","split","parseInt","partlist","reduce","accumulator","forEach","substring","replaceAll","processEvalBoard","OpampsRequirements","totalVoltageSupply","getAdjustedValue","powerSpan","requiredGBW","allowedLimits","gbw","recommendedGBW","recommendedLimits","rawValue","Validation","type","scope","pattern","test","isUserEntryNumeric","EngineeringFilter","defaultRelation","initialValue","qaName","relation","populate","column","selection","$","generateDOMElement","find","val","selectQaElement","inputQaElement","id","update","element","_element$parentElemen","children","parentElement","unpack","packedValues","initialValues","JSON","parse","hasOwnProperty","call","pack","stringify","hasValue","reset","field","cleanedField","includes","fieldValue","userEntryToNumber","Infinity","isNaN","filterRelation","filterValueString","dotted","_stripTrailingDecimal","filterValue","PartialTextFilter","updated","_stripDollar","PriceFilter","parseFloat","messages","MultivalueCheckboxFilter","filterValues","initFilterCount","values","columnId","checked","setCheckboxFilterData","handleCheckboxChanged","trim","fieldList","some","filterCountMessage","generateCheckboxContainer","checkboxQaElement","checkboxContainerItems","generateCheckboxContainerItems","checkboxContainerString","overlayContainer","document","getElementById","appendTo","checkboxHtml","divider","selectAllIdName","selectAll","buildCheckboxString","setCheckboxItemChecked","className","idName","blankCheckbox","display","checkboxItem","join","cbClass","disabled","updateFilterCount","checkedCount","cbFilters","querySelectorAll","cb","checkbox","toLowerCase","text","html","attr","updateSelectAllChecked","updateCheckboxChecked","_document$getElementB","_document$querySelect","checkboxChanged","addEventListener","selectAllChanged","TRANSLATIONS","en","partName","showAll","blanks","cn","jp","ru","NO_FILTER_COLUMNS","_translations","locale","loc","CommentFilter","options","pieces","parm","aParm","match","EngineeringRangeValueFilter","defaultMinimum","defaultMaximum","minimumValue","maximumValue","filterMinimumString","filterMaximumString","filterMinValue","filterMaxValue","enableCellNavigation","enableColumnReorder","multiColumnSort","multiSelect","showHeaderRow","headerRowHeight","frozenColumn","explicitInitialization","parametersPanel","OpampsDialog","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor10","_descriptor11","opAmpData","getOpAmpsForDisplay","vsPlus","vsMinus","implementation","buildOpAmpDisplay","columns","_columns","pstColumns","isDefault","cols","noColumnsSelected","checkedColumns","showDeviceTable","setImportantColumns","importantArray","unshift","getOpAmpSelectionColumns","viewData","mappingData","results","columnComparator","mappedItem","Comparator","integerComparator","engineeringComparator","textComparator","columnFilter","columnValues","uom","fieldValues","sortable","comparator","classification","display_in_default_view","minMaxTyp","toolTip","definition","partComparator","collectColumnDataFromPST","pstView","pstMapping","siteUrl","adiLocale","partFormatter","_row","_cell","_columnDef","dataContext","minWidth","resizable","formatter","deviceData","pstData","blanksAsDashes","rows","part","row","displayValue","displayKey","valueKey","partparm","parmdata","Date","dataCopy","startsWith","collectDeviceDataFromPST","j","opAmpDataItem","deviceDataItem","partNumber","feedbackMethod","comments","isLTSpiceOpAmp","disallowed","selectable","insertingDeviceTable","rowData","columnData","columnValue","matchValue","Array","isArray","xvalues","s","reduceColumnFilterValuesToThosePresent","selectionFilterOptions","filters","sortColumns","partChanged","selectedPartName","onChooseParameters","parameterSelectorGrid","onAllParameters","updatedfilters","updateSelectionFilterOptions","onResetParameters","submitParameterSelector","closeParameterSelector","selectionChanged","newColumns","filterChanged","filtersOfHiddenCols","filterCol","col","concat","sortChanged","applyAndClose","updatePart","SystemLockDialog","_message","message","close","DialogVideo","title","translationRoot","heading","leftVideos","halfmark","videoIds","rightVideos","DisplayContext","contextText","camelize","tab","_filterTypeContext","ContextUtils","_specificationsContext","_componentsContext","specifications","_tolerancesContext","components","_nextStepsContext","tolerances","FieldInputText","invalid","isValid","charValid","validateCharValue","validateCharacterInput","fieldType","onValueChanged","target","fieldValid","validateFieldInput","formatString","onInputChanged","fieldId","status","onKeyUp","isCtrlPressed","ctrlKey","isAltPressed","altKey","FiguresSubmodel","hasErrors","errors","modelErrors","figureModel","source","choice","displayFigureWidth","figureWidth","displayFigureHeight","figureHeight","resizeListener","displayFigureElement","rect","getBoundingClientRect","insertedDisplayFigure","destroyingDisplayFigure","removeEventListener","BomFigure","bomTable","returnTable","table","count","designators","italicRow","prodURL","pkg","package","material","ErrorsFigure","errorMessages","error","parameters","resultErrorMessages","resultErrors","GraphFigure","yticks","xticks","yscale","breadth","log10","ymax","ymin","xscale","xmax","xmin","hover","xUnit","yUnit","hoverTitles","headerLabel","lineLabels","lineLabel","hoverWidthAdjust","hoverWidth","primaryLocale","NoiseFigure","ErrorTracker","noise","advisor","clone","figureInput","initFieldTypes","adcBandwidth","adjustedOptions","graphData","hasToleranceData","value1","peakToPeakNoise","worstCaseValue","value2","rms","rms1","nominalValue","formatFieldValue","rms2","peakToPeakNoise1","peakToPeakNoise2","isADCBandwidthValid","isInErrorList","errorList","adcTableHelp","tooltip","graphHeight","displayHeight","graphWidth","max","displayWidth","fieldName","fields","validateAndUpdateModel","errorTracker","validate","workingInput","updateInput","updateModelInput","param","e","Numeric","adcBandwidthChanged","updateUnparseableList","PowerFigure","showPowerHelp","SchematicFigure","outTxtPos","circuitDetails","detailsOfCircuits","dimensions","getCircuitConstants","getCircuitName","offset","actualStages","showReference","needReferenceStage","circuitItem","referenceDesignator","channelDesignator","displayExtraComponents","opAmpName","opAmp","opAmpSource","opAmpChannels","numberChannels","opAmpStageLetter","getOpAmpReferenceDesignator","packageCode","nodeIn","showLine","showText","nodeOut","nodeRef","circuitName","circuitId","node","in","out","ref","dasherize","getImplementation","designationR","designationC","fwCircuits","referenceCircuit","bom","billOfMaterials","capacitorList","stages","detailsOfStages","componentsInput","bypassRef","bypassCapacitorNames","c9","voltage","circuit","bypassCapacitor","c0","bypassRefItem","stagesItem","vsupply","k","bomItem","tantalumRef","tantalumCapacitorNames","c101m","tantalumCapcacitorPositive","c100m","tantalumCapcacitorNegative","tantalumRefItem","needBypassCapacitors","needOpAmpSpares","opAmpSpares","sparesList","spareAmpSingle","spareAmpDual","refDesignatorOpAmp","numSpares","svgWidth","referenceStageWidth","bypassCapacitorsWidth","opAmpSparesWidth","sparesContainerWidth","schematicsContainerWidth","referenceValues","showTolerance","toleranceInput","refStageVoltage","v1","v2","c3","c4","r2","r3","r4","hasGain","implementationType","firstOrder","lowPassFirstOrderGain","lowPassFirstOrder","sallenKey","lowPassSallenKeyGain","lowPassSallenKey","multipleFeedback","lowPassMultipleFeedback","inductor","lowPassInductorGain","lowPassInductor","highPassFirstOrderGain","highPassFirstOrder","highPassSallenKeyGain","highPassSallenKey","highPassMultipleFeedback","highPassInductorGain","highPassInductor","deliyannisFriend","isNearInfinity","bandPassDelyiannisFriendNoPosFB","bandPassDelyiannisFriendPosFBnoR2","bandPassDelyiannisFriendPosFB","bandPassInductorGain","bandPassInductor","StageFigureDetails","hasActualStage","actualStage","simulatedGain","simulatedFrom","simulatedValue","simulatedGainTo","simulatedTo","simulatedFp","stageFp","simulatedFpTo","simulatedQ","stageQ","enabled","simulatedQTo","StagesFigure","numberOfStages","VoltageRangeFigure","isTolerance","MenuLinks","toolbarMenuClick","menuLink","activeTab","toolbarLinkClickAnalytics","analytics","optimizationList","optimizationType","voltageRange","power","ComponentSettings","workingModel","makeTracked","selectedOptimization","optimizationPreference","optimizationPreferenceOptions","nonSpecific","optimization","voltageSupplyHelpEnaled","componentsHelpEnabled","gbwHelpEnabled","implementationHelpEnabled","fieldNames","inputs","fieldFormat","tabs","sortStages","selectedStage","next","updateErrors","isVsPlusValid","isVsMinusValid","opAmpsDisabled","isComponentResultError","isDisabledByErrors","lockInputsErrorsList","displayStages","specific","hideStages","optimizationSelection","selected","updateModel","updateOpAmpsFromOptimization","optimizationValues","getOpAmpsFromOptimization","individualStageInputs","stageDefaults","getStageDefault","opAmps","implementationSelection","componentSizing","gainRatio","sortOrder","letter","settings","orderIndex","getSpecificOptimization","isRecommended","isRecommendedOpAmp","recommendedSpecific","allowedSpecific","updateSliders","sliderGainValues","individualStageInput","sliderValues","gainValues","fieldChange","hasUnparsableFields","updateStage","setOptimizationPreference","optPref","optimizedInput","getOptimizationValues","setOptimization","setGBWCompensate","compensateForGbw","selectStage","classList","contains","updateSortOrder","sortedStages","FilterTypeComponent","lowPassActive","tabInput","highPassActive","bandPassActive","select","gainUnitValues","db","SpecificationsSettings","filterResponseHoverText","filterResponseDisplayText","getFilterResponseDisplayText","stagesDisplayText","getStagesDisplayText","isGainValid","isPassbandAttenuationValid","isPassbandFrequencyValid","isStopbandAttenuationValid","isStopbandFrequencyValid","isCenterFrequencyValid","isFilterResponseValid","hasCenterFrequency","unitsSelection","units","filterResponseDisplayValue","refreshResponse","updateResponseModel","getResponseValue","filterResponseSlider","selectedResponseType","getResponseType","resetSliderDisplay","getFilterResponseHoverText","sliderValue","reponseType","responseValue","getOrder","filterResponseType","orderString","maxOrder","getNumberOfStages","changeGainUnits","displayResponse","updateResponse","hideResponse","ComponentStageSettings","opAmpDialogEnabled","getOpAmps","implementationList","getImplementationList","currentIndex","stageLimits","getStageLimits","workingVsPlus","workingVsMinus","displayGainSlider","isGainEnabled","displayQResistors","getOpAmpDisplay","isOpAmpError","minimumSizingValue","maximum","minimum","maximumSizingValue","sizingEnabled","stageDefault","implementationData","selections","updateStageModel","updateSliderValues","getImplementationDefaults","setImplementation","selectedItem","updateComponentSizing","updateGainRatio","showOpAmpSelectionDialog","newState","systemDialogFunc","pstViewPromise","pstMappingPromise","showNotification","TolerancesSettings","capacitorToleranceSelection","capacitorTolerance","capacitorToleranceList","resistorToleranceSelection","resistorTolerance","resistorToleranceList","inductorToleranceSelection","inductorTolerance","inductorToleranceList","opAmpGbwToleranceSelection","opAmpGbwTolerance","opAmpGbwToleranceList","capacitorPreferredSeriesSelection","capacitorPreferredSeries","capacitorPreferredSeriesList","resistorPreferredSeriesSelection","resistorPreferredSeries","resistorPreferredSeriesList","inductorPreferredSeriesSelection","inductorPreferredSeries","inductorPreferredSeriesList","hasInductors","updateCurrentModel","updateComponentsModel","setCapacitorTolerance","setResistorTolerance","setInductorTolerance","setOpAmpGbwTolerance","setCapacitorPreferredSeries","setResistorPreferredSeries","setInductorPreferredSeries","TabButton","isEnabled","enabledTabs","findIndex","isPrevious","isNext","icon","metaName","rawConfig","querySelector","getAttribute","decodeURIComponent","defineProperty","err","tabList","tabIcons","inputModels","inputModelReleaseOrder","defaultFigures","figuresOfTab","FigureMap","delay","v","Promise","resolve","setTimeout","bind","IndexController","_dec2","Controller","_descriptor12","_descriptor13","_descriptor14","_descriptor15","_descriptor16","_descriptor17","_descriptor18","_descriptor19","_descriptor20","_descriptor21","_descriptor22","set","orderSamplesEnabled","evalBoardEnabled","mailToColleagueEnabled","evalBoardConfirmationEnabled","algorithmEnabled","DesignFiles","cdp","persistence","logger","fastboot","assets","render","fromErrors","_updateFromErrors","fromModel","_updateFromModel","setupStudioLinks","precisionStudioMenuLinks","PrecisionStudioUrl","FilterWizardUrl","AdcDriverUrl","PhotodiodeUrl","DiamondUrl","SimDDSUrl","VirtualEvalUrl","DACErrorCalculatorUrl","NoiseUrl","SignalChainDesignerUrl","setupShoppingCartUrl","time","isDestroyed","ShoppingCartBaseUrl","ShoppingCartEvalBoardUrl","CdpLocale","timeEnd","setupAdvisors","advisors","SpecificationsAdvisor","ComponentsAdvisor","TolerancesAdvisor","NoiseAdvisor","checkBrowserSuitability","isToPrecisionUnreliable","toPrecision","setupConnectionToChannel","invokerId","RSVP","then","tool","toolNameDisplay","setInvokerId","eventList","onConnect","onConnectHandler","onDisconnect","onDisconnectHandler","onData","onDataHandler","timeOut","handlerFunc","handShakeTimeOutError","connect","handShakeTimeOut","catch","systemLock","visitedTabs","iLen","isSpecificationsDisabled","isComponentsDisabled","isTolerancesDisabled","isNextStepssDisabled","activeTabFieldName","currentTabFigures","figure","selectedName","selectedFigure","isWideDisplay","isNarrowDisplay","orderEvalboardDisplay","_clearAllInputData","_replaceInputErrors","inputType","newErrors","_selectTab","trigger","oldTab","sendTabExitAnalytics","_spin","isDestroying","getRequest","_nospin","_updateTabFigure","_updateVisitedTabs","_updateInputModel","errorTab","_forceFocusTab","_showNotification","nextSteps","sendPartStageDataNextStepsAnalytics","sendTabNavigationAnalytics","isInitialVisit","first","last","restructure","tabErrorList","generate","initialVisit","figureExists","newSelectedFigure","figurePerTab","msgparams","adjparams","htmlSafe","notificationDialog","_showHelp","helpDialog","_downloadDesign","all","filesToUpload","isLocalPDF","pdf","_createPDFImages","htmlToCanvas","pdfReport","_buildPDFFonts","pdfFonts","designFiles","savedDesignFile","buildSavedDesign","designName","designDesc","csvFiles","buildGraphToCSVDataFiles","evalBoardFiles","buildEvalBoardFiles","bomFile","buildBOMData","opAmpsList","opAmpsListGeneric","macroModels","SpiceNetlistsUtil","async","modelFiles","_ref","pathURL","SpiceNetlistsUrl","MediaUrl","netListFilesAndParts","downloadFiles","SpiceSchematicsUrl","SpiceSchematicsUtil","netListParts","spiceFiles","imagePromiseArray","pdfFigureList","pdfFigures","snapshot","convertSVGToImage","convertHTMLToImage","imageList","pdfFile","buildPDFBinaryData","buildPDFData","downloadData","ToolId","ToolName","UploadFiles","download","downloadDesign","_ref2","contentType","fileName","downloadFile","resultSource","imageComponents","excludeIndex","specialIndex","_updateModelNumber","numOfStages","workingEvalBoardData","a","evalBoardItem","evalBoardName","hasRestrictions","_getDimensionsOnResize","_width","innerWidth","_height","innerHeight","_updateToolbarCss","sheets","styleSheets","csshref","href","rules","cssRules","rule","style","selectorText","fontSize","_updateFigurePerTab","currentFigure","_tab","_figure","fontURL","fontName","fontFileName","getURL","ENV","rootURL","enFontResource","jpFontResource","cnFontResource","getAsset","content","reject","reader","FileReader","readAsDataURL","onloadend","fontData","fontIndex","fontStyle","atob","_sendDesign","designData","dry","designSendTimeOutError","sendDesign","designSendTimeOut","focus","modeldata","selectTab","selectFigure","later","switchLanguage","adilang","oldLocale","location","sendLocaleChangeAnalytics","takeStep","requestedAction","orderSamplesData","orderSamples","dialogFlags","sendOpenCloseDialogAnalytics","evalBoardDisplayData","CommonUtils","downloadDesignAnalytics","preferredAlgorithms","oldAlgorithm","confirmLookEvalBoard","closeNotification","closeEdgeWarning","edgeWarning","closeHelp","systemDialog","dialogBody","loadDesign","jsonStringData","load","errorCode","code","loadErrorCodes","noError","hasOldAlgorithm","inputModel","generalError","invalidPartFound","numParts","noOpAmps","saveDesign","desc","save","shareDesign","sender","recipients","saveData","getSaveData","design","share","shareDesignAnalytics","processOrderSamples","useV2","defaultAlgorithm","giveFeedback","feedback","deliverFeedback","email","insertingToolbar","navElement","boundResizeListener","destroyingToolbar","loadFromUrlDesign","soak","handshakeAcknowledgedEvent","clearTimeout","isFastBoot","filterWizardDesign","disconnect","designAcknowledgedEvent","recipientId","integrationCancelledEvent","selfLink","destroy","dependentKeyCompat","annotation","xformat","yformat","inputImpedanceMagnitude","inputImpedancePhase","bandStop","notch","bessel","butterworth","butterworthBessel","sizing","big","tiny","idealOpAmp","Limits","RSMALL_LOAD_LIMIT","RSMALL_COMP_LIMIT","RBIG_COMP_LIMIT","CSMALL_COMP_LIMIT","CBIG_COMP_LIMIT","LSMALL_COMP_LIMIT","LBIG_COMP_LIMIT","REFERENCE_OPAMP_MAX_VOLTAGE","REFERENCE_OPAMP_MIN_VOLTAGE","INFINITY","NEARLY_INFINITY","NEGINFINITY","REFERENCE_OPAMP_CURRENT","REFERENCE_RESISTOR","INDUCTOR_ALLOWED_FREQ","INDUCTOR_PREFERRED_FREQ_X_GAIN_X_Q","INDUCTOR_REQUIRED_FREQ_X_GAIN_X_Q","PARASITIC_INPUT_CAP","solutionPossibleType","solutionExists","frequencyTooHigh","frequencyTooLow","noiseSources","r5","r6","opAmpVoltage","opAmpNegCurrent","opAmpPosCurrent","ideal","oneTenth","fiveTenths","one","five","ten","twenty","gbwTolerance","eSeries","E6","E12","E24","E48","E96","resistorNames","capacitorNames","inductorNames","l1","toolId","userId","oldSliderSteps","slider","chebyshevLimit","butterworthLimit","besselButterworthLimit","ampStatus","prerelease","not_recommended_for_new_designs","lastTimeBuy","obsolete","ampRecommendationStatus","recommended","marginal","notAllowed","resistorNoiseBase","spiceFileType","ACAnalysis","TransientAnalysis","NoiseAnalysis","schematicKey","acKey","noiseKey","transientKey","circuitPath","circuitWidget","compSelectCanvasWidget","toleranceCanvasWidget","finalCanvasWidget","spiceCircuitPath","spiceFolderDownloadPath","AlphaNumeric","Alphabet","Custom","AllChars","Scientific","fieldCapitlization","UpperCase","LowerCase","FirstChar","AllFirstChar","fileBase","mother","none","two","other","roundDirection","up","down","closest","coverImageResource","hhmmss","hour","minute","second","date","number","EUR","currency","minimumFractionDigits","maximumFractionDigits","USD","formatValue","params","namedArgs","helper","initialize","_defaults","componentResultErrors","ComponentSelectionAdvisor","stageAdvisor","IndividualStageAdvisor","ComponentSelectionInput","sourceModel","choiceOptions","isValidCircuit","targetStages","targetStagesWithDistributedGain","currentStages","indexModel","IndexModel","newIndividualStages","rebuildIndividualStages","newStages","getIndividualStageOpAmps","updatedModel","getSliderValues","stageItem","currentStage","isOldDesign","legacySizingSliderValue","legacyGainSliderValue","currImplementationSelection","defaultImplementationSelection","doUpdateImplementation","selectionItem","getComponentSizing","getGainRatio","componentSizingValue","currentCompSizeValue","gainRatioValue","currentGainRatioValue","oldStages","getStageInputsInImplementationOrder","opAmpSelection","modelParams","circuits","getFilterOpampsParams","getAppropriateOpAmps","applyAdditionalCriteria","getOpampNames","oldStage","_getOverallAllowedLimits","resultsModel","stageCount","opAmpGBW","routGBW","iBias","slewRate","specialGain","rOutOverGBW","min","invalidFields","validateEcosystem","validateVsPlus","validateVsMinus","validateVoltageSpan","p","errorC1","validateC1Value","errorCompRatio","validateComponentSizingAndGainRatio","errorOpAmp","validateOpAmpAvailability","stagesLength","vsPlusName","vsMinusName","voltageSpan","opAmpErrors","_evaluateOpAmps","allowedOpAmps","evaluateOpAmps","opamp","errorFields","errorId","frequency","c1big","c1tiny","circuitData","stageInputs","getOverallLimits","overallLimits","_createIndexModel","stageId","_getSizingSliderValues","_getGainRatios","sliderValuesSorted","gainValuesSorted","getComponentSizingValues","retOpAmps","errorItem","opAmpIdeal","hasIdealOpAmps","isNullOrUndefined","stageIndex","_evaluateOpAmps2","IndividualStageInput","getDefaults","implementationInput","stageInput","implementationObj","Implementation","selectedImplementation","_getStageDefaults","defaultImplementation","_getCircuit","_getSliderValueFromLegacy","_getGainSliderValueFromLegacy","Optimization","createCircuit","masterCapacitorValue","masterCapacitor","r3Value","c1Index","r3Index","capacitorValues","generateCapacitorRange","Series","eSeries24","generateGainRange","eSeries96","r3Maximum","r3Minimum","getValueIndex","compensateLoop","computeCompensateLoop","actualStagesPropertiesHash","targetStage","res","FirstOrder","ActualFirstOrder","ActualSecondOrder","_getImplementationSelection","sourceStage","_cloneSlider","sourceSlider","SliderInput","maximumIndex","getMaximumValueIndex","SeriesPrecision","minimumIndex","getMinimumValueIndex","sliderValueIndex","allowGainChange","minimumR3","minimumIdealR3","series","SecondOrder","ToleranceInput","c1New","Capacitor","idealValue","capacitorMinimumLimitMultiplier","capacitorMaximumLimitMultiplier","rcRatio","toCommercialComponent","getNominalValue","pow","MathUtils","logBaseTen","stopFrequency","filterFrequencyRange","NoiseInput","getAdcFrequency","noiseInput","startFrequency","frequencyArray","Frequency","pointsPerDecade","narrowFrequencyArray","_lowPassDefaults","_highPassDefaults","_bandPassDefaults","_limits","gainVV","SpecificationAdvisor","SpecificationInput","nameArrayOfFailedFields","_validateGain","_validatePassbandFrequency","_validateStopbandFrequency","_validatePassbandAttenuation","_validateStopbandAttenuation","_validateCenterFrequency","_validatePassbandVsStopbandFrequency","_validatePassbandVsStopbandAttenuation","errorAttenuation","_validatePassbandFrequencyVsPassbandAttenuation","errorOrder","_validateOrder","errorQ","_validateQ","errorFp","_validateFp","VVtoDB","passbandFrequencyRatio","frequencyLimit","frequencyDependentAttenuationLimit","errorTemplateMessage","stagesWithLargeQ","qValue","stageFilter","ToleranceAdvisor","componentAdvisor","_toleranceInput","_nameArrayOfFailedFields","hasIdealValues","toleranceModel","OpAmpSelection","computed","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec10","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","_dec18","_dec19","_dec20","_dec21","EmberObject","init","opAmpStatus","vNoise","iNoise","minStableGain","vintage","vos","spiceModels","polesZeroes","opAmpRecommended","comment","commentComparer","recommendedFlag","opAmpMarginal","opAmpMarginalHasNumberChannelsError","opAmpDisabled","statusText","price","NaN","minSupplyVoltage","maxSupplyVoltage","rOut","inHeadroomPlus","outHeadroomPlus","inHeadroomMinus","outHeadroomMinus","supplyCurrent","architecture","validation","marginalLimits","OpAmpValidation","opAmpState","opAmpNotAllowed","whyNotTextArray","inject","_dec22","_dec23","_dec24","_dec25","_dec26","_dec27","_class2","refV","stabilityGain","compPin","WhyNot","messageId","additionalMessage","supplyVoltage","supplySpan","maxROutOverGbw","positiveInput","positiveOutput","negativeInput","negativeOutput","inputOutputValidationArray","initialValidationArray","initialValidationHasErrors","apply","marginalGbwLow","marginalStatus","marginalROutHigh","marginalIBias","maxBias","marginalWhy","C1","CircuitUtils","adjustCapacitorValueToCircuitSizing","valueAdjusted","tolInput","computeNominalValue","toleranceValues","CapacitorToleranceUtils","toleranceArray","finalTolerance","isCommercial","circuitSizing","capacitorMinimum","capacitorMaximum","createC1","c1IdealValue","createC1MinAndMaxDefined","createC2","c2IdealValue","rcRatioInverse","createC5","c5IdealValue","createR1","r1IdealValue","Resistor","createR1MinAndMaxDefined","createR2","r2IdealValue","createR2MinMaxDefined","createR3","r3NominalValue","resistorMinimumLimitMultiplier","resistorMaximumLimitMultiplier","R3","createR4","r4IdealValue","R4","createR4FromR3AndGain","createR5","r5IdealValue","createInductor","l1IdealValue","Inductor","InductorToleranceUtils","copyComponent","desiredTolerance","ResistorToleranceUtils","setValue","baseResistorValue","BaseFilterResponse","orderNum","orders","stageFz","orderType","closest_point","magArray","closest1","prev","abs","diff","index1","splice","closest2","diff2","linear_interpolate","fp","b","norm_stop_freq","li","closest_freq_points","closestfreq1","indexfreq1","closestfreq2","prev2","Bessel","besselJson","createBesselTable","orderDiv","findAppropriateOrder","stageGroup","getTargetStageGroup","StageUtils","div","MAXORDER","passbandAttenuationVV","ConversionUtils","stopbandAttenuationVV","_getFrequency","besselTable","individualStagesMagnitude","_computeFilterAmplitude","filterAmplitude","magnitude","magnitudeArray","ResultsUtils","clMagPoint","normPassFreq","normStopFreq","clFreqPoint","copy","BesselJson","LowPass","createFirstOrderFilterAmplitude","createSecondOrderFilterAmplitude","_getMagnitudeArray","ButterworthBessel","Butterworth","reverse2ndOrderStages","reverse","firstOrderStage","pop","combineBesselandButterworthStage","butterworthStage","besselStage","butterworthBesselRatio","complexButterworthInfluence","complexBesselInfluence","comboPoles","complexButterworthPoles","fpAndQToPoles","complexBesselPoles","Complex","mult","polesToFpAndQ","complexPoles","real","wo","PI","complexOne","complexUndersqrt","complexMultiplier","complexRoot","subs","plus","poles","Q","complexPolesProduct","complexPolesSum","complexQuotient","divide","besselButterworthTable","_getBesselButterworthTable","_findAppropriateOrder","tableLength","calculateButterworthPoleFrequency","orderCounter","currentOrder","butterworthStages","butterworthStagesGivenOrderAndCutoff","besselStages","negPassbandAttenuation","fpPower","poleAngles","_calculateButterworthPoleAngles","qArray","_calculateButterworthQ","loopCount","floor","secondOrder","stageValues","negStopbandAttenuation","nFractional","innerNumerator","innerDenominator","logTermTop","logTermBottom","ceil","poleAnglesArray","resultQ","stepTwo","cos","thetaKrad","Chebyshev","rippleX","fripple_k","fK","_computefk","_getClosestNum","_calculateA","magK","_magK","fp_nominal","qKfp","_calculateQ","fKArray","nearestIndex","neardiff","stopX_odd","passX_odd","stopX_even","passX_even","s_odd","aCosh","s_even","p_odd","p_even","_fRippleK","_fK","stepOne","cosh","n","sinThree","sin","sinhFive","sinh","realKsqr","imagKThree","imagK","imagKsqr","asinh","qK","fp_K","FilterResponse","instance","getStages","specificationParameters","WideBand","NarrowBand","stageLetterArray","getFilterFrequencyRange","_passbandFrequency","centerFreq","decade","FrequencyRange","getActualStageSpecFrequency","f","complexNum","createComplex","complexDenom","createTimeAxis","fCutOff","setupFirstOrderStepResponse","setupSecondOrderStepResponse","w0","getImpulseArrayFirstElement","getSecondOrderStageImplementation","getMaxFrequency","_frequencyArray","_getFStop","qUser","narrowBandStages","resultStage","narrowBandSecondOrder","narrowBandFirstOrder","SecondOrderStage","plusTerm","q","f1","f2","fpNext","oneByf1minusf1","oneByf2minusf2","gainNext","lowPassStages","computeWideBandLowPass","highPassStages","computeWideBandHighPass","fPassLowPass","_getFPassLowPass","fStopLowPass","_getFStopLowPass","lowPassOrder","fPassHighPass","_getFPassHighPass","fStopHighPass","_getFStopHighPass","fPass","fStop","_getFPass","multiplier","multipler","HighPass","BandPass","loopFp","complexGain","_stopbandFrequency","createArray","startFreq","stopFreq","getRmsNoise","totalSpectralNoiseRto","adcResponseCurve","FirstOrderStage","adcFilteredNoise","rmsNoise","frequencySpan","noiseRootHz","getPeakToPeakNoise","getEquivalentNumberOfBitsArray","ADC_RANGES","equivalentNumberOfBitsObj","adcInputRange","equivalentNumberOfBits","stepSize","getBiggestRoomOpAmpFromList","totalGain","voltageRoom","opAmpVoltageRoom","biggestRoom","inRoom","outRoom","curAmp","room","negVSText","posVSText","inputHrVPlusText","outputHrVPlusText","inputHrVMinusText","outputHrVMinusText","inMax","inMin","outMax","outMin","posInRoom","posOutRoom","negInRoom","negOutRoom","negVS","posVS","responseTypeSlider","inputSliderValue","percentValue","toFixed","_computeChebyshevFilterResponseValue","_computedButterworthBesselFilterResponseValue","dBtoVV","noiseResistanceParams","specificationResults","circuitsArray","_getCircuits","_getNoiseResistanceParams","noiseResistance","highVNoiseOpAmp","circuitResultsCopy","circuitCopy","previousCircuit","circuitResult","CircuitResults","lastIndex","spectralDensityHighVNoise","noiseGroup","totalSpectralNoiseReferredToOutputArray","highINoiseOpAmp","spectralDensityHighINoise","averageResistance","_getNoiseResistance","topOpAmp","getTopOpAmp","getCircuitValues","BaseImplementation","getGbwTolerance","getStageValuesFromCircuit","BaseActualFilterAmplitude","extend","whoAmI","complexAlphaPlus","rx","_R5RXCsqrSsqr","sSquared","complexROut","complexBetaPlus","sImaginary","complexR3","complexBetaDenom","complexDenominator","R5RXCsqrSsqr","twoRXCplusR5C","complexBetaMinus","complexRParallel","complexZlookbackFront","complexZlookbackEndDenom","complexZlookbackEndNum","complexZlookback","rParallelwithoutzlookback","complexFF","complexR1","complexAlphaMinus","alphaMinusReal","inputImpedance","complexAmplitude","complexC1s","imaginary","ySum","vJunctionNum","vJunctionDenom","vJunction","computeMagnitude","complexA","amplitudeDenominator","amplitudeNumerator","_computeAmplitudeNumerator","_computeComplexAmplitude","DeliyannisBandPassBigHugeCircuitGroup","BaseBigHugeCircuitGroup","ReverseImplementation","nominalGbw","nominalValues","reverseImplementation","c1ToleranceArray","c2ToleranceArray","r1ToleranceArray","r2ToleranceArray","r3ToleranceArray","r4ToleranceArray","r5ToleranceArray","linkedArrayOne","linkedArrayTwo","inverseArray","r4Start","gbwArray","bigHugeCircuitArray","gbwValue","linkedOne","indexLinkedArrayOne","r1Value","r2Value","inverseItem","indexInverseArray","r4Value","r5Value","linkedTwo","indexLinkedArrayTwo","c1Value","c2Value","BigHugeCircuit","opAmpGbw","setNormalizers","DeliyannisBandPassBigHugeCircuit","BaseBigHugeCircuit","circuitStageValues","computeCapacitorLimitMultipliers","maxMultiplier","cmax","initialcapacitorMaximumLimitMultiplier","r1TinyTemp","r2TinyTemp","r5TinyTemp","computeCapacitorMaximumLimitMultiplier","minMultiplier","biggestR","cmin","biggestR2","computeCapacitorMinimumLimitMultiplier","computeGainResistorLimitMultipliers","r3IdealValue","DeliyannisBandPassCircuit","actualFilterAmplitudeModel","ActualFilterAmplitude","noiseGroupModel","NoiseGroup","idealOpAmpModel","IdealOpAmp","circuitModel","DeliyannisFriendCircuit","supportedComponents","idealOpAmpValuePaths","initialCapacitorValue","_computeC1IdealValue","idealValues","_computeIdealValues","capacitorLimits","DeliyannisFriendCircuitLimitsUtils","gainResistorLimits","_computeComponents","rGain","_getFeedback","cGov","rGainOrCCross","filterComponents","calculateFilterComponents","r3PlusR4","determineStartingR3R4Value","NoPositiveFeedback","PositiveFeedback","_computeR3R4Gain","_getSizing","ComponentFactory","_getR2","_getR4","q0","changeGainValues","newR3Value","updateR4","changeInitialCapacitor","alpha","r3AndR4","DeliyannisBandPassIdealOpAmp","computeIBias","computeGbw","computeROut","opAmpRequirementSpecValues","dcOutputVoltageFromIBias","allowedError","epsilon","DeliyannicBandPassMain","BaseMain","bigHugeCircuitGroupModel","BigHugeCircuitGroup","getStepValues","idealStep","timeAxis","FeedForwardStepResponse","Circuit","createBigHugeCircuitGroup","commercialCircuit","getInterestingCircuits","pieWedgeTable","bigHugeCircuitGroup","PieWedge","range","explanatoryText","pieWedge","interestingCircuit","DeliyannisBandPassNoiseGroup","BaseNoiseGroup","noiseReferredToOutputArray","complexRParallelArray","sImaginaryArray","rxArray","complexDenominatorArray","noiseSource","NoiseSource","totalNoise","noiseReferredToInputArray","DeliyannisBandPassNoiseSource","_r1Noise","R1","_r2Noise","R2","_r3Noise","_r4Noise","_r5Noise","R5","_opAmpNegCurrent","OpAmpNegCurrent","_opAmpPosCurrent","OpAmpPosCurrent","_opAmpVoltage","OpAmpVoltage","r1Noise","r2Noise","r3Noise","r4Noise","r5Noise","sumOfSquares","computeComplexAlphaMinus","computeComplexFF","complexR2","computeFromComponentValues","resOne","resTwo","gain0","errorplusOne","execute","DeliyannisFriend","DeliyannisBandPass","preferredAlgorithm","rParallel","FirstOrderCommonBigHugeCircuitGroup","inverseValue","FirstOrderCommonBigHugeCircuit","r1Tiny","r1Big","FirstOrderCommonCircuit","FirstOrderCommonCircuitLimitsUtils","_computeR3AndR4","FirstOrderCommonMain","BigHugeCircuitGroupCommon","FirstOrderImplementation","hash","FirstOrderLowPass","FirstOrderHighPass","CommonActualFilterAmplitude","FirstOrderHighPassCircuit","HighPassFirstOrderCircuit","FirstOrderHighPassIdealOpAmp","computeSpecialGain","fMultiplier","FirstOrderHighPassMain","RollOffStepResponse","FirstOrderHighPassNoiseSource","baseAmplitudeCopy","computeComplexAlphaPlus","FirstOrderActualFilterAmplitude","FirstOrderLowPassCircuit","LowPassFirstOrderCircuit","FirstOrderLowPassIdealOpAmp","attenuation","FirstOrderLowPassMain","FirstOrderLowPassNoiseSource","_calculateComplexA_PolesAndZeroes","_calculateComplexA","phase","atan2","setFrequency","freq","complexProduct","z","rhpz","GBW","complexTopTerm","complexBottomTerm","absRealPartArray","absoluteRealPart","absImaginaryPartArray","absoluteImaginaryPart","maximumRealPart","maximumImaginaryPart","spectralDensityMagnitude","previousNoiseGroup","_spectralNoiseReferredToInputArray","previousSpectralDensityMagnitude","totalSpectralNoiseReferredToInputArray","spectralNoise","previousTotalSpectralNoiseRTI","BasePieWedge","circuitsWithValidPhase","maxMagnitude","currentCircuit","circuitMagnitude","property","get","realPart","imaginaryPart","interimRealPart","nomGainQ","interimImaginaryPart","nominalFp","realPartNormalizer","_imaginaryAdder","gbwDelta","imaginaryPartNormalizer","MultipleFeedback","SallenKey","InductorActualFilterAmplitude","top","bottom","InductorBIgHugeCircuitGroup","l1ToleranceArray","l1Value","InductorBandPass","computeLimits","l1Big","l1Tiny","c1BigLimits","c1Big","smallResLimit","computeC1BigLimits","c1TinyLimits","c1Tiny","computeC1TinyLimits","c1Minimum","c1Maximum","r1Minimum","r1Maximum","l1Minimum","l1Maximum","maxLimit","rBig","computeResistorMaximumLimitMultiplier","BandPassInductorCircuit","componentLimits","InductorBandPassCircuitLimitsUtils","inductorMultiplier","InductorBandPassNoiseGroup","sSquaredArray","InductorHighPassBigHugeCircuitGroup","InductorHighPassBigHugeCircuit","InductorHighPassCircuit","HighPassInductorCircuitModel","InductorHighPassCircuitLimitsUtils","InductorHighPass","InductorHighPassMain","InductorHighPassNoiseGroup","InductorHighPassNoiseSource","InductorLowPass","InductorLowPassBigHugeCircuitGroup","InductorLowPassBigHugeCircuit","InductorLowPassCircuit","LowPassInductorCircuitModel","InductorLowPassCircuitLimitsUtils","InductorLowPassMain","InductorLowPassNoiseGroup","InductorLowPassNoiseSource","denominatorRealTerm","denominatorImaginaryTerm","complexZlookbackDenominator","ZlookbackDenomnatorRealTerm","ZlookbackDenomnatorImaginaryTerm","complexFFDenominator","rParallelDenominator","complexNegOne","y1r1","MultipleFeedbackBigHugeCircuitGroup","c5ToleranceArray","c5Value","MultipleFeedbackBigHugeCircuit","r2Tiny","r2Big","MultipleFeedbackHighPassCircuit","HighPassMultipleFeedbackCircuit","MultipleFeedbackHighPassCircuitLimitsUtils","_computeC5IdealValue","MultipleFeedbackHighPassIdealOpAmp","MultipleFeedbackHighPassMain","MultipleFeedbackHighPassNoiseGroup","complexFFDenominatorArray","MultipleFeedbackHighpassNoiseSource","sqrtTerm","MultipleFeedbackLowPassBigHugeCircuitGroup","MultipleFeedbackLowPassBigHugeCircuit","r5Tiny","r1LoadRatio","r2ParallelR5LoadRatio","r5Big","MultipleFeedbackLowPassCircuit","LowPassMultipleFeedbackCircuit","_computeC2IdealValue","MultipleFeedbackLowPassCircuitLimitsUtils","initialC2Value","_computeInitialCapacitorValue","_computeC1NominalValue","determineCapacitorValue","MultipleFeedbackLowPassIdealOpAmp","denominator","MultipleFeedbackLowPassMain","MultipleFeedbackNoiseGroup","MultipleFeedbackLowPassNoiseSource","fpPrime","qPrime","gbwMod","MultipleFeedbackLowPass","MultipleFeedbackHighPass","complexS","complexC2","complexC1","oneByC2S","zlookbackpart1","rParallelReal","term1","term2","SallenKeyHighPassBigHugeCircuitGroup","SallenKeyHighPassBigHugeCircuit","SallenKeyHighPassCircuit","HighPassSallenKeyCircuit","SallenKeyHighPassCircuitLimitsUtils","SallenKeyHighPassIdealOpAmp","SallenKeyHighPassMain","SallenkeyHighPassNoiseGroup","SallenKeyHighPassNoiseSource","complexZdenom","denomTerm1","denomTerm2","SallenKeyBigHugeCircuitGroup","SallenKeyLowPassBigHugeCircuit","SallenKeyLowPassCircuit","LowPassSallenKeyCircuit","SallenKeyLowPassCircuitLimitsUtils","getComponentValues","resistorRatio","computeResistorRatio","rMultAvg","computeResistorMultiplierAverage","capacitorRatio","computeCapacitorRatio","computeR2IdealValue","SallenKeyLowPassIdealOpAmp","computeROutOverGBW","rOutFreqMultiplier","rOutOverGbw","SallenKeyLowPassMain","SallenKeyLowPassNoiseGroup","SallenKeyLowPassNoiseSource","SallenKeyLowPass","SallenKeyHighPass","opampService","Inputs","Results","_optimizationsList","_choiceOptions","_capacitorToleranceList","_resistorToleranceList","_inductorToleranceList","_opAmpGbwToleranceList","_capacitorPreferredSeriesList","_resistorPreferredSeriesList","_inductorPreferredSeriesList","AllowedSpecific","RecommendedSpecific","getOpAmpRequirementSpecValues","specs","adjustOpAmpRequirementSpecs","BaseOptimization","processR3R4Value","rMin","rMax","rFreq","computeOptimizationFrequencyArray","AdiMath","optimizeStageOrder","NoiseOptimization","NoiseFormula","startingCapacitor","newFrequencyArray","stageLength","permutations","PermutationUtils","circuitGroupResults","CircuitGroupResults","lowestNoise","lowestNoiseSortOrder","rmsNoiseArray","permutation","noiseArray","lastCircuitNoiseGroup","NoiseUtils","Noise","Power","VoltageRange","stagesWithActualComponents","PowerOptimization","RecommendedSpecificOptimization","VoltageRangeOptimization","optimumPermutation","overallMaxSignalInput","currentMaxInputSignalPossible","maxInputSignalPossible","complexify","scalarValue","complexfreq","complexNumberRaisedToPower","modC","theta","modCpowern","E","plusDestroy","imagPart","subsDestroy","multDestroy","divide2","divident","numer_real","numer_imag","denom_real_invert","divideDestroy","arctan","I","Envelope","minimumValues","nominalValuesArray","simulatedValues","valuesOnTheSameIndex","maximumValues","_createArray","friendlyFrequencyArray","end","generateExtremelyFineGranularityFreqArray","generateFineGranularityFreqArray","generateModerateGranularityFreqArray","SpectralDensity","spectralDensity","noiseSpecs","getSpectralDensity","magnitudeOfPreviousStage","totalSpectralNoiseRTI","spectralNoiseOfOneStageRTI","tempSpectralNoiseOf1StageRTIArray","spectralNoiseOfOneStage","totalSpectralNoiseRTO","temptotalSpectralNoiseRTOValue","circuitResults","circuitResultsSorted","noiseGroups","noiseFilterAmplitude","componentName","valuePath","componentValue","A","lastObject","magnitudes","phases","stepValues","impulseValues","impulseResponse","convolve","VoltageRangeResults","worstCaseMagnitudes","stepResponseIdeal","phaseArray","loopQ","fpArray","getActualFpArray","getActualQArray","gainArray","getActualGainArray","fpQGainErrorObj","_calculatePointError","sortBy","_getActualFpAndQ","newFrequencyPoints","fpQGainErrorObjIn","componentMagnitudes","stdDev","gamma","rho","sigma","centroid","_computeAveFpGainAndQ","arrayLength","reflectedPt","_actualStageSpecReflection","expandedPt","_actualStageSpecExpansion","_pointCopy","contractedPt","_actualStageSpecContraction","_actualStageSpecShrink","_computeStdDev","srcPt","destPt","hasOwn","sum","sumOfSqs","pt","sumFp","sumQ","sumGain","scalar","inOrOut","freqArray","point","idealMagnitude","stageMagnitude","createAmplitude","complex","difference","ComponentSelectionResults","individualStagesInput","hasImaginaryOpAmp","stageNumber","mappedStages","sortIndex","masterCapacitorIndex","SliderUtils","FirstOrderTargetStage","FirstOrderActualStage","SecondOrderActualStage","optimizedStages","noiseFrequencyArray","noiseCircuitGroupResults","any","dbData","dataPoints","ArrayUtils","specInputs","newYmax","newYmin","narrowFreqArray","groupDelayArray","newFrequencyAxis","overreach","nominalNoiseArray","limMagnitudeDb","StageDetails","CircuitDetails","lastStage","highVNoiseCircuit","highINoiseCircuit","NextStepsResults","stageDetails","Materials","SpecificationResult","ComponentsResult","ToleranceResult","NextStepsResult","SpecificationResults","frequencyArrayValue","timeAxisValue","targetGain","_targetStages","_magnitude","individualStageMagnitude","_phase","individualStagePhase","_stepResponse","tempArray1","impulseRes","CircuitDetailResults","componentInput","MagnitudDbResult","NoiseResult","_nominalRmsValue","_worstCaseRmsValue","maximumNoiseArray","_nominalPeakToPeak","_worstCasePeakToPeak","minimumNoiseArray","adcTableData","nominalADCTableData","worstCaseADCTableData","worstCaseSNR","snr","worstCaseENOB","enob","adc","nominalSNR","nominalENOB","PowerDetailResults","inputSupplyCurrent","powerSupply","PowerResults","detailsOfPower","PowerDetails","referenceStage","resistorCurrent","totalSupplyCurrents","inputSupplyCurrents","totalPowerConsumption","StageDetailResults","interestingCircuitStageValues","interestingCircuitResult","toleranceGain","nominalGain","gains","targetStageGain","actualGain","toleranceStageFp","nominalStageFp","stageFpArray","actualStageFp","toleranceStageQ","nominalStageQ","stageQArray","actualStageQ","targetStageQ","VoltageRangeDetails","opAmpDetails","warning","smallestMultiplier","multiplierSignalInput","vRange","multiplierSignalOutput","input","output","multiplierSignalSlewRate","maxInputSignal","maxSignalInput","amplifierSpecs","opAmpSlewRate","minimumInput","minInput","Rate","warningEnabled","inputRange","Signal","maxInput","outputRange","minOutput","maxOutput","maxSignals","computeMaxSignals","maxSignalOutput","slewRateValue","maxSignalSlewRate","slewRateFrequency","maxSignalSlewRateFrequency","maximumInput","inputRangeFrequency","maxSignalInputFrequency","minimumOutput","maximumOutput","outputRangeFrequency","maxSignalOutputFrequency","vRanges","_createVoltageRangeComputations","vRangesWorstCase","detailsOfVoltageRange","_computeSmallestMultiplier","smallestMultiplierWorstCase","nominalVoltageDisplay","VoltageRangeDetail","worstCaseVoltageDisplay","worstCaseInputSignal","previousStageOutputMagnitude","worstCaseMagnitude","voltageRangeStage","VoltageRangeComputationPerStage","outputMagnitudeArray","inputMultipliers","outputMultipliers","slewRateMultipliers","minimumInputMultiplier","minimumOutputMultiplier","minimumSlewRateMultiplier","VoltageRangeRate","VoltageRageSignal","VoltageRangeComputationsPerStage","_inputMagnitudeArray","inputMagnitudeArray","maxFrequency","_maxFrequency","stageTransferFunction","inputMagnitude","_blankOutHighFrequencies","blankedArray","_opAmp","_inputRoom","_outputRoom","_slewRates","ToleranceResults","commercialCircuits","bigHugeCircuit","bigHuge","interestingCircuitResults","_createInterestingCircuitResults","interestingCircuitResultsFriendly","_createNominalCircuitResults","noiseInterestingCircuitResults","noiseCircuitResults","_nominalMagnitudes","_interestingMagnitudes","_magnitudes","interestingCircuitMagnitudes","minimumMagnitude","maximumMagnitude","nominalMagnitude","nominalDb","minimumDb","maximumDb","interestingCircuitPhase","minimumPhase","maximumPhase","nominalPhase","nominal","groupDelayFrequency","nominalGroupDelayArray","interestingCircuitGroupDelay","minimumGroupDelay","maximumGroupDelay","nominalGroupDelay","nominalPhaseDelay","minimumPhaseDelay","maximumPhaseDelay","nominalStepResponse","_inputImpedanceMagnitude","nominalInputImpedanceMagnitude","firstCircuitValues","minimumInputImpedanceMagnitude","maximumInputImpedanceMagnitude","_inputImpedancePhase","nominalInputImpedancePhase","minimumInputImpedancePhase","maximumInputImpedancePhase","isSameFrequency","every","minArray","maxArray","nominalArray","commercialMagnitude","commercialNoise","allInterestingMagnitude","allInterestingNoise","oneStageNoise","comparisonNominal","_addNoise","_noiseToleranceMultiplyArrays","comparisonMin","comparisonMax","interestingMagnitude","interestingNoise","oneStageNoiseInteresting","oneStageMagnitudeInteresting","tempMin","tempMax","magnitudeVariationsForOneStage","maxForOneStage","interestingCircuitResultFriendly","_getToleranceGraphData","magnitudesObject","_getMinimumAndMaximumArray","interestingCircuitValuesArray","groupedByIndex","minForOneStage","_joinEnvelopToFrequencyArray","envelop","nominalResult","minimumResult","maximumResult","firstArray","secondArray","combinedArray","noiseArrayOne","noiseArrayTwo","noiseOutputArray","interestingCircuits","groupByIndex","ActualStage","stepResponseSetup","base","timePoint","actualStageValues","targetFp","targetQ","actualFpGainAndQ","isSpecific","compensateLoopRun","actualStageFreqParam","_setOpAmp","previousStage","opAmpObj","AllowedLimits","RecommendedLimits","previousHighVNoiseCircuit","previousHighINoiseCircuit","TargetStage","tw0","exp","SecondOrderTargetStage","X","Y","W","Z","sqrtY","tYQ","sinhY","coshY","sqrtNegY","w02","w03","exptw0","SignalRange","maxMagnitudeObject","slewRateFreq","indexObject","orderOptimizationFrequencyArray","vRef","inputFrequency","outputFrequency","isHighSpeedHighGainStage","impulseArrayFirstElement","stepResponseIdealArray","firstPoint","secondPoint","ordinal","stageTypeDisplay","chart","ToleranceStage","interestingCircuitsArray","interestingCircuitArray","nominalCircuit","magnitudesArray","groupDelayArrays","inputImpedanceMagnitudeArrays","inputImpedancePhaseArrays","_computeResCombo","getActualStepResponse","rescombo","gainTerm","kValue","_computeGainTerm","_getStageFp","_getGain","opAmpNonIdealities","_getOpAmpNonIdealities","capacitorToleranceConfigs","nominalFactor","allowedMin","allowedMax","multiplicationFactors","getToleranceValues","selectedTolerance","isToleranceCoerced","toleranceConfig","ToleranceUtils","inductorToleranceConfigs","resistorToleranceConfigs","eSeries6","eSeries12","eSeries48","getToleranceConfig","listOfConfigs","currentRow","desiredValue","preferredSeries","exponent","scientificNotation","toExponential","stringLength","indexOfE","getExponent","getBaseValue","normalizeToPreferredSeries","forceRoundDirection","getToleranceArray","getSeries","selectedSeries","array","validArray","benchMarkLength","arrayLengthsEqual","subArrayLength","newSubArray","rotate","arr","turnsParam","turnsAdjusted","l","turns","joinArrays","array1","array2","joinToleranceArrays","getMinimumAndMaximumForOneStage","interestingCircuitValuesforOneStage","getMinimumAndMaximumArray","addEnvelope","individualStageArray","computeR3AndR4","r3plusr4","computeMasterCapacitorValue","getInverseOfMasterCapacitorRatio","computeGbwToleranceArray","copyCircuit","opAmpCopy","toCommercialCircuit","getResistorSize","resistor","getGainChangeSupportStatus","getResistorMinimumLimitMultiplier","r3TinyTemp","getResistorMaximumLimitMultiplier","rBigTemp","computeCapacitorLimit","capacitorBaseValue","capacitorLimitMultiplier","computeGainResistorLimit","resistorBaseValue","resistorLimitMultiplier","computeResistorLimit","computeComponentValueFromMinMaxAndRcRatio","createToleranceInputDefaults","negatePhase","negatedPhaseArray","hzToRadPerSecond","radianArrayToDegreeArray","radArray","radianToDegree","radian","VVarrtoDBarr","vvArr","vvArray","dbArray","len","frequencyDifference","phaseDifference","frequencyRadPerSecondArray","radPerS","POINTS_PER_DECADE_63","POINTS_PER_DECADE_99","POINTS_PER_DECADE_607","expectedPoints","generateFreqArray","currentPosition","expectedPointsArr","newPoints","startIndex","endIndex","filteredResult","_value","xArr","yArr","resultArray","nLength","mLength","arg","your_log","getLogMidPoint","maxVal","minVal","avg","getAdcFilteredNoise","LowPassFilter","getPeakToPeak","getSNRandENOB","maxsignal","get_next","swap","temp","put_next","pArray","tempArray","permutationArray","getRangeLimits","minx","maxx","miny","maxy","yValues","getGraphData","getMagnitudeArray","product","getPhaseArray","unwrapPhase","halfcircle","fullcircle","phase_diff","computeFirstOrderStepResponseIdeal","computeSecondOrderStepResponseIdeal","answer","capacitorExponents","gainExponents","decadesMultiplier","generateRange","exponents","possibleValues","strValue","indexOf10","copySeries","indexOfOne","indexOfTen","precision","startingValue","indexOfWithPrecision","endingValue","valueIsValid","startingBracket","endingBracket","resultValue","gainNeeded","allgain","factor","extraGainNeeded","setPreviousAndNextStage","addStageLetter","createTargetStages","stageValue","distributeGains","dataQ","stagesClone","maxQ","gainNeed","maxGainAllowed","gainNeed1","sort","obj1","obj2","StageQ","qMargin","gainNeed2","stageGain","gainNeed3","oneByNumOfStages","modifier","triggerValue","iconValue","triggerElem","setAttribute","iconElem","eager","isFocused","currentValue","innerText","Router","EmberRouter","locationType","route","path","EmptyRoute","Route","router","transitionTo","LOCALES","IndexRoute","beforeModel","queryIndex","newUrl","history","replaceState","configURL","endsWith","docService","getOwner","lookup","htmlElement","documentElement","fullLanguage","defaultLanguage","lang","locales","FullLocale","setLocale","toolname","AnalyticsUrl","environment","requiresExternalSimulation","afterModel","IsoLocale","CanonicalUrl","setupController","controller","loadTimeAnalytics","appStartDateTime","getTime","LegacyRoute","AssetsService","Service","AbortController","willDestroy","abortController","abort","fetch","headers","method","signal","response","json","blob","random","uuid","CdpService","cdpSessionId","_getFetchPromise","description","reqId","startTime","loadCDPAnalytics","sId","timeStart","pollHandler","setInterval","endTime","request","clearInterval","_applyJsonOverrides","override","defaultpath","forceunique","getDeviceModelData","ModelUrl","CdpUrl","getCmsData","CmsUrl","getPstIndex","nonRuLocale","PstIndexUrl","getPstData","PstDataUrl","getPstMapping","PstMappingUrl","getToolsConfig","ConfigUrl","MessageType","TabLink","_myId","winId","integrationId","HANDSHAKE","isInitiator","_this$_window","msg","HANDSHAKE_ACK","_window","postMessage","domain","DATA","_verbose","DISCONNECT","warn","_this$_window2","windowIsAnonymousFunction","verbose","_useOnUnload","useOnUnload","_messageEventListener","_unloadEvent","_this$_window3","send","_this$_window4","_this$_window5","ChannelService","selfRef","opener","isConnectionActive","clean","designTimeOut","DownloadService","ApiUrl","Accept","body","encodeURIComponent","ok","contentDisposition","matches","exec","FeedbackService","feedbackData","Name","Email","Feedback","LoggingService","info","PST_Parameters","D","t_none","C","c_none","optional","t_float","c_single","t_pulldown","c_multi","t_integer","s4","s1","s7","t_string","s11","s3","s14","buildComments","commentList","translatedElements","SelectionTableFilterOptions","OpAmpsService","OpAmpsUrl","collectMockOpAmps","collectOpAmps","StaticParts","devicename","paramsAllowed","evaluatedOpAmps","amp","canOrderEvalBoard","reasonsPackagingMarginal","reasonsOpampPackagingMarginal","evaluatedOpAmp","reasons","reason","_intl","rawGBW","tempRange","buildOpAmpDisplayItem","getOpAmpModelsArray","opAmpList","opampList","circuitParams","requiredSupplyPins","absolute","delta","referredTo","commonMode","userConfig","dataFormat","xUnits","yUnits","xValues","hiZ","ldo","option","refBuff","dcErrors","internalReference","vOut","internalReferenceBuffer","supplyCurrentMap","pgaGain","powerMode","INPUT_PROTECTION_TYPE","COMMON_PIN_NAMES","INPUT_POS","INPUT_NEG","OUTPUT","OUTPUT_POS","OUTPUT_NEG","OUTPUT_CM","VOCM","REF","SUPPLY_POS","SUPPLY_NEG","PIN_NAMES","COMMON","OP_AMP","DIFF_AMP","SUPPLY_INPUT_POS","SUPPLY_INPUT_NEG","IN_AMP","PRE_AMP_OUT_POS","PRE_AMP_OUT_NEG","DIFF_AMP_IN_POS","DIFF_AMP_IN_NEG","SUPPLY_DIGITAL_POS","SUPPLY_DIGITAL_NEG","SUPPLY_CP_POS","ADC","DIFF_INPUT","CM_INPUT","DRIVER_SUPPLY_POS","DRIVER_SUPPLY_NEG","FILTER_SUPPLY_POS","FILTER_SUPPLY_NEG","DIODE","POWER_SUPPLY","outputArchitecture","cF","rKelvin","rF","rG","differentialAmp","gainError","gainErrorAtMaxTemp","gainTC","cmrr","requiredPDBParameters","gbwCm","rInVocm","rDiff","rCm","cDiff","cCm","vNoiseVocm","outHeadroomVminusTyp","outHeadroomVplusTyp","inHeadroomVminusMax","inHeadroomVplusMax","supplyCurrentTyp","supplyCurrentMax","requiredTPCParameters","vocmHeadroomVminusTyp","vocmHeadroomVplusTyp","diodeCapacitance","diodeType","reverseVoltage","diodeLeakage","referenceTemp","PART_TYPES","TIA_OP_AMP","REFERENCE","getTPCDatabase","partType","AdcTPCDatabase","DifferentialAmpTPCDatabase","InAmpTPCDatabase","OpAmpTPCDatabase","ReferenceCustomDatabase","universalTPCIIFE","dataGetter","smallData","getPart","newPart","tpcDatabase","datasheet","partData","customData","customDatabase","AdcCustomDatabase","DifferentialAmpCustomDatabase","InAmpCustomDatabase","OpAmpCustomDatabase","InputProtectionCustomDatabase","getCustomDatabase","LOG_PARTS","ARBITRARILY_RESTRICTED_PARTS","DataType","CardinalityType","PartIndex","getIds","addPart","getMergedPart","mergedPart","partId","partIsLive","proptest","propId","isok","parameterWellFormed","parameter","convertPart","logging","_mergedPart$","_mergedPart$2","_mergedPart$3","missingParms","emptyParms","invalidParms","parminfo","datatype","datavalue","isAdequatelySimulatable","checkTPC","SimPartData","domPole","interpretOpAmpIndex","convertedPart","collectConfigData","staticParts","cdpsource","useStaticPartsData","useLocalPartsData","localParts","spiceParts","AditoolsSpiceParts","nonPicks","nonPick","collectPstData","ignoreRX","ignoreRegEx","RegExp","viewsource","datasource","ignoreInPDB","pst","isSOIC","isSOICEP","isMSOP","isMSOPEP","isSOT23","polesZeroesMarginal","minPole","validNumber","PersistenceService","_getStageImplementation","stageImplementations","_cleanLoadedImplementation","loadedImplementation","individualStage","componentsAdvisor","createSpecificationsDesignData","createComponentsDesignData","createTolerancesDesignData","stageInfo","gainEnabled","recommendedAmps","getLoadData","version","buildVisitedTabs","populateSpecificationsModel","populateComponentsModel","compSelect","populateTolerancesModel","compTolerance","tablist","inputData","gainUnitsSetting","filterResponseSliderValue","individualStages","plusVs","minusVs","compensateGBW","rcSizing","rawVal","rebuildSortOrder","capacitor","prefResistors","prefCapacitors","prefInductors","now","ticks","saveDateStamp","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","Description","Tool","Version","Design","CreatedDate","UpdatedDate","Blob","encoding","navigator","msSaveBlob","URL","webkitURL","downloadUrl","createObjectURL","createElement","click","revokeObjectURL","saveDesignAnalytics","returnData","parseData","finalResults","invalidOpAmps","allOpAmps","getInvalidOpAmps","loadDesignFailureAnalytics","loadDesignAnalytics","decode","parser","done","generateJsonString","processResults","charAt","getOrdinal","savedDesign","dried","dryVisitedTabs","dryFilter","drySpecifications","dryComponents","dryTolerances","compact","buildCircuitComponents","isWideBand","ver1","ver2","compareDesignVersion","VISITED_TABS_HEADER","VISITED_TABS","FILTER_HEADER","FILTERS","SPECIFICATIONS_STRING","SPECIFICATIONS","GAIN_UNITS","dB","COMPONENTS_STRING","COMPONENTS","OPTIMIZATION","RecommendedSpecificComponents","AllowedSpecificComponents","OPTIMIZATION_PREFERENCE","PREFERRED_ALGORITHMS","PREFERRED_ALGORITHMS_VALUES","lowpass","lowpassV2","STAGES","IMPLEMENTATION","TOLERANCES_STRING","TOLERANCES","TOLERANCE_VALUES","isEmpty","specificationsString","componentsString","sortString","stagesList","dryStages","preferredAlgorithmsString","stagesHeader","stageString","toleranceInputs","tolerancesString","stageObject","CH_ENDSTREAM","CH_OTHER","T_SUCCESS","T_FAIL","T_KEY","T_VALUE","T_START","T_END","transitionTable","KEYSTART","KEYTEXT","VALTEXT","ENDVAL","LITERAL","charClass","ch","group","context","token","tokenizer","ck","chars","state","nextstate","nameAndType","N","T","V","U","dv","df","ds","dsg","dsu","dsa","dsf","dsA","dsF","dsc","dsr","dsR","dc","dcp","dcm","dco","dcO","dcc","dcr","dcS","dca","dcas","dcs","dcsL","dcss","dcsg","dcsG","dcsi","dcso","dt","dtr","dtc","dtl","dtg","dtR","dtC","dtL","dn","sortContext","sortName","processValue","algopreferences","g","processStages","VisitedTabsEnumeration","FilterTypeEnumeration","GainUnitEnumeration","OptimizationEnumeration","OptimizationPreferenceEnumeration","ImplementationEnuemartion","ToleranceEnumeration","O","F","o","PreferredAlgorithmsEnumeration","L1","L2","processBoolean","dtString","year","month","day","minutes","seconds","processDate","anyMisfires","processFieldSet","processSortOrder","processEnumeration","SharingService","shareData","FileName","DesignData","EmailRecipients","SenderName","generateStyleDefs","svgDomElement","styleDefs","sheet","origin","cssText","namedError","innerHTML","appendChild","insertBefore","firstChild","SnapShotService","componentId","imageData","canvas","svgElem","baseVal","svgString","XMLSerializer","serializeToString","ctx","getContext","DOMURL","img","Image","svg","onload","drawImage","toDataURL","format","src","HtmlToCanvas","svgItemList","svgItem","htmlItem","scrollX","scrollY","exitTabEvents","getElapsedInformation","currTime","endDateTime","getOpAmpsSorted","modelData","eventName","payloadText","resultData","passbandFreq","numStages","setWebEvent","newTab","refStage","Context","control","langFrom","langTo","designDescription","saveDate","payload","toolName","loadDate","senderName","emailRecipients","projectData","startDate","endDate","errorDetails","step","substr","toISOString","isEmptyObject","obj","orderText","displayStageType","typeName","parallel","summed","overrideLocale","specificationsChoices","signalFrequency","filterResponse","isChebyshev","componentChoices","optimizationKey","vplus","vminus","compensateForGBW","toleranceChoices","rtolerance","ctolerance","ltolerance","filterSummary","specificationsSummary","componentsSummary","tolerancesSummary","createCsvMultidimensionalData","headingsArray","dataArray","defaultValue","dataItem","DesignFilesUtility","images","dbUnit","hzUnit","pdfData","dictionary","_generatePDFTitlePageDescription","applicationDisplayName","userName","subheading","_cleanImage","designInfo","dataSheetUrl","designReport","imagesList","coverImage","coverImageData","addTitlePage","addDataPage","addImagePage","toBlob","bomDownloadData","bomData","identifier","csvHeader","evalBoardList","evalBoardURI","userNameString","pdfDate","titlePageText","_isNullOrWhiteSpace","user","image","imageString","fileData","success","tabName","isUnparseable","setUnparseable","updateUnparsableValue","unparseableFields","failedParse","unparseableValues","getFieldErrors","fieldErrors","valueErrors","padLeft","strtopad","num","padchar","String","truncateValue","numVal","significantDigits","stringVal","stringArr","toFixedClean","precisionIn","absValue","fraction","isEngineeringFormated","capitalizeFirstLetter","uncapitalizeFirstLetter","applyValueTolerance","roundedVal","hasTrailingZeroes","trimmedParam","digitVal","digitType","fixedDigits","patterninf","patternNeginf","engResult","sigFigsDown","sig","trunc","channels","toleranceValue","isReferenceCircuit","_materialAndPackageForCapacitors","billOfMaterialsFinal","boolReferenceBoard","billOfMaterialObj","validCapacitors","validResistors","validInductors","toleranceComponents","_getToleranceComponents","_getValidCapacitorsAndResistors","finishingTouchesCurrentComp","_finishingTouches","_getResistorBOM","_getCapacitorBOM","_getInductorBOM","_getOpAmpBOM","_getBypassCapacitorsBOM","refCircuitArray","_getReferenceStage","productURL","refDesignator","tantalumCapacitor","_getTantalumCapacitors","tantalumCapMaterialsAndPackage","designator","billOfMaterialsResistorArray","billOfMaterialsCapacitorArray","billOfMaterialsOpAmpArray","billOfMaterialsInductorArray","extraComponents","_getExtraComponentsBOM","_getExtraComponentsCount","resistorAdditions","resistorTable","_billOfMaterialsTable","capacitorTable","inductorTable","opAmpTable","otherAdditions","orderEvalBoard","orderEvalBoardArray","motherboardDesignatorArray","motherBoardDesignatorArray","motherBoardTantalum","_motherBoardDesignators","motherboardStrDesignator","evalBoardMotherModelNum","strDesignator","refDesignatorResistor","_referenceDesignator","refDesignatorCapacitor","_referenceDesignatorOpAmp","bypassCapacitorDesignator","_referenceDesignatorBypassCapacitor","j1LetterArray","subString","getAvailableEvalBoard","_availableEvaluationBoard","opAmpModelsArray","opAmpModels","_materialAndPackageForResistors","_materialAndPackageForInductors","filterSpecs","resonanceFrequency","_inArray","stageNum","billOfMaterialDisplay","arrayNew","arrayCount","dlist","boolFound","arrayClone","tempObj","stageData","includeInductors","stageDetail","boolResistor","materialAndPackageResistor","boolCapacitor","materialAndPackageCapacitor","boolInductor","refDesignatorInductor","materialAndPackageInductor","packageAndMaterialsOpAmp","_materialAndPackageForOpAmps","prodURLString","validBypassCapacitors","byPassCapMaterialsAndPackage","firstOrderLowPass","firstOrderHighPass","capacitorPackage","bypassCapacitorName","refDesignatorBypassCap","opAmpPins","referenceResistors","referenceCapacitors","referenceObject","materialAndPackageCapacitors","tantalumCapacitors","referenceStageUsed","j1String","jMString","stageCounter","originalQuantity","adjustedQuantity","ebsType","stageTypeText","stageImplementationText","ebsImplementation","ebsOpAmpChannel","codesFor8PinSOIC","codesFor8PinSOICEP","codesFor8PinMSOP","codesFor8PinMSOPEP","codesForSOT23","packagecode","packageChecker","codeToCheck","codeListToCheckAgainst","protocol","host","getURLLocale","defaultLocale","pathname","pos","sweepType","linear","octave","orderedPulseParams","orderedSineParams","orderedSweepParams","orderedTransientParams","DefaultPorts","R","portCount","L","SpiceNetList","netListTemplate","digits","_netList","_digits","netlist","getElementValue","lines","_makeLines","_findIndex","getElementPortCount","getSubcircuitPortCount","getSubcircuitName","getSubcircuitNetList","startLine","_findSubcircuitIndex","endLine","subcircuit","updateTitle","newTitle","line","updateSubcircuitName","oldName","newName","updateSubcircuitNetList","updateElementValue","ports","oldLine","newLine","_updateElementValue","updateElementValues","valuesList","updateACAnalysis","sweepTypes","_getMaxIndex","_getUpdatedValues","updateNoiseAnalysis","updateTransientAnalysis","updateDCVoltageSource","_updateDCSource","updateACVoltageSource","_updateACSource","updateSineVoltageSource","_updateSineSource","updatePulseVoltageSource","_updatePulseSource","updateDCCurrentSource","current","updateACCurrentSource","updateSineCurrentSource","updatePulseCurrentSource","linePattern","termBuffer","keyword","newValue","_pieces","newValues","list","maxIndex","orderedList","netlistFileList","AC","NOISE","TRAN","getSpiceNetListFiles","mediaURL","downloadType","assetService","loggerService","fastbootService","listOfParts","checkModelFiles","modelFile","macroModelInfo","infoItem","getModelFile","AditoolsSpice","subcktName","getMacroModelInfo","Set","cir","getTemplateFile","buildNetListTitle","voltageRangeObject","inputSignalExtraParams","getCirInputSignal","points","stopTime","stagesTemplate","circuitDetail","currentStageLetter","isGainCircuit","templateStageName","stageName","templateFile","stageNetlist","schematicValues","getSchematicValues","itemValue","netlistTemplate","getCirStages","voltageSupplies","dcVoltage","readmeLocale","netlistReadme","getModelFiles","fileHash","getModelFileForGeneric","opampName","lastFloatIndex","extraPins","x1Items","floatIndex","xString","buildXString","hostname","search","_proxyIfLocal","templateFileName","MaxInputSignalLow","MaxInputSignalHigh","MaxInputSignalFrequency","iSignalMid","iSignalMidFormatted","iSignalAmplitude","offupdate","peakAmplitude","lowValue","highValue","delayTime","riseTime","fallTime","pulseWidth","period","refExistsFlag","cirStages","refValue","prevStageLetter","oneCirStage","responseText","stageText","orderedTransientParams2","directives","transientRegExp","symbolPattern","SpiceSchematic","partsData","schematicTemplate","templateParts","_partsData","_schematic","_templateParts","schematic","getSymbolValue","symbolRange","_findSymbolByInstanceName","attributeLine","_findSymbolAttributeByName","getSymbolAttribute","attribute","removeFlagElements","selectAnalysisType","analysisType","_isDirectiveLine","updateFlagName","replacementName","updateSymbol","genericPartNumber","deleteIfNotFound","rails","_untiePinsFromRails","_replaceSymbol","_tiePinsToRails","updateSymbolValue","attributePattern","newSymattr","updateSymbolAttribute","_updateSymbolAttribute","updateSubcircuitSymbol","symbolName","symbolPieces","newSymbol","updateTextContent","placeholderText","replacementText","textLines","segments","newTextContent","_findSimulationTypeCommand","orderedParams","_useSecondTransientSyntax","_checkParameters","_updateSimulationType","getComponentValue","valueAsString","setComponentValue","_getOffset","newPartValue","oldPartValue","startBlock","endBlock","schematicLines","SIMCMDS","schematicTerm","bits","command","simulationPattern","newCommand","templateValue","_validateSymbolPath","templateSymbolPath","targetSymbolPath","templatePath","_getPartPieces","templateSpiceNum","_getTemplateSpiceNum","spicePart","pins","applicablePins","_getApplicablePins","pin","pinOffset","_determineSymbolPinAdjustment","offsetX","offsetY","transform","pinEnd","wireEnd","_getStubWireEnd","orientation","_removeWireStubAt","_removeFlagAt","newPartNumber","sourcePart","sourcePartDetails","targetPartDetails","symbolPath","positionAdjustment","newTextLine","connection","_addWireStubAt","_addFlagAt","partDetails","railKeys","partX","partY","pinX","pinY","xyRotationTable","R0","R90","R180","R270","M0","M90","M180","M270","xDiff","yDiff","adjustment","partDirection","pinDirection","xin","yin","rotation","relativeEnd","regex","matched","separator","flagName","mergePartsArray","partArray1","partArray2","mergeKey1","mergeKey2","bFound","_listOfParts$j","getSpiceSchematicFiles","intlService","netlistParts","schematicParts","generateSchematic","schematicFileList","contentPath","flag","_spiceParts$opAmpName","cirData","gainString","spicePartNumber","getSchematicTemplates","spiceSchematicObjectList","schematicFileInfo","template","_spiceSchematicObject5","_spiceSchematicObject6","_spiceSchematicObject7","maxFreq","updateInputSignal","_spiceSchematicObject2","_spiceSchematicObject3","_spiceSchematicObject4","updateSimulationDirectives","_spiceSchematicObject8","schematicContent","updateVoltageSupplies","schematicFile","schematicObject","updateStageInfo","updateSubCircuitInfo","_spiceSchematicObject","populateSchematicFiles","hasLTspice","opAmpNoSpice","noSpiceFiles","hasNetList","fileMessageName","fileMessageContent","_listOfParts$k","_listOfParts$k2","generateReadMeFile","schematicContentIn","executeWithTime","suffixes","isSuffixFound","collapseProto","proto","decoratorWithParams","fn","_len","_key","possibleDesc","isFieldDescriptor","__isComputedDecorator","isClassDescriptor","_len2","_key2","decoratorWithRequiredParams","_len3","_key3","_len4","_key4","concattedPropDecorator","propName","propValues","parentValues","parentValue","attributeBindings","binding","classNameBindings","tagName","layout","setModifierManager","capabilities","disableAutoTracking","createModifier","installModifier","_state","positional","named","updateModifier","destroyModifier","untrack","Cache","limit","func","store","Map","has","hits","misses","size","purge","clear","STRING_DASHERIZE_REGEXP","STRING_CAMELIZE_REGEXP_1","decamelize","DECAMELIZE_CACHE","STRING_CAMELIZE_REGEXP_2","STRING_CLASSIFY_REGEXP_1","_match","_separator","chr","STRING_CLASSIFY_REGEXP_2","STRING_CLASSIFY_REGEXP_3","STRING_UNDERSCORE_REGEXP_1","replace1","replace2","initialChar","STRING_UNDERSCORE_REGEXP_2","UNDERSCORE_CACHE","STRING_CAPITALIZE_REGEXP","STRING_DECAMELIZE_REGEXP","underscore","Symbol","toPrimitive","TypeError","_toPrimitive","_toPropertyKey","EnsureRegisteredService","WeakMap","register","klass","nonce","classNonces","nonceCounter","runtime","isCurriedComponentDefinition","CurriedComponentDefinition","curry","CurriedValue","ensureSafeComponent","thingWithOwner","resolver","_runtimeResolver","entry","__container__","cache","runtimeResolver","lookupComponentHandle","handle","lookupComponent","lookupCurriedComponentDefinition","handleString","EnsureSafeComponentHelper","Helper","compute","BaseComponent","setOwner","Ember","setDestroyed","setDestroying","destroyables","CAPABILITIES","destructor","asyncLifecycleCallbacks","updateHook","registerDestructor","EmberGlimmerComponentManager","attrs","createComponent","ComponentClass","component","BaseComponentManager","destroyComponent","GlimmerComponent","GlimmerComponentBase","setComponentManager","GlimmerComponentManager","cached","metal","versionRegExp","versionExtendedRegExp","shaRegExp","appVersion","_","APP","versionOnly","hideSha","shaOnly","hideVersion","showExtended","registered","libraries","initializerFactory","originalDidCreateRootView","didCreateRootView","endMarker","shoeboxNodes","shoeboxNodesArray","nextNode","parent","nextSibling","removeChild","clearHtml","NoneLocation","_config","resolveRegistration","_fastbootHeadersEnabled","bool","_redirectCode","_response","readOnly","_request","setURL","currentPath","formatURL","redirectURL","statusCode","_super","RequestObject","EObject","cookies","queryParams","_host","Shoebox","put","fastbootInfo","shoebox","retrieve","shoeboxItem","el","valueString","textContent","isFastboot","metadata","_fastbootInfo","__fastbootInfo","deferRendering","promise","HeadContent","HeadLayout","headElement","head","shouldTearDownOnInit","_tearDownHead","_isFastboot","startMeta","endMeta","HeadData","hasRealLiquidIf","classNames","LiquidIf","ariaExpanded","preventDefault","hasLiquidFireDep","panelActions","shouldAnimate","and","oneWay","panelState","isOpen","isClosed","not","panelsWrapper","animate","didReceiveAttrs","didInsertElement","scheduleOnce","didToggle","actions","toggleIsOpen","toggle","accordion","_cpPanels","State","boundOpenState","apiOpenState","apiWasUsed","Registry","unknownProperty","addObject","_registry","_panelFor","_panels","_panelsInGroup","filterBy","open","panel","closeAll","openAll","Mixin","_copy","deep","seen","copies","ret","Copyable","detect","FormatDateHelper","onLocaleChanged","recompute","namedOptions","positionalOptions","allowEmpty","formatDate","FormatListHelper","formatList","FormatMessageHelper","formatMessage","FormatNumberHelper","formatNumber","FormatRelativeHelper","formatRelative","FormatTimeHelper","formatTime","THelper","FormatterBase","FormatDate","Formatter","opts","FormatList","escaped","needToEscape","badCharacters","FormatMessage","stringOrDesc","isHTMLSafe","escapedOptions","object","escapedOpts","toHTML","character","escapeExpression","escapeOptions","defaultMessage","ignoreTag","FormatNumber","FormatRelative","formatOptions","formats","relative","formatRelativeTime","FormatTime","ErrorKind","TYPE","SKELETON_TYPE","isLiteralElement","literal","isArgumentElement","argument","isNumberElement","isDateElement","isTimeElement","isSelectElement","isPluralElement","plural","isPoundElement","pound","isTagElement","tag","isNumberSkeleton","isDateTimeSkeleton","dateTime","SPACE_SEPARATOR_REGEX","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","era","RangeError","weekday","hour12","hourCycle","timeZoneName","WHITE_SPACE_REGEX","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","roundingPriority","g1","g2","minimumSignificantDigits","maximumSignificantDigits","parseSign","signDisplay","currencySign","parseConciseScientificAndEngineeringStem","stem","notation","minimumIntegerDigits","parseNotationOptions","opt","parseNumberSkeleton","tokens","_i","tokens_1","scale","useGrouping","compactDisplay","__assign","currencyDisplay","unitDisplay","roundingMode","g3","g4","g5","trailingZeroDisplay","signOpts","conciseScientificAndEngineeringOpts","_a","timeData","getDefaultHourSymbolFromLocale","hourCycles","regionTag","languageTag","language","maximize","region","SPACE_SEPARATOR_START_REGEX","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeStartsWith","hasNativeFromCodePoint","fromCodePoint","hasNativeFromEntries","fromEntries","hasNativeCodePointAt","codePointAt","hasTrimStart","trimStart","hasTrimEnd","trimEnd","isSafeInteger","isFinite","REGEX_SUPPORTS_U_AND_Y","RE","matchIdentifierAtIndex","position","codePoints","elements","fromCharCode","entries_1","charCodeAt","IDENTIFIER_PREFIX_RE_1","_isWhiteSpace","_isPatternSyntax","Parser","requiresOtherClause","shouldParseSkeletons","parseMessage","nestingLevel","parentArgType","expectingCloseTag","isEOF","char","parseArgument","peek","UNMATCHED_CLOSING_TAG","clonePosition","_isAlpha","parseTag","parseLiteral","bump","startPosition","parseTagName","bumpSpace","bumpIf","childrenResult","endTagStartPosition","INVALID_TAG","closingTagNameStartPosition","UNCLOSED_TAG","startOffset","parseQuoteResult","tryParseQuote","parseUnquotedResult","tryParseUnquoted","parseLeftAngleResult","tryParseLeftAngleBracket","codepoint","openingBracePosition","EXPECT_ARGUMENT_CLOSING_BRACE","EMPTY_ARGUMENT","parseIdentifierIfPossible","MALFORMED_ARGUMENT","parseArgumentOptions","startingPosition","endOffset","bumpTo","typeStartPosition","argType","typeEndPosition","EXPECT_ARGUMENT_TYPE","styleAndLocation","styleStartPosition","parseSimpleArgStyleIfPossible","EXPECT_ARGUMENT_STYLE","styleLocation","argCloseResult","tryParseArgumentClose","location_1","parseNumberSkeletonFromString","EXPECT_DATE_TIME_SKELETON","dateTimePattern","skeletonCopy","patternPos","patternChar","extraLength","hourLen","dayPeriodLen","hourChar","getBestPattern","parsedOptions","typeEndPosition_1","EXPECT_SELECT_ARGUMENT_OPTIONS","identifierAndLocation","pluralOffset","EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE","tryParseDecimalInteger","INVALID_PLURAL_ARGUMENT_OFFSET_VALUE","optionsResult","tryParsePluralOrSelectOptions","location_2","pluralType","INVALID_ARGUMENT_TYPE","nestedBraces","apostrophePosition","bumpUntil","UNCLOSED_QUOTE_IN_ARGUMENT_STYLE","stringTokens_1","stemAndOptions","options_1","INVALID_NUMBER_SKELETON","expectCloseTag","parsedFirstIdentifier","hasOtherClause","parsedSelectors","selector","selectorLocation","EXPECT_PLURAL_ARGUMENT_SELECTOR","INVALID_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_SELECT_ARGUMENT_SELECTOR","DUPLICATE_PLURAL_ARGUMENT_SELECTOR","EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT","EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT","fragmentResult","add","EXPECT_SELECT_ARGUMENT_SELECTOR","MISSING_OTHER_CLAUSE","expectNumberError","invalidNumberError","sign","hasDigits","decimal","kind","currentOffset","targetOffset","nextCode","pruneLocation","els","SyntaxError","originalMessage","captureLocation","memoize","cacheDefault","serializer","serializerDefault","strategy","strategyDefault","monadic","cacheKey","computedValue","variadic","assemble","serialize","ObjectWithoutPrototypeCache","ErrorCode","strategies","PART_TYPE","FormatError","_this","__extends","InvalidValueError","variableId","INVALID_VALUE","InvalidValueTypeError","MissingValueError","MISSING_VALUE","isFormatXMLElementFn","formatToParts","formatters","currentPluralValue","els_1","getNumberFormat","varName","getDateTimeFormat","medium","value_1","formatFn","chunks","Intl","PluralRules","MISSING_INTL_API","getPluralRules","lastPart","createFastMemoizeCache","IntlErrorCode","IntlMessageFormat","overrideFormats","defaultConfig","configs","formatterCache","pluralRules","ast","resolvedOptions","resolvedLocale","NumberFormat","supportedLocalesOf","getAst","resolveLocale","__parse","parseOpts","__rest","__spreadArray","DateTimeFormat","memoizedDefaultLocale","Locale","supportedLocales","integer","percent","short","long","full","IntlError","exception","stack","captureStackTrace","UnsupportedFormatterError","UNSUPPORTED_FORMATTER","InvalidConfigError","INVALID_CONFIG","MissingDataError","MISSING_DATA","IntlFormatError","FORMAT_ERROR","MessageFormatError","descriptor","MissingTranslationError","MISSING_TRANSLATION","filterProps","props","allowlist","defaults","filtered","DEFAULT_INTL_CONFIG","timeZone","defaultFormats","fallbackOnEmptyString","onError","onWarn","getNamedFormat","formatType","NUMBER_FORMAT_OPTIONS","getFormatter","formatNumberToParts","RELATIVE_TIME_FORMAT_OPTIONS","getRelativeTimeFormat","RelativeTimeFormat","DATE_TIME_FORMAT_OPTIONS","filteredOptions","timeStyle","dateStyle","_b","formatDateTimeRange","from","to","formatRange","formatDateToParts","formatTimeToParts","PLURAL_FORMAT_OPTIONS","formatPlural","setTimeZoneInOptions","deepMergeOptions","opts1","opts2","deepMergeFormatsAndSetTimeZone","mfFormats","messageDescriptor","defaultRichTextElements","msgId","condition","Err","invariant","getMessageFormat","LIST_FORMAT_OPTIONS","getListFormat","formatListToParts","ListFormat","richValues_1","serializedValues","generateToken","DISPLAY_NAMES_OPTONS","formatDisplayName","getDisplayNames","DisplayNames","of","createIntl","relativeTime","displayNames","createFormatters","resolvedConfig","verifyConfigMessages","$t","onFormatjsIntlError","convertToArray","convertToString","normalizeLocale","flattenKeys","translation","IntlService","_intls","localeName","proposedLocale","locale1","locale2","_locale","cancel","_timer","_ee","emit","_updateDocumentLanguage","createFormatterProxy","initialLocale","EventEmitter","_owner","_formats","getIntl","getOrCreateIntl","translations","addTranslations","localeNames","_localeWithDefault","translationsFor","resilient","existingIntl","_cache","exists","_this$getIntl","_this$getIntl2","dom","renderer","_dom","container","documentService","getDOM","on","off","_formatters","missingMessage","targetAttachment","isPositioned","renderInPlace","didGetPositioned","observer","updateTargetAttachment","left","getWrappedTargetAttachmentElement","typeOf","targetSelector","targetAttachmentMethod","capitalize","targetAttachmentElement","alignCenter","elementWidth","offsetWidth","elementHeight","offsetHeight","marginLeft","marginTop","alignLeft","originOffset","originOffsetTop","alignRight","targetWidth","alignTop","alignBottom","targetHeight","alignElementCenter","alignNone","VALID_OVERLAY_POSITIONS","ModalDialog","templateLayout","attachmentClass","attachment","attachmentPart","whichModalDialogComponent","animatable","hasLiquidTether","hasLiquidWormhole","tetherTarget","ensureEmberTetherPresent","destinationElementId","modalService","validateProps","overlayPosition","hasEmberTether","onCloseAction","onClose","isNone","onClickOverlayAction","onClickOverlay","nextHandler","currentTarget","hasDOM","modalContainerElId","getDestinationElementIdFromConfig","rootElementOrId","rootEl","modalContainerEl","appendContainerElement","rootElement","computedFromConfig","prop","BasicDialog","containerClassNamesString","_this$containerClassN","_this$containerClassN2","containerClassNames","targetAttachmentClass","containerClass","overlayClassNamesString","_this$overlayClassNam","_this$overlayClassNam2","overlayClassNames","translucentOverlay","overlayClass","wrapperClassNamesString","_this$wrapperClassNam","_this$wrapperClassNam2","wrapperClassNames","variantWrapperClass","wrapperClass","isOverlaySibling","clickOutsideToClose","makeOverlayClickableOnIOS","handleClick","modalSelector","modalEl","registerClick","isIOS","registerTouch","willDestroyElement","userAgent","overlayEl","cursor","InPlaceDialog","LiquidDialog","LiquidTetherDialog","tetherClassPrefix","TetherDialog","_ensureAttachments","modalContainerId","modalRootElementId","consumeArgs","noop","willRemove","ClassBasedModifierManager","factoryOrClass","implementsModify","_implementsModify","createdState","installedState","installElement","Element","installElementOnInstance","modify","didReceiveArguments","didInstall","Args","updateArgsOnInstance","didUpdateArguments","ClassBasedModifier","Manager","FunctionBasedModifierManager","teardown","EAGER_MANAGER","LAZY_MANAGER","getPod","ContainerDebugAdapter","_moduleRegistry","namespace","ModuleRegistry","canCatalogEntriesByType","catalogEntriesByType","types","STRING_DASHERIZE_CACHE","CLASSIFY_CACHE","_entries","podBasedModuleName","podBasedComponentsInSubdir","mainModuleName","defaultModuleName","nestedColocationComponentModuleName","pluralizedTypes","makeToString","factory","fullName","shouldWrapInClassFactory","parseName","parsedName","fullNameParts","prefixParts","nameParts","fullNameWithoutType","root","resolveMethodName","resolveOther","normalizedModuleName","findModuleName","defaultExport","_extractDefaultExport","injections","normalize","_normalizeCache","_normalize","resolved","pluralize","podBasedLookupWithPrefix","podPrefix","resolveEngine","engineModule","resolveRouteMap","engineRoutesModule","resolveTemplate","tmpPrefix","loggingDisabled","moduleNameLookupPatterns","tmpModuleName","chooseModuleName","_logLookup","underscoredModuleName","partializedModuleName","lookupDescription","found","_owner$resolveRegistr","padding","env","LOG_MODULE_RESOLVER","LOG_RESOLVER","symbol","knownForType","moduleKeys","items","fullname","translateToContainerFullname","podSuffix","nonPodPrefix","MediaHelper","media","Evented","_matches","_mocked","_mockedBreakpoint","matchMedia","nullMatchMedia","breakpoints","cpName","classify","_triggerMediaChanged","_triggerEvent","once","query","matcher","mql","listener","listeners","addListener","run","application","registerOptionsForType","instantiate","createKeyTest","keyCode","isEnterKey","isEscapeKey","isSpaceKey","isLeftArrowKey","isUpArrowKey","isRightArrowKey","isDownArrowKey","defaultA11yAnnouncementConfig","ACTIVATE","a11yItemName","maxLength","MOVE","CONFIRM","_ref3","CANCEL","_ref4","NO_MODEL","SortableGroupModifier","Modifier","handleVisualClass","a11yAnnouncementConfig","itemVisualClass","focusOut","isRetainingFocus","_isElementWithinHandle","activeElement","cancelKeyboardSelection","keyDown","isKeyDownEnabled","isKeyboardReorderModeEnabled","_selectedItem","_prepareKeyboardReorderMode","_announceAction","ANNOUNCEMENT_ACTION_TYPES","_updateItemVisualIndicators","_updateHandleVisualIndicators","_handleKeyboardReorder","_move","fromIndex","toIndex","sortedItems","nextItem","dimension","moveItem","itemElement","confirmKeyboardSelection","_focusItem","_selectedItemElement","moves","sortedIndex","newSortedIndex","_disableKeyboardReorderMode","move","_tearDownA11yApplicationContainer","_resetItemSelection","commit","announcer","isActive","remove","isUpdate","visualHandle","visualKeys","visualKey","_enableKeyboardReorderMode","_setupA11yApplicationContainer","tabIndex","removeAttribute","onChange","groupName","_groupDef","firstItemPosition","spacing","activateKeyDown","deactivateKeyDown","registerGroup","_group","deregisterGroup","prepare","_firstItemPosition","isDragging","isBusy","itemModels","draggedItem","wasDropped","draggedModel","_updateItems","_onChange","schedule","freeze","thaw","_createAnnouncer","cleanup","_positional","didSetup","sortableService","fetchGroup","insertAdjacentElement","parentNode","SortableHandleModifier","dataset","sortableHandle","getY","touches","changedTouches","touch","screenY","clientY","getX","screenX","clientX","ScrollContainer","isWindow","clientWidth","clientHeight","getComputedStyle","scrollWidth","scrollHeight","maxScrollTop","maxScrollLeft","right","scrollTop","scrollLeft","getBorderSpacing","css","borderSpacing","horizontal","vertical","WAITERS","for","global","getGlobal","waiters","globalThis","self","registerWaiter","pending","waiter","waitUntil","debugInfo","getPendingWaiterState","NoopTestWaiter","beginAsync","endAsync","buildWaiter","SortableItemModifier","sortableGroup","_sortableGroup","groupModifier","_this$sortableGroup","groupDisabled","_this$sortableGroup2","updateInterval","isDisabled","isDraggingDisabled","distance","_isDragging","onDragStart","onDragStop","isDropping","_isDropping","disableCheckScrollBounds","mouseDown","which","_primeDrag","setupHandleElement","handleElement","touchStart","transition","_y","_x","startEvent","stopPropagation","_prepareDragListener","_prepareDrag","DRAG_ACTIONS","_cancelStartDragListener","selfCancellingCallback","END_ACTIONS","dx","dy","_startDrag","drag","_makeDragHandler","dragThrottled","ev","throttle","drop","_drop","_scrollOnEdges","leadingEdgeKey","trailingEdgeKey","scrollKey","pageKey","groupDirection","scrollContainer","excludeStaticParent","scrollParent","parentsArray","currentParent","getParentElements","parentElemStyles","overflow","overflowX","overflowY","itemContainer","createFakeEvent","_pageX","_pageY","pageX","pageY","checkScrollBounds","leadingEdge","trailingEdge","scroll","speed","maxScrollSpeed","requestAnimationFrame","dragOrigin","elementOrigin","scrollOrigin","_drag","_scheduleApplyPosition","_applyPosition","offsetLeft","offsetTop","transitionPromise","_waitForTransition","_preventClick","_complete","ELEMENT_CLICK_ACTION","_preventClickHandler","stopImmediatePropagation","isAnimated","defer","finally","duration","transitionDuration","transitionProperty","elStyles","marginRight","marginBottom","listenersRegistered","sortableItem","registerItem","deregisterItem","EmberSortableService","groups","groupDef","newItems","truthConvert","equal","gt","forceNumber","gte","emberIsArray","isEqual","emberIsEqual","lt","lte","notEqualHelper","or","xor","truthy","getActiveElement","childNodesOfElement","child","alias","destinationElement","_destination","_element","doc","nodes","shift","findElementById","_wormholeHeadNode","createTextNode","_wormholeTailNode","_appendToDestination","_removeRange","_destinationDidChange","startingActiveElement","_appendRange","resultingActiveElement","firstNode","lastNode","previousSibling","definedSeries","distanceBelow","distanceAbove","ESeries","canonicalizeImplementation","suppliedImplementation","capESeries","_implementation","componentCalculators","comps","r7","r8","r11","r12","r15","c11","c12","c13","l2","l3","denom_real","reciprocal","denominator_inverted","negate","negateDestroy","z2","numerator","singleEnded","passiveFirstOrder","highpass","activeFirstOrder","rGov","_determineGainResistors","passiveInductor","bandpass","activeInductor","kVar","_bandpassMFBFeedback","r1PlusR2","ratios","capRatio","qWithMatchedRs","_sallenKeyLowPassQ","qWith12ResRatio","resRatio","_sallenKeyLowPassResistorRatio","qWith6ResRatio","capRatioRoughDraft","resRatioSquared","qSquared","underSquareRoot","_sallenKeyLowPassCapacitorRatio","c2RoughDraft","_sallenKeyLPFResAndCapRatios","squareRootOfR1R2","differential","equivC","rGainOrRCross","equivR","lGov","aMax","capRatioSquared","preRelease","notRecommendedForNewDesigns","reasonsOpampMarginal","maxGbw","recommendedRoutOverGBW","minROutOverGBW","maxiBias","minIBias","reasonsOpampNotAllowed","rcLimitsError","minGbwAllowed","maxRoutoverGBW","minSlewRate","maxSlewRate","minSpecialGain","getPowerRecommendedOpAmpRequirementSpec","getNoiseAndVoltageRangeOpAmpRequirementSpec","getAllowedOpAmpRequirementSpec","_getLowestPowerOpAmpFromList","lowestSupplyCurrent","currentAmp","_getInputRoom","_getOutputRoom","recommendationSpec","allowedSpec","_getOverallLimits","reasonsNotAllowed","reasonsMarginal","root10","initialMaxCurrent","recommendedList","minCurrent","maxCurrent","rNoise","lowNoiseOpAmps","iNoiseV","opAmpNoiseArray","_getLowNoiseOpAmps","getNoiseOpAmpTopPick","getPowerOpAmpTopPick","firstOpAmpInputRoom","firstOpAmpOutputRoom","inputRoom","outputRoom","_getBiggestRoomFromList","getVoltageRangeOpAmpTopPick","opAmpRequirementSpec","circuitLimits","_getCircuitIdealOpAmp","iBiasResistance","fb","_bandpassMFBFeedbackForRecommendations","INF","_getMultipleFeedbackBandpassIdealOpAmp","_getInductorBandPassIdealOpAmp","_getMultipleFeedbackHighPassIdealOpAmp","_getFirstOrderHighPassIdealOpAmp","_getSallenKeyHighPassIdealOpAmp","_getInductorHighPassIdealOpAmp","parallelR1R5","_getMultipleFeedbackLowPassIdealOpAmp","_getFirstOrderLowPassIdealOpAmp","_getSallenKeyLowPassIdealOpAmp","_getInductorLowPassIdealOpAmp","DROPDOWN","DEFAULT_TOOL_URLS","DEFAULT_OPTIONS","toolurls","URL_KEY_MAP","PrecisionStudioMenu","dropdown","markup","urls","updatedMarkup","applyUrlsToMarkup","focusOutListenerBound","focusOutListener","popover","relatedTarget","hidePopover","attach","tempwrapper","symbols","detach","iconsNode","supplyDummySession","AnalyticsAL","webData","analyticsLoaded","CONSOLE_LOGGER","Analytics","analyticsUrl","isSSR","isTesting","logSuppressions","usesDummySession","_trackSessionStart","beforeEl","script","scripts","getElementsByTagName","lastScript","prior","nextElementSibling","_prior$parentNode","_document$getElements","AbortSignal","append","loadScript","interval","retries","checkCondition","poll","queue","qlen","evt","eventData","AnalyticsService","isAbandoned","isLoading","$cptable","AditoolsRenderer","inserted","destroying","XLSX","current_codepage","current_ansi","VALID_ANSI","CS2CP","set_ansi","cp","set_cp","_getchar","_getansi","DENSE","Base64_map","Base64_encode","e1","e2","e3","e4","Base64_decode","has_buf","Buffer","process","versions","Buffer_from","nbfs","buf","enc","buf_utf16le","new_raw_buf","alloc","Uint8Array","new_unsafe_buf","allocUnsafe","s2a","s2ab","ArrayBuffer","view","a2s","bconcat","bufs","isBuffer","maxlen","chr0","chr1","_strrev","pad0","fill","pad_","rpad_","p2_32","pad0r","pad0r1","pad0r2","SSF_isgeneral","days","months","table_fmt","SSF_default_map","SSF_default_str","SSF_frac","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","SSF_parse_date_code","b2","SSF_normalize_xl_unsafe","dow","dout","u","H","M","S","date1904","setDate","getDay","SSF_fix_hijri","SSF_strip_decimal","SSF_general","LOG10E","SSF_small_exp","SSF_large_exp","SSF_normalize_exp","SSF_general_num","SSF_format","datenum","SSF_write_date","fmt","ss0","ss","tt","outl","commaify","pct1","write_num_exp","idx","ee","fakee","$$","$1","$2","$3","frac1","dec1","closeparen","phone","hashq","cc","rnd","dd","dec","_frac","write_num_flt","ffmt","write_num","write_num_cm","sfmt","mul","write_num_pct","ri","ff","aval","den","rr","myn","myd","write_num_f1","carry","oa","lres","rres","flr","write_num_exp2","write_num_int","write_num_cm2","write_num_pct2","write_num_f2","SSF_abstime","fmt_is_date","cfregex2","chkcond","thresh","dateNF","in_str","SSF_split_fmt","lat","m1","m2","choose_fmt","flen","lst","hr","ssm","_dt","bt","jj","nstr","myv","ostr","decpt","lasti","retval","eval_fmt","SSF_load","SSF_load_table","tbl","make_ssf","dateNFregex","bad_formats","_fs","CRC32","T0","Int32Array","signed_crc_table","TT","subarray","slice_by_16_tables","T1","T2","T3","T4","T5","T6","T7","T8","T9","Ta","Tb","Tc","Td","Te","Tf","bstr","seed","CFB","fs","dirname","filename","write_dos_date","hms","write_shift","ymd","parse_extra_field","prep_blob","flags","read_shift","sz","tgt","mtime","atime","ctime","mt","sz1","sz2","usz","csz","get_fs","file","parse_zip","di","mboundary","boundary","FileIndex","FullPaths","init_cfb","start_di","fcnt","parse_mime","parse_mad","mver","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","ssz","fat_addrs","mv","chk","HEADER_SIGNATURE","check_get_mver","header","check_shifts","dir_cnt","sectors","nsectors","sectorify","sleuth_fat","sector_list","sl","chkd","buf_chain","modulus","addr","__readInt32LE","__toBuffer","make_sector_list","ENDOFCHAIN","Paths","files","mini","minifat_store","pl","sector","namelen","__utf16le","color","clsid","ct","read_date","storage","get_sector_list","get_mfat_entry","read_directory","FI","FP","dad","build_full_paths","raw","MSSZ","new_buf","cnt","__readUInt32LE","cfb","CLSID","nm","rebuild_cfb","seed_cfb","gc","_file","fullPaths","HEADER_CLSID","namecmp","elt","_write","_opts","fileType","fi","ca","cstr","dispcnt","csl","qp","get_content_type","write_quoted_printable","write_base64_76","write_mad","cdirs","compression","start_cd","crcs","sz_cd","namebuf","outbuf","_zlib","deflateRawSync","_deflate","write_zip","mini_size","fat_size","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","CLEN_ORDER","LEN_LN","DST_LN","use_typed_arrays","bitswap8","bit_swap_n","rev","read_bits_2","bl","read_bits_3","read_bits_5","read_bits_7","read_bits_n","write_bits_3","write_bits_1","write_bits_8","write_bits_16","realloc","zero_fill_array","build_tree","clens","cmap","MAX","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","_deflateRaw","DST_LN_RE","LEN_LN_RE","boff","write_stored","addrs","mlen","len_eb","dst_eb","write_huff_fixed","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","read_bits_4","next_code","hcodes","_inflate","woff","OL","max_len_1","max_len_2","dst","inflate","warn_or_throw","wrn","efsz","fcsz","EF","parse_local_file","meth","setMilliseconds","setFullYear","setMonth","setHours","setMinutes","setSeconds","parse_dos_date","_csz","_usz","ef","InflRaw","InflateRaw","_processChunk","_finishFlushFlag","bytesRead","_inflateRawSync","cfb_add","unsafe","ContentTypeMap","ctype","ext","encoded","si","tmp","fdata","fname","cte","oi","parse_quoted_printable","fpath","utils","cfb_gc","UCFullPaths","UCPaths","UCPath","read","readFileSync","read_file","write","writeFileSync","writeFile","cfb_new","cfb_del","cfb_mov","old_name","new_name","ReadShift","CheckField","use_zlib","zlib","_inflateRaw","blobify","a2u","write_dl","Deno","TextEncoder","encode","utf8write","IE_SaveFile","saveAs","chrome","downloads","b64","Base64_encode_arr","File","Folder","ks","o2","evert_key","K","evert","evert_num","dnthresh","UTC","dnthresh1","dnthresh2","numdate","setTime","pdre1","pdre2","pdre3","parseDate","cc2str","debomit","utf16beread","TextDecoder","dup","fuzzynum","wt","FDRE1","FDRE2","FDISO","utc_append_works","valueOf","lower_months","fuzzydate","local_to_utc","lower","lnos","fuzzytime1","fuzzytime2","getYear","utc_to_local","utc","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","local","getMilliseconds","zip_add_file","zip","widx","ridx","utf8decode","zip_new","XML_HEADER","rencoding","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","utf8reada","orig","utf8readb","ww","utf8readc","utf8corpus","utf8read","htmldecode","entities","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","XMLNS","CORE_PROPS","CUST_PROPS","EXT_PROPS","CT","RELS","TCMNT","XMLNS_main","XLMLNS","___toBuffer","___utf16le","__readUInt16LE","___hexlify","__hexlify","___utf8","__readUInt8","__utf8","___lpstr","__lpstr","___cpstr","__cpstr","___lpwstr","__lpwstr","___lpp4","__lpp4","___8lpp4","__8lpp4","___double","read_double_le","__double","is_buf","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","oo","lens","__writeUInt32LE","__writeInt32LE","__writeUInt16LE","WriteShift","cpp","bs","av","LN2","write_double_le","hexstr","fld","parsenoop","buf_array","blksz","newblk","curbuf","endbuf","_bufs","write_record","ba","XLSBRecordEnum","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","encode_cell_xls","encode_cell","encode_range_xls","encode_row","encode_col","decode_row","rowstr","decode_col","colstr","decode_cell","decode_range","encode_range","cs","ce","fix_range","a1","formula_quote_sheet_name","sname","safe_decode_range","format_cell","BErr","XF","numFmtId","safe_format_cell","sheet_to_workbook","SheetNames","Sheets","sheet_add_aoa","_ws","dense","ws","_R","_C","_origin","_range","__R","__Rstr","__C","nullError","sheetStubs","cellDates","cell_ref","aoa_to_sheet","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","parse_BrtCommentText","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBShortCell","write_XLSBShortCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","write_RkNumber","d100","parse_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","write_BrtColor","auto","theme","nTS","tint","rgb","VT_STRING","DocSummaryPIDDSI","SummaryPIDSI","rgbify","XLSIcv","RBErr","XLSLblBuiltIn","ct2type","CT_LIST","workbooks","xlsx","xlsm","xlsb","xlam","xltx","strs","charts","dialogs","macros","styles","write_ct","type2ct","evert_arr","xsd","xsi","bookType","f3","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","CMNT","SST","STY","THEME","CHART","CHARTEX","CS","WS","DS","MS","IMG","DRAW","XLMETA","PEOPLE","CONN","VBA","get_rels_path","write_rels","rels","rid","add_rels","rId","relobj","targetmode","Id","Type","Target","TargetMode","write_rdf_type","write_meta_ods","wb","cp_doit","write_core_props","dcterms","dcmitype","Props","WTF","ModifiedDate","PseudoPropsPairs","write_ext_props","vt","Worksheets","baseType","write_cust_props","pid","write_vt","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","LastPrinted","Category","Company","AppVersion","ContentStatus","Identifier","Language","write_TypedPropertyValue","write_FILETIME","XLSPSSkip","guess_property_type","write_PropertySet","PIDSI","hdr","piao","pr","pio","pinfo","write_PropertySetStream","entries2","clsid2","ps0","ps1","writebool","parseuint16","writeuint16","write_Bes","parse_ShortXLUnicodeString","cch","write_XLUnicodeRichExtendedString","xlstr","otext","write_XLUnicodeString","write_HyperlinkString","write_Hyperlink","hl","hashidx","Pretarget","write_XLSCell","ixfe","parse_XTI","parse_Ref8U","rwFirst","rwLast","write_Ref8U","write_BOF","write_BoundSheet8","hs","write_Format","b5","write_XF","ixfeP","write_BIFF3XF","xf","write_BIFF4XF","write_BoolErr","os","parse_BIFF5ExternSheet","write_NOTE_BIFF2","write_HLink","write_HLinkTooltip","Tooltip","write_BIFF2Cell","ifmt","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_sheet","ft","memo","vfp","l7","nrow","fpos","rlen","current_cp","codepage","hend","hi","lo","sheetRows","dbf_to_aoa","wch","_RLEN","to_workbook","to_sheet","from_sheet","old_cp","aoa","sheet_to_json","hcnt","coltypes","colwidths","coldecimals","guess","_guess","hf","_f","hb","rout","_n","_l","_s","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","sylk_char_regex","sylk_char_fn","decode_sylk_char","newcc","sylk_to_aoa_str","records","rj","next_cell_format","sht","rowinfo","colinfo","cw","Mval","Workbook","WBProps","Names","rstr","record","RT","d1904","nn","Sheet","Ref","rc_to_a1","C_seen_K","C_seen_X","C_seen_S","C_seen_E","formula","cell_t","cmnt","cellText","shrbase","shift_formula_str","F_seen","hidden","hpt","hpx","pt2px","process_col","write_ws_cell_sylk","a1_to_rc","write_ws_cmnt_sylk","aoasht","sylk_to_aoa","outwb","preamble","RS","rec","wpx","width2px","px2char","px2pt","write_ws_rows_sylk","DIF","dif_to_aoa_str","dif_to_sheet","dif_to_aoa","make_value","make_value_str","ETH","eth_to_sheet","eth_to_aoa","sep","meta","sheet_to_eth_data","coord","PRN","set_text_arr","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","FS","sepcc","startcc","_re","finish_cell","news","datestr","timestr","dateNF_fix","cellNF","outer","prn_to_sheet","bytes","firstbyte","prn_to_aoa_str","prn_to_sheet_str","WK_","lotushopper","Enum","WK1Enum","LOTUS_DATE_FMTS","lotus_to_workbook_buf","next_n","sidx","snames","realnames","sdata","refguess","lastcell","FMTS","QPWNFTable","book_append_sheet","CC","fmtidx","newcell","parse_qpw_str","qpw_to_workbook_buf","vers","qpro","works","works2","tmpcell","WK3Enum","osheets","rnames","parse_cell","get_wk1_fmt","write_LABEL","write_INTEGER","write_NUMBER","wk1_parse_rc","rel","FuncTab","BinOpTab","parse_cell_3","write_LABEL_16","wsidx","parse_NUMBER_17","write_NUMBER_17","log2","parse_NUMBER_27","parse_SHEETNAMECS","write_XFORMAT_SHEETNAME","argc","argL","argR","wk1_fmla_to_csf","sheet_to_wk1","write_biff_rec","write_RANGE","max_R","book_to_wk3","wscnt","write_BOF_WK3","straywsregex","write_BrtSSTItem","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","Verifier","PasswordDecoded","_JS2ANSI","rgb2Hex","MDW","px","char2width","coll","customWidth","PPI","write_BrtFmt","rev_XLSBFillPTNames","XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","patternType","write_BrtXF","write_Blxf","parse_BrtBorder","write_sty_bin","NF","write_FMTS_bin","SSF","font","grbit","italic","strike","outline","shadow","condense","write_FontFlags","bold","sss","vertAlign","underline","family","charset","scheme","write_BrtFont","write_FONTS_bin","write_FILLS_bin","write_BORDERS_bin","fontId","fillId","borderId","write_CELLSTYLEXFS_bin","write_CELLXFS_bin","cellXfs","xfId","builtinId","write_STYLES_bin","write_DXFS_bin","write_TABLESTYLES_bin","write_theme","Themes","themeXLSX","write_vml","csize","bbox","_shapeid","_comments","joinstyle","gradientshapeok","coordsize","fillopts","angle","fillparm","fillxml","fillcolor","strokecolor","write_vml_comment","write_comments_xml","iauthor","ID","lastauthor","ts","tcnt","write_tcmnt_xml","people","carr","rootid","tcopts","tcid","parentId","personId","write_people_xml","person","displayName","providerId","parse_BrtCommentAuthor","write_BrtCommentAuthor","write_comments_bin","_ia","write_BrtBeginComment","write_StrRun","VBAFMTS","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_PtgAttrBaxcel","bitSemi","parse_PtgAttrSpaceType","parse_SerAr","parsebool","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","parse_PtgExtraMem","cce","parse_PtgExtraArray","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfLel","PtgListRT","PtgTypes","iftab","FtabArgc","Ftab","cparams","parsetab","Cetab","nameindex","rl","parse_RgceLocRel_BIFF2","cl","parse_RgceLocRel","parse_RgceAreaRel","ixti","parse_PtgNameX_BIFF5","PtgDupes","Ptg18","coltype","rt","Ptg19","bitIf","bitGoto","parse_RgbExtra","rgce","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","get_ixti_raw","supbooks","XTI","SID","get_ixti","ixtiraw","stringify_formula","nameidx","last_sp","sp","fflen","lbl","names","xlfn","externbook","bookidx","itab","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","_left","parse_XLSBParsedFormula","ptgs","parse_Rgce","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","write_XLSBFormulaNum","oint","write_XLSBNameParsedFormula","write_XLSBFormulaBool","write_XLSBFormulaErr","_str","write_XLSBFormulaRange","lastbang","write_XLSBFormulaArea3D","write_XLSBFormulaRef3D","write_XLSBFormulaRangeWS","write_XLSBFormulaRefErr3D","postamble","write_XLSBFormulaStr","csf_to_ods_3D","browser_has_Map","get_sst_id","sst","revarr","Count","Unique","col_obj_w","level","outlineLevel","default_margins","margins","mode","defs","footer","get_cell_style","revssf","ssf","applyNumberFormat","check_ws","sheetprot_deffalse","sheetprot_deftrue","write_ws_xml_cell","oldt","oldv","_vv","bookSST","Strings","revStrings","cm","write_ws_xml","rdata","_drawing","needed","vbaraw","cname","CodeName","codeName","outlineprops","summaryBelow","summaryRight","above","write_ws_xml_sheetpr","sview","workbookViewId","Views","rightToLeft","RTL","write_ws_xml_sheetviews","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","write_ws_xml_cols","ht","customHeight","write_ws_xml_data","password","write_ws_xml_protection","write_ws_xml_autofilter","merges","write_ws_xml_merges","margin","relc","ignoreEC","numberStoredAsText","sqref","write_row_header","miyRw","ncolspan","lcs","caddr","write_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","write_BrtCellError","ncell","write_BrtShortError","parse_BrtMergeCell","write_BrtMergeCell","BrtMarginKeys","write_ws_bin_cell","last_seen","write_BrtShortIsst","write_BrtCellIsst","write_BrtShortSt","write_BrtCellSt","write_BrtShortRk","write_BrtCellRk","write_BrtShortReal","write_BrtCellReal","write_BrtShortBool","write_BrtCellBool","write_BrtShortBlank","write_BrtCellBlank","write_ws_bin","write_BrtWsProp","write_BrtBeginWsView","write_WSVIEWS2","write_BrtColInfo","write_COLINFOS","cap","write_CELLTABLE","write_SHEETPROTECT","write_AUTOFILTER","write_MERGECELLS","locidx","write_BrtHLink","write_HLINKS","write_IGNOREECS","write_LEGACYDRAWING","WBPropsDef","badchars","check_ws_name","safe","write_wb_bin","write_BrtFileVersion","filterPrivacy","write_BrtWbProp","vistab","Hidden","write_BOOKVIEWS","iTabID","strRelID","write_BrtBundleSh","write_BUNDLESHS","write_SELF_EXTERNS_xlsb","write_EXTERNALS_xlsb","Flags","dname","Comment","write_BrtName","write_BRTNAMES","write_name_xlml","write_ws_xlml_cell","marr","mi","_v","write_ws_xlml_row","write_ws_xlml","write_ws_xlml_names","skip","write_ws_xlml_table","objects","scenarios","selectLockedCells","selectUnlockedCells","xmlns","write_ws_xlml_wsopts","write_xlml","xlml_write_docprops","Custprops","BLACKLIST","xlml_write_custprops","write_props_xlml","write_wb_xlml","write_sty_xlml","write_names_xlml","PSCLSID","SI","DSI","UDI","cellFormula","Ptg","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","parse_FontFlags","bCharSet","xColorType","bR","bG","bB","icv","parse_BrtColor","ixfeParent","cellStyles","colFirst","colLast","coldx","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","rfx","fAlwaysCalc","relId","write_BIFF2BERR","write_comments_biff2","write_ws_biff2_cell","_BIFF2FmtTable","write_BIFF2INT","write_BIFF2NUM","b8oid","b8ocnts","write_ws_biff8_cell","bf","o1","write_FormulaValue","o3","write_Formula","write_Number","write_LabelSst","b8","write_Label","write_ws_biff8","guts","_WB","_sheet","MAX_ROWS","write_ColInfo","write_ws_cols_biff8","write_Dimensions","_oasc","notes","baseid","ci","author","oasc","oact","txo","cont","conf","notesh","write_comments_biff8","write_Window2","write_MergeCells","HL","write_ws_biff8_hlinks","write_FEAT","write_biff8_global","_sheets","_wb","writezeroes","write_WriteAccess","write_RRTabId","parsexmlbool","safe1904","write_Font","write_FONTS_biff8","write_FMTS_biff8","write_CELLXFS_biff8","write_Country","acc","write_MsoDrawingGroup","write_biff_continue","write_SST","blen","write_biff_buf","fix_write_opts","write_biff8_buf","_Fonts","write_ws_biff2","write_BIFF2Format","write_BIFF4Format","write_BIFF2XF","write_biff2_buf","make_html_row","rowspan","colspan","editable","HTML_BEGIN","HTML_END","sheet_to_html","make_html_preamble","sheet_add_dom","or_R","or_C","midx","is_dom_element_hidden","elts","cells","hasAttribute","_t","Aelts","Aelti","parse_dom_table","get_computed_style","ownerDocument","defaultView","get_get_computed_style_function","getPropertyValue","write_styles_ods","master_styles","write_number_format_ods","nf","nfidx","nopts","has_time","np","write_names_ods","scoped","namei","odsref","write_content_ods","write_text_p","span","null_cell_xml","write_ws","nfs","ods","ROWS","textp","_Fref","text_p","_tgt","acreator","apayload","aprops","fods","cidx","colobj","nfi","write_automatic_styles_ods","write_ods","manifest","rdf","write_rdf","write_manifest","u8_to_dataview","DataView","buffer","byteOffset","byteLength","u8str","u8","stru8","u8concat","u8a","parse_varint49","ptr","varint","write_varint49","parse_packed_varints","write_packed_varints","nums","varint_to_i32","i32","parse_shallow","write_shallow","mappa","parse_iwa_file","ai","fl","merge","write_iwa_file","ias","ia","midata","aipayload","mid","parse_snappy_chunk","clen","u8i","decompress_iwa_file","compress_iwa_file","frame","write_new_storage","lut","setFloat64","mantissa","writeDecimal128LE","irsst","rsst","setUint32","isst","s5s","replies","s5s_to_iwa_comment","write_old_storage","parse_TSP_Reference","write_TSP_Reference","numbers_add_oref","iwa","orefs","numbers_del_oref","write_TST_TileRowInfo","wide","_c","tri","new_7","new_4","last_offset","cell_storage","_dv","_last_offset","_cell_storage","setUint16","celload","_celload","write_iwam","get_unique_msgid","dep","dependents","write_TSP_Color_RGB","Float32Array","get_author_color","numbers_iwa_doit","deps","packet","numbers_iwa_find","numbers_add_meta","mlist","newid","newloc","numbers_add_msg","numbers_meta_add_dep","parentidx","mm","dep2","USE_WIDE_ROWS","fix_opts_func","write_zip_xlsx","wbrels","foo","wbext","vbafmt","threadedcomments","links","coreprops","extprops","custprops","themes","calcchains","vba","drawings","TODO","_sn","wsrels","need_vml","cf","needtc","rId1","uniqueCount","sitag","write_sst_xml","write_names","workbookPr","sheetId","localSheetId","write_wb_xml","formatCode","write_numFmts","write_cellXfs","write_sty_xml","write_cfb_ctr","numbers","indices","mess","build_numbers_deps","docroot","sheetrefs","sheetref","newsheetref","remap","arch","tiaref","sheetroot","sa","drawables","tia","tmaref","tiaroot","da","dap","oldtmaref","tma","tmaroot","new_uuid","hsa","hseadata","hsea","ref2","_a2","oldref","newref","row_headers","tspref","tiles","tst","oldtileref","newtileref","oldtile","numbers_add_ws","wsname","sheetidx","rootref","tmafile","R_","LUT","ferr","fmla","nfmt","ofmt","pb","row_header_ref","rowhead","base_bucket","_bucket","col_header_ref","colhead","rbtree","tilestore","tstride","mlst","tileref","save_token","numbers_meta_del_dep","ntiles","tidx","newtileid","tiledata","tilerow","tilecontent","mergeid","sstref","sstroot","sstdata","rsstref","rsstroot","rsstdata","style_indices","tswpsa","tswpsaid","tswpsarefs","newhlinkid","smartfield","rtpaid","cmntref","authors","cmntroot","cmntdata","aaaid2","csaid2","aaaid","csaid","write_numbers_tma","write_numbers_ws","write_numbers_iwa","write_BrtBeginSst","write_sst_bin","write_BrtBeginEsfmd","write_BrtBeginEsmdb","mdb","write_BrtMdb","write_zip_xlsb","write_string_type","write_binary_type","writeSync","codes","check_wb","Base64_encode_pass","write_stxt_type","sheet_to_txt","sheet_to_csv","sheet_to_rtf","wbpath","Keys","DSEntries","SEntries","CEntries","DocSummaryRE","SummaryRE","CEntries2","write_xls_props","newpath","fill_vba_xls","write_xlscfb","write_cfb_type","oopts","ftype","encrypt_agile","write_zip_denouement","write_zip_type","make_json_row","defval","isempty","__rowNum__","rawNumbers","outi","counter","header_cnt","skipHidden","blankrows","qreg","make_csv_row","rs","txt","datarow","forceQuotes","strip","sheet_add_json","js","skipHeader","ROW","JS","ws_get_cell_stub","RC","roll","cell_set_hyperlink","split_cell","sheet_new","json_to_sheet","table_to_sheet","table_to_book","sheet_to_formulae","cmds","sheet_to_row_object_array","sheet_get_cell","book_new","book_set_sheet_visibility","sh","vis","wb_sheet_idx","cell_set_number_format","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","dynamic","rng","rngstr","wsr","SHEET_VISIBLE","SHEET_HIDDEN","SHEET_VERY_HIDDEN","exportToExcel","getVersion","exportTable","dataSourceName","workBook","createDateStamp","coverData","displaySheetData","rawSheetData","headerNameRowLine","headerContextRowLine","headerUnitRowLine","fieldContext","hasContextRow","rawRow","displayRow","displayId","rawId","displayField","rawField","wRange","rowCount","columnMaxLength","ownKeys","enumerableOnly","getOwnPropertySymbols","sym","_objectSpread2","getOwnPropertyDescriptors","defineProperties","_typeof","iterator","_extends","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","msMatchesSelector","webkitMatchesSelector","getParentOrHost","nodeType","includeCTX","_throttleTimeout","R_SPACE","toggleClass","currentStyle","matrix","selfOnly","appliedTransforms","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","lastElementChild","previousElementSibling","nodeName","getRelativeScrollOffset","winScroller","includeSelf","elem","gotSelf","elemCSS","isRectEqual","rect1","rect2","callback","ms","scrollBy","Polymer","jQuery","Zepto","cloneNode","getChildContainingRectFromElement","ghostEl","_rect$left","_rect$top","_rect$right","_rect$bottom","animated","childRect","expando","plugins","initializeByDefault","PluginManager","mount","plugin","pluginName","pluginEvent","eventCanceled","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","originalEvent","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutProperties","dragEl","parentEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","targetEl","toEl","fromEl","extraEventProperties","onName","CustomEvent","createEvent","initEvent","bubbles","cancelable","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","checkPull","checkPut","revertClone","nearestEmptyInsertDetectEvent","nearest","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","animationCallbackId","animationStates","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","dropBubble","dragoverBubble","dataIdAttr","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","indexOfObject","animateAll","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","animationResetTimer","currentRect","translateX","translateY","animatingX","animatingY","forRepaintDummy","repaint","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","_nextTick","_cancelNextTick","_getDirection","pointerType","originalTarget","shadowRoot","composedPath","_saveInputCheckedState","button","isContentEditable","criteria","_prepareDragStart","dragStartFn","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","_onTouchMove","_onDragStart","empty","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","cssMatrix","_hideClone","cloneId","_loopId","effectAllowed","_dragStartId","revert","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","lastElRect","childContainingRect","_ghostIsLast","changed","firstElRect","_ghostIsFirst","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","handleEvent","dropEffect","_globalDragOver","toArray","useAnimation","is","nextTick","cancelNextTick","detectDirection","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","clearPointerElemChangedInterval","isFallback","scrollCustomFn","sens","scrollSensitivity","scrollSpeed","scrollThisInstance","scrollFn","layersOut","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","toSortable","onSpill","Revert","Remove","dragStart","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","SlickEventData","event2","__publicField","nativeEvent","arguments_","_eventTarget","defaultPrevented","_isDefaultPrevented","_this$nativeEvent","_isPropagationStopped","isPropagationStopped","_isImmediatePropagationStopped","isImmediatePropagationStopped","getNativeEvent","isDefaultPrevented","addReturnValue","returnValues","returnValue","getReturnValue","getArguments","SlickEvent","pubSub","_pubSubService","subscriberCount","_handlers","subscribe","unsubscribe","notify","_this$_pubSubService","sed","publish","setPubSubService","SlickEventHandler","handler","handlers","unsubscribeAll","SlickRange","fromRow","fromCell","toRow","toCell","isSingleRow","isSingleCell","SlickNonDataItem","SlickGroup","equals","collapsed","SlickGroupTotals","SlickEditorLock","editController","activeEditController","activate","commitCurrentEdit","cancelCurrentEdit","deactivate","_Utils","isFunction","isPlainObject","Ctor","fnToString","ObjectFunctionString","calculateAvailableSpace","windowHeight","windowWidth","scrollPosition","windowScrollPosition","pageScrollTop","pageScrollLeft","elmOffset","elementOffsetTop","elementOffsetLeft","copyIsArray","isDefined","createDomElement","elementOptions","appendToParent","elm","elmOptionKey","elmValue","getHtmlStringOutput","DocumentFragment","childNodes","HTMLElement","emptyElement","classNameToList","cls","innerSize","sides","side","getElementProp","getFunctionDetails","addReturn","isAsyncFn","fnStr","isOneLinerArrowFn","getFunctionBody","isAsync","insertAfterElement","referenceNode","newNode","_referenceNode$parent","box","docElem","pageYOffset","clientTop","pageXOffset","clientLeft","setStyleSize","parents","isHidden","visible","toFloat","show","hide","slideUp","slideAnimation","slideDown","slideDirection","applyDefaults","targetObj","srcObj","addSlickEventPubSubWhenDefined","getPrototypeOf","class2type","_storage","delete","Utils","SlickGlobalEditorLock","SlickCore","Event","EventData","EventHandler","Range","NonDataRow","Group","GroupTotals","EditorLock","RegexSanitizer","dirtyHtml","GlobalEditorLock","SPACE","BACKSPACE","DELETE","DOWN","END","ENTER","ESCAPE","HOME","INSERT","LEFT","PAGE_DOWN","PAGE_UP","RIGHT","TAB","UP","preClickClassName","GridAutosizeColsMode","None","LegacyOff","LegacyForceFit","IgnoreViewport","FitColsToViewport","FitViewportToCols","ColAutosizeMode","Locked","Guide","Content","ContentExpandOnly","ContentIntelligent","RowSelectionMode","FirstRow","FirstNRows","AllRows","LastRow","ValueFilterMode","DeDuplicate","GetGreatestAndSub","GetLongestTextAndSub","GetLongestText","WidthEvalMode","Auto","TextOnly","HTML","Utils10","SlickCellRangeDecorator","grid","selectionCssClass","selectionCss","zIndex","border","_options","_this$_elem","_elem","_this$_options12","cssStyleKey","canvasNode","getActiveCanvasNode","getCellNodeBox","Utils11","Draggable","startX","startY","deltaX","deltaY","containerElement","onDragInit","onDrag","onDragEnd","preventDragFromKeys","originaldd","dragSource","dragHandle","executeDragCallbackWhenDefined","preventDrag","eventPrevented","userPressed","_event2$touches3","targetEvent","allowDragFrom","allowDragFromClosest","winScrollPos","userMoved","userReleased","_event2$touches4","SlickEvent8","SlickEventHandler2","SlickRange3","Draggable2","SlickCellRangeDecorator2","Utils12","Draggable3","keyCode3","SlickCellRangeDecorator3","SlickCellRangeSelector3","minIntervalToShowNextCell","maxIntervalToShowNextCell","accelerateInterval","_decorator","cellDecorator","_grid","getPubSubService","_canvas","getCanvasNode","_gridOptions","getOptions","_handler","onScroll","handleScroll","handleDragInit","handleDragStart","handleDrag","handleDragEnd","_this$_decorator","_activeCanvas","_activeViewport","getCellDecorator","_e","_scrollTop","_scrollLeft","getActiveViewportNode","scrollbarDimensions","getDisplayedScrollbarDimensions","_viewportWidth","_viewportHeight","_moveDistanceForOneCell","getAbsoluteColumnMinWidth","rowHeight","_isRowMoveRegistered","hasRowMoveManager","_rowOffset","_columnOffset","_isBottomCanvas","frozenRow","canvasSelector","getUID","frozenBottom","canvasElm","_isRightCanvas","canvasLeftElm","getCellFromEvent","onBeforeCellRangeSelected","canCellBeSelected","_dragging","canvasOffset","getCellFromPoint","_currentlySelectedRange","_draggingMouseOffset","getMouseOffsetViewport","isOutsideViewport","handleDragOutsideViewport","stopIntervalTimer","handleDragTo","_e$touches","viewportLeft","viewportTop","viewportRight","viewportBottom","viewportOffset","viewportOffsetLeft","viewportOffsetTop","viewportOffsetRight","viewportOffsetBottom","viewport","_xDelayForNextCell","_yDelayForNextCell","_autoScrollTimerId","xTotalDelay","yTotalDelay","xNeedUpdate","yNeedUpdate","handleDragToNewPosition","mouseOffsetX","mouseOffsetY","_e$touches2","endCellBox","scrollCellIntoView","onCellRangeSelecting","getPluginByName","onCellRangeSelected","getCurrentRange","SlickEvent18","SlickEventData5","SlickEventHandler10","SlickRange5","Utils24","SlickRowSelectionModel","selectActiveRow","dragToSelect","autoScrollWhenDrag","cellRangeSelector","_selector","_eventHandler","onActiveCellChanged","wrapHandler","handleActiveCellChange","onKeyDown","handleKeyDown","onClick","registerPlugin","handleCellRangeSelected","handleBeforeCellRangeSelected","unregisterPlugin","_inHandler","rangesToRows","ranges","rowsToRanges","lastCell","getColumns","getRowsRange","getSelectedRows","_ranges","setSelectedRows","setSelectedRanges","caller","detail","onSelectedRangesChanged","getSelectedRanges","refreshSelections","activeRow","getActiveCell","shiftKey","metaKey","selectedRows","getDataLength","scrollRowIntoView","tempRanges","canCellBeActive","setActiveCell","_isRowMoveManagerHandler","rowMoveManager","isHandlerColumn","getEditorLock","keyCode4","SlickGroup2","Utils26","SlickEvent20","SlickEventData6","SlickGroup3","SlickGroupTotals2","Utils27","SlickGroupItemMetadataProvider2","inputOptions","checkboxSelect","checkboxSelectCssClass","checkboxSelectPlugin","groupCssClass","groupTitleCssClass","totalsCssClass","groupFocusable","totalsFocusable","toggleCssClass","toggleExpandedCssClass","toggleCollapsedCssClass","enableExpandCollapse","groupFormatter","defaultGroupCellFormatter","totalsFormatter","defaultTotalsCellFormatter","includeHeaderTotals","dataView","_this$_grid2","_this$_grid2$getData","getData","setOptions","indentation","containerElm","createDocumentFragment","selectChecked","groupTitleElm","applyHtmlCode","columnDef","_columnDef$groupTotal","groupTotalsFormatter","handleGridClick","handleGridKeyDown","getDataItem","handleDataViewExpandOrCollapse","rowIndexes","mapItemsToRows","selectRows","deSelectRows","activeCell","getRenderedRange","setRefreshHints","ignoreDiffsBefore","ignoreDiffsAfter","expandGroup","groupingKey","collapseGroup","getGroupRowMetadata","groupLevel","focusable","cssClasses","editor","getTotalsRowMetadata","_item$group","SlickDataView","externalPubSub","groupItemMetadataProvider","inlineFilters","useCSPSafeFilter","getter","comparer","predefinedValues","aggregators","aggregateEmpty","aggregateCollapsed","aggregateChildGroups","displayTotalsRow","lazyTotalsCalculation","onBeforePagingInfoChanged","onGroupExpanded","onGroupCollapsed","onPagingInfoChanged","onRowCountChanged","onRowsChanged","onRowsOrCountChanged","onSelectedRowIdsChanged","onSetItemsCalled","beginUpdate","bulkUpdate","suspend","isBulkSuspend","endUpdate","wasBulkSuspend","processBulkDelete","ensureIdUniqueness","refresh","idxById","rowsById","filterCSPSafe","sortComparer","filterCache","filteredItems","compiledFilter","compiledFilterCSPSafe","compiledFilterWithCaching","compiledFilterWithCachingCSPSafe","onSelectedRowsChanged","onCellCssStylesChanged","hints","refreshHints","getFilterArgs","filterArgs","setFilterArgs","newIdx","idProperty","bulkDeleteIds","updateIdxById","startingIndex","getItems","getIdPropertyName","setItems","objectIdProperty","itemCount","setPagingOptions","getPagingInfo","pageSize","pagesize","pagenum","totalRows","pageNum","totalPages","ascending","sortAsc","fastSortField","fastSort","oldToString","reSort","getFilteredItems","getFilteredItemCount","getFilter","setFilter","filterFn","compileFilterCSPSafe","compileFilterWithCachingCSPSafe","compileFilter","compileFilterWithCaching","getGrouping","groupingInfos","setGrouping","groupingInfo","toggledGroupsByLevel","gi","groupingInfoDefaults","getterIsAFn","compiledAccumulators","compileAccumulatorLoopCSPSafe","getItemByIdx","getIdxById","_this$idxById","ensureRowsByIdCache","getRowByItem","_this$rowsById","getRowById","_this$rowsById2","getItemById","itemArray","_this$rowsById3","mapIdsToRows","idArray","_this$rowsById4","mapRowsToIds","rowArray","ids","rowItem","updateSingleItem","_this$updated","newId","updateItem","updateItems","insertItem","insertItems","addItem","addItems","deleteItem","deleteItems","indexesToDelete","sortedAddItem","sortedUpdateItem","oldItem","searchItem","low","high","getItemCount","getLength","getItem","_item$totals","__group","totals","__groupTotals","calculateTotals","getItemMetadata","expandCollapseAllGroups","collapse","collapseAllGroups","expandAllGroups","expandCollapseGroup","arg0","groupingDelimiter","getGroups","extractGroups","parentGroup","groupsByVal","_gi$predefinedValues","_gi$predefinedValues2","addTotals","agg","isLeafLevel","_group$groups","storeResult","addGroupTotals","groupCollapsed","toggledGroups","_gi$aggregators","_g$groups","flattenGroupedRows","groupedRows","gl","aggregator","accumulate","_retval","_il","filterInfo","filterPath1","filterPath2","filterBody","tpl","Function","fnName","setFunctionName","il","uncompiledFilter","ii","_this$filter","uncompiledFilterWithCaching","_this$filter2","getFilteredAndPagedItems","batchFilter","batchFilterWithCaching","isFilterNarrowing","isFilterExpanding","isFilterUnchanged","paged","getRowDiffs","newRows","_this$refreshHints","_this$refreshHints2","eitherIsNonData","_this$updated2","__nonDataRow","recalc","_items","prevRefreshHints","previousPagingInfo","countBefore","totalRowsBefore","previous","callingOnRowsChanged","calledOnRowCountChanged","rowsDiff","previousRowCount","currentRowCount","rowCountChanged","rowsChanged","syncGridSelection","preserveHidden","preserveHiddenOnSelectionChange","inHandler","selectedRowIds","setSelectedRowIds","rowIds","newSelectedRowIds","selectedRowsChangedArgs","added","preSelectedRowIdsChangeFn","filteredIds","getAllSelectedFilteredIds","_this$selectedRowIds","getAllSelectedIds","getAllSelectedFilteredItems","setSelectedIds","selectedIds","_this$preSelectedRowI","isRowBeingAdded","shouldTriggerEvent","applyRowSelectionToGrid","getAllSelectedItems","selectedData","syncGridCellCssStyles","hashById","storeCellCssStyles","getCellCssStyles","newHash","_this$rowsById5","setCellCssStyles","keyCode5","Utils28","_FloatEditor","navOnLR","editorCellNavOnLRKeys","handleKeydownLRNav","handleKeydownLRNoNav","compositeEditorOptions","valid","applyValue","serializeValue","formValues","onCompositeEditorChange","editors","getDecimalPlaces","rtn","editorFixedDecimalPlaces","DefaultDecimalPlaces","loadValue","_this$defaultValue","decPlaces","AllowEmptyValue","isValueChanged","validator","validationResults","cursorPosition","selectionStart","textLength","BindingEventService13","getBoundedEvents","_boundedEvents","unbindAll","unbind","unbindByEventName","boundedEvent","groupNames","ColAutosizeMode2","SlickEvent21","SlickEventData7","GlobalEditorLock2","GridAutosizeColsMode2","keyCode6","preClickClassName2","SlickRange6","RowSelectionMode2","ValueFilterMode2","Utils30","WidthEvalMode2","Draggable4","MouseWheel2","onMouseWheel","wheelHandler","orgEvent","wheelDelta","HORIZONTAL_AXIS","wheelDeltaY","wheelDeltaX","Resizable2","resizeableElement","resizeableHandleElement","onResizeStart","onResize","onResizeEnd","executeResizeCallbackWhenDefined","resizeStartHandler","resizingHandler","resizeEndHandler","SlickGrid","alwaysShowVerticalScroll","alwaysAllowHorizontalScroll","defaultColumnWidth","enableHtmlRendering","enableAddRow","leaveSpaceForNewRows","autoEdit","autoEditNewRow","autoCommitEdit","suppressActiveCellChangeOnEdit","unorderableColumnCssClass","asyncEditorLoading","asyncEditorLoadDelay","forceFitColumns","enableAsyncPostRender","asyncPostRenderDelay","enableAsyncPostRenderCleanup","asyncPostRenderCleanupDelay","editorLock","showColumnHeader","createFooterRow","showFooterRow","footerRowHeight","createPreHeaderPanel","createTopHeaderPanel","showPreHeaderPanel","showTopHeaderPanel","preHeaderPanelHeight","showTopPanel","topPanelHeight","preHeaderPanelWidth","topHeaderPanelHeight","topHeaderPanelWidth","formatterFactory","editorFactory","cellFlashingCssClass","rowHighlightCssClass","rowHighlightDuration","selectedCellCssClass","enableTextSelectionOnCells","dataItemColumnValueExtractor","frozenRightViewportMinWidth","throwWhenFrozenNotAllViewable","fullWidthRows","numberedMultiColumnSort","tristateMultiColumnSort","sortColNumberInSeparateSpan","defaultFormatter","forceSyncScrolling","addNewRowCssClass","preserveCopiedSelectionOnPaste","showCellSelection","viewportClass","minRowBuffer","emulatePagingWhenScrolling","enableMouseWheelScrollHandler","doPaging","autosizeColsMode","autosizeColPaddingPx","rowTopOffsetRenderType","scrollRenderThrottling","autosizeTextAvgToMWidthRatio","viewportSwitchToScrollModeWidthPercent","viewportMinWidthPx","viewportMaxWidthPx","suppressCssChangesOnHiddenInit","ffMaxSupportedCssHeight","maxSupportedCssHeight","sanitizer","logSanitizedHtml","mixinDefaults","headerCssClass","defaultSortAsc","maxWidth","rerenderOnResize","reorderable","ignoreHeaderText","colValueArray","allowAddlPercent","formatterOverride","autosizeMode","rowSelectionModeOnInit","rowSelectionMode","rowSelectionCount","valueFilterMode","widthEvalMode","sizeToRemaining","widthPx","contentSizePx","headerWidthPx","colDataTypeOf","visibility","_container","onActiveCellPositionChanged","onAddNewRow","onAutosizeColumns","onBeforeAppendCell","onBeforeCellEditorDestroy","onBeforeColumnsResize","onBeforeDestroy","onBeforeEditCell","onBeforeFooterRowCellDestroy","onBeforeHeaderCellDestroy","onBeforeHeaderRowCellDestroy","onBeforeSetColumns","onBeforeSort","onBeforeUpdateColumns","onCellChange","onColumnsReordered","onColumnsDrag","onColumnsResized","onColumnsResizeDblClick","onContextMenu","onDblClick","onFooterClick","onFooterContextMenu","onFooterRowCellRendered","onHeaderCellRendered","onHeaderClick","onHeaderContextMenu","onHeaderMouseEnter","onHeaderMouseLeave","onHeaderRowCellRendered","onHeaderRowMouseEnter","onHeaderRowMouseLeave","onPreHeaderClick","onPreHeaderContextMenu","onMouseEnter","onMouseLeave","onRendered","onSetOptions","onActivateChangedOptions","onSort","onValidationError","onViewportChanged","finishInitialization","emptyTarget","skipEmptyReassignment","sanitizedText","sanitizeHtmlString","scrollThrottle","actionThrottle","getMaxSupportedCssHeight","validateAndEnforceOptions","_columnDefaults","cacheCssForHiddenInit","updateColumnProps","uid","containerStyles","_focusSink","_topHeaderPanelScroller","_topHeaderPanel","_topHeaderPanelSpacer","_paneHeaderL","_paneHeaderR","_paneTopL","_paneTopR","_paneBottomL","_paneBottomR","_preHeaderPanelScroller","_preHeaderPanel","_preHeaderPanelSpacer","_preHeaderPanelScrollerR","_preHeaderPanelR","_preHeaderPanelSpacerR","_headerScrollerL","_headerScrollerR","_headerScroller","_headerL","role","_headerR","_headers","_headerRowScrollerL","_headerRowScrollerR","_headerRowScroller","_headerRowSpacerL","_headerRowSpacerR","_headerRowL","_headerRowR","_headerRows","_topPanelScrollerL","_topPanelScrollerR","_topPanelScrollers","_topPanelL","_topPanelR","_topPanels","scroller","_viewportTopL","_viewportTopR","_viewportBottomL","_viewportBottomR","_viewport","_activeViewportNode","_canvasTopL","_canvasTopR","_canvasBottomL","_canvasBottomR","measureScrollbar","_activeCanvasNode","getCanvasWidth","getHeadersWidth","_footerRowScrollerR","_footerRowScrollerL","_footerRowScroller","_footerRowSpacerL","_footerRowSpacerR","_footerRowL","_footerRowR","_footerRow","_focusSink2","getViewportWidth","getViewportHeight","measureCellPaddingAndBorder","disableSelection","_bindingEventService","HTMLInputElement","HTMLTextAreaElement","setFrozenOptions","setPaneVisibility","setScroller","setOverflow","updateColumnCaches","createColumnHeaders","createColumnFooter","setupColumnSort","createCssRules","resizeCanvas","bindAncestorScrollEvents","slickMouseWheelInstances","handleMouseWheel","handleHeaderContextMenu","handleHeaderClick","handleHeaderRowScroll","handleFooterContextMenu","handleFooterClick","handleFooterRowScroll","handleTopHeaderPanelScroll","handlePreHeaderPanelScroll","handlePreHeaderContextMenu","handlePreHeaderClick","handleDblClick","handleContextMenu","handleCellMouseOver","handleCellMouseOut","slickDraggableInstance","restoreCssFromHiddenInit","_hiddenParents","old","cssShow","oldProps","hasFrozenColumns","_this$plugins$i","_this$plugins$i2","setSelectionModel","selectionModel","handleSelectedRangesChanged","getSelectionModel","columnIdOrIdx","rowIndex","_getContainerElement","getCanvases","_e2","getViewportNode","getViewports","setActiveViewportNode","_e3","targetContainers","getColumnIndex","hasFrozenRows","actualFrozenRow","outerdiv","innerdiv","dim","_this$scrollbarDimens","_this$scrollbarDimens2","_this$scrollbarDimens3","_this$scrollbarDimens4","headersWidth","headersWidthL","headersWidthR","includeScrollbar","autoHeight","viewportW","_this$scrollbarDimens5","availableWidth","viewportHasVScroll","canvasWidthL","canvasWidthR","totalRowWidth","extraWidth","updateCanvasWidth","forceColumnWidthsUpdate","_this$scrollbarDimens6","_this$scrollbarDimens7","_this$scrollbarDimens8","_this$scrollbarDimens9","_this$scrollbarDimens10","oldCanvasWidth","canvasWidth","oldCanvasWidthL","oldCanvasWidthR","widthChanged","cWidth","viewportHasHScroll","applyColumnWidths","mozUserSelect","supportedHeight","testUpTo","getHeaderColumnWidthDiff","headerColumnWidthDiff","getScrollbarDimensions","_this$scrollbarDimens11","_this$scrollbarDimens12","absoluteColumnMinWidth","_boundAncestors","handleActiveCellPositionChange","unbindAncestorScrollEvents","ancestor","updateColumnHeader","getColumnByIndex","getHeader","getHeaderColumn","targetHeader","targetIndex","getHeaderRow","getFooterRow","getPreHeaderPanel","getPreHeaderPanelLeft","getPreHeaderPanelRight","getTopHeaderPanel","getHeaderRowColumn","headerRowTarget","getFooterRowColumn","footerRowTarget","footerRowCell","handleHeaderMouseHoverOn","handleHeaderMouseHoverOff","headerTarget","colNameElm","classname","handleHeaderMouseEnter","handleHeaderMouseLeave","headerCellAttrs","headerRowCell","frozenClasses","handleHeaderRowMouseEnter","handleHeaderRowMouseLeave","setSortColumns","setupColumnResize","setColumns","setupColumnReorder","columnResizeDragging","_this$getEditorLock","previousSortColumns","sortColumn","onSortArgs","hadSortCol","sortCol","sortCols","tempCol","_this$sortableSideLef","_this$sortableSideRig","sortableSideLeftInstance","sortableSideRightInstance","columnScrollTimer","scrollColumnsRight","_viewportScrollContainerX","scrollColumnsLeft","canDragScroll","sortableOptions","onStart","onEnd","_this$getEditorLock2","_this$sortableSideLef2","_this$sortableSideRig2","reorderedIds","reorderedColumns","impactedColumns","activeCellNode","setFocus","getHeaderChildren","handleResizeableDoubleClick","triggeredByColumn","minPageX","maxPageX","firstResizable","lastResizable","frozenLeftColMaxWidth","vc","getVisibleColumns","colElm","resizeableHandle","ariaOrientation","slickResizableInstances","resizeElms","_this$getEditorLock3","shrinkLeewayOnRight","stretchLeewayOnRight","pw","previousWidth","shrinkLeewayOnLeft","stretchLeewayOnLeft","_c2","_this$scrollbarDimens13","actualMinWidth","newCanvasWidthL","newCanvasWidthR","viewportWidth","_c3","newWidth","resizedCanvasWidthL","applyColumnHeaderWidths","syncColumnCellResize","resizeHandle","invalidateAllRows","_columnResizeTimer","getVBoxDelta","frozenRowsHeight","dataLength","viewportClassList","_headerScrollContainer","_headerRowScrollContainer","_footerRowScrollContainer","_viewportScrollContainerY","headerColumnHeightDiff","cellWidthDiff","cellHeightDiff","boxSizing","_style","insertRule","createCssRulesAlternative","styleSheet","getColumnCssRules","stylesheet","devMode","_this$_options$devMod","ownerNodeIndex","ownerNode","owningElement","columnCssRulesL","columnCssRulesR","columnIdx","removeCssRules","_this$_style","clearAllTimers","_executionBlockTimer","_flashCellTimer","_highlightRowTimer","h_editorLoader","shouldDestroyAllElements","_this$getEditorLock4","_this$sortableSideLef3","_this$sortableSideLef4","_this$sortableSideRig3","destroyAllInstances","resizeHandles","headerColumns","destroyAllElements","inputInstances","instances","_groupHeaders","_groupHeadersL","_groupHeadersR","autosizeColumn","columnOrIndexOrId","isInit","colDef","colIndex","gridCanvas","getColAutosizeWidth","treatAsLocked","autoSize","autosizeColumns","internalAutosizeColumns","_this$canvas","_this$scrollbarDimens14","legacyAutosizeColumns","canvas_context","colWidth","reRender","totalWidth","totalWidthLessSTR","strColsMinWidth","totalMinWidth","totalLockedColWidth","_c$autoSize","_c$autoSize2","_c$autoSize3","_c$autoSize4","_c$autoSize5","_c$autoSize6","_c$autoSize7","_c$autoSize8","strColTotalGuideWidth","_this$scrollbarDimens15","setWidth","_c$autoSize9","_c$autoSize10","_c$autoSize11","totalSTRViewportWidth","unallocatedColWidth","unallocatedViewportWidth","_c$autoSize12","_c$autoSize13","_c$autoSize14","_c$autoSize15","_c$autoSize16","_this$columns$i$autoS","reRenderColumns","LogColWidths","colArrayIndex","_columnDef$editor","dl","isoDateRegExp","colDataItem","tempRow","moment","getColContentSize","ControlFillsColumn","tempVal","widthAdjustRatio","maxLen","maxColWidth","getColHeaderWidth","getColWidth","rowInfo","valueArr","getRowVal","rowsDict","maxAbsVal","_columnDef$autoSize","rowEl","cellEl","textOverflow","whiteSpace","formatterResult","maxText","useCanvas","_columnDef$formatterO","_columnDef$formatter","noFormatter","formatterIsText","ReturnsTextOnly","fontFamily","measureText","applyFormatResultToCellNode","headerColElId","headerColEl","dummyHeaderColElId","_this$scrollbarDimens16","shrinkLeeway","total","prevTotal","widths","availWidth","shrinkProportion","absMinWidth","shrinkSize","growProportion","growSize","currentWidth","eventArgs","getEditController","columnsById","columnIndex","_this$columns$i","setSortColumn","numberCols","indicators","indicator","_indicator","getSortColumns","ne","previousSelectedRows","simpleArrayEquals","_ne$detail","newSelectedAdditions","newSelectedDeletions","changedSelectedRows","changedUnselectedRows","arr1","arr2","columnPosLeft","columnPosRight","widthRequest","_columnAutosizeDefaults","columnDefinitions","previousColumns","updateColumnsInternal","updateColumns","_this$getSelectionMod","newOptions","suppressRender","suppressColumnSet","suppressSetOverflow","prepareForOptionsChange","invalidateRow","vp","originalOptions","optionsBefore","optionsAfter","internal_setOptions","activateChangedOptions","makeActiveCellNormal","setColumnHeaderVisibility","enforceFrozenRowHeightRecalc","newData","scrollToTop","updateRowCount","scrollTo","_this$data","getDataLengthIncludingAddNew","pagingActive","pagingIsLastPage","getTopPanel","getTopPanels","hasDataView","togglePanelVisibility","setTopPanelVisibility","setHeaderRowVisibility","setFooterRowVisibility","setPreHeaderPanelVisibility","setTopHeaderPanelVisibility","getContainerNode","getRowTop","getRowFromPosition","_this$scrollbarDimens17","th","oldOffset","page","cj","ph","newScrollTop","getVisibleRange","cleanupRows","updateRowPositions","prevScrollTop","vScrollDir","lastRenderedScrollTop","_this$data2","_this$data2$getItemMe","_this$_options$format","rowMetadata","getEditor","_this$data3","_this$data3$getItemMe","_columnMetadata$colum","_columnMetadata$cell","_this$_options32","columnMetadata","getDataItemValueForColumn","appendRowHtml","divArrayL","divArrayR","_this$data4","_this$data4$getItemMe","dataLoading","rowCss","rowDivR","rowDiv","frozenRowOffset","getFrozenRowOffset","topOffset","leftPx","alwaysRenderColumn","rightPx","appendCellHtml","divRow","_formatterResult","_formatterResult2","cellCss","cssClass","cellCssClasses","_this$cellCssClasses$","appendCellResult","addlCssClasses","addClasses","toolTipText","cellDiv","cellAttrs","cellResult","insertElementAfterTarget","rowsCache","cellRenderQueue","cellColSpans","rangeToKeep","rowId","removeFrozenRow","removeRowFromCache","startPostProcessingCleanup","invalidate","currentEditor","invalidateRows","queuePostProcessedRowForCleanup","cacheEntry","postProcessedRow","rowIdx","_cacheEntry$rowNode","postProcessgroupId","postProcessedCleanupQueue","actionType","groupId","cellNodesByColumnIdx","rowNode","queuePostProcessedCellForCleanup","cellnode","_cacheEntry$rowNode2","postProcessedRows","_node$parentElement","renderedRows","counter_rows_removed","cellNode","suppressRemove","formatterVal","removeClasses","updateCell","getCellNode","invalidatePostProcessingResults","updateRow","ensureCellNodesInRowsCache","colIdx","getViewportRowCount","_this$getScrollbarDim","vh","scrollbarHeight","topPanelH","headerRowH","footerRowH","_this$scrollbarDimens18","fullHeight","viewportH","columnNamesH","preHeaderH","topHeaderH","paddingTop","paddingBottom","numVisibleRows","containerClientWidth","_this$scrollbarDimens19","_this$scrollbarDimens20","_this$scrollbarDimens21","paneTopH","paneBottomH","viewportTopH","viewportBottomH","topHeightOffset","paneBottomTop","topHeightOffset2","lastRenderedScrollLeft","updatePagingStatusFromView","pagingInfo","_this$scrollbarDimens22","_this$scrollbarDimens23","dataLengthIncludingAddNew","numberOfRows","oldH","tempViewportH","oldViewportHasVScroll","cachedRow","resetActiveCell","oldScrollTopInRange","getViewport","minBuffer","_cacheEntry$rowNode3","cleanUpCells","cellToRemove","cellsToRemove","cellNodeIdx","_this$postProcessedRo","_cellNode$parentEleme","cleanUpAndRenderCells","cellsAdded","processedRow","processedRows","totalCellsAdded","btm","_this$data5","_this$data5$getItemMe","_this$data6","_metadata","colspanNb","renderRows","needToReselectCell","counter_rows_rendered","xRight","_this$rowsCache","_this$rowsCache2","_this$rowsCache3","_this$rowsCache4","startPostProcessing","h_postrender","asyncPostProcessRows","h_postrenderCleanup","asyncPostProcessCleanupRows","postProcessFromRow","postProcessToRow","rowNumber","dequeue","rendered","renderedFrozenRows","h_render","startRow","endRow","handleElementScroll","_handleScroll","eventType","maxScrollDistanceY","maxScrollDistanceX","vScrollDist","hScrollDist","prevScrollLeft","enqueue","triggeredBy","minPeriod_ms","blocked","queued","blockAndExecute","unblock","processedStatus","asyncPostRender","asyncPostRenderCleanup","updateCellCssStylesOnRenderedRows","addedHash","removedHash","addedRowHash","removedRowHash","addCellCssStyles","removeCellCssStyles","prevHash","flashCell","toggleCellClass","times","highlightRow","rowCache","_rowCache$rowNode","_delta","cellExists","handled","_this$currentEditor","keyCaptureList","navigateTop","navigateRowStart","navigateBottom","navigateRowEnd","navigatePrev","_this$currentEditor2","_this$getEditorLock6","_this$getEditorLock5","cancelEditAndSetFocus","navigatePageDown","navigatePageUp","navigateLeft","navigateRight","navigateUp","navigateDown","navigateNext","commitEditAndSetFocus","makeActiveCellEditable","_this$getEditorLock7","_this$getEditorLock8","getTextSelection","setTextSelection","_e$target2","preClickModeOn","suppressActiveCellChangedEvent","setActiveCellInternal","gotoCell","getCellFromNode","getRowFromNode","_this$rowsCache$row$r","rowOffset","_this$columns$cell","tabbingDirection","getColspan","internalScrollColumnIntoView","_this$scrollbarDimens24","scrollRight","scrollColumnIntoView","newCell","opt_editMode","_this$rowsCache$this$","_this$rowsCache$this$2","activeCellOffset","isBottom","activePosX","isCellPotentiallyEditable","clearTextSelection","_document$selection","sel","cannotTriggerInsert","refocusActiveCell","_this$getEditorLock9","editActiveCell","_this$getEditorLock10","_this$data7","_this$data7$getItemMe","_metadata2","_this$currentEditor3","_this$currentEditor4","_this$currentEditor5","useEditor","suppressClearOnEdit","columnMetaData","editorArgs","gridPosition","absBox","commitChanges","cancelChanges","preClick","serializedEditorValue","_this$getEditorLock11","_this$getEditorLock12","offsetParent","getActiveCellPosition","getGridPosition","cellBox","getCellEditor","getActiveCellNode","textSelection","rangeCount","getRangeAt","addRange","_this$scrollbarDimens25","viewportScrollH","rowAtTop","rowAtBottom","scrollRowToTop","scrollPage","dir","deltaRows","bottomOfTopmostFullyVisibleRow","prevCell","prevActivePosX","navigateToRow","num_rows","_this$data8","_this$data8$getItemMe","findFirstFocusableCell","findLastFocusableCell","lastFocusableCell","gotoRight","_posX","posX","gotoLeft","firstFocusableCell","gotoDown","gotoUp","gotoNext","gotoPrev","lastSelectableCell","gotoRowStart","gotoRowEnd","navigate","_this$getEditorLock13","home","isAddNewRow","setActiveRow","suppressScrollIntoView","_this$data9","_this$data9$getItemMe","_columnMetadata$this$","_columnMetadata$cell2","_this$data10","_this$data10$getItemM","forceEdit","_this$getEditorLock14","_self$getEditorLock","serializedValue","prevSerializedValue","editCommand","undo","editCommandHandler","newItem","_this$getEditorLock15","suppressLogging","cleanHtml","logMessageCount","logMessageMaxCount","choose","export","_totalRows","_workingRows","_hasParametersPanel","AditoolsDeviceTable","_classPrivateFieldInitSpec","_data","_rowCountStatus","summaryRowText","MessageFormat","compile","workingRows","scrollSelectedPartToTop","selectedPart","selectedRow","nameColumn","fieldval","sortRows","preSort","colsToSort","presortItem","_this$args$columns","dataRow1","dataRow2","specificComparator","findVisibleColumn","gridObj","getDesiredRowObject","_gridObj$getCellNode","_gridObj$getCellNode2","getSortColumnRef","sortColumnRefs","sortColRefs","columnRef","getPackedFilters","packedFilters","generateTitleFromColumn","numberedMultiColumnSortElem","cssRoot","_this$grid","fieldContextRow","headerColumnRows","unitText","minMaxText","setProperty","updateCheckboxContainerEvents","filterClass","addClass","handleCheckbox","filterToggle","deviceTable","_filterToggle$offset","_deviceTable$offset","newLeft","newTop","outerHeight","forceUpdateRowCountIfNeeded","dataViewLength","onRowsChangedArgs","slickGridOptions","_c$filter","hasParametersPanel","newSelection","rowSelected","hasClass","removeClass","rowObj","packedFilter","actualArgs","actualItem","screenResized","resetSort","tableRowUpdated","custEvent","chooseParameters","allParameters","resetParameters","_AditoolsDeviceTable","deselectAll","AditoolsParameterSelector","selectorColumns","getClassifications","selectedColumns","classifications","selectAllParameters","deselectAllParameters","splitId","defaultParameters","checkboxes","columnIndices","n1","n2","_AditoolsParameterSelector","hasAnnotation","engineeringComparatorCore","isLow","currencyRegExp","areaRegExp","fieldValue1","fieldValue2","comparisonValueForNonNumeric","isValue1Blank","isValue2Blank","_obj1","_obj2","_num1","_num2","engineeringComparatorNonNumbersHigh","engineeringComparatorNonNumbersLow","priceComparator","rangeComparator","booleanComparator","aditoolsRenderer","AditoolsGraphHover","swatchLabelText","swatchValueText","insertedSwatch","swatchElement","destroyingSwatch","getDimensionsOfSwatch","textElements","overridingLineHeight","labelElement","valueElement","labelRect","getBBox","labelText","valueRect","valueText","labelWidth","valueWidth","labelCharWidth","valueCharWidth","lineHeight","lineDimensions","_swatchLines$","swatchParent","swatchLines","parentBox","swatchBox","overridingHeight","lineClasses","legendTextDimensions","lineWidths","lineHeights","lineDimension","lineWidth","yAxisValues","yValue","dimIndex","legend","focused","labelHeight","labelLength","titles","valueHeight","xAxisValueWithUnit","xAxisSummary","xAxisValue","boxWidth","estCharWidth","boxLeftOffset","boxTopOffset","chartHeight","boxHeight","yAxisLegends","legendCloseToLeft","legendCloseToTop","showHover","hoverOnNoData","AditoolsGraph","envelopeFill","envelopeUpper","envelopeLower","functionLine","onMoveOutside","leftMargin","rightMargin","topMargin","bottomMargin","leftLabelOffset","bottomLabelOffset","chartWidth","xGridLineEnd","xticksline","yGridLineEnd","yticksline","lineClass","computeGeometry","xTitleCenter","yTitleCenter","xTicks","tickcount","tickPositions","coordinate","yTicks","hoverPosition","hoverClientX","hoverBox","hoverClientY","closestXValue","getClosestDataX","circleCoordinates","getCircleCoordinates","hoverText","formattedValue","formattedValueWithUnit","getXValues","getYValues","highlightedLines","updateHover","hoverReady","onHighlightedLinesChanged","performance","prevHighlightedLines","_this$highlightedLine","endHover","isSummary","AditoolsMiniGraph","mathAdd","hasYTitle","hasY2Title","rightLabelOffset","hasXTitle","graphs","properLength","dataRight","realClasses","xTitleKey","yTitleKey","y2TitleKey","geometryRight","yscale2","yticks2","yformat2","limitsRight","isMultiline","hasSecondaryYAxis","yAxes","debug","xZero","yAxis","yAxis2","y2TitleCenter","multilineData","singleLineData","AditoolsMultilineGraph","rightOffset","hasRightOffset","y2GridLineEnd","yticksline2","yTitleCenter2","yTicks2","calculatedX","generateEnvelopeFill","generateEnvelopeLower","generateEnvelopeUpper","spur","generateFunctionSpurs","generateFunctionLine","handleMouseMove","e10","e5","tickSpec","i1","i2","inc","tickIncrement","descending","bisector","compare1","compare2","zero","ascendingBisect","bisectRight","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","opacity","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","clamph","clampt","hsl2rgb","basis","t1","v0","v3","t2","t3","displayable","formatHex8","formatHsl","clamp","nogamma","constant","rgbGamma","exponential","colorRgb","rgbSpline","spline","colors","genericArray","nb","na","reA","reB","am","bm","bi","string","isView","numberArray","identity","bimap","interpolate","d0","d1","r0","polymap","bisect","unknown","transformer","untransform","piecewise","interpolateValue","rescale","interpolateNumber","rangeRound","interpolateRound","initRange","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","logs","pows","logp","powp","tickFormat","specifier","formatSpecifier","nice","i0","x0","loggish","tickStep","precisionPrefix","formatPrefix","precisionRound","precisionFixed","prestep","maxIter","linearish","Linear","_context","areaStart","_line","areaEnd","lineStart","_point","lineEnd","closePath","lineTo","moveTo","pi","tau","tauEpsilon","strings","Path","_x0","_y0","_x1","_y1","_append","appendRound","quadraticCurveTo","bezierCurveTo","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","ccw","LINE_TYPE_INDICES","functionSpurs","scaleLog","scaleLinear","lowerPath","upperPath","getLineEndpoints","svgPath","initial","final","splitPath","pair","extractCoordPair","lineEndPoints","lowerEndPoints","upperEndPoints","xMax","yMax","rightEdgePath","leftEdgePath","generateLine","yCoord","graphArray","yIndex","currentPoint","getSpurSegments","segment","previousPoint","currentInZone","isPointInZone","previousInZone","cept","intercept","getSegments","segmentSVGPath","d3Line","yLimits","yLimit","x3","xLimits","xLimit","y3","xIndex","defined","curve","curveLinear","shape","withPath","defined0","pointX","pointY","scaleString","scaler","logFormatter","tick","labelsPerDecade","formatfn","tickScale","prefixes","parsedString","HOVER_MARGIN","xScaleValue","cursorXCoordinate","cursorX","findClosestXInGraphLines","leftmostPointX","leftmostMarginX","rightmostPointX","rightmostMarginX","lineOffset","pointIndex","nextPoint","nextPointX","previousPointX","xValue","xFormatter","graphLine","isSpur","hasSpurs","isLog","getYValue","yValuesRight","yUnit2","yCoordinate","coords","_options$hasSpurs","circleCoordinate","coordsRight","_options$hasSpurs2","yFormat","checkSpurGraphY","interpolateGraphY","yFormatter","yDisplay","cursorY","isLogGraph","showCircle","graph","realX","coordinateX","interpolateSegmentY","nextPointY","previousPointY","rightmostPoint","rightmostPointY","AditoolsCardCheckbox","_tooltip","_AditoolsCardCheckbox","_partSelectionEnabled","AditoolsCardPartNumber","partSelectionEnabled","clicked","partSelectionClosed","handleHoverIn","hoverIn","handleHoverOut","hoverOut","_AditoolsCardPartNumber","_tooltipEnabled","AditoolsCardTooltip","headerTooltipClicked","tooltipEnabled","tooltipClosed","_AditoolsCardTooltip","AditoolsCard","checkboxClicked","clickAction","tooltipClicked","_AditoolsCard","AditoolsConfirmationDialog","confirmDialog","_confirmButtonText","confirmButtonText","_closeButtonText","closeButtonText","_AditoolsConfirmationDialog","AditoolsContentWrap","aditoolsContentWrap","_fileName","_designData","_uploadDisabled","AditoolsDialogLoad","submit","_chooseFileButtonText","chooseFileButtonText","_loadButtonText","loadButtonText","chooseFile","rootForSelection","getFileInfo","fileobj","fileObject","uploadDisabled","loadFile","readAsText","_AditoolsDialogLoad","modelOrderUrlHelper","baseUrl","modelOrderUrlHelperFn","_samplesData","AditoolsDialogSamples","_title","_siteURL","siteURL","_shoppingCartBaseUrl","shoppingCartBaseUrl","_samplesModel","samplesModel","_buildSamplesData","samplesData","sample","models","currModelDesc","hasModelsWithSamples","partGeneric","ModelParameters","ParameterID","modelParam","ModelNumber","Generic","ParameterValue","ModelPackage","errorMessage","sampleURLString","samplesLink","_buildSamplesLink","TrackedObject","opAmpPart","opAmpPartModels","opAmpPartUrl","cdpLocale","isoLocale","updateSelectedModel","processSamples","closeSamples","_AditoolsDialogSamples","_workingDesignName","_workingDesignDesc","_isDesignNameValid","_isDesignDescValid","AditoolsDialogSave","_designName","_designDesc","_designNameClass","designNameClass","_designDescClass","designDescClass","_saveButtonText","saveButtonText","workingDesignName","workingDesignDesc","validateDesignFields","isDesignNameValid","isDesignDescValid","_AditoolsDialogSave","_designSender","_designEmailList","_isDesignSenderValid","_emailListIsValid","_emailErrorMessage","AditoolsDialogShare","initializeValues","designSender","designEmailList","isDesignSenderValid","emailListIsValid","emailErrorMessage","validateShareFields","validateDesignName","validateSenderName","emails","hasInvalids","clearAndClose","_AditoolsDialogShare","_lastFocus","AditoolsDialog","_suppressFocusTrap","suppressFocusTrap","hideCloseX","_enableFocusTrap","_hideCloseX","_hideTitlebar","hideTitlebar","dialogElement","guardCancel","dialogClosed","lastFocus","showModal","_AditoolsDialog","_name","_email","_feedback","AditoolsFeedbackDialog","_model","fieldProperties","fieldPropertySafe","submitFeedback","_AditoolsFeedbackDialog","AditoolsFooter","sitemapURL","Constants","sitemap","legalURL","legal","accessibilityURL","accessibility","privacyPolicyURL","privacyPolicy","privacySettingsURL","privacySettings","cookieSettingsURL","cookieSettings","doNotAddToUrl","_AditoolsFooter","AditoolsHeader","logoClass","logo","companyURL","company","productsURL","products","applicationsURL","applications","designCenterURL","designCenter","educationURL","education","supportURL","support","homeURL","AditoolsHelpDialog","_AditoolsHelpDialog","_tooltipModalEnabled","AditoolsHelpTooltip","qaTooltipName","showTooltipClick","tooltipModalEnabled","showTooltipClose","_AditoolsHelpTooltip","AditoolsMenubar","AditoolsMenuContext","AditoolsMenuLinks","AditoolsMenuTabs","AditoolsNarrowMenubar","AditoolsSectionHeader","aditoolsSectionHeader","_modalEnabled","AditoolsSectionSubheader","_enableModalIcon","_modalTitle","modalTitle","_modalMessage","modalMessage","enableModalIcon","buttonClass","closeModal","modalEnabled","enableModal","KeyboardEvent","_AditoolsSectionSubheader","AditoolsStudioDropdown","_toolUrls","toolUrls","insertedMenu","precisionStudioMenu","destroyingMenu","_AditoolsStudioDropdown","AditoolsSystemDialog","dontClose","_AditoolsSystemDialog","AditoolsTabBar","getLongestWordSplit","delimiterList","nominalWidth","piece","leftIndex","delimeter","currLeftIndex","rightIndex","isDelimiterSpace","currRightIndex","getMeasuredTextWidth","weight","AditoolsTightMenubar","adjustHeaderTitle","headerElement","titleElement","maxFontSize","minFontSize","titleHeight","titleWidth","setTitleWidth","fontsize","maxSize","minSize","sizes","actualText","pElem","trialText","testWidth","oldSize","fitText","insertResizeListener","destroyResizeListener","_AditoolsTightMenubar","_isActive","AditoolsToolbarAction","onOpen","onSubmit","_AditoolsToolbarAction","AditoolsToolbarTab","hidePopoverOnClickOutside","globalClickListener","Node","AditoolsToolbar","hideDropdown","_currentFocus$closest","currentFocus","_AditoolsToolbar","REGEXP_EMAIL","_itemInEdit","EmailInput","itemInEdit","address","guid","itemValueIsInvalid","isAddressInvalid","onFocus","onBlur","onChangeValue","onOpenForEdit","onRemove","keyEvent","_EmailInput","_valuesList","InputList","newList","guidFor","withEmptyAtEnd","lastValueList","checkDuplicateEmails","emailArray","newEmailArray","inputArray","getEmailList","retArr","_index","onFocusOut","_InputList","createCoords","oppositeSideMap","oppositeAlignmentMap","evaluate","getSide","placement","getAlignment","getOppositeAxis","getAxisLength","getSideAxis","getAlignmentAxis","getOppositeAlignmentPlacement","alignment","getOppositePlacement","rectToClientRect","computeCoordsFromPlacement","rtl","reference","floating","sideAxis","alignmentAxis","alignLength","isVertical","commonX","commonY","commonAlign","detectOverflow","_await$platform$isEle","platform","rects","rootBoundary","elementContext","altBoundary","paddingObject","expandPaddingObject","getPaddingObject","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","getNodeName","isNode","getWindow","_node$ownerDocument","isHTMLElement","isShadowRoot","ShadowRoot","isOverflowElement","isTableElement","isTopLayer","isContainingBlock","elementOrCss","webkit","isWebKit","perspective","containerType","backdropFilter","willChange","contain","CSS","supports","isLastTraversableNode","getNodeScroll","getParentNode","assignedSlot","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","visualViewport","getCssDimensions","hasOffset","shouldFallback","unwrapElement","domElement","noOffsets","getVisualOffsets","includeScale","isFixedStrategy","clientRect","visualOffsets","isFixed","floatingOffsetParent","shouldAddVisualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","getClientRectFromClippingAncestor","clippingAncestor","visualViewportBased","getViewportRect","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","isStaticPositioned","getTrueOffsetParent","polyfill","svgOffsetParent","currentNode","getContainingBlock","topLayer","clippingAncestors","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","getClippingElementAncestors","firstClippingAncestor","clippingRect","accRect","getElementRects","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","getClientRects","isRTL","ToggleEvent","oldState","popoverToggleTaskQueue","queuePopoverToggleEventTask","HTMLDialogElement","topLayerElements","autoPopoverList","visibilityState","getPopoverVisibilityState","popoverInvoker","checkPopoverValidity","expectedToBeShowing","isConnected","fullscreenElement","getStackPosition","topMostAutoPopover","document2","documentPopovers","getRootNode","nearestInclusiveOpenPopover","Document","isFocusable","focusTarget","HTMLButtonElement","HTMLSelectElement","HTMLOptGroupElement","HTMLOptionElement","HTMLFieldSetElement","HTMLAnchorElement","previouslyFocusedElements","showPopover","shouldRestoreFocus","originalType","hideAllPopoversUntil","newPopover","popoverPositions","topMostPopoverAncestor2","candidate","candidateAncestor","candidatePosition","checkAncestor","topMostPopoverAncestor","originallyFocusedElement","_focusDelegate","delegatesFocus","whereToLook","autoFocusDelegate","slots","slot","assignedElements","flatten","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","descendant","focusDelegate","setInvokerAriaExpanded","_topLayerElements$get","_autoPopoverList$get","focusPreviousElement","fireEvents","previouslyFocusedElement","closeAllOpenPopovers","endpoint","lastToHide","foundEndpoint","_autoPopoverList$get2","popoverPointerDownTargets","lightDismissOpenPopovers","isTrusted","clickedPopover","invokerPopover","nodePopover","popoverTargetElement","nearestInclusiveTargetPopoverForInvoker","topMostClickedPopover","sameTarget","initialAriaExpandedValue","force","ShadowRoot2","patchSelectorFn","mapper","original","nonEscapedPopoverSelector","popoverStyleSheet","injectStyles","CSSStyleSheet","replaceSync","prepend","adoptedStyleSheets","rewriteSelector","togglePopover","originalAttachShadow","attachShadow","originalAttachInternals","attachInternals","internals","popoverTargetAssociatedElements","applyPopoverInvokerElementMixin","ElementClass","targetElement","localName","form","idref","popoverTargetAction","invoker","popoverTargetAttributeActivationBehavior","positioner","offset$1","flip","flip$1","positionPopover","_placement","_padding","_offset","_flip","middleware","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","mainAxisMulti","crossAxisMulti","mainAxis","crossAxis","convertValueToCoords","arrow","alignmentOffset","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","initialSideAxis","isBasePlacement","oppositePlacement","getExpandedPlacements","hasFallbackAxisSideDirection","isStart","lr","tb","getSideList","getOppositeAxisPlacements","placements","overflows","overflowsData","mainAlignmentSide","getAlignmentSides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","_overflowsData$filter2","currentSideAxis","limiter","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","computePosition","mergedOptions","platformWithCache","validMiddleware","Boolean","statefulPlacement","resetCount","nextX","nextY","computePosition$1","_menuLinkEnabled","_litUp","AditoolsMenuLink","qaLinkName","hasSVG","activeIcon","inactiveIcon","closeLink","menuLinkEnabled","submitLink","litUp","keyPressed","mouseEntered","mouseLeft","_AditoolsMenuLink","AditoolsMenuTab","qaTabName","_AditoolsMenuTab","_stackedTabs","stackedTabs","SHOEBOX_DATA_NAME","adi","iso","zh","ja","_getLocales","urlLocale","_getURLLocale","localeSet","useDefault","foundLocale","_fixLocalUrl","rootUrl","_replaceLocale","AditoolsSite","supportedlocales","_logger","_url","_getURL","_loadConfigFromJson","PrettyNum","INPUT_EXCEPTION_TEXT","micro","numberInMetricPrefixRange","engineeringText","metricPrefixToUse","numberToUse","isFixedDigits","numberToCheck","sNum","smallestNumber","engineeringValue","eMatch","metricPrefix","significand","bigMetricPrefix","powToRaiseTo","decrementer","powValue","valuePieces","processEngTextNoDecimal","isSpice","removeZeroes","numberString","matchReturn","numberWithZeroes","restOfString","isValidNumericMetricString","textFromUser","regEx","stringAtPrecision","negative","numStr","metricStringToNumber","errorValue","chopSomeDigitsOff","textToUse","textToDisplay","absNumber","scientificText","fractionalText","floatingText","metricPrefixList","minMetricPrefixIndex","suppressZeroes","supplySpace","zeroBoundary","minMetricPrefix","loopFinished","eng3","eng4","esCompat","CanonicalizeLocaleList","getCanonicalLocales","CanonicalizeTimeZoneName","tz","tzData","uppercaseLinks","uppercasedTz","uppercasedZones","ianaTimeZone","ToString","ToNumber","TimeClip","SameValue","ToInteger","ToObject","ArrayCreate","HasOwnProperty","MS_PER_DAY","mod","Day","WeekDay","DayFromYear","TimeFromYear","YearFromTime","DaysInYear","DayWithinYear","InLeapYear","MonthFromTime","dwy","leap","DateFromTime","mft","HOURS_PER_DAY","MINUTES_PER_HOUR","SECONDS_PER_MINUTE","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","HourFromTime","MinFromTime","SecFromTime","OrdinaryHasInstance","internalSlots","boundTargetFunction","isPrototypeOf","msFromTime","CoerceOptionsToObject","DefaultNumberOption","GetNumberOption","GetOption","GetOptionsObject","SANCTIONED_UNITS","removeUnitNamespace","SIMPLE_UNITS","IsSanctionedSimpleUnitIdentifier","unitIdentifier","IsValidTimeZoneName","zoneNames","linkNames","linkName","NOT_A_Z_REGEX","IsWellFormedCurrencyCode","IsWellFormedUnitIdentifier","getMagnitude","repeat","setInternalSlot","setMultiInternalSlots","getInternalSlot","getMultiInternalSlots","isLiteralPart","patternPart","ComputeExponentForMagnitude","numberFormat","getInternalSlots","dataLocaleData","numberingSystem","thresholdMap","nu","thresholds","magnitudeKey","ToRawPrecision","minPrecision","maxPrecision","xFinal","int","xToString","xToStringExponentIndex","xToStringMantissa","xToStringExponent","xToStringMantissaWithoutDecimalPoint","decimalPlaceOffset","adjustDecimalPlace","cut","formattedString","roundedNumber","integerDigitsCount","ToRawFixed","minFraction","maxFraction","FormatNumericToString","intlObject","isNegative","roundingType","minInteger","ComputeExponent","formatNumberResult","CurrencyDigits","currencyDigitsData","digitMapping","S_UNICODE_REGEX","CARET_S_UNICODE_REGEX","S_DOLLAR_UNICODE_REGEX","CLDR_NUMBER_PATTERN","numberResult","nonNameCurrencyPart","numberPattern","defaultNumberingSystem","compactNumberPattern","compactPluralRules","byNumberingSystem","selectPlural","compactPlaralRule","getPatternForSign","getCompactDisplayPattern","byCurrencyDisplay","currencies","narrow","standard","currencyData","decimalNumberPattern","afterCurrency","currencySpacing","afterInsertBetween","beforeCurrency","beforeInsertBetween","numberPatternParts","numberParts","numberPatternParts_1","paritionNumberIntoParts","minusSign","plusSign","percentSign","unitName","unitPattern","currencyNameData","unitPatternParts_1","unitData","simple","numeratorUnit","denominatorUnit","numeratorUnitPattern","perUnitPattern","perUnit","perPattern","compound","per","denominatorPattern","_d","interpolateMatch","digitReplacementTable","digit","decimalSepIndex","groupSepSymbol","patternGroups","primaryGroupingSize","secondaryGroupingSize","integerGroup","exponentResult","zeroPattern","negativePattern","PartitionNumberPattern","nan","infinity","FormatNumericToParts","implDetails","parts_1","SetNumberFormatUnitOptions","SetNumberFormatDigitOptions","mnfdDefault","mxfdDefault","mnid","mnfd","mxfd","mnsd","mxsd","InitializeNumberFormat","localeData","availableLocales","numberingSystemNames","getDefaultLocale","requestedLocales","localeMatcher","ResolveLocale","dataLocale","cDigits","PartitionPattern","beginIndex","SupportedLocales","LookupSupportedLocales","RangePatternType","isMissingLocaleDataError","isUnicodeLanguageSubtag","isUnicodeScriptSubtag","isUnicodeRegionSubtag","isStructurallyValidLanguageTag","parseUnicodeLanguageId","parseUnicodeLocaleId","tslib_1","parser_1","emitter_1","canonicalizer_1","locales_1","canonicalizedTag","emitUnicodeLocaleId","canonicalizeUnicodeLocaleId","parser_2","__exportStar","_1","should_polyfill_1","shouldPolyfill","variantAlias","scriptAlias","territoryAlias","languageAlias","canonicalizeUnicodeLanguageId","aliases_generated_1","likelySubtags_generated_1","canonicalizeKVs","arr_1","kv","compareKV","compareExtension","mergeVariants","v2_1","unicodeLanguageId","finalLangAst","variants","replacedLang_1","variant","emitUnicodeLanguageId","replacedLangAst","SEPARATOR","replacedLang_2","replacedLang_3","replacedLang","regionAlias","replacedRegion","regions","likelySubtag","likelySubtags","likelyRegion","isUnicodeVariantSubtag","extensions","extension","keywords","attributes","extensions_1","ALPHANUM_1_8","ALPHANUM_2_8","ALPHANUM_3_8","KEY_REGEX","TYPE_REGEX","ALPHA_4","OTHER_EXTENSION_TYPE","UNICODE_REGION_SUBTAG_REGEX","UNICODE_VARIANT_SUBTAG_REGEX","UNICODE_LANGUAGE_SUBTAG_REGEX","TKEY_REGEX","parseUnicodeExtension","parseKeyword","parseTransformedExtension","parsePuExtension","exts","parseOtherExtensionValue","unicodeExtension","transformedExtension","puExtension","otherExtensionMap","parseExtensions","BestAvailableLocale","subset","requestedLocales_1","noExtensionLocale","UNICODE_EXTENSION_SEQUENCE_REGEX","availableLocale","UnicodeExtensionValue","searchValue","relevantExtensionKeys","LookupMatcher","minimizedAvailableLocaleMap","availableLocaleMap","canonicalizedLocaleMap","minimizedAvailableLocales","minimizedLocale","minimize","canonicalizedLocale","maximizedRequestedLocale","minimizedRequestedLocale","BestFitMatcher","supportedExtension","relevantExtensionKeys_1","foundLocaleData","keyLocaleData","supportedExtensionAddition","requestedValue","optionsValue","privateIndex","preExtension","postExtension","GetOperands","ecma402_abstract_1","iv","dp","fv","IntegerDigits","NumberOfFractionDigits","NumberOfFractionDigitsWithoutTrailing","FractionDigits","FractionDigitsWithoutTrailing","InitializePluralRules","intl_localematcher_1","initializedPluralRules","ResolvePlural","GetOperands_1","PluralRuleSelect","internalSlotMap","InitializePluralRules_1","ResolvePlural_1","get_internal_slots_1","__importDefault","validateInstance","pluralCategories","categories","__addLocaleData","data_1","__defaultLocale","polyfilled","toStringTag","ex","ord","t0","n10","n100","supported_locales_1","__values","__read","ar","SuppressedError","DateFormatError","numeric","monthStyle","dayStyle","weekdayStyle","WARNING","timeZoneNameStyle","compileOptions","calendar","yearOptions","hourOptions","getDateFormatOptions","dte","isWarning","G","J","isLetter","readToken","readFieldToken","readQuotedToken","parseDateTokens","NumberFormatError","BadOptionError","BadStemError","MaskedValueError","MissingOptionError","PatternError","TooManyOptionsError","maxOpt","UnsupportedError","getNumberFormatLocales","lc","getNumberFormatMultiplier","getNumberFormatOptions","onUnsupported","integerWidth","unitPer","unitWidth","fail","minF","maxF","minSignificant","minS","maxSignificant","maxS","trailingZero","expDigits","expSign","hasExp","parseAffixToken","pad","isDigit","parseNumberToken","parseSubpattern","Prefix","Suffix","handleAffix","affixTokens","isPrefix","inFmt","getNegativeAffix","parseNumberPattern","parseTokens","hasGroups","hasExponent","intOptional","intDigits","decimalPos","fracDigits","fracOptional","increment","parseNumberAsSkeleton","negPrefix","negSuffix","affix","neg","isUnit","maxOptions","scientific","engineering","permille","latin","minOptions","parseBlueprintDigits","re","TokenParser","badOption","assertEmpty","parseToken","hasMaxOption","hasMinOption","validOptions","fd","sd","parsePrecisionBlueprint","commonjsGlobal","getDefaultExportFromCjs","lexer","moo","hasSticky","sticky","isRegExp","isObject","reUnion","regexps","regexpOrLiteral","ignoreCase","multiline","ruleOptions","include","defaultType","lineBreaks","shouldThrow","toRules","spec","arrayToRules","getOwnPropertyNames","thing","objectToRules","defaultErrorRule","compileRules","hasStates","errorRule","fast","fastAllowed","unicodeFlag","unicode","pat","regexp","fallbackRule","checkStateGroup","Lexer","states","startState","queuedToken","queuedText","queuedThrow","setState","popState","pushState","eat","tokenToString","_getGroup","groupCount","queuedGroup","_token","matchNL","nl","formatError","LexerIterator","firstDisplayedLine","lastDisplayedLine","lastLineDigits","displayedLines","numLines","lastNLines","errorLines","lineNo","tokenType","$all","ruleMap","included","newRules","newRule","fastKeys","isMap","reverseMap","mooExports","moo_1","doubleapos","quoted","octothorpe","case","parse_1","ParseError","lexer_js_1","isSelectType","strictArgTypes","defaultPluralKeys","cardinalKeys","cardinal","ordinalKeys","strict","strictPluralKeys","parseBody","checkSelectKey","parseSelect","inPlural","cases","parseArgToken","pText","strictArgStyleParam","atRoot","_nf$1","Runtime","__proto__","_nf","lcfunc","isOrdinal","reqArgs","strictNumber","Formatters","toLocaleDateString","sec","numberCurrency","numberFmt","defaultCurrency","numberInteger","numberPercent","toLocaleTimeString","reserved$1","ES3","break","continue","else","function","if","new","return","typeof","var","void","while","with","do","instanceof","switch","throw","try","ESnext","await","debugger","class","enum","extends","const","import","null","true","false","implements","let","private","public","yield","interface","protected","static","unique","hashCode","jkey","rtlRegExp","PLURAL_MODULE","Compiler","plurals","e_1","localeCodeFromKey","requireAllArguments","e_1_1","parserOptions","cardinals","ordinals","hasArgs","concatenate","setRuntimeFn","pluralToken","needOther","tok","returnType","isLocaleRTL","mark","biDiSupport","customFormatters","isModuleFn","setDateFormatter","setNumberFormatter","getFormatterArg","setFormatter","runtimeIncludes","pf","getCardinal","getPlural","e_2","e_3","isFormatterKey","argShape","param_1","param_1_1","e_2_1","keyEnd","e_3_1","parentKey","cfo_1","argStyle","argSkeletonText_1","getDateFormatter","dtf","getDateFormatterSource","fmtArg_1","currency_1","getNumberFormatModifier","p0","p1","n0","getNumberFormatter","modSrc","setX","getNumberFormatModifierSource","getNumberFormatterSource","a$2","b$2","c$2","d$2","e$1","f$2","af$2","ak$2","am$2","an$2","as$2","asa$2","ast$2","az$2","bal$2","bem$2","bez$2","bg$2","bho$2","bm$2","bn$2","bo$2","brx$2","ce$2","cgg$2","chr$2","ckb$2","de$2","doi$2","dv$2","dz$2","ee$2","el$2","en$2","eo$2","et$2","eu$2","fa$2","fi$2","fo$2","fur$2","fy$2","gl$2","gsw$2","gu$2","guw$2","ha$2","haw$2","hi$2","hnj$2","hu$2","ia$2","id$2","ig$2","ii$2","io$2","iu$2","ja$2","jbo$2","jgo$2","jmc$2","jv$2","jw$2","ka$2","kaj$2","kcg$2","kde$2","kea$2","kk$2","kkj$2","kl$2","km$2","kn$2","ko$2","ks$2","ksb$2","ku$2","ky$2","lb$2","lg$2","lij$2","lkt$2","ln$2","lo$2","mas$2","mg$2","mgo$2","ml$2","mn$2","mr$2","ms$2","my$2","nah$2","naq$2","nb$2","nd$2","ne$2","nl$2","nn$2","nnh$2","no$2","nqo$2","nr$2","nso$2","ny$2","nyn$2","om$2","or$2","os$2","osa$2","pa$2","pap$2","pcm$2","ps$2","rm$2","rof$2","rwk$2","sah$2","saq$2","sat$2","sc$2","scn$2","sd$2","sdh$2","se$2","seh$2","ses$2","sg$2","sma$2","smi$2","smj$2","smn$2","sms$2","sn$2","so$2","sq$2","ss$2","ssy$2","st$2","su$2","sv$2","sw$2","syr$2","ta$2","te$2","teo$2","th$2","ti$2","tig$2","tk$2","tn$2","to$2","tpi$2","tr$2","ts$2","ug$2","und$2","ur$2","uz$2","ve$2","vi$2","vo$2","vun$2","wa$2","wae$2","wo$2","xh$2","xog$2","yi$2","yo$2","yue$2","zh$2","zu$2","Cardinals","af","ak","an","ars","as","asa","az","bal","be","bem","bez","bg","bho","bn","bo","br","n1000000","brx","i10","i100","f10","f100","i1000000","ceb","cgg","ckb","cy","de","doi","dsb","dz","eo","es","et","eu","fa","fil","fo","fr","fur","fy","ga","gd","gsw","gu","guw","gv","ha","haw","he","hnj","hsb","hu","hy","ig","io","it","iu","jbo","jgo","jmc","jv","jw","ka","kab","kaj","kcg","kde","kea","kk","kkj","kl","km","kn","ko","ksb","ksh","ku","kw","n1000","n100000","ky","lag","lb","lg","lij","lkt","ln","lv","mas","mg","mgo","mk","ml","mn","mo","mr","my","nah","naq","nd","nnh","no","nqo","nr","nso","ny","nyn","om","osa","pa","pap","pcm","prg","ps","pt_PT","rm","ro","rof","rwk","sah","saq","sat","sc","scn","sdh","se","seh","ses","sg","shi","sk","sma","smi","smj","smn","sms","sn","so","sq","sr","ssy","st","su","sv","sw","syr","ta","te","teo","ti","tig","tk","tl","tn","tpi","tr","tzm","ug","uk","und","ur","uz","ve","vec","vi","vo","vun","wa","wae","xh","xog","yi","yo","yue","zu","f$1","a$1","b$1","c$1","d$1","af$1","ak$1","am$1","an$1","ar$1","ars$1","as$1","asa$1","ast$1","az$1","bal$1","be$1","bem$1","bez$1","bg$1","bho$1","bm$1","bn$1","bo$1","br$1","brx$1","bs$1","ca$1","ce$1","ceb$1","cgg$1","chr$1","ckb$1","cs$1","cy$1","da$1","de$1","doi$1","dsb$1","dv$1","dz$1","ee$1","el$1","en$1","eo$1","es$1","et$1","eu$1","fa$1","ff$1","fi$1","fil$1","fo$1","fr$1","fur$1","fy$1","ga$1","gd$1","gl$1","gsw$1","gu$1","guw$1","gv$1","ha$1","haw$1","he$1","hi$1","hnj$1","hr$1","hsb$1","hu$1","hy$1","ia$1","id$1","ig$1","ii$1","io$1","is$1","it$1","iu$1","ja$1","jbo$1","jgo$1","jmc$1","jv$1","jw$1","ka$1","kab$1","kaj$1","kcg$1","kde$1","kea$1","kk$1","kkj$1","kl$1","km$1","kn$1","ko$1","ks$1","ksb$1","ksh$1","ku$1","kw$1","ky$1","lag$1","lb$1","lg$1","lij$1","lkt$1","ln$1","lo$1","lt$1","lv$1","mas$1","mg$1","mgo$1","mk$1","ml$1","mn$1","mo$1","mr$1","ms$1","mt$1","my$1","nah$1","naq$1","nb$1","nd$1","ne$1","nl$1","nn$1","nnh$1","no$1","nqo$1","nr$1","nso$1","ny$1","nyn$1","om$1","or$1","os$1","osa$1","pa$1","pap$1","pcm$1","pl$1","prg$1","ps$1","pt$1","pt_PT$1","rm$1","ro$1","rof$1","ru$1","rwk$1","sah$1","saq$1","sat$1","sc$1","scn$1","sd$1","sdh$1","se$1","seh$1","ses$1","sg$1","sh$1","shi$1","si$1","sk$1","sl$1","sma$1","smi$1","smj$1","smn$1","sms$1","sn$1","so$1","sq$1","sr$1","ss$1","ssy$1","st$1","su$1","sv$1","sw$1","syr$1","ta$1","te$1","teo$1","th$1","ti$1","tig$1","tk$1","tl$1","tn$1","to$1","tpi$1","tr$1","ts$1","tzm$1","ug$1","uk$1","und$1","ur$1","uz$1","ve$1","vec$1","vi$1","vo$1","vun$1","wa$1","wae$1","wo$1","xh$1","xog$1","yi$1","yo$1","yue$1","zh$1","zu$1","PluralCategories","Plurals","i1000","lc_1","isPluralId","hasPlural","firstLocale","strictNumberSign","escape","compiler","fnBody","nfArgs","fnArgs","assign$1","DOM_DELTA_PIXEL","scrollLineHeight","getScrollDeltas","deltaMode","getScrollLineHeight","iframe","iframeDocument","contentWindow","firstElementChild","calculateScrollDistribution","scrollInformation","scrollLeftMax","scrollTopMax","availableScroll","elementStyle","distributeScroll","scrollInfos","BasicDropdownContent","_this$args$dropdown","transitioningInClass","transitionedInClass","transitioningOutClass","isTouchDevice","uniqueId","_contentWormhole","_animationClass","dropdownContentWormhole","dropdownElement","_this$args$dropdown2","_this$args$dropdown3","_this$args$dropdown4","registerDropdownElement","triggerElement","_this$args$dropdown5","getTriggerElement","handleRootMouseDown","_e$composedPath","_this$args$dropdown6","hasMoved","touchMoveEvent","dropdownIsValidParent","dropdownId","rootEventType","runloopAwareReposition","touchStartHandler","scrollableAncestors","nextScrollable","getScrollParent","nextParent","getScrollableAncestors","addScrollHandling","removeGlobalEvents","removeScrollHandling","_this$args$dropdown7","reposition","animationEnabled","waitForAnimations","animationClass","mutationObserver","MutationObserver","mutations","shouldReposition","containsRelevantMutation","addedNodes","removedNodes","observe","childList","subtree","destination","_this$_contentWormhol","animationEnabledArg","positionStyles","touchMoveHandler","runTask","preventScroll","_event$composedPath","deltaXNegative","deltaXPositive","deltaYNegative","deltaYPositive","getAvailableScroll","addScrollEvents","removeScrollEvents","nodeList","nodeValue","closestContent","animationName","animationPlayState","eventCallback","closestDropdown","_triggerElement$getRo","parentDropdown","parentAttrs","_BasicDropdownContent","BasicDropdownTrigger","disableDocumentTextSelect","disable","_BasicDropdownTrigger","BasicDropdownWormholeComponent","getDestinationId","UNINITIALIZED","IGNORED_STYLES","_hPosition","_vPosition","_top","_right","_otherStyles","_isOpen","_renderInPlace","BasicDropdown","horizontalPosition","verticalPosition","_getDestinationId","_this$triggerElement$","newVal","_previousDisabled","scheduleTask","publicAPI","registerAPI","_uid","_actions","registerTriggerElement","onInit","_getTriggerElement","_dropdownId","skipFocus","hPosition","vPosition","previousVerticalPosition","previousHorizontalPosition","_getDropdownElement","matchTriggerWidth","positionData","calculatePosition","applyReposition","_trigger","positions","changes","otherStyles","_config$APP","_BasicDropdown","initiallyOpened","DropdownTriggerModifier","desiredEventType","setup","_this$dropdown","handleMouseEvent","handleTouchStart","handleTouchEnd","notLeftClick","toggleIsBeingHandledByTouchEvents","_this$dropdown2","_this$dropdown3","_this$triggerElement","_this$triggerElement2","_touchMoveHandler","_this$dropdown4","_this$dropdown5","initMouseEvent","_this$triggerElement3","_this$triggerElement4","_DropdownTriggerModifier","overflowRegex","calculateInPlacePosition","dropdownRect","triggerRect","triggerWidth","dropdownWidth","calculateWormholedPosition","triggerLeft","triggerTop","triggerHeight","dropdownHeight","anchorElement","anchorPosition","isBodyPositionRelative","triggerLeftWithScroll","leftVisible","rightVisible","triggerTopWithScroll","enoughRoomBelow","enoughRoomAbove","endEvent","moveEvent","_endEvent$changedTouc","_moveEvent$changedTou","_moveEvent$changedTou2","touchType","horizontalDistance","verticalDistance","taskHelperClosure","helperName","taskMethod","_args","task","outerArgs","innerArgs","cancelAll","maybeReportError","perform","_curry","ElementHelper","componentClass","EmberComponent","runInDebug","candidateSelectors","candidateSelector","NoElement","getCandidates","includeContainer","candidates","getCandidatesIteratively","elementsToCheck","assigned","nestedCandidates","getShadowRoot","validShadowRoot","shadowRootFilter","_nestedCandidates","getTabindex","isScope","sortOrderedTabbables","documentOrder","isInput","isZeroArea","_node$getBoundingClie","isNodeMatchingSelectorFocusable","isHiddenInput","displayCheck","nodeUnderDetails","nodeRootHost","nodeIsAttached","originalNode","rootNode","isDetailsWithSummary","isDisabledFromFieldset","isNodeMatchingSelectorTabbable","isRadio","radioSet","radioScope","queryRadios","getCheckedRadio","isTabbableRadio","isNonTabbableRadio","isValidShadowRootTabbable","shadowHostNode","sortByOrder","regularTabbables","orderedTabbables","candidateTabindex","tabbable","isTabbable","focusableCandidateSelector","trapQueue","activeFocusTraps","activateTrap","trap","activeTrap","pause","trapIndex","deactivateTrap","unpause","valueOrHandler","getActualTarget","createFocusTrap","userOptions","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","containers","containerGroups","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","paused","delayInitialFocusTimer","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","tabbableNodes","getNodeForOption","optionValue","getInitialFocusNode","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","tabbableOptions","focusableNodes","lastTabbableNode","nextTabbableNode","forward","nodeIdx","tryFocus","isSelectableInput","getReturnFocusNode","previousActiveElement","checkPointerDown","clickOutsideDeactivates","returnFocus","allowOutsideClick","checkFocusIn","targetContained","checkKey","isEscapeEvent","isTabEvent","destinationNode","containerIndex","containerGroup","startOfGroupIndex","destinationGroupIndex","lastOfGroupIndex","_destinationGroupIndex","checkTab","checkClick","addListeners","removeListeners","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","finishDeactivation","updateContainerElements","containerElements","elementsAsArray","focusTrap","focusTrapOptions","isPaused","shouldSelfFocus","additionalElements","_createFocusTrap","initialFocus","createFocusTrap$1","getTask","taskOrName","taskName","NULL_TIMER_ID","registeredTimers","getTimers","destroyable","timers","cancelId","cancelTask","getTimersDisposable","timeout","queueName","taskArgs","modifierClass","installElement$1","MANAGER","getDebugName","getDebugInstance","PageTitle","tokenId","scheduleTitleUpdate","RouterEvent","configKeys","PageTitleService","_updateTitle","_validateExistingTitleElement","hasResolveRegistration","fromEnv","pageTitle","configValue","_defaultConfig","applyTokenDefaults","defaultSeparator","defaultPrepend","defaultReplace","inheritFromPrevious","tokenForId","_findTokenById","visibleTokens","sortedTokens","appending","frontGroups","front","lastToken","toBeTitle","updateFastbootTitle","titleDidUpdate","headChildNodes","titleEl","titleContents","PowerSelectMultipleComponent","computedTabIndex","triggerComponent","searchEnabled","tabindex","handleOpen","focusInput","handleFocus","handleKeydown","onKeydown","highlighted","defaultBuildSelection","_PowerSelectMultipleComponent","ua","isIE","PowerSelectMultipleInputComponent","maybePlaceholder","isDefaultPlaceholder","placeholder","handleInput","onInput","isBlank","lastSelection","buildSelection","searchField","_PowerSelectMultipleInputComponent","TriggerComponent","_openChanged","openChanged","chooseOption","selectedIndex","numericIndex","selectedObject","_el","_lastIsOpen","_this$args$select$act","objectAt","_TriggerComponent","TYPE_CANCELLED","TYPE_STARTED","TYPE_QUEUED","STARTED","QUEUED","makeCancelState","LAST_APPLIED_TAGS","Refresh","schedulerPolicy","stateTracker","taskInstances","initialTaskInstances","startingInstances","numRunning","numQueued","filterFinishedTaskInstances","reducer","makeReducer","finalTaskInstances","taskInstance","setTaskInstanceExecutionState","computeFinalStates","applyState","taskState","stateFor","executorState","executor","isFinished","onCompletion","hasStarted","desiredState","counted","onPerformed","onRunning","onQueued","taskable","onState","numPerformedInc","RefreshState","completionState","lastRunning","lastComplete","lastSuccessful","lastErrored","lastCanceled","lastIncomplete","lastPerformed","recurseTaskGroups","applyStateFrom","CURRENT_REFRESH_TAGS","StateTracker","currentTag","computeRecursiveState","forEachState","lastState","taskGroup","NULL_STATE","NullStateTracker","Scheduler","stateTrackingEnabled","cancelRequest","cancelations","guids","cancelation","onFinalize","scheduleRefresh","SINGLETON_REDUCER","UnboundedPolicy","BoundedPolicy","maxConcurrency","EnqueuedReducer","remainingSlots","EnqueuedPolicy","CANCELLED","DropReducer","DropPolicy","KeepLatestReducer","numToCancel","KeepLatestPolicy","totalRunning","RestartableReducer","RestartablePolicy","DEFAULT_STATE","performCount","TASK_CANCELATION_NAME","CANCEL_KIND_EXPLICIT","CANCEL_KIND_LIFESPAN_END","CancelRequest","finalize","guidId","Taskable","enabledModifiers","hasEnabledEvents","modifierOptions","onStateCallback","scheduler","cancelRequestKind","resetState","_resetState","_isAlive","isRunning","isQueued","isIdle","GeneratorStepResult","errored","GeneratorState","generatorFactory","resolvedValue","iteratorMethod","getIterator","INITIAL_STATE","isSuccessful","isError","isCanceled","cancelableSymbol","yieldableSymbol","YIELDABLE_CONTINUE","YIELDABLE_THROW","YIELDABLE_RETURN","YIELDABLE_CANCEL","YieldableState","resumeIndex","_taskInstance","_resumeIndex","getTaskInstance","Yieldable","onYield","_deferable","def","_toPromise","thinInstance","resumeType","maybeDisposer","PERFORM_TYPE_DEFAULT","PERFORM_TYPE_UNLINKED","PERFORM_TYPE_LINKED","CANCEL_RETURN_VALUE_SENTINEL","TASK_INSTANCE_STACK","TaskInstanceExecutor","generatorState","disposers","finalizeCallbacks","proceedSync","onStarted","requestCancel","proceedWithCancelAsync","finalizeWithCancel","proceedChecked","yieldResumeType","advanceIndex","proceedAsync","dispose","handleResolvedReturnedValue","handleResolvedContinueValue","resumeValue","beforeIndex","stepResult","generatorStep","handleYieldedValue","handleYieldedUnknownThenable","thenable","yieldedValue","addDisposer","invokeYieldable","proceedWithSimpleValue","disposer","nextValue","_expectsLinkedYield","performType","maybeResolveDefer","runFinalizeCallbacks","maybeThrowUnhandledTaskErrorLater","asyncErrorsHandled","reportUncaughtRejection","finalizeShared","cancelReason","formatCancelReason","debugEnabled","globalDebuggingEnabled","dispatchFinalizeEvents","onSuccess","onCancel","onYielded","getPerformType","detectSelfCancelLoop","parentCancelRequest","selfCancelLoopWarning","TaskLinkProxy","linkedObject","_performShared","Task","_perform","linked","unlinked","_clone","_curryArgs","fullArgs","_taskInstanceFactory","_taskInstanceOptions","_linkedObject","Environment","assert","deferable","DEFAULT_ENVIRONMENT","MODIFIER_REGISTRY","setBufferPolicy","evented","setEvented","setDebug","setGroup","keepLatest","setMaxConcurrency","setOnState","restartable","registerModifier","taskDefinition","_processModifierOptions","createTask","getTaskOptions","Task$1","createTaskGroup","TaskGroup$1","getModifier","hasModifier","getScheduler","_onStateCallback","_taskGroupPath","_schedulerPolicyClass","_maxConcurrency","_debug","_hasEnabledEvents","_enabledModifiers","policy","_hasSetBufferPolicy","assertUnsetBufferPolicy","_hasSetConcurrencyConstraint","assertModifiersNotMixedWithGroup","setName","setTaskDefinition","BaseTaskInstance","parentTaskInstance","isDropped","applyTracked","propDesc","trackMixin","TRACKED_INITIAL_TASK_STATE","TRACKED_INITIAL_INSTANCE_STATE","TaskInstance","_recomputeState","triggerEvent","getName","parentName","childName","eventNamespace","allArgs","TASKABLE_MIXIN","_performCount","derivedState","currentTaskInstanceSymbol","EncapsulatedTask","taskObj","_encapsulatedTaskStates","_encapsulatedTaskInstanceProxies","_getEncapsulatedTaskClass","encapsulatedTaskImplClass","_encapsulatedTaskImplClass","currentInstance","taskInstanceProxy","encapsulatedTaskImpl","_wrappedEncapsulatedTaskInstance","proxy","Proxy","Reflect","taskFactorySymbol","propertyModifiers","taskGroupPath","TaskProperty","callSuperSetup","_setupEmberKVO","addPerformEvents","cancelOn","addCancelEvents","observes","addObserverKeys","TaskGroup","EmberScheduler","EMBER_ENVIRONMENT","DEBUG_TASKS","handlerCounter","registerOnPrototype","addListenerOrObserver","handlerName","makeTaskCallback","ensureArray","possibleArr","eventNames","propertyPaths","TaskFactory","TaskFactory$1","_cancelEventNames","_observes","_eventNames","addObserver","taskFn","EmberYieldable","TimeoutYieldable","timerId","taskFromPropertyDescriptor","factoryClass","tasks","taskGroupPropertyDescriptor","_target","taskGroups","descriptorFn","createDecorator","baseOptions","createTaskDecorator","createTaskGroupDecorator","getValues","castForPromiseHelper","castable","taskAwareVariantOf","awaitable","awaitables","arrOrHash","castAwaitables","hasCancelled","lastInstance","Promise$1","isPromiseLike","isPromiseProxyLike","isCancellablePromise","_resolvedOptions","_resolvedSelected","_repeatingChar","_expirableSearchText","_searchResult","_loading","_searchText","_lastSearchedText","_highlighted","PowerSelectComponent","_search","highlight","_highlight","_select","_choose","_scrollTo","labelClick","_labelClick","searchText","__updateOptions","__updateSelected","__registerAPI","term","__performSearch","contextFn","bufferPolicyName","optionsWithBufferPolicy","generator","buildTask","searchStartOffset","repeatingChar","charCode","isNumpadKeyEvent","storedAPI","indexOfOption","findWithOffset","_lastSelectedPromise","removeObserver","_selectedObserverCallback","highlightOnHover","labelClickAction","highlightedIndex","pathForOption","searchMessage","noMatchesMessage","resultCountMessage","resultsCount","mustShowSearchMessage","loading","mustShowNoMessages","lastSearchedText","toPlainArray","_filterResultsCache","_filter","countOptions","ariaMultiSelectable","triggerId","labelId","ariaLabelledBy","labelComponent","_resetHighlighted","handleClose","correctedTerm","_publicAPIActions","_routeKeydown","handleTriggerKeydown","triggerTypingTask","_handleKeySpace","_updateIsActive","handleBlur","_updateOptions","_updateHighlighted","_updateSelected","closeOnSelect","optionsList","optionElement","optionTopScroll","optionBottomScroll","_registerAPI","_performSearch","_lastOptionsPromise","currentOptionsPromise","currentSelectedPromise","resolvedSelected","_ref5","_ref6","_lastSearchPromise","searchResult","_defaultBuildSelection","_handleKeyUpDown","_handleKeyEnter","_handleKeyTab","_handleKeyESC","newHighlighted","advanceSelectableOption","defHighlighted","defaultHighlighted","skipDisabled","optionMatcher","getOptionMatcher","defaultMatcher","filterOptions","typeAheadOptionMatcher","defaultTypeAheadMatcher","findOptionWithOffset","_PowerSelectComponent","collection","PowerSelectBeforeOptionsComponent","_focusInput","clearSearch","_this$args$select$act2","autofocus","_PowerSelectBeforeOptionsComponent","PowerSelectLabelComponent","onLabelClick","_PowerSelectLabelComponent","templateOnly","ElementProto","mozMatchesSelector","PowerSelectOptionsComponent","_this$args$extra","_isTouchDevice","_didHandlerSetup","_listElement","_addHandlers","_removeHandlers","addHandlers","removeHandlers","_optionFromIndex","_hasMoved","changedTouch","findOptionAndPerform","optionItem","optionIndex","mouseUpHandler","mouseOverHandler","touchEndHandler","_PowerSelectOptionsComponent","PowerSelectGroupComponent","PowerSelectTriggerComponent","_PowerSelectTriggerComponent","emberPowerSelectIsEqual$1","emberPowerSelectIsGroup$1","maybeGroup","isGroup","emberPowerSelectIsSelectedPresent$1","walk","optionAtIndex","originalCollection","ancestorIsDisabled","localCounter","copyGroup","suboptions","groupCopy","foundBeforeOffset","foundAfterOffset","canStop","entryIsDisabled","currentOption","resultsLength","DIACRITICS","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","F","Ḟ","Ƒ","Ꝼ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","J","Ĵ","Ɉ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Q","Ꝗ","Ꝙ","Ɋ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","X","Ẋ","Ẍ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","f","ḟ","ƒ","ꝼ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","j","ĵ","ǰ","ɉ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","m","ḿ","ṁ","ṃ","ɱ","ɯ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","q","ɋ","ꝗ","ꝙ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","x","ẋ","ẍ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","stripDiacritics","StyleModifier","setStyles","newStyles","existingStyles","rulesToRemove","priority","removeProperty","flat","compileStyles","Events","EE","emitter","_events","_eventsCount","clearEvent","events","listenerCount","a2","a3","a4","a5","removeListener","removeAllListeners","prefixed","normalizePath","instruction","op","lop","prevop","alen","instructions","instructionLength","oargs","sx","sy","cx","cx2","cy2","ry","xrot","lflag","sweep","normalized","fixed","rest","b1","reverseNormalizedPath","pairs","terms","tlen","tlen1","reversed","closed","pre","post","revstring","reverseNormalized","subpath","revpath","paths","spath","TrackedStorageImpl","_lastValue","_isEqual","tripleEq","createStorage","getValue","lastValue","decorators","decorate","__decorate","TrackedMap","readStorageFor","storages","dirtyStorageFor","existing","vals","setPrototypeOf","TrackedWeakMap","TrackedSet","storageFor","TrackedWeakSet","WeakSet","_classPrivateFieldGet","receiver","privateMap","_classExtractFieldDescriptor","_classApplyDescriptorGet","ARRAY_GETTER_METHODS","ARRAY_WRITE_THEN_READ_METHODS","convertToInt","_collection","_storages","_readStorageFor","_dirtyStorageFor","TrackedArray","iterable","mapfn","thisArg","_classPrivateMethodInitSpec","boundFns","nativelyAccessingLengthFromPushOrUnshift","_classPrivateMethodGet","_readStorageFor2","_dirtyStorageFor2","_dirtyCollection","descs","_dirtyCollection2","deleteProperty","tracked$1","decorator","hint","prim","toPropertyKey","CAMELIZE_CACHE","CAPITALIZE_CACHE","prefixExponent","formatDecimalParts","coefficient","%","formatDecimal","formatRounded","grouping","thousands","currencyPrefix","currencySuffix","numerals","formatNumerals","minus","newFormat","align","comma","formatTypes","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","formatLocale","toLocaleString","FormatSpecifier","__export","decorateClass","decorateFieldV1","decorateFieldV2","initializeDeferredDecorator","decorateMethodV1","decorateMethodV2","decoratePOJO","deferDecorator","_deferred$get","findDeferredDecorator","accum","pojo","decorated","decoratePojoField","_Object$getOwnPropert","extendStatics","__","__param","paramIndex","__esDecorate","ctor","descriptorIn","contextIn","extraInitializers","accept","access","addInitializer","__runInitializers","useValue","__propKey","__setFunctionName","__metadata","metadataKey","metadataValue","__awaiter","_arguments","fulfilled","rejected","__generator","sent","trys","ops","verb","__createBinding","k2","__spread","__spreadArrays","jl","__await","__asyncGenerator","asyncIterator","resume","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","__setModuleDefault","__importStar","__classPrivateFieldGet","__classPrivateFieldSet","__classPrivateFieldIn","__addDisposableResource","asyncDispose","_SuppressedError","suppressed","__disposeResources","hasError","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","chunkIds","notFulfilled","ns","chunkId","promises","miniCssF","needAttach","nc","onScriptComplete","onerror","doneFns","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}