{"version":3,"file":"static/chunks/199a5e39-76c92403a22d6e7e.js","mappings":"iGAqMA,sDA8DA,EAgQA,EAwBA,cAxhBA,YACA,YACA,kBACA,cACA,gBACA,cACA,kBACA,0BACA,gBACA,kBACA,oBACA,gCACA,sBACA,eACA,CAAC,UAAkC,EACnC,gBACA,uCAIA,WACA,OAAkB,yDAAiB,SAEnC,UACA,MAPA,EAOA,OANA,EAMA,UACA,6BACA,CACA,SACA,OACA,yBACA,KACA,eACA,kBACA,CACA,qBACA,gBACA,SACA,iBACA,CACA,CAIA,cACA,OAKA,YACA,+BACA,YAAoB,WAAgB,IACpC,qBAEA,QACA,EAXA,QACA,CACA,cACA,YASA,YACA,SACA,YAAoB,WAAkB,IACtC,6BAEA,QACA,EAfA,GACA,CAyBA,MARA,4BAEA,gEAOA,SACA,OACA,aACA,cACA,YACA,gBACA,qBACA,SACA,eACA,mBACA,qBACA,2BACA,eACA,CACA,oBACA,gDACA,CACA,wBACA,wDACA,MACA,iDAEA,QACA,CACA,mBACA,wDACA,yBACA,4CAEA,gBAEA,iCACA,mEACA,YAAiB,OACjB,CACA,yBACA,EACA,+CACA,4CACA,CACA,2BACA,kCACA,2BACA,WACA,0DACA,oDACA,YACA,KACA,CAAS,CACT,CACA,6BA8BA,OAnBA,uBACA,YACA,mCACA,yDACA,qDACA,aACA,sBASA,CAT+D,CAS/D,KARA,CACA,aACA,SACA,OACA,KACA,OACA,KACA,EAEA,CACA,QACA,CAAS,KA3BT,qBACA,aAKA,OAJA,MACA,UAEA,aACA,CACA,CAAa,GAAI,CAsBjB,CACA,+BACA,6BACA,sBACA,KACA,MACA,mCAEA,iDACA,sCACA,2CACA,OACA,UACA,IACA,CACA,CACA,yBAIA,IAGA,qBAzIA,gBAA8B,qr4DA0I9B,6BACA,0BACA,yBACA,8BACA,CACA,kBACA,GAGA,wBACA,CACA,CAEA,cAAc,kDAAkD,IAAI,wBAAwB,GAAG,GAA4I,EAAzG,CAAC,GAAwG,gEAA6E,gBAAiB,oEAAqE,cAAc,mBAAmB,cAAc,MAAM,wBAAyB,mCAAoC,+BAA+B,qBAAsB,iEAAiE,wEAAuE,mGAAiG,kBAA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EAgLA,WACA,MACA,IACA,eACA,CAAI,SACJ,cACA,kEACA,EAEA,CACA,YACA,IACA,EAgCA,UACA,IACA,WACA,wBACA,SAEA,OACA,QACA,SAEA,SACA,YAEA,CACA,CAAI,SACJ,OACA,QACA,WACA,CAAO,CACP,SACA,QAEA,CACA,CACA,EACA,oBACA,IAeA,EA4CA,EA3DA,GACA,4BACA,yBACA,uBACA,gBACA,UACA,eACA,KACA,KACA,CAAK,CACL,IACA,EACA,KACA,UACA,UAEA,IACA,gBACA,CAAI,SACJ,CACA,MACA,SACA,SACA,aACA,uDAAiE,OAAa,iDAE9E,OACA,CAAO,CACP,EACA,GAGA,sBACA,WAEA,EACA,SAAyC,MAFzC,cAAuC,OAAU,EAER,kBAAiC,OAC1E,wBACA,UACA,GACA,CAAK,EACL,KACA,QAEA,QACA,EACA,aACA,mBACA,OACA,GACA,EACA,QACA,SACA,QACA,GACA,CAAK,CACL,EACA,GAGA,OACA,MACA,MACA,OACA,KACA,qBACA,oEACA,8CACA,KACA,uBAEA,CAAK,WACL,MACA,qDAWA,eAVA,aACA,iBACA,QACA,WAGA,cACA,wFAKA,CACA,CAAK,WACL,MAMA,OADA,EAJA,UACA,EACA,mBAEA,IACA,GACA,CAAK,YACL,qBACA,KACA,kBACA,CAAK,YACL,oBACA,CAAK,CACL,EA+BA,OA9BA,WACA,eACA,GACA,KACA,MAEA,cACA,kBAEA,CAAK,CACL,kBACA,6BACA,CAAK,CACL,iBACA,kBACA,kBACA,cACA,SACA,KACA,WACA,GAEA,sBACA,SACA,KACA,WACA,EAEA,EACA,IACA,IACA,EACA,oBACA,IA+CA,EA/CA,GACA,QAjMA,cACA,MACA,IACA,KACA,CAAI,SACJ,MACA,CAsBA,MArBA,CACA,YACA,MACA,SACA,SACA,KAEA,qBAEA,uCACA,qBACA,UAEA,IACA,CAAK,CACL,yBACA,EACA,0BAEA,6BACA,CAEA,EAoKA,kBACA,gBACA,UACA,eACA,KACA,KACA,CAAK,CACL,MAEA,KACA,UACA,UACA,YACA,MACA,SACA,SACA,aACA,uDAAiE,OAAa,iDAE9E,OACA,CAAO,CACP,EACA,GAGA,WACA,oBAAuC,OAAU,EACjD,yBACA,QACA,kBACK,CACL,EACA,aACA,mBACA,OACA,GACA,EACA,QACA,SACA,QACA,GACA,CAAK,CACL,EACA,EAEA,yBAEA,WACA,QACA,MACA,OACA,KACA,cACA,MACA,2BACA,CAAK,EACL,kFACA,8CACA,MACA,qDAWA,eAVA,aACA,iBACA,QACA,WAGA,cACA,wFAKA,CACA,CAAK,WACL,MAMA,OADA,EAJA,UACA,EACA,mBAEA,IACA,GACA,CAAK,YACL,qBACA,MACA,KACA,kBACA,CAAK,YACL,oBACA,CAAK,CACL,EAiCA,OAhCA,WACA,eACA,GACA,KACA,MAEA,WACA,aAEA,CAAK,CACL,kBACA,6BACA,CAAK,CACL,iBACA,kBACA,kBACA,cACA,SACA,KACA,WACA,GAEA,sBACA,SACA,KACA,WACA,EAEA,EACA,iBACA,IAEA,IACA,EAcA,QACA,oBACA,8BACA,oCACA,wCACA,0BACA,gCACA,CAAC,CACD,IACA,YACA,qBACA,sBAEA,CAAK,CACL,wBAEA,CAAK,CACL,iBAEA,CAAK,CACL,oBAEA,CACA,EACA,SAlnCA,EAknCA,CArCA,OACA,sDAEA,aACA,kHAGA,SAEA,OACA,EA2BA,CA/hBA,OAA8C,iBAE9C,EADA,YAAU,sCAAkD,EAE5D,IACA,aAA6F,gBAAvB,GAAG,CAAoB,mBACzF,SACJ,CACA,MAMA,OAL+C,GAC/C,aACA,gFAGA,SAEA,eAAU,QAAuC,UACjD,IACA,sBACA,aACA,MACA,SACA,kBAA+C,qBAA2C,oBAAuC,QAAqB,SACtJ,WACA,uBAGA,gBACA,CACA,KACA,QAAiB,EAAM,GAAG,OAAY,EAC/B,CACP,CACA,cACA,gBACA,GAEA,CACA,EACA,eACA,QACA,KACA,QACA,GACA,EACA,oBAcA,GAbA,qBACA,oBAEA,oBACA,gBACA,mBACA,uCACA,EACA,2BACA,KAIA,uDACA,SACA,aACA,oBACiD,8BACjD,aACA,sHAEA,MAEA,OACA,CACA,CAsGA,OArGA,gBACA,MACA,eACA,aACA,+BACA,cACA,2DAEA,MACA,CACA,UACA,UACA,IACA,0BACA,eACA,WACA,MACA,CACA,iCACA,cACA;AACA;AACA;AACA,oFAAoF,iCAAiC,iBAAiB;AACtI,uBAGA,iBACA,WACA,OAEA,kDACA,KAEA,MACA,CACA,wBAEA,+BAEA,aACA,EAEA,gBACA,uBACA,YAEA,GADA,KACA,WACA,2CAEA,wCACA,cACA,eACA,8BACA,KACA,CACA,wCACA,gBACA,sBACA,eACA,KACA,8BACA,MACA,CACA,QACA,2BACA,CAAa,CACb,qBACA,qBACA,sBACA,eACA,KACA,MACA,CACA,qDACA,OAEA,CAAa,CACb,qBACA,oBAAoB,GAAkB,UACtC,yDACA,MACA,MACA,YACA,KAEA,QAEA,gBACA,KAEA,GAEA,KACA,CACA,sBACA,WACA,CACA,MACA,CACA,CAAG,EACH,EACA,EAkXA,SACA,YACA,mBACA,qBACA,MACA,iBACA,CAAS,CACT,CAAK,CACL,uBACA,MACA,iCACA,sBACA,CAAS,CACT,CAAK,CACL,gBACA,MAQA,WAPA,oCACA,+DACA,UAEA,GACa,GAGb,CAAS,CACT,CAAK,CACL,mBACA,MACA,iDACA,CAAS,CACT,CACA,CAAC,IACD,yBACA,SACA,CAAC,EAppCD,UACA,uBAEA,EADA,6BACA,QAEA,qBAmpCA,WACA,cACA,MAAoC,cAAQ,KAE5C,MADI,eAAS,eACb,SACA,CAAC,CAED,WACA,SACA,qBAA+B,EAAO,CACtC,CAAC,GAGD,YACA,UAAY,GAAQ,cACpB,GACA,8CAAuD,kBAAkB,OAEzE,EACA,MACA,EACA,OACA,mBACA,EAEA,MAEA,wBACA,UAUA,oBACA,GACA,aACA,qBACA,UAAkB,6DAAgE,EAClF,aACA,UACA,qBACA,eACA,0BAEA,iBACA,UACA,YACA,KArBA,oBAAmC,ikDAsBnC,kBACA,eACA,oBAAwB,+EAAuG,EAC/H,QAEA,EACA,GAFA,MAAwB,sBAAgC,kBAExD,EACA,SAEA,KACA,iBAGA,gGAEA,mCACA,SACA,SACA,QACa,EACb,UACA,qBACA,SACA,gBACA,UACA,cACA,SACA,CAAa,EAEb,OADA,MAAwB,sBAAgC,kBACxD,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CACA,iBACA,8BAEA,GADA,sCACA,aACA,qCAAqD,eAA6B,GAElF,qBACA,oBAAiC,IAAU,EAC3C,UACA,0BACA,CAAS,EACT,OACA,eACA,UACA,CACA,CACA,mBACA,iEAEA,CADA,sCACA,GAIA,CACA,eACA,wBACA,oBAAqC,IAAU,EAC/C,UACA,0BACA,CAAa,CACb,GAVA,IACA,KAUA,CACA,mBACA,0BACA,CACA,mCAEA,0BACA,gBACA,EAEA,WACA,2BAEA,KAGA,qBACA,gBAuCA,OArCA,4BACA,UACA,QACA,gDACA,CAAiB,GAIjB,4BACA,QACA,MACA,+CACA,6CACA,UACA,CAAiB,EAIjB,mDACA,UACA,QACA,gDACA,CAAiB,GAGjB,EACA,QACA,mDACA,WACiB,EAEjB,GACA,QACA,iDACA,WACiB,EAEjB,CACA,CAAS,KAET,qCAYA,OAVA,mBACA,kBACA,eACA,aACA,MACA,GACA,aAEA,QACA,CAAS,IAET,CACA,CAQA,mBACA,GACA,cACA,oBACA,CAAkB,sEAAgE,EAClF,aACA,UACA,qBACA,eACA,0BAEA,iBACA,WACA,aACA,KApBA,gBAA+B,qzyDAqB/B,kBACA,eACA,oBAAwB,+EAAuG,EAC/H,QAEA,EACA,GAFA,MAAwB,uBAAiC,kBAEzD,EACA,SAEA,KACA,iBAGA,iGAEA,mCACA,SACA,SACA,QACa,EACb,UACA,qBACA,SACA,gBACA,UACA,cACA,SACA,CAAa,EAEb,OADA,MAAwB,uBAAiC,kBACzD,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CACA,iBACA,8BAEA,GADA,sCACA,aACA,qCAAqD,eAA8B,GAEnF,qBACA,qBAAkC,IAAU,EAC5C,UACA,0BACA,CAAS,EACT,OACA,eACA,UACA,CACA,CACA,mBACA,iEAEA,CADA,sCACA,GAIA,CACA,eACA,wBACA,qBAAsC,IAAU,EAChD,UACA,yBACA,EAAa,CACb,GAVA,IACA,KAUA,CACA,mBACA,0BACA,CACA,mCAEA,0BACA,gBACA,EAEA,WACA,2BAEA,KAGA,qBACA,gBAuCA,OArCA,4BACA,UACA,QACA,gDACA,CAAiB,GAIjB,4BACA,QACA,MACA,+CACA,6CACA,WACiB,EAIjB,mDACA,UACA,QACA,gDACA,CAAiB,GAGjB,EACA,QACA,mDACA,WACiB,EAEjB,GACA,QACA,iDACA,WACiB,EAEjB,CACA,CAAS,KAET,qCAYA,OAVA,mBACA,kBACA,eACA,aACA,MACA,GACA,aAEA,QACA,CAAS,IAET,CACA,CASA,mBACA,GACA,aACA,qBACA,UAAkB,6DAAgE,EAClF,aACA,UACA,qBACA,eACA,0BAEA,iBACA,YACA,cACA,KArBA,oBAAmC,ytBAsBnC,kBACA,eACA,oBAAwB,+EAAuG,EAC/H,QAEA,EACA,GAFA,MAAwB,wBAAkC,kBAE1D,EACA,SAEA,KACA,iBAGA,kGAEA,mCACA,SACA,SACA,OAAsD,qBAA0B,CACnE,EACb,UACA,qBACA,SACA,gBACA,UACA,cACA,SACA,CAAa,EAEb,OADA,MAAwB,wBAAkC,kBAC1D,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CACA,gBACA,8BACA,gBACA,qCAAqD,eAA+B,GAEpF,iBACA,KACA,0BACA,CAAS,EACT,OACA,eACA,UACA,CACA,CAEA,kBACA,WACA,CAEA,mBAEA,CACA,mCAEA,eACA,2BAEA,KAEA,qBACA,gBAYA,OAVA,6BACA,UACA,cAIA,oDACA,UACA,cAEA,CACA,CAAS,KAET,mCAWA,OAVA,mBACA,kBACA,qBACA,aACA,MACA,GACA,UAEA,QACA,CAAS,IAET,CACA,CASA,mBACA,GACA,aACA,qBACA,UAAkB,6DAAgE,EAClF,aACA,UACA,qBACA,eACA,0BAEA,iBACA,WACA,aACA,KArBA,oBAAmC,qsCAsBnC,kBACA,CACA,oBAAwB,6FAAuG,EAC/H,QAEA,EACA,GAFA,MAAwB,uBAAiC,kBAEzD,EACA,SAEA,KACA,iBAGA,iGAEA,mCACA,SACA,SACA,QACa,EACb,UACA,qBACA,SACA,UACA,cACA,SACA,CAAa,EAEb,OADA,MAAwB,uBAAiC,kBACzD,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CACA,iBACA,kDAEA,GADA,sCACA,iBACA,qCAAqD,eAA8B,GAEnF,qBACA,qBAAkC,IAAU,EAC5C,UACA,0BACA,CAAS,EACT,OACA,eACA,UACA,CACA,CACA,mBACA,iEAEA,CADA,sCACA,GAGA,CACA,eACA,wBACA,qBAAsC,IAAU,EAChD,UACA,0BACA,CAAa,CACb,EATA,IAUA,CACA,mBACA,0BACA,CACA,mCAEA,0BACA,gBACA,EAEA,WACA,2BAEA,KAGA,qBACA,gBAuCA,OArCA,4BACA,UACA,QACA,gDACA,CAAiB,GAIjB,4BACA,QACA,MACA,+CACA,6CACA,WACiB,EAIjB,mDACA,UACA,QACA,gDACA,CAAiB,GAGjB,EACA,QACA,mDACA,WACiB,EAEjB,GACA,QACA,iDACA,WACiB,EAEjB,CACA,CAAS,KAET,qCAYA,OAVA,mBACA,kBACA,eACA,aACA,MACA,GACA,aAEA,QACA,CAAS,IAET,CACA,CASA,mBACA,GACA,cACA,oBACA,UAAkB,6DAAgE,EAClF,aACA,UACA,qBACA,eACA,yBACA,CACA,iBACA,YACA,cACA,KArBA,oBAAmC,ikKAsBnC,kBACA,eACA,oBAAwB,6CAAuE,EAC/F,IAEA,GADA,MAAwB,wBAAkC,kBAC1D,mDACA,wCAEA,mCACA,SACA,yBACA,UACA,qBACA,SACA,UACA,cACA,kBAAkD,iBAAsB,CACxE,SACA,CAAa,EAEb,OADA,MAAwB,wBAAkC,kBAC1D,CACA,CACA,SAGA,OAFA,gBACA,mCAA+C,iBAA2B,gFAC1E,IACA,CACA,CACA,gBACA,YAAgB,GAAU,uBAC1B,+CACS,EACT,MACA,qCAAqD,eAAyB,GAE9E,OACA,CACA,gBACA,UACA,2BAEA,CACA,OACA,eACA,UACA,CACA,CAEA,mBAMA,MALA,kBACA,wBACA,0CACA,IAEA,IACA,CAEA,mBAEA,CACA,mCAEA,0BACA,gBACA,EAEA,WACA,2BAEA,KAEA,qBACA,gBAaA,OAVA,4BACA,UACA,cAIA,oDACA,UACA,cAEA,CACA,CAAS,KAET,mCAYA,OAVA,mBACA,kBACA,eACA,aACA,MACA,GACA,aAEA,QACA,CAAS,IAET,CACA,CASA,mBACA,EACA,QACA,yBACA,UAAkB,6CAAiD,EACnE,aACA,UACA,eACA,mBACA,CACA,iBACA,gBACA,kBACA,KApBA,oBAAmC,q+DAqBnC,kBACA,eACA,mBAAwB,8BAAwD,EAChF,IAEA,GADA,MAAwB,4BAAsC,kBAC9D,qDACA,4CAEA,mCACA,SACA,kBACA,UACA,qBACA,SACA,UACA,cACA,SACA,CAAa,EAEb,OADA,MAAwB,4BAAsC,kBAC9D,CACA,CACA,SAGA,OAFA,gBACA,mCAA+C,iBAA+B,6FAC9E,IACA,CACA,CACA,gBACA,aAAgB,GAAW,sBAA8B,8BAAgC,EACzF,gBACA,qCAAqD,eAA6B,GAElF,2CAEA,IAAoB,eAAwB,6BAC5C,OACA,mBAAoC,IAAU,EAC9C,UACA,0BACA,gBAAkC,EAAU,CAE5C,CAAS,GAGT,OADA,yDACA,CACA,eACA,UACA,CACA,CAEA,mBAIA,MAHA,6CACA,IAEA,IACA,CAEA,mBAEA,CACA,mCAEA,eACA,2BAEA,KAGA,qBACA,gBACA,gDACA,yBAuBA,MAvB6D,CAC7D,4BACA,UACA,QACA,2CACA,OAAyC,WAAuB,CAC/C,GAEjB,mBACA,UACA,QACA,2CACA,OAAyC,WAAuB,CAC/C,GAGjB,QACA,uCACA,wDACA,uDACA,WACiB,EAEjB,CACA,CAAS,KAET,4BAaA,OAVA,mBACA,kBACA,WACA,eACA,MACA,GACA,UAEA,QACA,CAAS,IAET,CACA,qBACA,yBACA,eAEA,yBACA,eAEA,yBACA,eAEA,aAEA,kBAEA,UADA,iCACA,wDACA,kBACA,CACA,CAUA,OARA,YACA,cACA,0BAA+B,SAAS,EAAiB,GAGzD;AACA;AACA,QAGA,oBACA,GACA,cACA,oBACA,UAAkB,6DAAgE,EAClF,aACA,UACA,qBACA,eACA,0BAEA,iBACA,UACA,YACA,QACA,kBACA,eACA,oBAAwB,+EAAuG,EAC/H,QAEA,EACA,GAFA,MAAwB,sBAAgC,kBAExD,EACA,SAEA,KACA,iBAGA,yFAEA,mCACA,SACA,MACA,sEAEA,wBACA,UACA,qBACA,SACA,gBACA,UACA,cACA,SACA,CAAa,EAEb,OADA,MAAwB,sBAAgC,kBACxD,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CACA,gBACA,4CACA,KAA6B,UAAgB,GAAG,KAAW,EAC3D,2BACA,gBACA,qCAAqD,eAAuB,GAE5E,qBACA,oBAAiC,IAAU,EAC3C,UACA,0BACA,CAAS,EACT,OACA,eACA,UACA,CACA,CAEA,kBACA,WACA,CAEA,mBAEA,CACA,6BACA,wBAEA,GADA,aACA,8CAEA,OADA,IAEA,CACA,mCAEA,eACA,2BAEA,KAGA,qBACA,gBAiBA,OAhBA,mCAEA,UACA,QACA,WACA,CAAiB,GAGjB,QACA,MACA,2DACA,QACA,sBACA,UACA,CAAiB,EAEjB,CACA,CAAS,KAET,4BAWA,OAVA,mBACA,kBACA,WACA,YACA,MACA,GACA,UAEA,QACA,CAAS,IAET,CACA,CAEA,UACA,4CAKA,IACA,oDACA,oDACA,mDACA,EAEA,OACA,eACA,8BAIA,UACA,EACA,QACA,cACA,SACA,QACA,EAOA,oBACA,GACA,cACA,QACA,kBACA,UAAkB,qEAAuE,EACzF,aACA,UACA,qBACA,eACA,aACA,0BAEA,iBACA,mBACA,qBACA,KA3CA,oBAAmC,ivCA4CnC,kBACA,eACA,oBAAwB,+EAAuG,EAC/H,QAEA,EACA,GAFA,MAAwB,+BAAyC,kBAEjE,EACA,SAEA,KACA,iBAGA,kGAEA,MACA,+EAEA,UACA,oFAAwG,EAAQ,sBAEhH,YAEA,SACA,KACA,cACA,gCACA,kBAEA,CAAa,EAEb,+BACA,SAEA,UACA,qBACA,SACA,gBACA,UACA,cACA,UACA,OACA,CAAa,EAEb,OADA,MAAwB,+BAAyC,kBACjE,CACA,CACA,SAEA,OADA,2DACA,IACA,CACA,CACA,gBACA,OACA,UACA,oBACA,yBACA,SACA,CACA,EACA,IAIA,IAAoB,YAAW,CAH/B,uBACA,oBACA,EAAa,EACkB,oBAC/B,OACA,eACA,mBACA,CACA,CACA,SAEA,MADA,qDACA,CACA,CACA,CACA,kBACA,iCACA,cACA,YAEA,IAAgB,YAAW,sBAC3B,OACA,eACA,mBACA,CACA,CACA,mBACA,IACA,qBACA,2BACA,cAEA,QACA,6BACA,QACA,CACA,CAAa,CACb,CACA,SACA,sCACA,CACA,CACA,sCAEA,0BACA,gBACA,EACA,YAAgB,mBAA4B,eAC5C,yBACA,kBACA,yBACA,mBACA,cACA,SACA,CAAS,EAET,sBAYA,OAVA,mBACA,kBACA,sBACA,gBACA,MACA,GACA,UAEA,QACA,CAAS,IAET,CACA,UAEA,eACA,2BAGA,KAwBA,OAAiB,WAtBjB,mBACA,gBACA,IAEA,sCADA,kCAiBA,OAfA,kCAEA,UACA,QACA,WACA,CAAiB,GAGjB,QACA,MACA,0FACA,QACA,WACiB,EAEjB,CACA,CAAS,KACQ,gBACjB,CACA,WACA,iCACA,cACA,wCAEA,QACA,CACA,MACA,sBACA,sBAAmC,IAAU,EAC7C,2BACA,0BACA,CAAS,CACT,CACA,CASA,mBACA,GACA,cACA,oBACA,UAAkB,6DAAgE,EAClF,aACA,UACA,qBACA,eACA,0BAEA,iBACA,WACA,aACA,KArBA,oBAAmC,qgEAsBnC,kBACA,eACA,oBAAwB,uHAA6I,EACrK,QAEA,EAUA,EATA,GAFA,MAAwB,uBAAiC,kBAEzD,EACA,SAEA,KACA,iBAGA,0FAGA,KACA,SAEA,KACA,iBAGA,gGAEA,iBACA,+FAEA,mCACA,SACA,mBACA,YACA,gBACA,SACA,CAAqB,CACrB,CACA,CAAa,EACb,UACA,qBACA,SACA,gBACA,UACA,cACA,SACA,CAAa,EAEb,OADA,MAAwB,uBAAiC,kBACzD,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CAEA,mBACA,0BACA,wEAGA,wCAAqD,MADrD,CACqD,CAAc,EACnE,mCACA,OACA,eACA,UACA,CACA,oBAAyC,aAAsB,GAC/D,+BACA,0BACA,iBACA,EACA,CAEA,CACA,kBAEA,IADA,gCAEA,YAEA,mCACA,OACA,eACA,UACA,CACA,oBAAyC,aAAsB,GAC/D,+BACA,0BACA,iBACA,EACA,CAEA,CACA,mBACA,2BACA,CACA,mCAEA,0BACA,gBACA,EAEA,WACA,2BAEA,KAGA,qBACA,gBAuCA,OArCA,4BACA,UACA,QACA,WACA,CAAiB,GAIjB,4BACA,QACA,MACA,0FACA,QACA,WACiB,EAIjB,mDACA,UACA,QACA,WACA,CAAiB,GAGjB,EACA,QACA,8FACA,WACiB,EAEjB,GACA,QACA,YACA,WACiB,EAEjB,CACA,CAAS,KAET,IACA,eACA,uDACA,eACA,eACA,MAaA,OAVA,mBACA,kBACA,eACA,aACA,MACA,GACA,aAEA,QACA,CAAa,IAEb,CACA,SAEA,OADA,iBACA,GAEA,CACA,CAKA,mBACA,IACA,GACA,EACA,SACA,oBACA,UAAkB,iEAAmE,EACrF,aACA,UACA,UACA,UACA,iBACA,eACA,0BAEA,iBACA,SACA,WACA,KArBA,oBAAmC,iYAsBnC,kBACA,eACA,oBAAwB,6CAAuE,EAC/F,IACA,MAAwB,qBAA+B,kBACvD,UAAoB,8GAAyH,MAC7I,+BACA,SACA,mBACA,UACA,qBACA,WACA,SACA,SACA,UACA,cACA,SACA,CAAa,EAEb,OADA,MAAwB,qBAA+B,kBACvD,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CACA,gBAEA,OACA,eACA,gEACA,CACA,CAEA,mBAEA,CAEA,kBACA,WACA,CACA,kBAGA,OADA,wBACA,EACA,CACA,0BAEA,MADA,sCACA,oBAEA,sBACA,oCACA,CACA,oBAEA,OADA,6BACA,QACA,KACA,eACA,eAEA,QACA,CACA,wBAEA,+BACA,iCAIA,EADA,CADA,2BACA,UACA,WACA,EACA,kBAAmC,IAAU,EAC7C,UACA,0BACA,GAIA,OADA,2BACA,CACA,CACA,oBAEA,sBACA,qBACA,+BACA,mBACA,yCAEA,OADA,yBACA,cAEA,mCAEA,0BACA,gBACA,EAEA,WACA,2BAGA,2BACA,yBACA,iCACA,KAEA,KACA,kBACA,gBAIA,GAFA,aAEA,GAIA,oCAHA,MAOA,EACA,wCACA,mDAIA,IAHA,GACA,6BACA,eAEA,MAEA,CAEA,oBACA,wDACA,YACA,wEACA,+BACA,SACA,CAAS,EACT,2BAEA,IAaA,OAZA,iBAGA,cACA,aACA,MAEA,GACA,UAEA,GACS,GAET,CACA,CAIA,mBACA,GACA,oBACA,UAAkB,oCAAyC,EAC3D,aACA,eACA,0BAEA,iBACA,cACA,gBACA,KAbA,sYAcA,kBACA,eACA,mBAAwB,8BAAwD,EAChF,IACA,MAAwB,0BAAoC,kBAC5D,mCACA,SACA,UACA,qBACA,UACA,cACA,SACA,CAAa,EAEb,OADA,MAAwB,0BAAoC,cAC5D,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CAEA,gBACA,6BACA,MAEA,MADA,eACA,yCAGA,OADA,4CACA,CACA,eACA,UACA,CACA,wBACA,qBACA,2BAEA,CAEA,CAEA,mBACA,cAEA,CAEA,kBACA,WACA,CACA,kBAGA,cADA,wCACA,EACA,CACA,6BACA,YACA,oCAGA,0BACA,gBACA,EAEA,WACA,2BAEA,KAEA,KACA,kBACA,gBAIA,GAFA,aAEA,GAIA,qCAIA,+CAPA,MAWA,qBAEA,MADA,kDACA,qBACA,SACA,CAAS,EAET,QAaA,uBAZA,iBAGA,cACA,aACA,MAEA,GACA,UAEA,GACS,IAET,CACA,2BACA,sCACA,CACA,CAIA,mBACA,QACA,qBACA,UACA,YACA,KAPA,2VAA0W,gBAAgB,oGAAoG,sBAAsB,uBAAuB,wBAAwB,gBAAgB,iLAAiL,sBAAsB,uBAAuB,wBAAwB,gBAAgB,2BAQzzB,mBACA,aACA,cACA,CAAkB,6DAAwD,EAC1E,aACA,qBACA,cACA,CACA,iCAAwB,6CAAuE,EAC/F,IAEA,GADA,MAAwB,wBAAkC,kBAC1D,GACA,2EAEA,mCACA,SACA,IACA,eACA,6BACA,QACA,gBACA,SACA,CAAqB,EACrB,UACA,eACA,YACA,8BACqB,CACrB,cACA,UACA,SACA,CAAiB,CACjB,QACA,CACA,MAA4B,wBAAkC,iBAC9D,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CACA,gBACA,sDACA,CACA,mBACA,qCACA,CACA,kBACA,wDACA,CACA,mCACA,yDACA,CACA,CAKA,iBACA,MAAiC,GAAgB,UACjD,MAAmC,GAAgB,iBACnD,MAA0C,GAAgB,wBAC1D,0CACA,MAAsC,GAAgB,mBAsCtD,oBACA,YACA,QACA,oBACA,UAAkB,4DAA+D,EACjF,aACA,mBACA,eACA,cACA,CACA,iBACA,aACA,KAlCA,oBAAiC,q2lBAmCjC,mBACA,cACA,eAIA,mBAAwB,8BAAwD,EAChF,IACA,MAAwB,wBAAkC,GAAG,aAAwB,oBACrF,mCACA,SAEA,EADA,+BACA,iBACA,CAD6D,CAC7D,iCACA,sBACA,QACA,aACA,CAAiB,CACjB,aACA,QA1DA,GA2DA,CAAa,EAEb,MACA,MACA,KAvEA,IAwEA,4EAAiG,wBAAkC,GACnI,aACA,EAEA,4CAEA,MACA,MACA,KA7EA,KA8EA,MACA,aACA,CAAqB,CACrB,oBAAyC,EAAQ,+BAA+B,wBAAkC,GAClH,aACA,EAEA,cACA,qBACA,UACA,cACA,cACA,kBACA,SACA,CAAa,EAEb,OADA,MAAwB,wBAAkC,GAAG,aAAwB,oBACrF,CACA,CACA,SAEA,OADA,yCACA,IACA,CACA,CACA,8BACA,OACA,eACA,yBAAsC,SAAe,KACrD,UACA,WACA,qBACA,CAAa,CACb,CACA,CACA,4CAA0C,iCAAoC,EAC9E,+BAIA,EAHA,+BACA,EA7FA,yBACA,2BAEA,4DACA,kBACA,SACA,yEACA,CAAK,CA0FL,gBAEA,+BAIA,uBAEA,cACA,gBAKA,iBAEA,WAbA,OAeA,yBAEA,UACA,GACA,KA9IA,KA+IA,MACA,QACA,CAAqB,CACrB,sCAA2D,wBAAkC,GAC7F,aACA,CAAiB,CACjB,CAAa,IA/Ib,MAkJA,EAlJwC,KAkJxC,gBACA,eACA,KACA,SACA,WACA,CAAiB,CACjB,CAAa,GACb,CAAS,CACT,CAIA,wBACA,WACA,CACA,wBACA,WACA,CAUA,eACA,eACA,MAAoB,wBAAkC,GAAG,kCAAkC,gBAAgB,EAAO,qBAAqB,aAAa,IAEpJ,uBACA,uCACA,SACA,QACA,6BACA,aACA,CAAa,CACb,YACA,CAAS,EAET,MACA,MACA,KApMA,IAqMA,mCAAoD,EAAO,6CAA6C,wBAAkC,GAC1I,aACA,EAEA,kBASA,gCAEA,MAAoB,wBAAkC,GAAG,kCAAkC,mCAC3F,uCACA,OAHA,eAIA,QACA,aACA,CAAa,CACb,aACA,QAnNA,GAoNA,CAAS,CApN0B,CAsNnC,MACA,MACA,KAhOA,IAiOA,kFAAmG,wBAAkC,GACrI,aACA,EAEA,2DAEA,MACA,MACA,KAtOA,KAuOA,MACA,6BACiB,CACjB,oBAAqC,aAAa,+BAA+B,wBAAkC,GACnH,aACA,EAEA,MAAoB,wBAAkC,GAAG,kCAAkC,eAAe,oBAAuC,eAAe,aAAa,IAE7K,uBAeA,kBACA,iBACA,MAAoB,wBAAkC,GAAG,2BAA2B,gBAAgB,EAAO,qBAAqB,aAAa,IAE7I,uBACA,uCACA,SACA,QACA,cACA,MACA,CAAa,CACb,YACA,CAAS,EAET,MACA,MACA,KAlRA,IAmRA,mCAAoD,EAAO,6CAA6C,wBAAkC,GAC1I,aACA,EAEA,eAOA,kBACA,6BACA,MACA,KA/RA,KAgSA,MACA,QACA,CAAiB,CACjB,YAA6B,EAAO,gCAAgC,aAAa,kBAAkB,wBAAkC,GACrI,aACA,CAEA,CAIA,gBACA,qCACA,CAD8C,GAC9C,sBACA,gCACA,CAEA,mBAEA,CACA,kBACA,2BACA,CACA,mCACA,qCACA,CAD8C,GAC9C,uCACA,gCACA,UACA,+BACA,UACA,OAEA,EADA,8BACA,cACA,uFAEA,EACA,CACA,oFACA,WACA,gBAAsC,EAAU,EAIhD,eACA,oBAQA,CACA,MACA,gBAAkC,EAAU,EAT5C,CACA,MACA,WACA,gBAAsC,EAAU,CAQhD,CAAS,GAGT,MAFA,yBAEA,gBACA,EACA,oCAGA,gBACS,GACT,CACA,CAEA,QACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,mBACA,EAEA,sBACA,8BAEA,OADA,8DACA,GAGA,uBAEA,EADA,0BACA,MACA,GACK,EAAI,EACT,CAAY,sCA3gHZ,EA2gHY,aA5gHZ,EA4gHY,EAA6H,MACzI,YACA,OAAgB,QAAwB,oBAAmC,MAAe,EAC1F,GACA,UACA,qBACA,gBACA,MAEA,qBACA,OACA,EACA,oCACA,qBAEA,OADA,qBACA,CACA,EAEA,OACA,IAAY,uCAAqC,cACjD,KACA,IACA,EAEA,OAEA,YADA,uBACA,uBAEA,MACA,KACA,YAGA,aACA,IAEA,aADA,iBACA,CACA,qBAEA,UACA,4BAEA,CACA,CACA,SACA,gBACA,CACA,EAQA,GAAsB,mBAAa,OACnC,QACA,MAAoB,gBAAU,KAC9B,cACA,gEAEA,QACA,EACA,KAA0B,mBAAiB,GAChC,eAAwB,cAA2B,QAAc,IAG5E,iBACA,kBACA,SAEA,8DACA,SAEA,uCACA,mBACA,SACA,iBACA,0BACA,SAGA,QACA,CACA,uCACA,mBACA,SACA,eACA,aACA,SAGA,QACA,CACA,qBACA,oCACA,SAEA,YAAkB,WAAkB,IACpC,8EACA,SAGA,QACA,CAEA,cACA,SAAsC,cAAQ,OAC9C,OACA,eAAY,+CAA+F,UAC3G,KACA,8BAEA,EAAoC,aAAO,sDACvC,eAAS,MACb,OACA,QACA,MACA,CAEA,EADA,eAGA,oBACA,OACA,EACA,SAEA,QACA,cACA,2BACA,wCAEA,wBACA,oBACA,mBACA,2BACA,0BACA,IAGA,CAAK,YACL,UACA,MACA,uCACA,aACA,MACA,wCAAwD,EAAG,GAC3D,QACA,EACA,EAAmB,aAAO,KAC1B,WACA,eAEA,mBACA,YAEA,mBAGA,aACA,SAEA,QALA,eAMK,cACL,EAAqB,aAAO,KAC5B,aACK,KACL,EAAoB,aAAO,KAC3B,mBACK,KACL,UACA,IACA,iDACA,MACA,wCAA4D,GAAS,SAErE,IACA,CACA,SACA,gBACA,CACA,EAEA,oBACA,IACA,WACA,gCACA,iBACA,aACA,CACA,SAEA,GADA,iBACA,EACA,OAEA,CACA,EACA,YACA,IACA,WACA,gCACA,sBACA,aAEA,CACA,SACA,iBACA,UACA,CACA,EACA,YACA,IACA,UACA,sBACA,CACA,SACA,gBACA,QACA,CACA,KACA,CACA,EACA,MACA,IACA,WACA,OACA,CACA,SACA,gBACA,CACA,EACA,oBACA,uBACA,mBACA,gCAGA,OADA,mDAEA,EACA,eACA,uBAEA,OADA,iCAEA,EACA,eACA,gBACA,qCACA,uCACA,EACA,YACA,MACA,oCACA,sBAEA,OADA,kCAEA,EAIA,YACA,MACA,oCACA,sBACA,oCACA,EAKA,OACA,UACA,YACA,oBACA,0BACA,gBACA,yBACA,SACA,WACA,UACA,SACA,mBACA,mBACA,WA1BA,IACA,WA0BA,0BAlBA,IACA,uBACA,sCACA,EAgBA,iBACA,WACA,CACA,CAEA,uBAAkC,0CAAqD,EAEvF,IAAY,YAAW,KACnB,eAAS,iBAEb,SAAkD,cAAQ,OAiB1D,MAhBI,eAAS,MACb,kBACA,IAEA,sBACA,KAEA,WACA,CACA,SACA,uDACA,CACA,IAGA,CAAK,KACL,CACA","sources":["webpack://_N_E/./node_modules/@txnlab/use-wallet/dist/esm/index.js"],"sourcesContent":["import require$$0, { useState, useEffect, createContext, useContext, useMemo } from 'react';\n\nvar PROVIDER_ID;\r\n(function (PROVIDER_ID) {\r\n PROVIDER_ID[\"KMD\"] = \"kmd\";\r\n PROVIDER_ID[\"CUSTOM\"] = \"custom\";\r\n PROVIDER_ID[\"PERA\"] = \"pera\";\r\n PROVIDER_ID[\"DAFFI\"] = \"daffi\";\r\n PROVIDER_ID[\"LUTE\"] = \"lute\";\r\n PROVIDER_ID[\"MYALGO\"] = \"myalgo\";\r\n PROVIDER_ID[\"ALGOSIGNER\"] = \"algosigner\";\r\n PROVIDER_ID[\"DEFLY\"] = \"defly\";\r\n PROVIDER_ID[\"EXODUS\"] = \"exodus\";\r\n PROVIDER_ID[\"KIBISIS\"] = \"kibisis\";\r\n PROVIDER_ID[\"WALLETCONNECT\"] = \"walletconnect\";\r\n PROVIDER_ID[\"MNEMONIC\"] = \"mnemonic\";\r\n PROVIDER_ID[\"MAGIC\"] = \"magic\";\r\n})(PROVIDER_ID || (PROVIDER_ID = {}));\r\nconst DEFAULT_NETWORK = 'mainnet';\r\nconst DEFAULT_NODE_BASEURL = 'https://mainnet-api.algonode.cloud';\r\nconst DEFAULT_NODE_TOKEN = '';\r\nconst DEFAULT_NODE_PORT = '';\n\nconst getAlgosdk = async () => {\r\n return (await import('algosdk')).default;\r\n};\r\nconst getAlgodClient = (algosdk, algodClientOptions) => {\r\n const [tokenOrBaseClient = DEFAULT_NODE_TOKEN, baseServer = DEFAULT_NODE_BASEURL, port = DEFAULT_NODE_PORT, headers] = algodClientOptions || [];\r\n return new algosdk.Algodv2(tokenOrBaseClient, baseServer, port, headers);\r\n};\r\nclass Algod {\r\n algosdk;\r\n algodClient;\r\n constructor(algosdk, algodClient) {\r\n this.algosdk = algosdk;\r\n this.algodClient = algodClient;\r\n }\r\n static async init(algodOptions) {\r\n const algosdk = await getAlgosdk();\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n return new Algod(algosdk, algodClient);\r\n }\r\n}\n\nconst audio = 'data:audio/mp3;base64,SUQzBAAAAAIYBlRJVDIAAAAWAAAAMTAgU2Vjb25kcyBvZiBTaWxlbmNlVFBFMQAAABIAAABBbmFyIFNvZnR3YXJlIExMQ1RBTEIAAAAMAAAAQmxhbmsgQXVkaW9BUElDAAIPAgAAAGltYWdlL2pwZWcAAwCJUE5HDQoaCgAAAA1JSERSAAAEOAAABDgIBgAAAOwQbI8AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACD0AAAg9AQWVVbYAAAAHdElNRQffCgsFHDEDbwR2AAAgAElEQVR42uzde5RVZd0H8N8wDDcBAS8o6oCJVyxTsDSxojJvgVYq3jVNUQgzaZWmpqh56+ItNa+kr4Cay9Q0DQ1DWb2WeSm8pGRy0RAEgRFhuIzz/tFbC5yZc86eOWfmPDOfz1rvemvvZz9779+zz3DOt2fvXRER9QEAAACQsE5KAAAAAKROwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8ABAAAAJE/AAQAAACRPwAEAAAAkT8BBq9pss81i4sSJMXToUMUAAACgaCoiol4ZaA177rln3HzzzdG/f/+oqamJww8/PGbNmqUwAAAAtJgZHLSKk046Ke67777o379/RET07t07pk6dGtXV1YoDAABAi5nBQcmde+65MW7cuEbXvfjii3HIIYfE2rVrFQoAAIBmq4yIC5WBUqioqIgf/ehHceqppzbZZosttohevXrFk08+qWAAAAA0/zdomMFBCVRWVsZPfvKTGD16dEHtjzrqqJgxY4bCAQAA0CwCDoquU6dOccMNN8SoUaMK3mbOnDkxYsSIWL16tQICAACQmVtUKLoLL7wwjj766Ezb9OnTJz788MP44x//qIAAAABkZgYHRXXyySfHxRdf3Kxt16xZEyNGjIg333xTIQEAAMjEa2Ipmv333z8mTpzY7O27dOnSou0BAADouMzgoCh23333uO+++6J79+4t7utLX/pSvPLKK4oKAABAwczgoMW22mqruOOOO4oSbkREjBs3TlEBAADIxAwOWqRTp05x3333xV577VW0Puvq6uIzn/lMzJ8/X4EBAAAo7PepEtASp59+elHDjYiIysrKOO200xQXAACAgpnBQbPtuuuu8cgjj0RVVVXR+66trY0999wzlixZotAAAADkZQYHzdKtW7e4/vrrSxJu/Kf/r3/96woNAABAQQQcNMv5558f22+/fUn3MWrUKIUGAACgIAIOMvvCF74Q3/jGN0q+nz322COqq6sVHAAAgLwEHGRSVVUVl156adH7Xbp0aaPLzeIAAACgEAIOMjn22GOLPqvimWeeic997nOxaNGiBusOOeQQRQcAACAvAQcF69GjR5x55plF7fOhhx6KI488MhYvXhxTp05tsH7IkCGx3XbbKT4AAAA5CTgo2De/+c3YbLPNitbfM888E+PGjYs1a9ZERMTkyZOjvr7hW4vN4gAAACAfAQcF6dOnT4wdO7Zo/S1dujTGjh0bdXV1/1321ltvxaxZsxq0HTFihAEAAAAgJwEHBfnWt74VvXv3Llp/Z555ZrzzzjsNlj/++OMNln3iE5+Irl27GgQAAACaJOAgr/79+8dJJ51UtP5uu+22RoOMiIhp06Y1WFZVVRWf+MQnDAQAAABNEnCQ19ixY6Nbt25F6evdd9+Nyy+/vMn1s2bNanRmx5577mkgAAAAaJKAg9wXSKdOMWrUqKL199Of/jQ++OCDnG0am90h4AAAACDn71clIJe99tor+vfvX5S+3njjjZgyZUredo0FHMOGDTMYAAAANEnAQU4jR44sWl8/+tGPYt26dXnbPf3007Fq1aoNlm2yySax7bbbGhAAAAAaJeCgSZWVlXHwwQcXpa9nn302HnvssYLarl69Ol588cUGyz/1qU8ZFAAAABol4KBJe++9d2y66aZF6euiiy7K1P6VV15psGyPPfYwKAAAADRKwEGTDjnkkKL088gjj8Rzzz2XaZuXX365wbKBAwcaFAAAABol4KBRnTt3joMOOqjF/axbty4uvfTSzNs1NoNjq622MjAAAAA0SsBBo/bZZ5/o27dvi/v5n//5n3jzzTczb/faa69FfX39BssGDBhgYAAAAGiUgINGFeOBnitWrIirrrqqWduuXr063n///Q2Wde/evSihCwAAAO2PgING7brrri3u46abborFixc3e/ulS5c2WOY2FQAAABoj4KBRQ4YMadH2a9eujV/+8pct6mPZsmUNlrlNBQAAgMYIOGigT58+LQ4SHnrooViyZEmL+mgs4DCDAwAAgMYIOGhg8ODBLe6jpbM3IiI++OCDBssEHAAAADRGwEED/fr1a9H2s2bNiueee67Fx9HYA0UFHAAAADRGwEEDLX1TyaRJk4pyHJtvvnmDZZ7BAQAAQGMEHDTQkhkcy5YtiwceeKAox7HZZps1WNazZ08DBAAAQAMCDhro06dPs7e9++67o7a2tsXH0KVLl+jdu3eD5Z07dzZAAAAANCDgoIHKyspmbVdfXx933nlnUY5hu+22K+qxAQAA0L4JOGhg5cqVzdpu+vTpMWfOnKIcw/7779/ocgEHAAAAjRFw0EBzA45ivBr2Pw488MBGl7tFBQAAgMYIOGjggw8+yLzN3Llz48knnyzK/rfaaqv4+Mc/3ug6AQcAAACNEXDQQHNmcEyePDk+/PDDouz/oIMOanKdW1QAAABojICDBpoTcDz22GNF2XePHj1i7NixTa4XcAAAANAYAQcNZL1FZc6cOfGPf/yjKPseP3589O/fv8n1Ag4AAAAaI+CggawzOKZNm1aU/W699dZx2mmn5WzjGRwAAAA0RsBBA1lncDz++ONF2e95550XXbt2zdmmWM/5AAAAoH0RcNBAlhkcNTU18ac//anF+9xzzz1j1KhRedstWrTIAAEAANCAgIMG3nnnnaivry+o7fTp02PdunUt2l9FRUVMnDixoLb/+te/DBAAAAANCDhoYPXq1bFw4cKC2hbj+RuHHXZYfPKTnyyo7YIFCwwQAAAADQg4aNScOXPytlm3bl1Mnz69Rfvp0aNH/OAHPyi4vYADAACAxgg4aNTcuXPztvnzn/8cNTU1LdrPuHHjcr4W9qMEHAAAADRGwEGjCgk4Xn/99RbtY6uttorTTz890zaewQEAAEBjBBw0qpBbVJYvX96ifVx55ZXRrVu3TNuYwQEAAEBjBBw0at68eXnbtCTgOO6442LEiBGZtxNwAAAA0JjOSkBjCpnBsWzZsmb1PXDgwLjgggsyb7dmzZp47733DA4AANCqKioqmr0sa9tCt1+3bl18+OGHBmc9Ao717LTTTrHjjju2yoVbqu1b+mFaf3ltbW3OW0h233336Ny5c6Z9VVRUxJgxY6JHjx6Zx2fBggVx4oknluRcy2Vcy+EPain2laVdSuea0nWVyjXoXNvn562tx6pcz7UUY9Xevos4V99FfBfxXaRcPgPl6OSTT45HH33UD/n1xzQi6pXh3yZMmBATJkxQCAAAAMraKaecEo888ohCrMcMjiJZvHhxo7ds1Nc3nh9lWZ61j6Zk7bu6ujp69+7dZH8LFiyIxYsXF3yM3bp1ix122KHZSens2bPj/fffb9b5t8U4pDDG5VyTVMcy6z6LcZ4pjHG51NvnNYyxz6ux7EDfF4yxsWwP36E68vf7Aw44IMaNG9fk+k6dPFJTwFEi1113Xdxyyy3t6py+973vxZlnntnk+nvvvTeuuOKKgvqqqqqK3/72t80ON9asWRNf/vKXY/Xq1S42AACg3dtpp51yrk/9FptSEPnQpL/97W851/fp06fgvs4666wYMmRIs4/lL3/5i3ADAADoMPI9QNQMjkZqogQ0ZdasWTnX9+3bt6B+9thjj/jWt77VomP54x//aEAAAIAOQ8CRnYrQpLfffjvna1kLmcHRrVu3uPbaa6OysrJFxzJz5kwDAgAAdBj5ntch4GikJkpALrlmcVRXV+fd/rzzzouPfexjLTqGVatWxQsvvGAwAACADsMMjuxUhJxyPYejuro6unbt2uT64cOHxze+8Y0WH8PMmTNj7dq1BgMAAOgw8s3g8JDRhgQc5JQr4OjUqVOTszM22WSTuOaaa4ryobvzzjsNBAAA0KHkm8HR0scAtEcCDnLK96DR7bffvtEP2o033hhbbrlli/c/Z86cmD59uoEAAAA6FLeoZKci5DRv3rxYvnx5k+sbCzjOOeecGD58eFH2f8cdd+SdmgUAANDeeMhodipCXrlmcXw04Dj44INj7NixRdnvqlWrYurUqQYAAADocMzgyE5FyCvXczjWDzgGDx4cV111VdH2e//990dNTY0BAAAAOpx8AYeHjDbUWQnIJ1fAsd1220VlZWV07949br/99ujZs2fR9jtp0iTFBwAAOiQzOLJTEfLKFXB06dIlqqur46qrrorBgwcXbZ9/+tOf4pVXXlF8AACgQxJwZKci5DV37tyct4pcfvnlcfDBBxd1nzfeeKPCAwAAHZaHjGanIhT0wXrppZeaXL/vvvsWdX9PPfVUTJs2TeEBAIAO/Tss5495AUfDmigBhch1m0oxrVu3Ls4//3wFBwAAOjS3qGSnIhQk16tii+n222+P2bNnKzgAANChCTiyUxEK0hozOBYvXhw/+9nPFBsAAOjwBBzZqQgFefPNN2PFihUl3cell16a82GmAAAAHYWAIzsVoeAP18svv1yy/l988cW45557FBoAACA8ZLQ5VISCvfLKKyX74J533nl5P8AAAAAdRb4ZHBUVFYr0EQIOCjJkyJA47LDDStL3TTfdFM8//7wiAwAA/D+3qGSnIuQ1aNCgmDJlSvTq1avofb/44otx2WWXKTIAAMB6BBzZqQg59e/fP+65557YbLPNit73+++/H6effnqsXbtWoQEAANYj4MhORWjSxhtvHFOnTo1tttmmJP1/73vfi7lz5yo0AABA1h/zAo6GNVECGtO9e/e46667YqeddipJ/1OnTo0HH3xQoQEAABphBkd2KkIDVVVVceutt8bQoUNL0v/rr78e5513nkIDAAA0QcCRnYqwgYqKirjmmmtixIgRJel/9erVcdppp8WqVasUGwAAoAkCjuxUhA1ccsklceihh5as/3PPPTf+/ve/KzQAAEAOAo7sOisBEf+euXHppZfGCSecULJ93HjjjTFlyhTFBgAAyCNfwFFRUaFIHyHgIDp16hQ//elPY/To0SXbxyOPPBKXXHKJYgMAABSgvr4+7+84NiTg6OgXQOfOce2115b0tpTnn38+xo8fn/cDCgAAwL+5RaUZv2+VoOOqqqqKG2+8MQ466KCS7WPevHlx4oknRm1trYIDAABlpbHbPJq69aNYywtt27lz7p/rAo6GBBxFMmzYsFi9enWbfwgKXV5VVRWjR4+OHXbYoWQ1qa2tjYcffjgOP/zwZp9j1vMs5R+jch3LcqxJKc+znGpVLv9QpjrGqX5e29sY+7waS2NsjP0b4zthR/hO2B4JOAQcJTNy5MgYOXKkQqynW7duMXbsWIUAAAAoMgFHQwKOIlm8eHEsW7aswfLGnjvR1LMoWtq2Keu3raioiIEDB0aPHj1KWo958+bF0qVLS16HLLVpzbEo13Mrh/PNcm6pjaVza/3jNZbOrb2dm3/v2te5+Qym9z3FZ9C5ldP3lL59+8a9994r4BBwtL7rrrsubrnllrI+xt69e8eUKVNKHm5ERBx88MGxZMkSFwYAAEAzbLLJJjnXCzgaqYkSdAz9+vWL++67L/bYY49W2V9r7QcAAKA98haV7FSkA+jdu3fce++9seuuu7baPocPH67wAAAAzSTgyE5F2rlu3brFHXfcEbvsskur7lfAAQAA0Hz5ni3Skd4YUygBRzvWuXPnuOmmm+LTn/50q+97p512ik033dQgAAAANIMZHNmpSDtVUVERP/vZz2K//fZrs/2bxQEAANA8Ao7sVKSduvDCC+Owww4r6T5mzpwZNTU1Ta7fd999DQQAAEAzCDiyU5F2aPz48XHKKaeUdB/PPfdcnHjiifHXv/61yTYCDgAAgObJF3BUVlYq0kcIONqZL37xi3H22WeXdB+vvvpqHHvssbFy5cp4/vnnm2y39dZbx6BBgwwKAABARh4ymp2Aox0ZOHBg/PznPy/phT537tw4+uijY/ny5RER8cILL+Rs7zkcAAAA2blFJTsVaSe6desWt956a2y88cYl28eiRYviqKOOioULF/53Wb6Aw20qAAAA2Qk4slORduLyyy+PIUOGlKz/mpqaOOqoo2LOnDkbLH/33XfjrbfeanK7ffbZx9QpAACAjPLdoiLgaKQmSpC+448/Po444oiS9V9bWxvHH398vPrqq42uzzWLo1+/fiUNXgAAANqrXLM4BByN1EQJ0rbHHnvExRdfXLL+161bF6eeemr8+c9/brKN21QAAACKL1fAYaZ8QwKOhHXp0iWuvfbaqKqqKkn/9fX1ceaZZ8YTTzyRs12uN6lEeNAoAABAc3+TNflj3gyOhjVRgnSNHz8+Pvaxj5Ws/x/+8Idx//335203a9asWLduXZPr99prr5KFMAAAAO1VXV1d0z/mBRwNa6IEadp2221j/PjxJev/5z//edx2220FtV21alW89tprTa7v3r17DB061KABAABkkOsWlcrKSgX6CAFHoq644oro0qVLSfr+/e9/H5dffnmmbfLdpuI5HAAAANl4Bkc2nZUgPV/72tdK9lyLN998M8aNG5f3ncsf9fzzz8dxxx3X5Prhw4fHj3/844iI2GSTTWLPPfeMXXbZJfr16xd9+/bd4P/36dMnVq5cGUuWLInFixfH4sWL//uf586dGzNmzIhly5a5EAAAgHbNW1SyEXAkpnfv3nHhhReWpO8PPvggvvGNb0RNTU3mbV988cWc63fbbbf42c9+Fp/61KcKem5Iz549Y/PNN290XV1dXTz77LPx+OOPx7Rp0+KNN95wYQAAAO2Oh4xmI+BIzLnnnhubbrppST44Z5xxRrz++uvN2n727NmxYsWK6NmzZ6Pru3TpEkceeWRRjrWysjL22muv2GuvveL888+PN998Mx577LG4+eabY+HChS4SAACgXTCDIxsVScigQYPimGOOKUnf11xzTTz66KMt+uDlm8VRKttuu22cfvrpMXPmzBg/fnzJnk0CAADQmgQc2ahIQk455ZSSXMRPPPFE/OQnP2n29hUVFXHEEUfE4MGD27Q+G220UZxzzjkxY8aMOPDAA10wAABA0gQc2ahIIjbeeOMYPXp00ft9880341vf+lbmh4r+xy677BIPPvhgXH311bHFFluURa0GDhwYt912W9x7772x8847u3gAAIAkeYtKNgKORBx33HHRo0ePon9YzjjjjGY9VLRXr15x8cUXx+9+97sYNmxYWdZs+PDh8dhjj8URRxzhAgIAAJLjIaPZqEgCqqqq4uSTTy56vzfffHM899xzmbf76le/Gk8//XScfPLJUVlZWfa1u/rqq2PChAkuJAAAICluUclGRRJwyCGHRP/+/Yva5z//+c+48sorM21TWVkZl156aVx//fVNvsK1XE2YMCGuuuqqqKqqckEBAABJyBVwlPv/2NwWBBwJGDNmTNE/JN/5zneitra24G169+4dd911V5x44onJ1nH06NFx1113Ra9evVxUAABA2fMMjmwEHGVu+PDhMWTIkKL2efvtt8ezzz5bcPuBAwfGb37zm/jc5z6XfD333XffeOCBB4o+IwYAAKDY3KKSjYqUua9+9atF7W/OnDlx2WWXFdz+05/+dDzyyCOx/fbbt5ua7rzzzvHLX/4yunXr5gIDAADKloeMZtNZCcpbsWdNfPe7341Vq1YV1PaTn/xkTJ06tV0GAbvttltcddVVcfrpp7vIAICSa2oqeTGWZ52mXoy+2+J8inGe5XTcxTjPFI67PV2zbTGWuZ4hKOAQcJTMgQceGNtss01RPwQbb7xxDBgwoGjHOH/+/Bg1alSMGjUq77H07NkzDjjggHY9y+GQQw6JwYMHx9///vd2/Y9WOf3x949W+/likuoXLWNsjP0w8m9MW/2NACg2AUcjf5cjojspCGQAACAASURBVF4Z/m3ChAleJwoAAEDZW7hwYey+++4KsR4zOIrk1Vdfjblz5zZY3tg9U03dR/XR5cOGDSvawzDnz58fL7zwQt5jiPj3cze22GKLDjN2a9eujccffzyWLVtWlHErZdumlOIYWvt8s9SgXMfHuXXMczOWzs25Ff/flfb8GfT3xbm5Tp1blrZPPPFEbLfddo22N4NDwFEyd999d9xyyy1F66+qqipeeeWVov2AP/zww2PevHl5206cOLFDhRv/qfWuu+4aX/jCF2LlypUuZgAAoCzU1dU1uU7A0UhNlKA8DR06NDbaaKOi9HXXXXcVFG7svffeccopp3TIeldXV8cZZ5zhwgMAAMpGrtfEVlZWKtBHCDjK1Gc/+9mi9LNy5cq4+uqr818InTrFxIkTO3TNTzvttBg0aJCLDwAAKAteE5uNipSpYr0e9t5774133303b7vRo0fHrrvu2qFr3qVLlw4f8gAAAOUj1wwOb3JqSMBRpnbaaaei9DN58uS8bXr27Blnn322okfEfvvtF1/84hcVAgAAaHO5Ag4zOBqpiRKUn169ekX37t1b3M9f//rXePnll/O2+/a3vx2bbbaZwv+/iy66KKqqqhQCAABoUwKObFSkDG2++eZF6WfKlCl522y55ZYd9sGiTdl2223j1FNPVQgAAKBNCTiy8ZrYMtS/f/8W97Fy5cr49a9/nbfdqFGjokuXLm1ynq+++mrceuutUV1dHQMHDozq6uqorq6OTTfdtM3HYMyYMXHzzTfH2rVrXZAAAECbEHBkI+AoQ8W4XeShhx6KFStW5G138MEHF/346+rq4sknn4y+ffvG0KFDm2zXp0+fmDp1aoPlgwYNimOOOSZGjx7dZmHHpptuGgcccED85je/cUECAABtItdbVDxktCGRTxkqxgyOQn6Y9+/fP2cAkdW8efPiyiuvjD333DOOP/74eOyxx3K233LLLaNnz54Nls+ZMyd+9KMfxdChQ+PUU0+Np556KucHu1SOO+44FyMAANBmzODIRkXKUEufwbF27dp45pln8rY76KCDipL6zZo1K4488sjYe++94+qrr4533nknIiJef/31vNvusMMOOc/j4YcfjiOPPDI+85nPxOOPP96q47DPPvvEoEGDXJAAAECbEHBkoyJlqKUBx1/+8pdYtWpV3nYHHnhgi/ZTU1MT5557bhx00EGNzrJ47bXX8vax/fbbF7SvuXPnxoknnhgTJ05stediVFRUxLHHHuuCBAAA2kSugCNCyNGgHkpQflp6i8rTTz+dt02/fv1i7733bvY+fv/738dnP/vZmDRpUtTV1TXaZv78+bFy5cqc/eSawfFR9fX1cdNNN8UhhxwS8+bNa5WxGD16tFfGAgAAbULAkY1qlKGWzuAoJODYb7/9orKysln9X3vttXHCCSfEokWLcrarr6+P2bNn52yTJeD4jxdffDG+/OUvt8oDQDfZZJM44IADXJQAAECry/csQg8a3ZCAo515//3348UXX8zbbtttt83c99q1a2PMmDFx+eWX500S/yPfbSrNCTgi/n17zJgxY+Luu+8ueU332WcfFxYAANDqzODIRjXK0OLFi5u97d///vcmbxlZX9++fTP3feGFF2aeNZHvQaNbb7119OjRo9nne/bZZ8dzzz1X0vHYY489XJQAAECrE3BkoxplaMmSJc3e9o033iioXZ8+fTL1e++998akSZMyH0++GRwVFRUxePDgZp/vmjVr4pvf/GYsXLiwZOOx0047Rffu3V2YAABAqxJwZKMaZaglAcc//vGPgtplmcHxt7/9Lb7//e8363gKeZNKc29T+Y+FCxfGySefHGvWrCnJeHTu3Dl22203FyYAANCqBBzZqEYZasktKsUOOJYsWRInn3xyrF69ulnH8/bbb8cHH3yQs01LA46IiOeff77ZIUwh3KYCAAC0Ng8ZzUbAUYbK6RaVCRMmxNtvv92iD2S+53AUI+CIiLjnnnvi97//fUnGRMABAAC0tnwBR3PfjNleCTjKUHNncHz44Ycxd+7cgtr27t07b5t58+bF448/3uLzKdWbVBpz0003lWRMdt99dxcmAADQqtyiko1qlKH58+c3a7sVK1bEunXrCmq7dOnSvG2mTJmSNzEsRL6Ao7q6Orp27VqU2s2cOTNefvnloo9J1oeyAgAAtJSAIxvVKEMvv/xyQQHERy1btqzgtvPmzcu5ft26dXHPPfcU5XzyBRydOnWK7bbbrmj1K8Usji5durgwAQCAViXgyEY1yvQifvrppzNvt3z58oLb5psl8sQTTxTt1aut8SaV9T344IPxzjvvFHVMKisr3d8GAAC0Kg8ZzUbAUaZmzJiReZssAUe+Z3X89re/Ldq5LFiwIN5///2cbYoZcKxduzZuu+22oo+JWRwAAEBrMoMjG9UoU80JOIp5i8qCBQuKej6t9SaV/5g8eXJRnh+yPgEHAADQmgQc2ahGmfrXv/4Vs2fPzrRNXV1dwW3z3aJS7Fs85syZk3N9MZ/BEfHvsKclr7dtTLEehAoAAFAIAUc2qlHGss7i6NevX8FtZ8+enfONK4sWLSrqueS7JWabbbYpev0KefZHpg+LPx4AAEArEnBk/M2mBOXrySefzNQ+S8BRU1MTzzzzTKPrVq1alfeZGVnluyWmR48esckmmxR1n8UMONatWxeLFy92UQIAAK3GQ0azEXCUsaeeeirTbRZZAo6IiGnTprXahyTfDI6I4s/iyPfcjyzeeuutnDNeAAAAii3fDA5vetyQgKOM1dXVxR133FFw+6wzIJoKOLp16xabbbZZUc+lkICjurq6qPss5gyOfM8QAQAAKDa3qGTTWQnK25QpU+K73/1uQW/w6NKlS2y00UbxwQcfFNT3vHnz4tVXX42dd965wbptttkm3n333aKdx8KFC2PNmjU5z2Prrbcuau1mz54d9fX1RZmR8uabb7oYAYAWaew7SVPfU4q1vFR9l/K4i3GOKZ9Pa49lW12brtnC2vfp00fAIeBofQceeGCjt1gU4wMzb968GDx4cEHHcfXVVzf5rIjG+m7qtouzzz670VkLLTmf2tranAHHkUceGdtvv31RvySsXLkyNtpooxaP79ChQ+P6669P8o95Of2R78hfQFI+n478BcQY+5Lph1HH+jem1NcVQLH5O/SRekREvTL824QJE2LChAkKAQAAQNnbb7/94uWXX1aI/2cGR5G89NJL8cYbbzRY3thTb5t6Em6utiNGjCjoIaJLliyJ6dOnZzqGvfbaKwYOHLjB+qVLl/73GR3NOd7Glu+5556xww47NHnsNTU18dBDDxWtZhERhx12WPTs2bPF43vPPffEihUrilKH1mrblHI93izbZ6lBSufr3NI9t/b6Gcxybq5T5+bc0vn7Yiydm3Nr23PLsv1ll10WJ5xwQpPH4hYVAUdJ/OpXv4pbbrmlZP1/9atfbfIWifX17ds3Lrjggli2bFnBfe+4444xffr0DaY39e3bN3784x/Hv/71r6Kdw5gxY+KCCy5ocn3Xrl3j+9//fqY/LvmMHDmyxQHH66+/Ht/5zndc5AAAQKvykNFsVCMRDz74YLz66qv5B7RTp/jsZz+bqe/XXnstHnvssQbL999//6KeQ743qXTt2jU233zzou6zR48eLe5jxowZLkAAAKDV5fsffwUcH6mHEqThww8/jIsvvrigtiNGjMjc/9VXX91g2UknnVTU9yoX8qrYYr5JZcCAAdG9e/cW9yPgAAAA2kJdXV3uH/QCjg3roQTp+MMf/hBPPfVU3nb77bdf5h/2s2bNismTJ2+wbLvttotDDz20aMc/f/78vG2qq6uLtr/dd9+9xX2sWbMm/vd//9fFBwAAtDq3qGSjGom56KKL8l7k/fr1i+OPP75Zfb/99tsbLPv+979f0MNNC7FixYpYsmRJzjblFnD8+c9/jlWrVrnwAACAVifgyEY1EvPKK6/Efffdl7fd6aefHt26dcvU9/vvvx/f/e53N1i29dZbxxlnnFG04583b17O9dtss03R9lWMgOP+++930QEAAG3CMziyUY0EXXHFFVFbW5uzzeabbx7HHnts5r5nzJgRt99++wbLli5dWrRjzxdwFGsGR/fu3WO33XZrUR+LFy8WcAAAAG3GMziyUY0ELViwIK677rq87caNGxddu3bN3P8Pf/jDuOeee/773996662iHXu+B40W6yGjX/nKV1r8BpU77rgj1qxZ44IDAADaRL5bVCoqKhRpPQKORF133XXxt7/9LWeb/v37xzHHHNOsD9GECRNi0qRJsWbNmgbP5WiJfAHHVlttVZQU8sgjj2zR9mvWrIk777zThQYAALQZz+DIRjUStW7duvj2t7+dd4bB+PHjY+ONN27WB+ncc8+NIUOGxAsvvFC04853i0pVVVVsscUWLdrHoEGDYq+99mpRH7/+9a/j3XffdaEBAABtRsCRjWok7LXXXosrr7wyZ5v+/fvH1Vdf3ex9fPDBB7F69eqiHXO+GRwRLX8Ox+jRo1s0VWvt2rVxww03uMAAAIA2JeDIRjUS94tf/CL+8pe/5Gyz//77x6mnnloWx7tgwYJYu3ZtzjYteZNKr169mnVbzvp+/vOfx+zZs11cAABAmxJwZKMa7eCCP+OMM2LVqlU525177rlFeW1qS9XV1eV9pkdLZnBMmDAhNt1002ZvP3v27BbNeAEAACjm772cP+gFHBvWQwnSN2fOnDj//PNztqmqqopf/OIX0bt37zY/3nzP4Wjum1R23HHHOOmkk1r0x+Oss87KO8MEAACgNXhNbDaq0U5MmTIlJk+enLPNNttsUxazE/I9h2PAgAHN6vfiiy+Ozp07N/u4Jk2aFM8995yLCQAAKAv19fW5f9ALODashxK0Hz/4wQ/i+eefz9nmgAMOiEsuuaRNPwj5Ao7m3GIycuTIGD58eLOP6aWXXorLLrvMRQQAAJQNt6hkoxrtyNq1a+Ob3/xm3tebnnTSSXHjjTdGly5d2uQ4892istlmm2Xqb8cdd8z7Nplc5syZE8ccc0ysXLnSRQQAAJQNt6hkoxrtzDvvvBNjxoyJdevW5Ww3cuTImDp1aps8kyPfDI5+/foV/EHdaqutYurUqbHxxhs361gWLlwYRx55ZN5QCAAAoLXlm8FRUVGhSOsRcLRDzzzzTJxzzjl579fae++949e//nVsscUWrXp8+QKOTp06Rb9+/fL207dv35g6dWqzj7+mpiaOPvrovDNKAAAA2oJncGSjGu3U5MmT49xzz83bbuedd46HH344dthhh1Y7tpqamli+fHnONvluU+nevXvceeedMXjw4GYdw4oVK+KEE06IV1991cUCAACUJc/gyEY12rFf/vKXBYUcAwYMiN/85jcxZsyYqKqqapVja8mDRgcMGBBTpkyJoUOHNmvfc+bMia985Svxpz/9yUUCAACULc/gyEY12rlJkyYVFHL06tUrLrjggpgxY0bsv//+JT+ufAFHUzM4Dj300Jg+fXp8+tOfbtZ+Z8yYEQceeGC8/vrrLg4AAKCsmcGRjWp0AJMmTYrzzjuvoLaDBg2KSZMmxa9+9avYZZddSnZM8+fPz7n+ozM4evfuHTfccEPccMMNzX4w6k033RTHHnts3ttjAAAAyoGAIxvV6CBuv/32OP/88wtuv88++8S0adPiJz/5SebXthYiywyOz3/+8/Hkk0/GoYce2qx91dTUxPjx42PixIl5p3gBAACUCwFHNp2VoOO47bbboqKiIi666KKC2nfq1CmOPvro+PrXvx5PPfVU/O53v4snnngiFi1a1OJjyRdwDB48OE477bQ46qijYvvtt2/2fh544IG48MILi3LMAAAArUnAkY2Ao4O59dZb4/3334+LLrooevXqVdA2Xbt2jf322y/222+/qK+vj+effz6mTZsW06ZNi9dee61Zx/Huu+/mXL///vu36Fkg//znP+Pss8+OmTNnGnQAACBJAo5sBBwd0D333BNPPfVUXHHFFfGlL30p07YVFRUxdOjQGDp0aJxzzjkxZ86cePzxx+Oll16KOXPmxNy5c/POlqisrIyuXbuW5NxWr14d1157bVx//fWxZs0agw0AACRLwJGNgKODWrBgQRx//PHxta99Lb73ve9FdXV1s/oZNGhQnHLKKRssW7lyZSxYsCBWrVoVq1evjtra2qitrY2qqqqorq6Orbbaquivo62trY2pU6fGjTfeGG+99ZYBBgAAkpcv4KioqFCk9Qg4Orj7778/HnzwwRg5cmSMGzcuhgwZ0uI+e/ToEdttt12rHH9NTU1MmjQpbr311liyZIkBBQAA2g0zOLIRcBB1dXXxwAMPxAMPPBCf//zn49RTT43hw4dH587le3ksXLgwbrnllrjzzjtjxYoVBhEAAGh3BBzZCDjYwB/+8If4wx/+EP369YsDDzwwRo4cGZ/5zGfKIuxYsWJFTJ8+PR599NF49NFHPWMDAABo1+rq6nKuF3BsSMBBo957772YPHlyTJ48+b9hx7777hvDhg2LAQMGtNpxLFq0KH73u9/FY489FjNnzoy1a9caHAAAoEMwgyMbAQd5rR92RERsscUWMWzYsBg6dGgMGzYshgwZEt26dSv6fi+++OL4xS9+EfX19QYBAADocPL9FhJwbEjAQWbvvPNOPPzww/Hwww//d1m/fv1iyy23jAEDBsSWW2753//cs2fPqKura/T/dtxxxxg2bFiT+6mtrRVuAAAAJdPUW0iKsTzrG04aa58vwBBw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AAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4AAABgT3AAAAAAe4IDAAAA2BMcAAAAwJ7gAAAAAPYEBwAAALAnOAAAAIA9wQEAAADsCQ4A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/+MYxPkNE2IkGABNSVOQ7HM+7DuUt3Q7mjpUFmcjr1unl8NuVbD7m6plQSJtQIuLMFbkdTOVo4XNGpkZmZshRj5KVGyRR6oW/+MYxP8P82okOACTLDX0hZ/NMwIyV2MZOyleP56///LM+7JePftrs1g+k+jJlnog5CvNvjmcS3cDTZkDKhtl8r35yOV+jgtR/+MYxPoOQ2YYEABTSKmIjcsiPb5ZfXf7UH8zFxqUaDwmSPCizYFGwQGwyZIIX0pOLKIpjETlo1U/56E0qoAczJRAWM5G8HJA/+MYxPwK8148GABNSUZyKUXZ6Ik9o/PNrPO4Xd3k45s5ZbFOhlkKfJ2SMjFyc9KZLMjQ60Ps1iyQiQycScX711gnjk89MiiI/+MYxP8TC2oIAACTEM0f+Z/SNfy///f9lc5XLIHLMz46Yck2h2K0dtqT0bECVySOS9qTEGr9rfbPd2TQq7VMzuRDg3vYJJEn/+MYxO0ME2YcEABNSJ2RxzMIKcrhC0U0F3kImjyb03for+r/zq1OmMvJ/7vbWJlSA5zVyGFyjBs22U4ODIPh4hDbrVUbv/ln/+MYxPcNW2YcEABNSGWrMglL8cicpXM60b///+8h4bKpxqdMwhMvkpTs/hZPkDJUtJu2TccDTSJKRRGOl+v/1//9Omu/2pdE/+MYxPwPu2oQCABTLHWi9r07yp99tVRSsxysZJwFXKcDYBwxzjoPraIHIgUpiCmopmXHJwp268/L++7oMjOERqsPR/WT59fe/+MYxPgMU1ooGABTSLv/8+5at2WSQuEzX00HAFGyipKM5p5VFojkAmjknWmIKaimZccnBdUObf4ovk//MMX///X/yt/uOXlx/+MYxP8SW2IIAACTEKktqFqTxCJSJF/JNmSImOhln2AosFn0lTEFNRTMuOTguMlVVVVVVVVMQU1FMy45OC4yVVVVVVVVVVVV/+MYxPAMw2IgEABTSVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OC4yVVVVVVVVVVVV/+MYxPgK215IGACNTFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MYxP8MW2I4GABNSFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MYxP8Ks1oUGABTZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MYxP8AAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVEFHMTAgU2Vjb25kcyBvZiBTaWxlbmNlAAAAAAAAAAAAQW5hciBTb2Z0d2FyZSBMTEMAAAAAAAAAAAAAAAAAQmxhbmsgQXVkaW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8=';\n\nfunction base64ToByteArray(blob) {\r\n return stringToByteArray(atob(blob));\r\n}\r\nfunction byteArrayToBase64(array) {\r\n return btoa(byteArrayToString(array));\r\n}\r\nfunction stringToByteArray(str) {\r\n const array = new Uint8Array(str.length);\r\n for (let i = 0; i < str.length; i++) {\r\n array[i] = str.charCodeAt(i);\r\n }\r\n return array;\r\n}\r\nfunction byteArrayToString(array) {\r\n let result = '';\r\n for (let i = 0; i < array.length; i++) {\r\n result += String.fromCharCode(array[i]);\r\n }\r\n return result;\r\n}\n\nconst getIsIOS = () => {\r\n if (typeof window !== 'undefined') {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return /iPad|iPhone|iPod/.test(navigator?.userAgent) && !window?.MSStream;\r\n }\r\n else {\r\n return false;\r\n }\r\n};\r\nconst isIOS = getIsIOS();\r\nclass BaseClient {\r\n algosdk;\r\n algodClient;\r\n clientOptions;\r\n keepWCAlive;\r\n metadata;\r\n static metadata;\r\n constructor(metadata, algosdk, algodClient, clientOptions) {\r\n this.algosdk = algosdk;\r\n this.algodClient = algodClient;\r\n this.clientOptions = clientOptions;\r\n this.keepWCAlive = new Audio();\r\n this.metadata = metadata;\r\n }\r\n async healthCheck() {\r\n return await this.algodClient.healthCheck().do();\r\n }\r\n async getAccountInfo(address) {\r\n const accountInfo = await this.algodClient.accountInformation(address).do();\r\n if (!accountInfo) {\r\n throw new Error('Unable to get account information');\r\n }\r\n return accountInfo;\r\n }\r\n async getAssets(address) {\r\n const accountInfo = await this.algodClient.accountInformation(address).do();\r\n if (!accountInfo || accountInfo.assets === undefined) {\r\n throw new Error('Unable to get account assets');\r\n }\r\n return accountInfo.assets;\r\n }\r\n async waitForConfirmation(txId, timeout = 4) {\r\n const confirmation = (await this.algosdk.waitForConfirmation(this.algodClient, txId, timeout));\r\n return { txId, ...confirmation };\r\n }\r\n decodeTransaction = (txn, isSigned) => {\r\n return isSigned\r\n ? this.algosdk.decodeSignedTransaction(base64ToByteArray(txn)).txn\r\n : this.algosdk.decodeUnsignedTransaction(base64ToByteArray(txn));\r\n };\r\n logEncodedTransaction(txn, isSigned) {\r\n const txnObj = this.decodeTransaction(txn, isSigned);\r\n console.log('TRANSACTION', {\r\n isSigned,\r\n from: txnObj.from && this.algosdk.encodeAddress(txnObj.from.publicKey),\r\n to: txnObj.to && this.algosdk.encodeAddress(txnObj.to.publicKey),\r\n type: txnObj.type,\r\n txn: txnObj\r\n });\r\n }\r\n groupTransactionsBySender(transactions) {\r\n function groupBySender(objectArray) {\r\n return objectArray.reduce(function (acc, obj) {\r\n const sender = obj.from;\r\n if (!acc[sender]) {\r\n acc[sender] = [];\r\n }\r\n acc[sender].push(obj);\r\n return acc;\r\n }, {});\r\n }\r\n const decodedGroup = transactions.reduce((acc, [type, txn], index) => {\r\n if (type === 'u') {\r\n const decodedTxn = this.decodeTransaction(txn, false);\r\n const from = decodedTxn.from ? this.algosdk.encodeAddress(decodedTxn.from.publicKey) : '';\r\n const to = decodedTxn.to ? this.algosdk.encodeAddress(decodedTxn.to.publicKey) : '';\r\n const type = decodedTxn.type || '';\r\n const amount = Number(decodedTxn.amount) || 0; // convert from bigint to number\r\n const txnObj = {\r\n groupIndex: index,\r\n amount,\r\n from,\r\n to,\r\n type,\r\n txn\r\n };\r\n acc.push(txnObj);\r\n }\r\n return acc;\r\n }, []);\r\n return groupBySender(decodedGroup);\r\n }\r\n async sendRawTransactions(transactions, waitRoundsToConfirm) {\r\n const sentTransaction = (await this.algodClient\r\n .sendRawTransaction(transactions)\r\n .do());\r\n if (!sentTransaction) {\r\n throw new Error('Transaction failed.');\r\n }\r\n const decodedTxn = this.algosdk.decodeSignedTransaction(transactions[0]);\r\n const waitRounds = waitRoundsToConfirm || decodedTxn.txn.lastRound - decodedTxn.txn.firstRound;\r\n const confirmedTransaction = await this.waitForConfirmation(sentTransaction.txId, waitRounds);\r\n return {\r\n id: sentTransaction.txId,\r\n ...confirmedTransaction\r\n };\r\n }\r\n async keepWCAliveStart() {\r\n // Playing an audio file prevents Wallet Connect's\r\n // web socket connection from being dropped when\r\n // iOS goes into background mode\r\n if (!isIOS) {\r\n return;\r\n }\r\n this.keepWCAlive.src = audio;\r\n this.keepWCAlive.autoplay = true;\r\n this.keepWCAlive.volume = 0;\r\n this.keepWCAlive.loop = true;\r\n await this.keepWCAlive.play();\r\n }\r\n keepWCAliveStop() {\r\n if (!isIOS) {\r\n return;\r\n }\r\n this.keepWCAlive.pause();\r\n }\r\n}\n\nfunction n(n){for(var r=arguments.length,t=Array(r>1?r-1:0),e=1;e3?r.i-4:r.i:Array.isArray(n)?1:s(n)?2:v(n)?3:0}function u(n,r){return 2===o(n)?n.has(r):Object.prototype.hasOwnProperty.call(n,r)}function a(n,r){return 2===o(n)?n.get(r):n[r]}function f(n,r,t){var e=o(n);2===e?n.set(r,t):3===e?n.add(t):n[r]=t;}function c(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r}function s(n){return X&&n instanceof Map}function v(n){return q&&n instanceof Set}function p(n){return n.o||n.t}function l(n){if(Array.isArray(n))return Array.prototype.slice.call(n);var r=rn(n);delete r[Q];for(var t=nn(r),e=0;e1&&(n.set=n.add=n.clear=n.delete=h),Object.freeze(n),e&&i(n,(function(n,r){return d(r,!0)}),!0)),n}function h(){n(2);}function y(n){return null==n||\"object\"!=typeof n||Object.isFrozen(n)}function b(r){var t=tn[r];return t||n(18,r),t}function _(){return \"production\"===process.env.NODE_ENV||U||n(0),U}function j(n,r){r&&(b(\"Patches\"),n.u=[],n.s=[],n.v=r);}function g(n){O(n),n.p.forEach(S),n.p=null;}function O(n){n===U&&(U=n.l);}function w(n){return U={p:[],l:U,h:n,m:!0,_:0}}function S(n){var r=n[Q];0===r.i||1===r.i?r.j():r.g=!0;}function P(r,e){e._=e.p.length;var i=e.p[0],o=void 0!==r&&r!==i;return e.h.O||b(\"ES5\").S(e,r,o),o?(i[Q].P&&(g(e),n(4)),t(r)&&(r=M(e,r),e.l||x(e,r)),e.u&&b(\"Patches\").M(i[Q].t,r,e.u,e.s)):r=M(e,i,[]),g(e),e.u&&e.v(e.u,e.s),r!==H?r:void 0}function M(n,r,t){if(y(r))return r;var e=r[Q];if(!e)return i(r,(function(i,o){return A(n,e,r,i,o,t)}),!0),r;if(e.A!==n)return r;if(!e.P)return x(n,e.t,!0),e.t;if(!e.I){e.I=!0,e.A._--;var o=4===e.i||5===e.i?e.o=l(e.k):e.o,u=o,a=!1;3===e.i&&(u=new Set(o),o.clear(),a=!0),i(u,(function(r,i){return A(n,e,o,r,i,t,a)})),x(n,o,!1),t&&n.u&&b(\"Patches\").N(e,t,n.u,n.s);}return e.o}function A(e,i,o,a,c,s,v){if(\"production\"!==process.env.NODE_ENV&&c===o&&n(5),r(c)){var p=M(e,c,s&&i&&3!==i.i&&!u(i.R,a)?s.concat(a):void 0);if(f(o,a,p),!r(p))return;e.m=!1;}else v&&o.add(c);if(t(c)&&!y(c)){if(!e.h.D&&e._<1)return;M(e,c),i&&i.A.l||x(e,c);}}function x(n,r,t){void 0===t&&(t=!1),!n.l&&n.h.D&&n.m&&d(r,t);}function z(n,r){var t=n[Q];return (t?p(t):n)[r]}function I(n,r){if(r in n)for(var t=Object.getPrototypeOf(n);t;){var e=Object.getOwnPropertyDescriptor(t,r);if(e)return e;t=Object.getPrototypeOf(t);}}function k(n){n.P||(n.P=!0,n.l&&k(n.l));}function E(n){n.o||(n.o=l(n.t));}function N(n,r,t){var e=s(r)?b(\"MapSet\").F(r,t):v(r)?b(\"MapSet\").T(r,t):n.O?function(n,r){var t=Array.isArray(n),e={i:t?1:0,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:null,o:null,j:null,C:!1},i=e,o=en;t&&(i=[e],o=on);var u=Proxy.revocable(i,o),a=u.revoke,f=u.proxy;return e.k=f,e.j=a,f}(r,t):b(\"ES5\").J(r,t);return (t?t.A:_()).p.push(e),e}function R(e){return r(e)||n(22,e),function n(r){if(!t(r))return r;var e,u=r[Q],c=o(r);if(u){if(!u.P&&(u.i<4||!b(\"ES5\").K(u)))return u.t;u.I=!0,e=D(r,c),u.I=!1;}else e=D(r,c);return i(e,(function(r,t){u&&a(u.t,r)===t||f(e,r,n(t));})),3===c?new Set(e):e}(e)}function D(n,r){switch(r){case 2:return new Map(n);case 3:return Array.from(n)}return l(n)}var G,U,W=\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol(\"x\"),X=\"undefined\"!=typeof Map,q=\"undefined\"!=typeof Set,B=\"undefined\"!=typeof Proxy&&void 0!==Proxy.revocable&&\"undefined\"!=typeof Reflect,H=W?Symbol.for(\"immer-nothing\"):((G={})[\"immer-nothing\"]=!0,G),L=W?Symbol.for(\"immer-draftable\"):\"__$immer_draftable\",Q=W?Symbol.for(\"immer-state\"):\"__$immer_state\",Y={0:\"Illegal state\",1:\"Immer drafts cannot have computed properties\",2:\"This object has been frozen and should not be mutated\",3:function(n){return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \"+n},4:\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",5:\"Immer forbids circular references\",6:\"The first or second argument to `produce` must be a function\",7:\"The third argument to `produce` must be a function or undefined\",8:\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",9:\"First argument to `finishDraft` must be a draft returned by `createDraft`\",10:\"The given draft is already finalized\",11:\"Object.defineProperty() cannot be used on an Immer draft\",12:\"Object.setPrototypeOf() cannot be used on an Immer draft\",13:\"Immer only supports deleting array indices\",14:\"Immer only supports setting array indices and the 'length' property\",15:function(n){return \"Cannot apply patch, path doesn't resolve: \"+n},16:'Sets cannot have \"replace\" patches.',17:function(n){return \"Unsupported patch operation: \"+n},18:function(n){return \"The plugin for '\"+n+\"' has not been loaded into Immer. To enable the plugin, import and call `enable\"+n+\"()` when initializing your application.\"},20:\"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",21:function(n){return \"produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '\"+n+\"'\"},22:function(n){return \"'current' expects a draft, got: \"+n},23:function(n){return \"'original' expects a draft, got: \"+n},24:\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"},Z=\"\"+Object.prototype.constructor,nn=\"undefined\"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(n){return Object.getOwnPropertyNames(n).concat(Object.getOwnPropertySymbols(n))}:Object.getOwnPropertyNames,rn=Object.getOwnPropertyDescriptors||function(n){var r={};return nn(n).forEach((function(t){r[t]=Object.getOwnPropertyDescriptor(n,t);})),r},tn={},en={get:function(n,r){if(r===Q)return n;var e=p(n);if(!u(e,r))return function(n,r,t){var e,i=I(r,t);return i?\"value\"in i?i.value:null===(e=i.get)||void 0===e?void 0:e.call(n.k):void 0}(n,e,r);var i=e[r];return n.I||!t(i)?i:i===z(n.t,r)?(E(n),n.o[r]=N(n.A.h,i,n)):i},has:function(n,r){return r in p(n)},ownKeys:function(n){return Reflect.ownKeys(p(n))},set:function(n,r,t){var e=I(p(n),r);if(null==e?void 0:e.set)return e.set.call(n.k,t),!0;if(!n.P){var i=z(p(n),r),o=null==i?void 0:i[Q];if(o&&o.t===t)return n.o[r]=t,n.R[r]=!1,!0;if(c(t,i)&&(void 0!==t||u(n.t,r)))return !0;E(n),k(n);}return n.o[r]===t&&(void 0!==t||r in n.o)||Number.isNaN(t)&&Number.isNaN(n.o[r])||(n.o[r]=t,n.R[r]=!0),!0},deleteProperty:function(n,r){return void 0!==z(n.t,r)||r in n.t?(n.R[r]=!1,E(n),k(n)):delete n.R[r],n.o&&delete n.o[r],!0},getOwnPropertyDescriptor:function(n,r){var t=p(n),e=Reflect.getOwnPropertyDescriptor(t,r);return e?{writable:!0,configurable:1!==n.i||\"length\"!==r,enumerable:e.enumerable,value:t[r]}:e},defineProperty:function(){n(11);},getPrototypeOf:function(n){return Object.getPrototypeOf(n.t)},setPrototypeOf:function(){n(12);}},on={};i(en,(function(n,r){on[n]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)};})),on.deleteProperty=function(r,t){return \"production\"!==process.env.NODE_ENV&&isNaN(parseInt(t))&&n(13),on.set.call(this,r,t,void 0)},on.set=function(r,t,e){return \"production\"!==process.env.NODE_ENV&&\"length\"!==t&&isNaN(parseInt(t))&&n(14),en.set.call(this,r[0],t,e,r[0])};var un=function(){function e(r){var e=this;this.O=B,this.D=!0,this.produce=function(r,i,o){if(\"function\"==typeof r&&\"function\"!=typeof i){var u=i;i=r;var a=e;return function(n){var r=this;void 0===n&&(n=u);for(var t=arguments.length,e=Array(t>1?t-1:0),o=1;o1?t-1:0),o=1;o=0;e--){var i=t[e];if(0===i.path.length&&\"replace\"===i.op){n=i.value;break}}e>-1&&(t=t.slice(e+1));var o=b(\"Patches\").$;return r(n)?o(n,t):this.produce(n,(function(n){return o(n,t)}))},e}(),an=new un,fn=an.produce;an.produceWithPatches.bind(an);an.setAutoFreeze.bind(an);an.setUseProxies.bind(an);an.applyPatches.bind(an);an.createDraft.bind(an);an.finishDraft.bind(an);\n\nconst immerImpl = (initializer) => (set, get, store) => {\n store.setState = (updater, replace, ...a) => {\n const nextState = typeof updater === \"function\" ? fn(updater) : updater;\n return set(nextState, replace, ...a);\n };\n return initializer(store.setState, get, store);\n};\nconst immer = immerImpl;\n\nconst createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, getInitialState, subscribe, destroy };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar withSelector = {exports: {}};\n\nvar withSelector_production_min = {};\n\nvar shim = {exports: {}};\n\nvar useSyncExternalStoreShim_production_min = {};\n\n/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar hasRequiredUseSyncExternalStoreShim_production_min;\n\nfunction requireUseSyncExternalStoreShim_production_min () {\n\tif (hasRequiredUseSyncExternalStoreShim_production_min) return useSyncExternalStoreShim_production_min;\n\thasRequiredUseSyncExternalStoreShim_production_min = 1;\nvar e=require$$0;function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c});},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c});})},[a]);p(d);return d}\n\tfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return !k(a,d)}catch(f){return !0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;useSyncExternalStoreShim_production_min.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n\treturn useSyncExternalStoreShim_production_min;\n}\n\nvar useSyncExternalStoreShim_development = {};\n\n/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar hasRequiredUseSyncExternalStoreShim_development;\n\nfunction requireUseSyncExternalStoreShim_development () {\n\tif (hasRequiredUseSyncExternalStoreShim_development) return useSyncExternalStoreShim_development;\n\thasRequiredUseSyncExternalStoreShim_development = 1;\n\n\tif (process.env.NODE_ENV !== \"production\") {\n\t (function() {\n\n\t/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n\tif (\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n\t 'function'\n\t) {\n\t __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n\t}\n\t var React = require$$0;\n\n\tvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\n\tfunction error(format) {\n\t {\n\t {\n\t for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n\t args[_key2 - 1] = arguments[_key2];\n\t }\n\n\t printWarning('error', format, args);\n\t }\n\t }\n\t}\n\n\tfunction printWarning(level, format, args) {\n\t // When changing this logic, you might want to also\n\t // update consoleWithStackDev.www.js as well.\n\t {\n\t var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\t var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n\t if (stack !== '') {\n\t format += '%s';\n\t args = args.concat([stack]);\n\t } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n\t var argsWithFormat = args.map(function (item) {\n\t return String(item);\n\t }); // Careful: RN currently depends on this prefix\n\n\t argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n\t // breaks IE9: https://github.com/facebook/react/issues/13610\n\t // eslint-disable-next-line react-internal/no-production-logging\n\n\t Function.prototype.apply.call(console[level], console, argsWithFormat);\n\t }\n\t}\n\n\t/**\n\t * inlined Object.is polyfill to avoid requiring consumers ship their own\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\t */\n\tfunction is(x, y) {\n\t return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n\t ;\n\t}\n\n\tvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n\t// dispatch for CommonJS interop named imports.\n\n\tvar useState = React.useState,\n\t useEffect = React.useEffect,\n\t useLayoutEffect = React.useLayoutEffect,\n\t useDebugValue = React.useDebugValue;\n\tvar didWarnOld18Alpha = false;\n\tvar didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works\n\t// because of a very particular set of implementation details and assumptions\n\t// -- change any one of them and it will break. The most important assumption\n\t// is that updates are always synchronous, because concurrent rendering is\n\t// only available in versions of React that also have a built-in\n\t// useSyncExternalStore API. And we only use this shim when the built-in API\n\t// does not exist.\n\t//\n\t// Do not assume that the clever hacks used by this hook also work in general.\n\t// The point of this shim is to replace the need for hacks by other libraries.\n\n\tfunction useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n\t// React do not expose a way to check if we're hydrating. So users of the shim\n\t// will need to track that themselves and return the correct value\n\t// from `getSnapshot`.\n\tgetServerSnapshot) {\n\t {\n\t if (!didWarnOld18Alpha) {\n\t if (React.startTransition !== undefined) {\n\t didWarnOld18Alpha = true;\n\n\t error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.');\n\t }\n\t }\n\t } // Read the current snapshot from the store on every render. Again, this\n\t // breaks the rules of React, and only works here because of specific\n\t // implementation details, most importantly that updates are\n\t // always synchronous.\n\n\n\t var value = getSnapshot();\n\n\t {\n\t if (!didWarnUncachedGetSnapshot) {\n\t var cachedValue = getSnapshot();\n\n\t if (!objectIs(value, cachedValue)) {\n\t error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n\t didWarnUncachedGetSnapshot = true;\n\t }\n\t }\n\t } // Because updates are synchronous, we don't queue them. Instead we force a\n\t // re-render whenever the subscribed state changes by updating an some\n\t // arbitrary useState hook. Then, during render, we call getSnapshot to read\n\t // the current value.\n\t //\n\t // Because we don't actually use the state returned by the useState hook, we\n\t // can save a bit of memory by storing other stuff in that slot.\n\t //\n\t // To implement the early bailout, we need to track some things on a mutable\n\t // object. Usually, we would put that in a useRef hook, but we can stash it in\n\t // our useState hook instead.\n\t //\n\t // To force a re-render, we call forceUpdate({inst}). That works because the\n\t // new object always fails an equality check.\n\n\n\t var _useState = useState({\n\t inst: {\n\t value: value,\n\t getSnapshot: getSnapshot\n\t }\n\t }),\n\t inst = _useState[0].inst,\n\t forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated\n\t // in the layout phase so we can access it during the tearing check that\n\t // happens on subscribe.\n\n\n\t useLayoutEffect(function () {\n\t inst.value = value;\n\t inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the\n\t // commit phase if there was an interleaved mutation. In concurrent mode\n\t // this can happen all the time, but even in synchronous mode, an earlier\n\t // effect may have mutated the store.\n\n\t if (checkIfSnapshotChanged(inst)) {\n\t // Force a re-render.\n\t forceUpdate({\n\t inst: inst\n\t });\n\t }\n\t }, [subscribe, value, getSnapshot]);\n\t useEffect(function () {\n\t // Check for changes right before subscribing. Subsequent changes will be\n\t // detected in the subscription handler.\n\t if (checkIfSnapshotChanged(inst)) {\n\t // Force a re-render.\n\t forceUpdate({\n\t inst: inst\n\t });\n\t }\n\n\t var handleStoreChange = function () {\n\t // TODO: Because there is no cross-renderer API for batching updates, it's\n\t // up to the consumer of this library to wrap their subscription event\n\t // with unstable_batchedUpdates. Should we try to detect when this isn't\n\t // the case and print a warning in development?\n\t // The store changed. Check if the snapshot changed since the last time we\n\t // read from the store.\n\t if (checkIfSnapshotChanged(inst)) {\n\t // Force a re-render.\n\t forceUpdate({\n\t inst: inst\n\t });\n\t }\n\t }; // Subscribe to the store and return a clean-up function.\n\n\n\t return subscribe(handleStoreChange);\n\t }, [subscribe]);\n\t useDebugValue(value);\n\t return value;\n\t}\n\n\tfunction checkIfSnapshotChanged(inst) {\n\t var latestGetSnapshot = inst.getSnapshot;\n\t var prevValue = inst.value;\n\n\t try {\n\t var nextValue = latestGetSnapshot();\n\t return !objectIs(prevValue, nextValue);\n\t } catch (error) {\n\t return true;\n\t }\n\t}\n\n\tfunction useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {\n\t // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n\t // React do not expose a way to check if we're hydrating. So users of the shim\n\t // will need to track that themselves and return the correct value\n\t // from `getSnapshot`.\n\t return getSnapshot();\n\t}\n\n\tvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\n\tvar isServerEnvironment = !canUseDOM;\n\n\tvar shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore;\n\tvar useSyncExternalStore$2 = React.useSyncExternalStore !== undefined ? React.useSyncExternalStore : shim;\n\n\tuseSyncExternalStoreShim_development.useSyncExternalStore = useSyncExternalStore$2;\n\t /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n\tif (\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n\t 'function'\n\t) {\n\t __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n\t}\n\t \n\t })();\n\t}\n\treturn useSyncExternalStoreShim_development;\n}\n\nvar hasRequiredShim;\n\nfunction requireShim () {\n\tif (hasRequiredShim) return shim.exports;\n\thasRequiredShim = 1;\n\n\tif (process.env.NODE_ENV === 'production') {\n\t shim.exports = requireUseSyncExternalStoreShim_production_min();\n\t} else {\n\t shim.exports = requireUseSyncExternalStoreShim_development();\n\t}\n\treturn shim.exports;\n}\n\n/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar hasRequiredWithSelector_production_min;\n\nfunction requireWithSelector_production_min () {\n\tif (hasRequiredWithSelector_production_min) return withSelector_production_min;\n\thasRequiredWithSelector_production_min = 1;\nvar h=require$$0,n=requireShim();function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\n\twithSelector_production_min.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f;}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return [function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\n\tu(function(){f.hasValue=!0;f.value=d;},[d]);w(d);return d};\n\treturn withSelector_production_min;\n}\n\nvar withSelector_development = {};\n\n/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar hasRequiredWithSelector_development;\n\nfunction requireWithSelector_development () {\n\tif (hasRequiredWithSelector_development) return withSelector_development;\n\thasRequiredWithSelector_development = 1;\n\n\tif (process.env.NODE_ENV !== \"production\") {\n\t (function() {\n\n\t/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n\tif (\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n\t 'function'\n\t) {\n\t __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n\t}\n\t var React = require$$0;\n\tvar shim = requireShim();\n\n\t/**\n\t * inlined Object.is polyfill to avoid requiring consumers ship their own\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\t */\n\tfunction is(x, y) {\n\t return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n\t ;\n\t}\n\n\tvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n\tvar useSyncExternalStore = shim.useSyncExternalStore;\n\n\t// for CommonJS interop.\n\n\tvar useRef = React.useRef,\n\t useEffect = React.useEffect,\n\t useMemo = React.useMemo,\n\t useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.\n\n\tfunction useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {\n\t // Use this to track the rendered snapshot.\n\t var instRef = useRef(null);\n\t var inst;\n\n\t if (instRef.current === null) {\n\t inst = {\n\t hasValue: false,\n\t value: null\n\t };\n\t instRef.current = inst;\n\t } else {\n\t inst = instRef.current;\n\t }\n\n\t var _useMemo = useMemo(function () {\n\t // Track the memoized state using closure variables that are local to this\n\t // memoized instance of a getSnapshot function. Intentionally not using a\n\t // useRef hook, because that state would be shared across all concurrent\n\t // copies of the hook/component.\n\t var hasMemo = false;\n\t var memoizedSnapshot;\n\t var memoizedSelection;\n\n\t var memoizedSelector = function (nextSnapshot) {\n\t if (!hasMemo) {\n\t // The first time the hook is called, there is no memoized result.\n\t hasMemo = true;\n\t memoizedSnapshot = nextSnapshot;\n\n\t var _nextSelection = selector(nextSnapshot);\n\n\t if (isEqual !== undefined) {\n\t // Even if the selector has changed, the currently rendered selection\n\t // may be equal to the new selection. We should attempt to reuse the\n\t // current value if possible, to preserve downstream memoizations.\n\t if (inst.hasValue) {\n\t var currentSelection = inst.value;\n\n\t if (isEqual(currentSelection, _nextSelection)) {\n\t memoizedSelection = currentSelection;\n\t return currentSelection;\n\t }\n\t }\n\t }\n\n\t memoizedSelection = _nextSelection;\n\t return _nextSelection;\n\t } // We may be able to reuse the previous invocation's result.\n\n\n\t // We may be able to reuse the previous invocation's result.\n\t var prevSnapshot = memoizedSnapshot;\n\t var prevSelection = memoizedSelection;\n\n\t if (objectIs(prevSnapshot, nextSnapshot)) {\n\t // The snapshot is the same as last time. Reuse the previous selection.\n\t return prevSelection;\n\t } // The snapshot has changed, so we need to compute a new selection.\n\n\n\t // The snapshot has changed, so we need to compute a new selection.\n\t var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data\n\t // has changed. If it hasn't, return the previous selection. That signals\n\t // to React that the selections are conceptually equal, and we can bail\n\t // out of rendering.\n\n\t // If a custom isEqual function is provided, use that to check if the data\n\t // has changed. If it hasn't, return the previous selection. That signals\n\t // to React that the selections are conceptually equal, and we can bail\n\t // out of rendering.\n\t if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {\n\t return prevSelection;\n\t }\n\n\t memoizedSnapshot = nextSnapshot;\n\t memoizedSelection = nextSelection;\n\t return nextSelection;\n\t }; // Assigning this to a constant so that Flow knows it can't change.\n\n\n\t // Assigning this to a constant so that Flow knows it can't change.\n\t var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;\n\n\t var getSnapshotWithSelector = function () {\n\t return memoizedSelector(getSnapshot());\n\t };\n\n\t var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {\n\t return memoizedSelector(maybeGetServerSnapshot());\n\t };\n\t return [getSnapshotWithSelector, getServerSnapshotWithSelector];\n\t }, [getSnapshot, getServerSnapshot, selector, isEqual]),\n\t getSelection = _useMemo[0],\n\t getServerSelection = _useMemo[1];\n\n\t var value = useSyncExternalStore(subscribe, getSelection, getServerSelection);\n\t useEffect(function () {\n\t inst.hasValue = true;\n\t inst.value = value;\n\t }, [value]);\n\t useDebugValue(value);\n\t return value;\n\t}\n\n\twithSelector_development.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;\n\t /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n\tif (\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n\t 'function'\n\t) {\n\t __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n\t}\n\t \n\t })();\n\t}\n\treturn withSelector_development;\n}\n\nif (process.env.NODE_ENV === 'production') {\n withSelector.exports = requireWithSelector_production_min();\n} else {\n withSelector.exports = requireWithSelector_development();\n}\n\nvar withSelectorExports = withSelector.exports;\nvar useSyncExternalStoreExports = /*@__PURE__*/getDefaultExportFromCjs(withSelectorExports);\n\nconst { useDebugValue } = require$$0;\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nlet didWarnAboutEqualityFn = false;\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity, equalityFn) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && equalityFn && !didWarnAboutEqualityFn) {\n console.warn(\n \"[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937\"\n );\n didWarnAboutEqualityFn = true;\n }\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getInitialState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && typeof createState !== \"function\") {\n console.warn(\n \"[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.\"\n );\n }\n const api = typeof createState === \"function\" ? createStore(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api)\n return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && enabled) {\n console.warn(\n \"[zustand devtools middleware] Please install/enable Redux devtools extension\"\n );\n }\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording)\n return r;\n const action = nameOrAction === void 0 ? { type: anonymousActionType || \"anonymous\" } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...a) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && a[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...a);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format. \n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools)\n return;\n if (typeof api.dispatch !== \"function\")\n return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState)\n return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, f) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0)\n f(parsed);\n};\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(\n name,\n JSON.stringify(newValue, options == null ? void 0 : options.replacer)\n ),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst oldImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n getStorage: () => localStorage,\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage;\n try {\n storage = options.getStorage();\n } catch (e) {\n }\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const thenableSerialize = toThenable(options.serialize);\n const setItem = () => {\n const state = options.partialize({ ...get() });\n let errorInSync;\n const thenable = thenableSerialize({ state, version: options.version }).then(\n (serializedValue) => storage.setItem(options.name, serializedValue)\n ).catch((e) => {\n errorInSync = e;\n });\n if (errorInSync) {\n throw errorInSync;\n }\n return thenable;\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => cb(get()));\n const postRehydrationCallback = ((_a = options.onRehydrateStorage) == null ? void 0 : _a.call(options, get())) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((storageValue) => {\n if (storageValue) {\n return options.deserialize(storageValue);\n }\n }).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.getStorage) {\n storage = newOptions.getStorage();\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n hydrate();\n return stateFromStorage || configResult;\n};\nconst newImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persistImpl = (config, baseOptions) => {\n if (\"getStorage\" in baseOptions || \"serialize\" in baseOptions || \"deserialize\" in baseOptions) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.\"\n );\n }\n return oldImpl(config, baseOptions);\n }\n return newImpl(config, baseOptions);\n};\nconst persist = persistImpl;\n\nconst walletStoreSelector = (state) => ({\r\n accounts: state.accounts,\r\n activeAccount: state.activeAccount,\r\n setActiveAccount: state.setActiveAccount,\r\n clearActiveAccount: state.clearActiveAccount,\r\n addAccounts: state.addAccounts,\r\n removeAccounts: state.removeAccounts\r\n});\r\nconst emptyState = {\r\n accounts: [],\r\n activeAccount: undefined,\r\n setActiveAccount: () => {\r\n return;\r\n },\r\n clearActiveAccount: () => {\r\n return;\r\n },\r\n addAccounts: () => {\r\n return;\r\n },\r\n removeAccounts: () => {\r\n return;\r\n }\r\n};\r\nconst useWalletStore = create()(immer(persist(devtools((set, _get) => ({\r\n accounts: [],\r\n activeAccount: null,\r\n setActiveAccount: (account) => {\r\n set((state) => {\r\n state.activeAccount = account;\r\n });\r\n },\r\n clearActiveAccount: (id) => {\r\n set((state) => {\r\n if (id === state.activeAccount?.providerId)\r\n state.activeAccount = null;\r\n });\r\n },\r\n addAccounts: (accounts) => {\r\n set((state) => {\r\n const uniqueAccounts = [...state.accounts, ...accounts].reduce((uniqueAccounts, o) => {\r\n if (!uniqueAccounts.some((obj) => obj.providerId === o.providerId && obj.address === o.address)) {\r\n uniqueAccounts.push(o);\r\n }\r\n return uniqueAccounts;\r\n }, []);\r\n // Remove duplicates that occur when a user reconnects Pera wallet\r\n state.accounts = uniqueAccounts;\r\n });\r\n },\r\n removeAccounts: (providerId) => {\r\n set((state) => {\r\n state.accounts = state.accounts.filter((account) => account.providerId !== providerId);\r\n });\r\n }\r\n})), {\r\n name: 'txnlab-use-wallet',\r\n version: 1 // increment to deprecate stored data\r\n})));\r\n// This a fix to ensure zustand never hydrates the store before React hydrates the page\r\n// otherwise it causes a mismatch between SSR and client render\r\n// see: https://github.com/pmndrs/zustand/issues/1145\r\nconst useHydratedWalletStore = ((selector, compare) => {\r\n const store = useWalletStore(selector, compare);\r\n const [hydrated, setHydrated] = useState(false);\r\n useEffect(() => setHydrated(true), []);\r\n return hydrated ? store : selector(emptyState);\r\n});\n\nconst useDebugStore = create((set) => ({\r\n debug: false,\r\n setDebug: (debug) => set({ debug })\r\n}));\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst debugLog = (...args) => {\r\n const { debug } = useDebugStore.getState();\r\n if (debug) {\r\n console.log('%c[USE-WALLET]', 'color: #FF602E; font-weight: bold;', ...args);\r\n }\r\n};\r\nconst getProviderList = (providers) => {\r\n return providers\r\n .map((provider) => {\r\n if (typeof provider === 'string') {\r\n return provider;\r\n }\r\n return provider.id;\r\n })\r\n .map((id) => id.toUpperCase())\r\n .join(', ');\r\n};\n\nconst ICON$c = 'data:image/svg+xml;base64,' +\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzcgMTg3Ij48cmVjdCB4PSItMTEuMzgiIHk9Ii0yNS45NyIgd2lkdGg9IjIwMC4wMiIgaGVpZ2h0PSIyMzEuNTMiIHN0eWxlPSJmaWxsOiNmZTU7Ii8+PHBhdGggZD0iTTk0LjA1LDU5LjYxYzIuMDUsOC40OCwxLjM2LDE1Ljk0LTEuNTUsMTYuNjYtMi45LC43Mi02LjkxLTUuNTctOC45Ni0xNC4wNS0yLjA1LTguNDgtMS4zNi0xNS45NCwxLjU1LTE2LjY2LDIuOS0uNzIsNi45MSw1LjU3LDguOTYsMTQuMDVaIiBzdHlsZT0iZmlsbDojMWMxYzFjOyIvPjxwYXRoIGQ9Ik0xMjcuODUsNjYuOWMtNC41My00LjgxLTEzLjU1LTMuNS0yMC4xNSwyLjkxLTYuNTksNi40MS04LjI2LDE1LjUtMy43MywyMC4zMSw0LjUzLDQuOCwxMy41NSwzLjUsMjAuMTUtMi45MXM4LjI2LTE1LjUsMy43My0yMC4zMVoiIHN0eWxlPSJmaWxsOiMxYzFjMWM7Ii8+PHBhdGggZD0iTTkxLjc5LDE0MC40N2MyLjktLjcyLDMuNDktOC42LDEuMzItMTcuNjEtMi4xNy05LTYuMjktMTUuNzEtOS4xOS0xNC45OS0yLjksLjcyLTMuNDksOC42LTEuMzIsMTcuNjEsMi4xNyw5LDYuMjksMTUuNzEsOS4xOSwxNC45OVoiIHN0eWxlPSJmaWxsOiMxYzFjMWM7Ii8+PHBhdGggZD0iTTYyLjIyLDcxLjNjOC4zNywyLjQ3LDE0LjQ4LDYuOCwxMy42Niw5LjY3LS44MywyLjg3LTguMjgsMy4yLTE2LjY1LC43My04LjM3LTIuNDctMTQuNDgtNi44LTEzLjY2LTkuNjcsLjgzLTIuODcsOC4yOC0zLjIsMTYuNjUtLjczWiIgc3R5bGU9ImZpbGw6IzFjMWMxYzsiLz48cGF0aCBkPSJNMTE2LjU0LDEwMy43NGM4Ljg4LDIuNjIsMTUuNDEsNy4wNywxNC41OSw5Ljk0LS44MywyLjg3LTguNywzLjA4LTE3LjU4LC40Ni04Ljg4LTIuNjItMTUuNDEtNy4wNy0xNC41OS05Ljk0LC44My0yLjg3LDguNy0zLjA4LDE3LjU4LS40NloiIHN0eWxlPSJmaWxsOiMxYzFjMWM7Ii8+PHBhdGggZD0iTTcxLjY0LDk3LjcxYy0yLjA4LTIuMTUtOC44OCwuOTgtMTUuMiw2Ljk5LTYuMzIsNi4wMS05Ljc2LDEyLjYzLTcuNjksMTQuNzgsMi4wOCwyLjE1LDguODgtLjk4LDE1LjItNi45OSw2LjMyLTYuMDEsOS43Ni0xMi42Myw3LjY5LTE0Ljc4WiIgc3R5bGU9ImZpbGw6IzFjMWMxYzsiLz48L3N2Zz4=';\n\n/**\r\n * Documentation:\r\n * https://github.com/perawallet/connect\r\n */\r\nclass PeraWalletClient extends BaseClient {\r\n #client;\r\n clientOptions;\r\n network;\r\n constructor({ metadata, client, clientOptions, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.clientOptions = clientOptions;\r\n this.network = network;\r\n this.metadata = PeraWalletClient.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.PERA,\r\n name: 'Pera',\r\n icon: ICON$c,\r\n isWalletConnect: true\r\n };\r\n static async init({ clientOptions, algodOptions, clientStatic, getDynamicClient, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.PERA.toUpperCase()} initializing...`);\r\n let PeraWalletConnect;\r\n if (clientStatic) {\r\n PeraWalletConnect = clientStatic;\r\n }\r\n else if (getDynamicClient) {\r\n PeraWalletConnect = await getDynamicClient();\r\n }\r\n else {\r\n throw new Error('Pera Wallet provider missing required property: clientStatic or getDynamicClient');\r\n }\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const peraWallet = new PeraWalletConnect({\r\n ...(clientOptions && clientOptions)\r\n });\r\n const provider = new PeraWalletClient({\r\n metadata: PeraWalletClient.metadata,\r\n client: peraWallet,\r\n clientOptions,\r\n algosdk,\r\n algodClient,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.PERA.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (e) {\r\n console.error('Error initializing...', e);\r\n return null;\r\n }\r\n }\r\n async connect(onDisconnect) {\r\n const accounts = await this.#client.connect();\r\n this.#client.connector?.on('disconnect', onDisconnect);\r\n if (accounts.length === 0) {\r\n throw new Error(`No accounts found for ${PeraWalletClient.metadata.id}`);\r\n }\r\n const mappedAccounts = accounts.map((address, index) => ({\r\n name: `Pera Wallet ${index + 1}`,\r\n address,\r\n providerId: PeraWalletClient.metadata.id\r\n }));\r\n return {\r\n ...PeraWalletClient.metadata,\r\n accounts: mappedAccounts\r\n };\r\n }\r\n async reconnect(onDisconnect) {\r\n const accounts = await this.#client.reconnectSession().catch(console.info);\r\n this.#client.connector?.on('disconnect', onDisconnect);\r\n if (!accounts) {\r\n onDisconnect();\r\n return null;\r\n }\r\n return {\r\n ...PeraWalletClient.metadata,\r\n accounts: accounts.map((address, index) => ({\r\n name: `Pera Wallet ${index + 1}`,\r\n address,\r\n providerId: PeraWalletClient.metadata.id\r\n }))\r\n };\r\n }\r\n async disconnect() {\r\n await this.#client.disconnect();\r\n }\r\n async signTransactions(connectedAccounts, txnGroups, indexesToSign, returnGroup = true) {\r\n // If txnGroups is a nested array, flatten it\r\n const transactions = Array.isArray(txnGroups[0])\r\n ? txnGroups.flatMap((txn) => txn)\r\n : txnGroups;\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n const signedIndexes = [];\r\n // Marshal the transactions,\r\n // and add the signers property if they shouldn't be signed.\r\n const txnsToSign = decodedTxns.reduce((acc, txn, i) => {\r\n const isSigned = 'txn' in txn;\r\n // If the indexes to be signed is specified, designate that it should be signed\r\n if (indexesToSign && indexesToSign.length && indexesToSign.includes(i)) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: this.algosdk.decodeUnsignedTransaction(transactions[i])\r\n });\r\n // If the indexes to be signed is specified, but it's not included in it,\r\n // designate that it should not be signed\r\n }\r\n else if (indexesToSign && indexesToSign.length && !indexesToSign.includes(i)) {\r\n acc.push({\r\n txn: isSigned\r\n ? this.algosdk.decodeSignedTransaction(transactions[i]).txn\r\n : this.algosdk.decodeUnsignedTransaction(transactions[i]),\r\n signers: []\r\n });\r\n // If the transaction is unsigned and is to be sent from a connected account,\r\n // designate that it should be signed\r\n }\r\n else if (!isSigned && connectedAccounts.includes(this.algosdk.encodeAddress(txn['snd']))) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: this.algosdk.decodeUnsignedTransaction(transactions[i])\r\n });\r\n // Otherwise, designate that it should not be signed\r\n }\r\n else if (isSigned) {\r\n acc.push({\r\n txn: this.algosdk.decodeSignedTransaction(transactions[i]).txn,\r\n signers: []\r\n });\r\n }\r\n else if (!isSigned) {\r\n acc.push({\r\n txn: this.algosdk.decodeUnsignedTransaction(transactions[i]),\r\n signers: []\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n // Sign them with the client.\r\n const result = await this.#client.signTransaction([txnsToSign]);\r\n // Join the newly signed transactions with the original group of transactions.\r\n const signedTxns = transactions.reduce((acc, txn, i) => {\r\n if (signedIndexes.includes(i)) {\r\n const signedByUser = result.shift();\r\n signedByUser && acc.push(signedByUser);\r\n }\r\n else if (returnGroup) {\r\n acc.push(transactions[i]);\r\n }\r\n return acc;\r\n }, []);\r\n return signedTxns;\r\n }\r\n}\n\nconst ICON$b = 'data:image/png;base64,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';\n\n/**\r\n * Documentation:\r\n * https://github.com/RDinitiativ/daffiwallet_connect\r\n */\r\nclass DaffiWalletClient extends BaseClient {\r\n #client;\r\n clientOptions;\r\n network;\r\n constructor({ metadata, client, clientOptions, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.clientOptions = clientOptions;\r\n this.network = network;\r\n this.metadata = DaffiWalletClient.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.DAFFI,\r\n name: 'Daffi',\r\n icon: ICON$b,\r\n isWalletConnect: true\r\n };\r\n static async init({ clientOptions, algodOptions, clientStatic, getDynamicClient, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.DAFFI.toUpperCase()} initializing...`);\r\n let DaffiWalletConnect;\r\n if (clientStatic) {\r\n DaffiWalletConnect = clientStatic;\r\n }\r\n else if (getDynamicClient) {\r\n DaffiWalletConnect = await getDynamicClient();\r\n }\r\n else {\r\n throw new Error('Daffi Wallet provider missing required property: clientStatic or getDynamicClient');\r\n }\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const daffiWallet = new DaffiWalletConnect({\r\n ...(clientOptions && clientOptions)\r\n });\r\n const provider = new DaffiWalletClient({\r\n metadata: DaffiWalletClient.metadata,\r\n client: daffiWallet,\r\n clientOptions,\r\n algosdk,\r\n algodClient,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.DAFFI.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (e) {\r\n console.error('Error initializing...', e);\r\n return null;\r\n }\r\n }\r\n async connect(onDisconnect) {\r\n const accounts = await this.#client.connect();\r\n this.#client.connector?.on('disconnect', onDisconnect);\r\n if (accounts.length === 0) {\r\n throw new Error(`No accounts found for ${DaffiWalletClient.metadata.id}`);\r\n }\r\n const mappedAccounts = accounts.map((address, index) => ({\r\n name: `Daffi Wallet ${index + 1}`,\r\n address,\r\n providerId: DaffiWalletClient.metadata.id\r\n }));\r\n return {\r\n ...DaffiWalletClient.metadata,\r\n accounts: mappedAccounts\r\n };\r\n }\r\n async reconnect(onDisconnect) {\r\n const accounts = await this.#client.reconnectSession().catch(console.info);\r\n this.#client.connector?.on('disconnect', onDisconnect);\r\n if (!accounts) {\r\n onDisconnect();\r\n return null;\r\n }\r\n return {\r\n ...DaffiWalletClient.metadata,\r\n accounts: accounts.map((address, index) => ({\r\n name: `Daffi Wallet ${index + 1}`,\r\n address,\r\n providerId: DaffiWalletClient.metadata.id\r\n }))\r\n };\r\n }\r\n async disconnect() {\r\n await this.#client.disconnect();\r\n }\r\n async signTransactions(connectedAccounts, txnGroups, indexesToSign, returnGroup = true) {\r\n // If txnGroups is a nested array, flatten it\r\n const transactions = Array.isArray(txnGroups[0])\r\n ? txnGroups.flatMap((txn) => txn)\r\n : txnGroups;\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n const signedIndexes = [];\r\n // Marshal the transactions,\r\n // and add the signers property if they shouldn't be signed.\r\n const txnsToSign = decodedTxns.reduce((acc, txn, i) => {\r\n const isSigned = 'txn' in txn;\r\n // If the indexes to be signed is specified, designate that it should be signed\r\n if (indexesToSign && indexesToSign.length && indexesToSign.includes(i)) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: this.algosdk.decodeUnsignedTransaction(transactions[i])\r\n });\r\n // If the indexes to be signed is specified, but it's not included in it,\r\n // designate that it should not be signed\r\n }\r\n else if (indexesToSign && indexesToSign.length && !indexesToSign.includes(i)) {\r\n acc.push({\r\n txn: isSigned\r\n ? this.algosdk.decodeSignedTransaction(transactions[i]).txn\r\n : this.algosdk.decodeUnsignedTransaction(transactions[i]),\r\n signers: []\r\n });\r\n // If the transaction is unsigned and is to be sent from a connected account,\r\n // designate that it should be signed\r\n }\r\n else if (!isSigned && connectedAccounts.includes(this.algosdk.encodeAddress(txn['snd']))) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: this.algosdk.decodeUnsignedTransaction(transactions[i])\r\n });\r\n // Otherwise, designate that it should not be signed\r\n }\r\n else if (isSigned) {\r\n acc.push({\r\n txn: this.algosdk.decodeSignedTransaction(transactions[i]).txn,\r\n signers: []\r\n });\r\n }\r\n else if (!isSigned) {\r\n acc.push({\r\n txn: this.algosdk.decodeUnsignedTransaction(transactions[i]),\r\n signers: []\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n // Sign them with the client.\r\n const result = await this.#client.signTransaction([txnsToSign]);\r\n // Join the newly signed transactions with the original group of transactions.\r\n const signedTxns = transactions.reduce((acc, txn, i) => {\r\n if (signedIndexes.includes(i)) {\r\n const signedByUser = result.shift();\r\n signedByUser && acc.push(signedByUser);\r\n }\r\n else if (returnGroup) {\r\n acc.push(transactions[i]);\r\n }\r\n return acc;\r\n }, []);\r\n return signedTxns;\r\n }\r\n}\n\nconst ICON$a = 'data:image/svg+xml;base64,' +\r\n 'PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogIDxjaXJjbGUgZmlsbD0iIzI0NUVDNiIgY3g9IjE2IiBjeT0iMTYiIHI9IjE2Ii8+CiAgPHBvbHlnb24gZmlsbD0iI0ZGRkZGRiIgcG9pbnRzPSIxMi40LDIxLjIgMTQuNSwyMS4yIDE1LjMsMTkuOSAxNi42LDE3LjYgMTguMSwxNC45IDE5LjksMTEuNyAyMC4yLDExLjIgMjAuMywxMS43IDIyLjksMjEuMiAyNSwyMS4yIDIxLjUsOC45IDIxLjQsOC42IDE5LjUsOC42IDE5LjUsOC43IDE3LjgsMTEuOCAxNiwxNC45IDE1LjgsMTQuMSAxNS4yLDExLjcgMTUuMSwxMS41IDE0LjQsOC45IDE0LjMsOC42IDEyLjQsOC42IDEyLjQsOC43IDEwLjcsMTEuOCA4LjksMTUgNy4xLDE4IDUuMywyMS4yIDcuNCwyMS4yIDkuMiwxOCAxMSwxNC44IDEyLjgsMTEuNiAxMy4xLDExLjEgMTMuMiwxMS42IDEzLjcsMTMuNyAxNC40LDE2LjMgMTQuNiwxNy4yIDE0LjIsMTgiLz4KPC9zdmc+';\n\n/**\r\n * Documentation:\r\n * https://github.com/randlabs/myalgo-connect\r\n */\r\nclass MyAlgoWalletClient extends BaseClient {\r\n #client;\r\n clientOptions;\r\n network;\r\n constructor({ metadata, client, clientOptions, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.clientOptions = clientOptions;\r\n this.network = network;\r\n this.metadata = MyAlgoWalletClient.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.MYALGO,\r\n name: 'MyAlgo',\r\n icon: ICON$a,\r\n isWalletConnect: false\r\n };\r\n static async init({ clientOptions, algodOptions, clientStatic, getDynamicClient, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.MYALGO.toUpperCase()} initializing...`);\r\n let MyAlgoConnect;\r\n if (clientStatic) {\r\n MyAlgoConnect = clientStatic;\r\n }\r\n else if (getDynamicClient) {\r\n MyAlgoConnect = await getDynamicClient();\r\n }\r\n else {\r\n throw new Error('MyAlgo Wallet provider missing required property: clientStatic or getDynamicClient');\r\n }\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const myAlgo = new MyAlgoConnect({\r\n ...(clientOptions ? clientOptions : { disableLedgerNano: false })\r\n });\r\n const provider = new MyAlgoWalletClient({\r\n metadata: MyAlgoWalletClient.metadata,\r\n client: myAlgo,\r\n clientOptions,\r\n algosdk: algosdk,\r\n algodClient: algodClient,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.MYALGO.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (e) {\r\n console.error('Error initializing...', e);\r\n return null;\r\n }\r\n }\r\n async connect() {\r\n const accounts = await this.#client.connect();\r\n if (accounts.length === 0) {\r\n throw new Error(`No accounts found for ${MyAlgoWalletClient.metadata.id}`);\r\n }\r\n const mappedAccounts = accounts.map((account) => ({\r\n ...account,\r\n providerId: MyAlgoWalletClient.metadata.id\r\n }));\r\n return {\r\n ...MyAlgoWalletClient.metadata,\r\n accounts: mappedAccounts\r\n };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async reconnect() {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async disconnect() {\r\n return;\r\n }\r\n async signTransactions(connectedAccounts, transactions, indexesToSign, returnGroup = true) {\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n const signedIndexes = [];\r\n // Get the transactions to be signed\r\n const txnsToSign = decodedTxns.reduce((acc, txn, i) => {\r\n const isSigned = 'txn' in txn;\r\n // If the indexes to be signed is specified, add it to the transactions to be signed,\r\n if (indexesToSign && indexesToSign.length && indexesToSign?.includes(i)) {\r\n signedIndexes.push(i);\r\n acc.push(transactions[i]);\r\n // Otherwise, if the transaction is unsigned and is to be sent from a connected account,\r\n // add it to the transactions to be signed\r\n }\r\n else if (!isSigned && connectedAccounts.includes(this.algosdk.encodeAddress(txn['snd']))) {\r\n signedIndexes.push(i);\r\n acc.push(transactions[i]);\r\n }\r\n return acc;\r\n }, []);\r\n // Sign them with the client.\r\n const result = await this.#client.signTransaction(txnsToSign);\r\n const signedTxns = transactions.reduce((acc, txn, i) => {\r\n if (signedIndexes.includes(i)) {\r\n const signedByUser = result.shift()?.blob;\r\n signedByUser && acc.push(signedByUser);\r\n }\r\n else if (returnGroup) {\r\n acc.push(txn);\r\n }\r\n return acc;\r\n }, []);\r\n return signedTxns;\r\n }\r\n}\n\nconst ICON$9 = 'data:image/svg+xml;base64,' +\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzZXJpZj0iaHR0cDovL3d3dy5zZXJpZi5jb20vIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjI7Ij4KICAgIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDI0IiBoZWlnaHQ9IjEwMjQiLz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuNjgyMDksMCwwLDEuNjgyMDksMjI2LjM2OCwyMTIuODE4KSI+CiAgICAgICAgPHBhdGggZD0iTTMyNy4wNDksMjgwLjE5MkwxNjkuNTI0LDEzTDEyLDI4MC4xOTJMMTY5LjUyNCwxODkuMDg0TDMyNy4wNDksMjgwLjE5MloiIHN0eWxlPSJmaWxsOndoaXRlO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS42ODIwOSwwLDAsMS42ODIwOSwyMjYuMzY4LDIxMi44MTgpIj4KICAgICAgICA8cGF0aCBkPSJNMjk5LjU0NiwzMDdMMTY5LjUyNSwyMzguNDczTDM5LjUwNCwzMDdMMTY5LjUyNSwyNjQuNjdMMjk5LjU0NiwzMDdaIiBzdHlsZT0iZmlsbDp3aGl0ZTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgIDwvZz4KPC9zdmc+Cg==';\n\n/**\r\n * Helpful resources:\r\n * https://github.com/blockshake-io/defly-connect\r\n */\r\nclass DeflyWalletClient extends BaseClient {\r\n #client;\r\n clientOptions;\r\n network;\r\n constructor({ metadata, client, clientOptions, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.clientOptions = clientOptions;\r\n this.network = network;\r\n this.metadata = DeflyWalletClient.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.DEFLY,\r\n name: 'Defly',\r\n icon: ICON$9,\r\n isWalletConnect: true\r\n };\r\n static async init({ clientOptions, algodOptions, clientStatic, getDynamicClient, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.DEFLY.toUpperCase()} initializing...`);\r\n let DeflyWalletConnect;\r\n if (clientStatic) {\r\n DeflyWalletConnect = clientStatic;\r\n }\r\n else if (getDynamicClient) {\r\n DeflyWalletConnect = await getDynamicClient();\r\n }\r\n else {\r\n throw new Error('Defly Wallet provider missing required property: clientStatic or getDynamicClient');\r\n }\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const deflyWallet = new DeflyWalletConnect({\r\n ...(clientOptions && clientOptions)\r\n });\r\n const provider = new DeflyWalletClient({\r\n metadata: DeflyWalletClient.metadata,\r\n client: deflyWallet,\r\n algosdk,\r\n algodClient,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.DEFLY.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (e) {\r\n console.error('Error initializing...', e);\r\n return null;\r\n }\r\n }\r\n async connect(onDisconnect) {\r\n const accounts = await this.#client.connect().catch(console.info);\r\n this.#client.connector?.on('disconnect', onDisconnect);\r\n if (!accounts || accounts.length === 0) {\r\n throw new Error(`No accounts found for ${DeflyWalletClient.metadata.id}`);\r\n }\r\n const mappedAccounts = accounts.map((address, index) => ({\r\n name: `Defly Wallet ${index + 1}`,\r\n address,\r\n providerId: DeflyWalletClient.metadata.id\r\n }));\r\n return {\r\n ...DeflyWalletClient.metadata,\r\n accounts: mappedAccounts\r\n };\r\n }\r\n async reconnect(onDisconnect) {\r\n const accounts = await this.#client.reconnectSession().catch(console.info);\r\n this.#client.connector?.on('disconnect', onDisconnect);\r\n if (!accounts) {\r\n return null;\r\n }\r\n return {\r\n ...DeflyWalletClient.metadata,\r\n accounts: accounts.map((address, index) => ({\r\n name: `Defly Wallet ${index + 1}`,\r\n address,\r\n providerId: DeflyWalletClient.metadata.id\r\n }))\r\n };\r\n }\r\n async disconnect() {\r\n await this.#client.disconnect();\r\n }\r\n async signTransactions(connectedAccounts, txnGroups, indexesToSign, returnGroup = true) {\r\n // If txnGroups is a nested array, flatten it\r\n const transactions = Array.isArray(txnGroups[0])\r\n ? txnGroups.flatMap((txn) => txn)\r\n : txnGroups;\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n const signedIndexes = [];\r\n // Marshal the transactions,\r\n // and add the signers property if they shouldn't be signed.\r\n const txnsToSign = decodedTxns.reduce((acc, txn, i) => {\r\n const isSigned = 'txn' in txn;\r\n // If the indexes to be signed is specified, designate that it should be signed\r\n if (indexesToSign && indexesToSign.length && indexesToSign.includes(i)) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: this.algosdk.decodeUnsignedTransaction(transactions[i])\r\n });\r\n // If the indexes to be signed is specified, but it's not included in it,\r\n // designate that it should not be signed\r\n }\r\n else if (indexesToSign && indexesToSign.length && !indexesToSign.includes(i)) {\r\n acc.push({\r\n txn: isSigned\r\n ? this.algosdk.decodeSignedTransaction(transactions[i]).txn\r\n : this.algosdk.decodeUnsignedTransaction(transactions[i]),\r\n signers: []\r\n });\r\n // If the transaction is unsigned and is to be sent from a connected account,\r\n // designate that it should be signed\r\n }\r\n else if (!isSigned && connectedAccounts.includes(this.algosdk.encodeAddress(txn['snd']))) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: this.algosdk.decodeUnsignedTransaction(transactions[i])\r\n });\r\n // Otherwise, designate that it should not be signed\r\n }\r\n else if (isSigned) {\r\n acc.push({\r\n txn: this.algosdk.decodeSignedTransaction(transactions[i]).txn,\r\n signers: []\r\n });\r\n }\r\n else if (!isSigned) {\r\n acc.push({\r\n txn: this.algosdk.decodeUnsignedTransaction(transactions[i]),\r\n signers: []\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n // Sign them with the client.\r\n const result = await this.#client.signTransaction([txnsToSign]);\r\n // Join the newly signed transactions with the original group of transactions.\r\n const signedTxns = transactions.reduce((acc, txn, i) => {\r\n if (signedIndexes.includes(i)) {\r\n const signedByUser = result.shift();\r\n signedByUser && acc.push(signedByUser);\r\n }\r\n else if (returnGroup) {\r\n acc.push(transactions[i]);\r\n }\r\n return acc;\r\n }, []);\r\n return signedTxns;\r\n }\r\n}\n\nconst ICON$8 = 'data:image/svg+xml;base64,' +\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjUuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAzMDAgMzAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMDAgMzAwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6dXJsKCNTVkdJRF8xXyk7fQoJLnN0MXtmaWxsOnVybCgjU1ZHSURfMDAwMDAwNDM0MjYxNjcxNDAxMDY1ODIyNzAwMDAwMDIxMzA3Njg5MDYwNzMxMTM0ODRfKTt9Cgkuc3Qye2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDEwMjUxOTMxNjAxNTI3NjU4MTY0MDAwMDAxNjI3NDExMjM4MzE3NTY0MTc1OV8pO2ZpbHRlcjp1cmwoI0Fkb2JlX09wYWNpdHlNYXNrRmlsdGVyKTt9Cgkuc3Qze2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDEzODU2MzM4MjQ2MjA4NjAyMDM1MDAwMDAxNDg3ODQ5MDI3MDc4MjA3MTIwN18pO30KCS5zdDR7bWFzazp1cmwoI21hc2swXzE2NjFfMjk1XzAwMDAwMDg4MTMyMjUxNTk3NDQxNTczNDkwMDAwMDExNjkzNjEyMDE4NTA2NjgxNDgxXyk7fQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfMDAwMDAxMDYxMjA2MzI0NjE3OTI4NzExNjAwMDAwMDc0MzM5MTMwMzgzMzc3NjY1NzZfKTt9Cjwvc3R5bGU+CjxnPgoJCgkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8xXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNDYuNjAzIiB5MT0iOS4yMjEyIiB4Mj0iMTc0LjE1OCIgeTI9IjMwOC41NDI2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgMzAyKSI+CgkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzBCNDZGOSIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQkZCRTAiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjc0LjcsOTMuOUwxNjYuNiwyM3YzOS42bDY5LjQsNDUuMWwtOC4yLDI1LjhoLTYxLjJ2MzIuOWg2MS4ybDguMiwyNS44bC02OS40LDQ1LjFWMjc3bDEwOC4yLTcwLjdMMjU3LDE1MC4xCgkJTDI3NC43LDkzLjl6Ii8+CgkKCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzAwMDAwMDE4MjI4MjM3MTUxMjM5MTUxMzIwMDAwMDE3ODM4NjY0MjU5NzY2MjczOTI1XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxMjkuMzUxNiIgeTE9Ii0xOS4xNTczIiB4Mj0iNTYuOTA2NiIgeTI9IjI4MC4xNjQxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgMzAyKSI+CgkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzBCNDZGOSIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQkZCRTAiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzAwMDAwMDE4MjI4MjM3MTUxMjM5MTUxMzIwMDAwMDE3ODM4NjY0MjU5NzY2MjczOTI1Xyk7IiBkPSJNNzIuNSwxNjYuNGg2MXYtMzIuOUg3Mi4ybC03LjktMjUuOAoJCWw2OS4yLTQ1LjFWMjNMMjUuMyw5My45TDQzLDE1MC4xbC0xNy43LDU2LjJMMTMzLjcsMjc3di0zOS42bC02OS40LTQ1LjFMNzIuNSwxNjYuNHoiLz4KCTxkZWZzPgoJCTxmaWx0ZXIgaWQ9IkFkb2JlX09wYWNpdHlNYXNrRmlsdGVyIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjI1LjQiIHk9IjIzIiB3aWR0aD0iMjQ3LjYiIGhlaWdodD0iMjU0Ij4KCQkJPGZlQ29sb3JNYXRyaXggIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIxIDAgMCAwIDAgIDAgMSAwIDAgMCAgMCAwIDEgMCAwICAwIDAgMCAxIDAiLz4KCQk8L2ZpbHRlcj4KCTwvZGVmcz4KCQoJCTxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjI1LjQiIHk9IjIzIiB3aWR0aD0iMjQ3LjYiIGhlaWdodD0iMjU0IiBpZD0ibWFzazBfMTY2MV8yOTVfMDAwMDAwODgxMzIyNTE1OTc0NDE1NzM0OTAwMDAwMTE2OTM2MTIwMTg1MDY2ODE0ODFfIj4KCQkKCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8wMDAwMDE2NTkyOTcyNDMwMzE2NDIwMzAwMDAwMDAwNzEwMTkwNDk4NDUxOTkxNTE2Ml8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMjQ2LjYwMzgiIHkxPSI5LjIyMTQiIHgyPSIxNzQuMTU4OCIgeTI9IjMwOC41NDI4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgMzAyKSI+CgkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMwQjQ2RjkiLz4KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0JCRkJFMCIvPgoJCTwvbGluZWFyR3JhZGllbnQ+CgkJPHBhdGggc3R5bGU9ImZpbGw6dXJsKCNTVkdJRF8wMDAwMDE2NTkyOTcyNDMwMzE2NDIwMzAwMDAwMDAwNzEwMTkwNDk4NDUxOTkxNTE2Ml8pO2ZpbHRlcjp1cmwoI0Fkb2JlX09wYWNpdHlNYXNrRmlsdGVyKTsiIGQ9IgoJCQlNMjc0LjcsOTMuOUwxNjYuNiwyM3YzOS42bDY5LjQsNDUuMWwtOC4yLDI1LjhoLTYxLjJ2MzIuOWg2MS4ybDguMiwyNS44bC02OS40LDQ1LjFWMjc3bDEwOC4yLTcwLjdMMjU3LDE1MC4xTDI3NC43LDkzLjl6Ii8+CgkJCgkJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMDAwMDAxMTk4MTE3MDc2MjE0NzI4MTQyNzAwMDAwMTA4Mjk2NTkzODM4NTEyMDI0OTFfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjEyOS4zNTIxIiB5MT0iLTE5LjE1NzEiIHgyPSI1Ni45MDcxIiB5Mj0iMjgwLjE2NDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMCAzMDIpIj4KCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzBCNDZGOSIvPgoJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojQkJGQkUwIi8+CgkJPC9saW5lYXJHcmFkaWVudD4KCQk8cGF0aCBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzAwMDAwMTE5ODExNzA3NjIxNDcyODE0MjcwMDAwMDEwODI5NjU5MzgzODUxMjAyNDkxXyk7IiBkPSJNNzIuNSwxNjYuNGg2MXYtMzIuOUg3Mi4ybC03LjktMjUuOAoJCQlsNjkuMi00NS4xVjIzTDI1LjMsOTMuOUw0MywxNTAuMWwtMTcuNyw1Ni4yTDEzMy43LDI3N3YtMzkuNmwtNjkuNC00NS4xTDcyLjUsMTY2LjR6Ii8+Cgk8L21hc2s+Cgk8ZyBjbGFzcz0ic3Q0Ij4KCQkKCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8wMDAwMDEwOTAxOTkxODU1Nzc3MzA1MzQyMDAwMDAxNzYwMjQwNTkwODA2NzEyMDMwMF8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iNDYuNDY2MiIgeTE9IjIyOC43NTU0IiB4Mj0iMTcxLjg2MzgiIHkyPSIxMzUuMTAzOSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAwIDMwMikiPgoJCQk8c3RvcCAgb2Zmc2V0PSIwLjExOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiM4OTUyRkY7c3RvcC1vcGFjaXR5OjAuODciLz4KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0RBQkRGRjtzdG9wLW9wYWNpdHk6MCIvPgoJCTwvbGluZWFyR3JhZGllbnQ+CgkJCgkJCTxyZWN0IHg9IjI1LjQiIHk9IjIzIiBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzAwMDAwMTA5MDE5OTE4NTU3NzczMDUzNDIwMDAwMDE3NjAyNDA1OTA4MDY3MTIwMzAwXyk7IiB3aWR0aD0iMjQ3LjYiIGhlaWdodD0iMjU0Ii8+Cgk8L2c+CjwvZz4KPC9zdmc+Cg==';\n\n/**\r\n * Documentation:\r\n * https://docs.exodus.com/api-reference/algorand-provider-api/\r\n */\r\nclass ExodusClient extends BaseClient {\r\n #client;\r\n clientOptions;\r\n network;\r\n constructor({ metadata, client, clientOptions, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.clientOptions = clientOptions;\r\n this.network = network;\r\n this.metadata = ExodusClient.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.EXODUS,\r\n name: 'Exodus',\r\n icon: ICON$8,\r\n isWalletConnect: false\r\n };\r\n static async init({ clientOptions, algodOptions, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.EXODUS.toUpperCase()} initializing...`);\r\n if (typeof window == 'undefined' || window.exodus === undefined) {\r\n throw new Error('Exodus is not available.');\r\n }\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const exodus = window.exodus.algorand;\r\n const provider = new ExodusClient({\r\n metadata: ExodusClient.metadata,\r\n client: exodus,\r\n algosdk: algosdk,\r\n algodClient: algodClient,\r\n clientOptions: clientOptions || { onlyIfTrusted: false },\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.EXODUS.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (e) {\r\n console.warn(e);\r\n console.warn(`Error initializing ${ExodusClient.metadata.name}.`, 'Do you have the extension installed?', 'https://www.exodus.com/web3-wallet');\r\n return null;\r\n }\r\n }\r\n async connect() {\r\n const { address } = await this.#client.connect({\r\n onlyIfTrusted: this.clientOptions.onlyIfTrusted\r\n });\r\n if (!address) {\r\n throw new Error(`No accounts found for ${ExodusClient.metadata.id}`);\r\n }\r\n const accounts = [\r\n {\r\n name: `Exodus 1`,\r\n address,\r\n providerId: ExodusClient.metadata.id\r\n }\r\n ];\r\n return {\r\n ...ExodusClient.metadata,\r\n accounts\r\n };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async reconnect(onDisconnect) {\r\n if (window === undefined ||\r\n window.exodus === undefined ||\r\n window.exodus.algorand.isConnected !== true) {\r\n onDisconnect();\r\n }\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async disconnect() {\r\n return;\r\n }\r\n async signTransactions(connectedAccounts, txnGroups, indexesToSign, returnGroup = true) {\r\n // If txnGroups is a nested array, flatten it\r\n const transactions = Array.isArray(txnGroups[0])\r\n ? txnGroups.flatMap((txn) => txn)\r\n : txnGroups;\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n const signedIndexes = [];\r\n // Get the unsigned transactions.\r\n const txnsToSign = decodedTxns.reduce((acc, txn, i) => {\r\n const isSigned = 'txn' in txn;\r\n // If the indexes to be signed is specified\r\n // add it to the arrays of transactions to be signed.\r\n if (indexesToSign && indexesToSign.length && indexesToSign.includes(i)) {\r\n signedIndexes.push(i);\r\n acc.push(transactions[i]);\r\n // If the transaction isn't already signed and is to be sent from a connected account,\r\n // add it to the arrays of transactions to be signed\r\n }\r\n else if (!isSigned && connectedAccounts.includes(this.algosdk.encodeAddress(txn['snd']))) {\r\n signedIndexes.push(i);\r\n acc.push(transactions[i]);\r\n }\r\n return acc;\r\n }, []);\r\n // Sign them with the client.\r\n const result = await this.#client.signTransaction(txnsToSign);\r\n // Join the newly signed transactions with the original group of transactions.\r\n const signedTxns = transactions.reduce((acc, txn, i) => {\r\n if (signedIndexes.includes(i)) {\r\n const signedByUser = result.shift();\r\n signedByUser && acc.push(signedByUser);\r\n }\r\n else if (returnGroup) {\r\n acc.push(transactions[i]);\r\n }\r\n return acc;\r\n }, []);\r\n return signedTxns;\r\n }\r\n}\n\nconst ICON$7 = 'data:image/svg+xml;base64,' +\r\n 'PHN2ZyB3aWR0aD0iMjM4IiBoZWlnaHQ9IjIzOCIgdmlld0JveD0iMCAwIDIzOCAyMzgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01MS43MDUgMTQ1LjA0MkgxMTYuNzA1TDEwNy43MDUgMTU1LjA0Mkg1MS43MDVWMTQ1LjA0MloiIGZpbGw9IiNENjQ1MDAiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNDcuNTE5IDE5MS41NTdMMTI5LjU3NyAxNDQuMzk0TDE0Mi40MDQgMTI3LjExMkwxNjcuODc1IDE5MS41NTdIMTQ3LjUxOVpNMTEwLjkzNiA5NS4zOTMyTDEyMC42MTMgMTIwLjgzMUwxMzMuMzU5IDEwNC4yMjhMMTE3LjQ3NSA2NC4wNDIyQzExNS45MjggNjAuMTI4IDExMi4xNDYgNTcuNTU2NSAxMDcuOTM4IDU3LjU1NjVDMTAzLjcyOSA1Ny41NTY1IDk5Ljk0NzQgNjAuMTI4IDk4LjQwMDMgNjQuMDQyMkw2Ny45NjU5IDE0MS4wNDJIODcuNzgwN0M5NS40MTUzIDEyMS4wMTEgMTAyLjg5MyAxMDEuMzk5IDEwNS4xOTggOTUuMzU0MUMxMDUuNjQxIDk0LjE5MTIgMTA2Ljc0MyA5My40NTk5IDEwNy45ODcgOTMuNDU5OUgxMDguMTMyQzEwOS4zNzggOTMuNDU5OSAxMTAuNDkzIDk0LjIyOTMgMTEwLjkzNiA5NS4zOTMyWk04MC45MjEgMTU5LjA0MkM3NC45Mjg5IDE3NC43NjggNjkuODY2MSAxODguMDYzIDY4LjU0NDcgMTkxLjU1N0g0OEw2MC44NTE0IDE1OS4wNDJIODAuOTIxWiIgZmlsbD0iIzIyMkI2MCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE3Ni4wMjYgNTQuNzUwOUMxNzcuOTk3IDUyLjA4NzIgMTgxLjc1NCA1MS41MjU3IDE4NC40MTggNTMuNDk2N0MxODcuMDgyIDU1LjQ2NzggMTg3LjY0MyA1OS4yMjUxIDE4NS42NzIgNjEuODg4OEwxMzAuMDEzIDEzNy4xMDdDMTI5LjcxNCAxMzcuNTEyIDEyOS4zNDEgMTM3Ljg1NyAxMjguOTEzIDEzOC4xMjNMMTE3Ljg1NiAxNDUuMDEzQzExNy4wODcgMTQ1LjQ5MyAxMTYuMTI4IDE0NC43ODMgMTE2LjM2MSAxNDMuOTA3TDExOS43MTggMTMxLjMxOEMxMTkuODQ3IDEzMC44MzIgMTIwLjA2OCAxMzAuMzc0IDEyMC4zNjcgMTI5Ljk3TDE3MC42NyA2MS45ODlMMTY5LjkyOSA2MS40NDA1QzE2OS40ODUgNjEuMTEyIDE2OC44NTkgNjEuMjA1NiAxNjguNTMgNjEuNjQ5NkwxNTIuMzExIDgzLjU2ODhDMTUyLjU4NiA4NC4yMDIzIDE1Mi41MjQgODQuOTYxMiAxNTIuMDg0IDg1LjU1NjJMMTQ5LjExIDg5LjU3NTVDMTQ4LjQ1MyA5MC40NjM0IDE0Ny4yMDEgOTAuNjUwNiAxNDYuMzEzIDg5Ljk5MzZDMTQ1LjQyNSA4OS4zMzY2IDE0NS4yMzggODguMDg0MSAxNDUuODk1IDg3LjE5NjJMMTQ3LjY3OSA4NC43ODQ3TDE0OC44NjkgODMuMTc2OUwxNjcuMzA4IDU4LjI1NzRDMTY4LjYyMiA1Ni40ODE1IDE3MS4xMjcgNTYuMTA3MiAxNzIuOTAzIDU3LjQyMTJMMTczLjY0NCA1Ny45Njk3TDE3Ni4wMjYgNTQuNzUwOVoiIGZpbGw9IiNENjQ1MDAiLz4KPC9zdmc+Cg==';\n\n/**\r\n * Documentation:\r\n * https://github.com/PureStake/algosigner/blob/develop/docs/dApp-integration.md\r\n */\r\nclass AlgoSignerClient extends BaseClient {\r\n #client;\r\n network;\r\n walletStore;\r\n constructor({ metadata, client, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.network = network;\r\n this.walletStore = useWalletStore;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.ALGOSIGNER,\r\n name: 'AlgoSigner',\r\n icon: ICON$7,\r\n isWalletConnect: false\r\n };\r\n static async init({ algodOptions, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.ALGOSIGNER.toUpperCase()} initializing...`);\r\n if (typeof window == 'undefined' || window.algorand === undefined) {\r\n throw new Error('AlgoSigner is not available.');\r\n }\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const algosigner = window.algorand;\r\n const provider = new AlgoSignerClient({\r\n metadata: AlgoSignerClient.metadata,\r\n client: algosigner,\r\n algosdk: algosdk,\r\n algodClient: algodClient,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.ALGOSIGNER.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (e) {\r\n console.warn(e);\r\n console.warn(`Error initializing ${AlgoSignerClient.metadata.name}.`, 'Do you have the extension installed?', 'https://www.purestake.com/technology/algosigner');\r\n return null;\r\n }\r\n }\r\n async connect() {\r\n const { accounts } = await this.#client.enable({ genesisID: this.getGenesisID() });\r\n if (accounts.length === 0) {\r\n throw new Error(`No accounts found for ${AlgoSignerClient.metadata.id}`);\r\n }\r\n const mappedAccounts = await Promise.all(accounts.map(async (address, index) => {\r\n // check to see if this is a rekeyed account\r\n const { 'auth-addr': authAddr } = await this.getAccountInfo(address);\r\n return {\r\n name: `AlgoSigner ${index + 1}`,\r\n address,\r\n providerId: AlgoSignerClient.metadata.id,\r\n ...(authAddr && { authAddr })\r\n };\r\n }));\r\n // sort the accounts in the order they were returned by AlgoSigner\r\n mappedAccounts.sort((a, b) => accounts.indexOf(a.address) - accounts.indexOf(b.address));\r\n return {\r\n ...AlgoSignerClient.metadata,\r\n accounts: mappedAccounts\r\n };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async reconnect(onDisconnect) {\r\n if (window === undefined || window.algorand === undefined) {\r\n onDisconnect();\r\n }\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async disconnect() {\r\n return;\r\n }\r\n async signTransactions(connectedAccounts, transactions, indexesToSign, returnGroup = true) {\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n const signedIndexes = [];\r\n // Marshal the transactions,\r\n // and add the signers property if they shouldn't be signed.\r\n const txnsToSign = decodedTxns.reduce((acc, txn, i) => {\r\n const isSigned = 'txn' in txn;\r\n const sender = this.algosdk.encodeAddress(isSigned ? txn.txn.snd : txn.snd);\r\n const authAddress = this.getAuthAddress(sender); // rekeyed-to account, or undefined\r\n if (indexesToSign && indexesToSign.length && indexesToSign.includes(i)) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: this.#client.encoding.msgpackToBase64(transactions[i]),\r\n ...(authAddress && { authAddr: authAddress })\r\n });\r\n }\r\n else if (!isSigned && connectedAccounts.includes(sender)) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: this.#client.encoding.msgpackToBase64(transactions[i]),\r\n ...(authAddress && { authAddr: authAddress })\r\n });\r\n }\r\n else {\r\n acc.push({\r\n txn: this.#client.encoding.msgpackToBase64(isSigned\r\n ? this.algosdk.decodeSignedTransaction(transactions[i]).txn.toByte()\r\n : this.algosdk.decodeUnsignedTransaction(transactions[i]).toByte()),\r\n signers: []\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n // Sign them with the client.\r\n const result = await this.#client.signTxns(txnsToSign);\r\n // Join the newly signed transactions with the original group of transactions\r\n // if `returnGroup` is true\r\n const signedTxns = transactions.reduce((acc, txn, i) => {\r\n if (signedIndexes.includes(i)) {\r\n const signedByUser = result[i];\r\n signedByUser && acc.push(base64ToByteArray(signedByUser));\r\n }\r\n else if (returnGroup) {\r\n acc.push(txn);\r\n }\r\n return acc;\r\n }, []);\r\n return signedTxns;\r\n }\r\n getGenesisID() {\r\n if (this.network === 'betanet') {\r\n return 'betanet-v1.0';\r\n }\r\n if (this.network === 'testnet') {\r\n return 'testnet-v1.0';\r\n }\r\n if (this.network === 'mainnet') {\r\n return 'mainnet-v1.0';\r\n }\r\n return this.network;\r\n }\r\n getAuthAddress(address) {\r\n const accounts = this.walletStore.getState().accounts;\r\n const account = accounts.find((acct) => acct.address === address && acct.providerId === this.metadata.id);\r\n return account?.authAddr;\r\n }\r\n}\n\nfunction svgToBase64(svg) {\r\n const base64EncodedSvg = btoa(svg);\r\n return `data:image/svg+xml;base64,${base64EncodedSvg}`;\r\n}\n\nconst svgMarkup = `\n\n`;\r\nconst ICON$6 = svgToBase64(svgMarkup);\n\nclass LuteClient extends BaseClient {\r\n #client;\r\n clientOptions;\r\n network;\r\n constructor({ metadata, client, clientOptions, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.clientOptions = clientOptions;\r\n this.network = network;\r\n this.metadata = LuteClient.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.LUTE,\r\n name: 'Lute',\r\n icon: ICON$6,\r\n isWalletConnect: false\r\n };\r\n static async init({ clientOptions, algodOptions, clientStatic, getDynamicClient, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.LUTE.toUpperCase()} initializing...`);\r\n let LuteConnect;\r\n if (clientStatic) {\r\n LuteConnect = clientStatic;\r\n }\r\n else if (getDynamicClient) {\r\n LuteConnect = await getDynamicClient();\r\n }\r\n else {\r\n throw new Error('Lute provider missing required property: clientStatic or getDynamicClient');\r\n }\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n if (!clientOptions) {\r\n throw new Error('Lute provider missing required property: clientOptions');\r\n }\r\n const lute = new LuteConnect(clientOptions.siteName);\r\n const provider = new LuteClient({\r\n metadata: LuteClient.metadata,\r\n client: lute,\r\n clientOptions,\r\n algosdk: algosdk,\r\n algodClient: algodClient,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.LUTE.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (e) {\r\n console.error('Error initializing...', e);\r\n return null;\r\n }\r\n }\r\n async connect() {\r\n const genesis = (await this.algodClient.genesis().do());\r\n const genesisID = `${genesis.network}-${genesis.id}`;\r\n const addresses = await this.#client.connect(genesisID);\r\n if (addresses.length === 0) {\r\n throw new Error(`No accounts found for ${LuteClient.metadata.id}`);\r\n }\r\n const mappedAccounts = addresses.map((address, index) => ({\r\n name: `Lute Wallet ${index + 1}`,\r\n address,\r\n providerId: LuteClient.metadata.id\r\n }));\r\n return {\r\n ...LuteClient.metadata,\r\n accounts: mappedAccounts\r\n };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async reconnect() {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async disconnect() {\r\n return;\r\n }\r\n shouldSignTxnObject(txn, addresses, indexesToSign, idx) {\r\n const isIndexMatch = !indexesToSign || indexesToSign.includes(idx);\r\n const isSigned = 'txn' in txn;\r\n const canSign = !isSigned && addresses.includes(this.algosdk.encodeAddress(txn.snd));\r\n const shouldSign = isIndexMatch && canSign;\r\n return shouldSign;\r\n }\r\n async signTransactions(connectedAccounts, transactions, indexesToSign, returnGroup = true) {\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n const signedIndexes = [];\r\n // Marshal the transactions,\r\n // and add the signers property if they shouldn't be signed.\r\n const txnsToSign = decodedTxns.reduce((acc, txn, idx) => {\r\n const isSigned = 'txn' in txn;\r\n const shouldSign = this.shouldSignTxnObject(txn, connectedAccounts, indexesToSign, idx);\r\n if (shouldSign) {\r\n signedIndexes.push(idx);\r\n acc.push({\r\n txn: byteArrayToBase64(transactions[idx])\r\n });\r\n }\r\n else {\r\n acc.push({\r\n txn: isSigned\r\n ? byteArrayToBase64(this.algosdk.decodeSignedTransaction(transactions[idx]).txn.toByte())\r\n : byteArrayToBase64(transactions[idx]),\r\n stxn: isSigned ? byteArrayToBase64(transactions[idx]) : undefined,\r\n signers: []\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n // Sign them with the client.\r\n const result = await this.#client.signTxns(txnsToSign);\r\n const signedTxns = transactions.reduce((acc, txn, i) => {\r\n if (signedIndexes.includes(i)) {\r\n const signedByUser = result[i];\r\n signedByUser && acc.push(signedByUser);\r\n }\r\n else if (returnGroup) {\r\n acc.push(txn);\r\n }\r\n return acc;\r\n }, []);\r\n return signedTxns;\r\n }\r\n}\n\nconst isPublicNetwork = (network) => {\r\n return network === 'betanet' || network === 'testnet' || network === 'mainnet';\r\n};\n\nconst ICON$5 = 'data:image/svg+xml;base64,' +\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiMzMzk2RkY7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTI2LjYsMTY4YzYyLjYtNjEuMywxNjQuMi02MS4zLDIyNi44LDBsNy41LDcuNGMzLjEsMy4xLDMuMSw4LDAsMTEuMWwtMjUuOCwyNS4yYy0xLjYsMS41LTQuMSwxLjUtNS43LDAKCWwtMTAuNC0xMC4yYy00My43LTQyLjgtMTE0LjUtNDIuOC0xNTguMiwwbC0xMS4xLDEwLjljLTEuNiwxLjUtNC4xLDEuNS01LjcsMGwtMjUuOC0yNS4yYy0zLjEtMy4xLTMuMS04LDAtMTEuMUwxMjYuNiwxNjh6CgkgTTQwNi43LDIyMC4ybDIyLjksMjIuNWMzLjEsMy4xLDMuMSw4LDAsMTEuMUwzMjYuMiwzNTUuMWMtMy4xLDMuMS04LjIsMy4xLTExLjMsMGwtNzMuNC03MS45Yy0wLjgtMC44LTIuMS0wLjgtMi44LDBsLTczLjQsNzEuOQoJYy0zLjEsMy4xLTguMiwzLjEtMTEuMywwTDUwLjMsMjUzLjhjLTMuMS0zLjEtMy4xLTgsMC0xMS4xbDIyLjktMjIuNWMzLjEtMy4xLDguMi0zLjEsMTEuMywwbDczLjQsNzEuOWMwLjgsMC44LDIuMSwwLjgsMi44LDAKCWw3My40LTcxLjljMy4xLTMuMSw4LjItMy4xLDExLjMsMGw3My40LDcxLjljMC44LDAuOCwyLjEsMC44LDIuOCwwbDczLjQtNzEuOUMzOTguNSwyMTcuMSw0MDMuNiwyMTcuMSw0MDYuNywyMjAuMkw0MDYuNywyMjAuMnoiLz4KPC9zdmc+Cg==';\r\nconst ALGORAND_CHAINS = {\r\n mainnet: 'algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73k',\r\n testnet: 'algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDe',\r\n betanet: 'algorand:mFgazF-2uRS1tMiL9dsj01hJGySEmPN2'\r\n};\n\nconst getPayloadId = () => {\r\n const date = Date.now() * Math.pow(10, 3);\r\n const extra = Math.floor(Math.random() * Math.pow(10, 3));\r\n return date + extra;\r\n};\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst formatJsonRpcRequest = (method, params) => {\r\n return {\r\n id: getPayloadId(),\r\n jsonrpc: '2.0',\r\n method,\r\n params\r\n };\r\n};\n\n/**\r\n * Documentation:\r\n * https://docs.walletconnect.com/2.0/\r\n */\r\nclass WalletConnectClient extends BaseClient {\r\n #client;\r\n clientOptions;\r\n network;\r\n chain;\r\n constructor({ metadata, client, clientOptions, algosdk, algodClient, network, chain }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.clientOptions = clientOptions;\r\n this.network = network;\r\n this.chain = chain;\r\n this.metadata = WalletConnectClient.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.WALLETCONNECT,\r\n name: 'WalletConnect',\r\n icon: ICON$5,\r\n isWalletConnect: true\r\n };\r\n static async init({ clientOptions, algodOptions, clientStatic, getDynamicClient, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.WALLETCONNECT.toUpperCase()} initializing...`);\r\n let Client;\r\n if (clientStatic) {\r\n Client = clientStatic;\r\n }\r\n else if (getDynamicClient) {\r\n Client = await getDynamicClient();\r\n }\r\n else {\r\n throw new Error('WalletConnect provider missing required property: clientStatic or getDynamicClient');\r\n }\r\n if (!clientOptions) {\r\n throw new Error('WalletConnect provider missing required property: clientOptions');\r\n }\r\n if (!isPublicNetwork(network)) {\r\n throw new Error(`WalletConnect only supports Algorand mainnet, testnet, and betanet. \"${network}\" is not supported.`);\r\n }\r\n const chain = ALGORAND_CHAINS[network];\r\n // Initialize client\r\n const client = new Client({\r\n ...clientOptions,\r\n modalOptions: {\r\n explorerExcludedWalletIds: 'ALL',\r\n ...clientOptions.modalOptions\r\n }\r\n });\r\n // Initialize algod client\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n // Initialize provider client\r\n const provider = new WalletConnectClient({\r\n metadata: WalletConnectClient.metadata,\r\n client,\r\n clientOptions,\r\n algosdk,\r\n algodClient,\r\n network,\r\n chain\r\n });\r\n debugLog(`${PROVIDER_ID.WALLETCONNECT.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (error) {\r\n console.error('Error initializing WalletConnect client', error);\r\n return null;\r\n }\r\n }\r\n async connect() {\r\n const requiredNamespaces = {\r\n algorand: {\r\n chains: [this.chain],\r\n methods: ['algo_signTxn'],\r\n events: []\r\n }\r\n };\r\n try {\r\n const session = await this.#client.connect({\r\n requiredNamespaces\r\n });\r\n const { accounts } = session.namespaces.algorand;\r\n return {\r\n ...WalletConnectClient.metadata,\r\n accounts: this.#mapAccounts(accounts)\r\n };\r\n }\r\n catch (error) {\r\n console.error('Error connecting to WalletConnect', error);\r\n throw error;\r\n }\r\n }\r\n async reconnect() {\r\n const session = await this.#client.getSession();\r\n if (typeof session === 'undefined') {\r\n return null;\r\n }\r\n const { accounts } = session.namespaces.algorand;\r\n return {\r\n ...WalletConnectClient.metadata,\r\n accounts: this.#mapAccounts(accounts)\r\n };\r\n }\r\n async disconnect() {\r\n try {\r\n const session = await this.#getSession();\r\n await this.#client.disconnect({\r\n topic: session.topic,\r\n // replicates getSdkError('USER_DISCONNECTED') from @walletconnect/utils\r\n reason: {\r\n message: 'User disconnected.',\r\n code: 6000\r\n }\r\n });\r\n }\r\n catch (error) {\r\n console.error('Error disconnecting', error);\r\n }\r\n }\r\n async signTransactions(connectedAccounts, txnGroups, indexesToSign = [], returnGroup = true) {\r\n // Flatten transactions array if nested\r\n const transactions = Array.isArray(txnGroups[0])\r\n ? txnGroups.flatMap((txn) => txn)\r\n : txnGroups;\r\n const { txnsToSign, signedIndexes } = this.#composeTransactions(transactions, connectedAccounts, indexesToSign);\r\n const request = formatJsonRpcRequest('algo_signTxn', [txnsToSign]);\r\n const session = await this.#getSession();\r\n const response = await this.#client.request({\r\n chainId: this.chain,\r\n topic: session.topic,\r\n request\r\n });\r\n // Check if the result is the same length as the transactions\r\n const lengthsMatch = response.length === transactions.length;\r\n // Join the signed transactions with the original group of transactions\r\n const signedTxns = transactions.reduce((acc, txn, i) => {\r\n if (signedIndexes.includes(i)) {\r\n const signedTxn = lengthsMatch ? response[i] : response.shift();\r\n signedTxn && acc.push(base64ToByteArray(signedTxn));\r\n }\r\n else if (returnGroup) {\r\n acc.push(txn);\r\n }\r\n return acc;\r\n }, []);\r\n return signedTxns;\r\n }\r\n #composeTransactions(transactions, connectedAccounts, indexesToSign) {\r\n // Decode the transactions\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n // Track signed transactions\r\n const signedIndexes = [];\r\n // Marshal the transactions into WalletConnect format\r\n const txnsToSign = decodedTxns.reduce((acc, txn, i) => {\r\n const isSigned = 'txn' in txn;\r\n const senderAccount = !isSigned\r\n ? this.algosdk.encodeAddress(txn['snd'])\r\n : this.algosdk.encodeAddress(txn.txn['snd']);\r\n const shouldSign = indexesToSign.includes(i) || (!isSigned && connectedAccounts.includes(senderAccount));\r\n if (shouldSign) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: byteArrayToBase64(transactions[i])\r\n });\r\n }\r\n else {\r\n acc.push({\r\n txn: isSigned\r\n ? byteArrayToBase64(this.algosdk.encodeUnsignedTransaction(this.algosdk.decodeSignedTransaction(transactions[i]).txn))\r\n : byteArrayToBase64(transactions[i]),\r\n signers: []\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n return { txnsToSign, signedIndexes };\r\n }\r\n async #getSession() {\r\n const session = await this.#client.getSession();\r\n if (typeof session === 'undefined') {\r\n throw new Error('Session is not connected');\r\n }\r\n return session;\r\n }\r\n #mapAccounts(accounts) {\r\n return accounts.map((accountStr, index) => ({\r\n name: `WalletConnect ${index + 1}`,\r\n address: accountStr.split(':').pop(),\r\n providerId: WalletConnectClient.metadata.id\r\n }));\r\n }\r\n}\n\nconst ICON$4 = 'data:image/svg+xml;base64,' +\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBHZW5lcmF0ZWQgYnkgUGl4ZWxtYXRvciBQcm8gMy40LjMgLS0+Cjxzdmcgd2lkdGg9IjQ3IiBoZWlnaHQ9IjQ3IiB2aWV3Qm94PSIwIDAgNDcgNDciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBpZD0iUGF0aCIgZmlsbD0iIzY4NTFmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9Im5vbmUiIGQ9Ik0gMjMuOTYwODYxIDEuODA3NjkgQyAyNS44MzUwNzcgNC4xMDMxNTMgMjcuOTAyMjE2IDYuMjM0ODkgMzAuMTM3NTM5IDguMTc4MTY5IEMgMjguNjQ3OTY4IDEzLjAwOTMyMyAyNy44NDYwOTIgMTguMTQyMDk0IDI3Ljg0NjA5MiAyMy40NjIxNTQgQyAyNy44NDYwOTIgMjguNzgyMzA3IDI4LjY0ODA2MiAzMy45MTUxNjkgMzAuMTM3NjMgMzguNzQ2MzY4IEMgMjcuOTAyMjE2IDQwLjY4OTcyNCAyNS44MzUwNzcgNDIuODIxNDc2IDIzLjk2MDg2MSA0NS4xMTY5ODUgQyAyMi4wODY1NTQgNDIuODIxNDc2IDIwLjAxOTQxNSA0MC42ODk2MzIgMTcuNzgzOTk4IDM4Ljc0NjM2OCBDIDE5LjI3MzQ3NiAzMy45MTUxNjkgMjAuMDc1NDQ1IDI4Ljc4MjQgMjAuMDc1NDQ1IDIzLjQ2MjMzNyBDIDIwLjA3NTQ0NSAxOC4xNDIyNzcgMTkuMjczNDc2IDEzLjAwOTUwNiAxNy43ODM5OTggOC4xNzgzMTggQyAyMC4wMTk0MTUgNi4yMzUwMDEgMjIuMDg2NTU0IDQuMTAzMjEgMjMuOTYwODYxIDEuODA3NjkgWiBNIDEzLjUxMTQyNyAzNS40MDY0MDMgQyAxMS4xNDUxMzkgMzMuNzQ3ODE0IDguNjMzODE2IDMyLjI4MjA2MyA2LjAwMDI2OSAzMS4wMzE5MzcgQyA2LjczMDc3NiAyOC42Mzc0NzYgNy4xMjM3NTQgMjYuMDk1NzgzIDcuMTIzNzU0IDIzLjQ2MjQyOSBDIDcuMTIzNzU0IDIwLjgyODg5MiA2LjczMDc2MiAxOC4yODcyMDEgNi4wMDAyMzUgMTUuODkyNzM4IEMgOC42MzM4MTYgMTQuNjQyNjE2IDExLjE0NTE3NSAxMy4xNzY4NjEgMTMuNTExNTAxIDExLjUxODI3NiBDIDE0LjQxNjMxMSAxNS4zNTI1NTQgMTQuODk1MDc0IDE5LjM1MTQxNCAxNC44OTUwNzQgMjMuNDYyMTU0IEMgMTQuODk1MDc0IDI3LjU3Mjk4NSAxNC40MTYyODMgMzEuNTcxOTM4IDEzLjUxMTQyNyAzNS40MDY0MDMgWiBNIDMzLjAyNzA0NiAyMy40NjIzMzcgQyAzMy4wMjcwNDYgMjcuNTcyOTg1IDMzLjUwNTc1MyAzMS41NzE4NDYgMzQuNDEwNTUzIDM1LjQwNjEyNCBDIDM2Ljc3Njg1OSAzMy43NDc2MzEgMzkuMjg4MDk0IDMyLjI4MTg3NiA0MS45MjE1MzkgMzEuMDMxODQ1IEMgNDEuMTkxMDE3IDI4LjYzNzM4NCA0MC43OTgwNjEgMjYuMDk1NjkyIDQwLjc5ODA2MSAyMy40NjIyNDYgQyA0MC43OTgwNjEgMjAuODI4OCA0MS4xOTEwMTcgMTguMjg3MjAxIDQxLjkyMTUzOSAxNS44OTI4MyBDIDM5LjI4ODA5NCAxNC42NDI3MDggMzYuNzc2NzY4IDEzLjE3NzA0OCAzNC40MTA1NTMgMTEuNTE4NTU1IEMgMzMuNTA1NzUzIDE1LjM1MjgzMSAzMy4wMjcwNDYgMTkuMzUxNjkyIDMzLjAyNzA0NiAyMy40NjIzMzcgWiIvPgo8L3N2Zz4K';\n\n/**\r\n * Documentation:\r\n * https://magic.link/docs/blockchains/other-chains/other/algorand\r\n */\r\nclass MagicAuth extends BaseClient {\r\n #client;\r\n clientOptions;\r\n network;\r\n constructor({ metadata, client, clientOptions, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.clientOptions = clientOptions;\r\n this.network = network;\r\n this.metadata = MagicAuth.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.MAGIC,\r\n name: 'Magic',\r\n icon: ICON$4,\r\n isWalletConnect: true\r\n };\r\n static async init({ clientOptions, algodOptions, clientStatic, getDynamicClient, extensionStatic, getDynamicExtension, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.MAGIC.toUpperCase()} initializing...`);\r\n let Magic;\r\n if (clientStatic) {\r\n Magic = clientStatic;\r\n }\r\n else if (getDynamicClient) {\r\n Magic = await getDynamicClient();\r\n }\r\n else {\r\n throw new Error('Magic provider missing required property: clientStatic or getDynamicClient');\r\n }\r\n let AlgorandExtension;\r\n if (extensionStatic) {\r\n AlgorandExtension = extensionStatic;\r\n }\r\n else if (getDynamicExtension) {\r\n AlgorandExtension = await getDynamicExtension();\r\n }\r\n else {\r\n throw new Error('Magic provider missing required property: extensionStatic or getDynamicExtension');\r\n }\r\n if (!clientOptions || !clientOptions.apiKey) {\r\n throw new Error('Magic provider missing API Key to be passed by required property: clientOptions');\r\n }\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const magic = new Magic(clientOptions?.apiKey, {\r\n extensions: {\r\n algorand: new AlgorandExtension({\r\n rpcUrl: ''\r\n })\r\n }\r\n });\r\n const provider = new MagicAuth({\r\n metadata: MagicAuth.metadata,\r\n client: magic,\r\n clientOptions: clientOptions,\r\n algosdk,\r\n algodClient,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.MAGIC.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (e) {\r\n console.error('Error initializing...', e);\r\n return null;\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async connect(_, arg) {\r\n if (!arg || typeof arg !== 'string') {\r\n throw new Error('Magic Link provider requires an email (string) to connect');\r\n }\r\n const email = arg;\r\n await this.#client.auth.loginWithMagicLink({ email: email });\r\n const userInfo = await this.#client.user.getInfo();\r\n return {\r\n ...MagicAuth.metadata,\r\n accounts: [\r\n {\r\n name: `MagicWallet ${userInfo.email ?? ''} 1`,\r\n address: userInfo.publicAddress ?? 'N/A',\r\n providerId: MagicAuth.metadata.id,\r\n email: userInfo.email ?? ''\r\n }\r\n ]\r\n };\r\n }\r\n async reconnect() {\r\n const isLoggedIn = await this.#client.user.isLoggedIn();\r\n if (!isLoggedIn) {\r\n return null;\r\n }\r\n const userInfo = await this.#client.user.getInfo();\r\n return {\r\n ...MagicAuth.metadata,\r\n accounts: [\r\n {\r\n name: `MagicWallet ${userInfo.email ?? ''} 1`,\r\n address: userInfo.publicAddress ?? 'N/A',\r\n providerId: MagicAuth.metadata.id,\r\n email: userInfo.email ?? ''\r\n }\r\n ]\r\n };\r\n }\r\n async disconnect() {\r\n await this.#client.user.logout();\r\n }\r\n async signTransactions(connectedAccounts, txnGroups, indexesToSign, returnGroup = true) {\r\n // If txnGroups is a nested array, flatten it\r\n const transactions = Array.isArray(txnGroups[0])\r\n ? txnGroups.flatMap((txn) => txn)\r\n : txnGroups;\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n const signedIndexes = [];\r\n // Marshal the transactions,\r\n // and add the signers property if they shouldn't be signed.\r\n const txnsToSign = decodedTxns.reduce((acc, txn, i) => {\r\n const isSigned = 'txn' in txn;\r\n // If the indexes to be signed is specified, designate that it should be signed\r\n if (indexesToSign && indexesToSign.length && indexesToSign.includes(i)) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: byteArrayToBase64(transactions[i])\r\n });\r\n // If the indexes to be signed is specified, but it's not included in it,\r\n // designate that it should not be signed\r\n }\r\n else if (indexesToSign && indexesToSign.length && !indexesToSign.includes(i)) {\r\n acc.push({\r\n txn: isSigned\r\n ? byteArrayToBase64(this.algosdk.encodeUnsignedTransaction(this.algosdk.decodeSignedTransaction(transactions[i]).txn))\r\n : byteArrayToBase64(transactions[i]),\r\n signers: []\r\n });\r\n // If the transaction is unsigned and is to be sent from a connected account,\r\n // designate that it should be signed\r\n }\r\n else if (!isSigned && connectedAccounts.includes(this.algosdk.encodeAddress(txn['snd']))) {\r\n signedIndexes.push(i);\r\n acc.push({\r\n txn: byteArrayToBase64(transactions[i])\r\n });\r\n // Otherwise, designate that it should not be signed\r\n }\r\n else if (isSigned) {\r\n acc.push({\r\n txn: byteArrayToBase64(this.algosdk.encodeUnsignedTransaction(this.algosdk.decodeSignedTransaction(transactions[i]).txn)),\r\n signers: []\r\n });\r\n }\r\n else if (!isSigned) {\r\n acc.push({\r\n txn: byteArrayToBase64(transactions[i]),\r\n signers: []\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n // Sign them with the client.\r\n try {\r\n console.log(txnsToSign);\r\n const result = await this.#client.algorand.signGroupTransactionV2(txnsToSign);\r\n console.log(result);\r\n const decodedSignedTxns = result.map((txn) => {\r\n return base64ToByteArray(txn);\r\n });\r\n // Join the newly signed transactions with the original group of transactions.\r\n const signedTxns = transactions.reduce((acc, txn, i) => {\r\n if (signedIndexes.includes(i)) {\r\n const signedByUser = decodedSignedTxns.shift();\r\n signedByUser && acc.push(signedByUser);\r\n }\r\n else if (returnGroup) {\r\n acc.push(transactions[i]);\r\n }\r\n return acc;\r\n }, []);\r\n return signedTxns;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n return [];\r\n }\r\n }\r\n}\n\nconst ICON$3 = 'data:image/svg+xml;base64,' +\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDkuODMgMjEwLjMzIj48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDE2MS4zMSkiIHN0eWxlPSJmb250LWZhbWlseTpJQk1QbGV4U2Fucy1NZWRtLCAmYXBvcztJQk0gUGxleCBTYW5zJmFwb3M7OyBmb250LXNpemU6MTkwcHg7Ij48dHNwYW4geD0iMCIgeT0iMCI+S01EPC90c3Bhbj48L3RleHQ+PC9zdmc+';\n\nclass KMDWalletClient extends BaseClient {\r\n #client;\r\n #wallet;\r\n #password;\r\n walletId;\r\n network;\r\n constructor({ metadata, client, wallet, password, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.#client = client;\r\n this.#wallet = wallet;\r\n this.#password = password;\r\n this.walletId = '';\r\n this.network = network;\r\n this.metadata = KMDWalletClient.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.KMD,\r\n name: 'KMD',\r\n icon: ICON$3,\r\n isWalletConnect: false\r\n };\r\n static async init({ clientOptions, algodOptions, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.KMD.toUpperCase()} initializing...`);\r\n const { token = 'a'.repeat(64), host = 'http://localhost', port = '4002', wallet = 'unencrypted-default-wallet', password = '' } = clientOptions || {};\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const kmdClient = new algosdk.Kmd(token, host, port);\r\n const provider = new KMDWalletClient({\r\n metadata: KMDWalletClient.metadata,\r\n password,\r\n wallet,\r\n client: kmdClient,\r\n algosdk: algosdk,\r\n algodClient: algodClient,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.KMD.toUpperCase()} initialized`, '✅');\r\n return provider;\r\n }\r\n catch (e) {\r\n console.error('Error initializing...', e);\r\n return null;\r\n }\r\n }\r\n async connect() {\r\n // TODO: prompt for wallet and password?\r\n return {\r\n ...KMDWalletClient.metadata,\r\n accounts: await this.listAccounts(this.#wallet, this.requestPassword())\r\n };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async disconnect() {\r\n return;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async reconnect() {\r\n return null;\r\n }\r\n requestPassword() {\r\n // TODO: store it locally?\r\n const pw = prompt('KMD password');\r\n return pw ? pw : '';\r\n }\r\n async getWalletToken(walletId, password) {\r\n const handleResp = await this.#client.initWalletHandle(walletId, password);\r\n return handleResp.wallet_handle_token;\r\n }\r\n async releaseToken(token) {\r\n await this.#client.releaseWalletHandle(token);\r\n }\r\n async listWallets() {\r\n const walletResponse = await this.#client.listWallets();\r\n const walletList = walletResponse['wallets'];\r\n const walletMap = {};\r\n for (const w of walletList) {\r\n walletMap[w.name] = w.id;\r\n }\r\n return walletMap;\r\n }\r\n async listAccounts(wallet, password) {\r\n // Get a handle token\r\n const walletId = await this.getWalletId();\r\n const token = await this.getWalletToken(walletId, password);\r\n // Fetch accounts and format them as lib expects\r\n const listResponse = await this.#client.listKeys(token);\r\n const addresses = listResponse['addresses'];\r\n const mappedAccounts = addresses.map((address, index) => {\r\n return {\r\n name: `KMDWallet ${index + 1}`,\r\n address,\r\n providerId: KMDWalletClient.metadata.id\r\n };\r\n });\r\n // Release handle token\r\n await this.releaseToken(token);\r\n return mappedAccounts;\r\n }\r\n async getWalletId() {\r\n // Use cached if available\r\n if (this.walletId !== '')\r\n return this.walletId;\r\n const walletMap = await this.listWallets();\r\n if (!(this.#wallet in walletMap))\r\n throw Error('No wallet named: ' + this.#wallet);\r\n this.walletId = walletMap[this.#wallet];\r\n return this.walletId;\r\n }\r\n async signTransactions(connectedAccounts, txnGroups, indexesToSign, returnGroup = true) {\r\n // If txnGroups is a nested array, flatten it\r\n const transactions = Array.isArray(txnGroups[0])\r\n ? txnGroups.flatMap((txn) => txn)\r\n : txnGroups;\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n // Get a handle token\r\n const walletId = await this.getWalletId();\r\n const pw = this.requestPassword();\r\n const token = await this.getWalletToken(walletId, pw);\r\n const signedTxns = [];\r\n // Sign them with the client.\r\n const signingPromises = [];\r\n decodedTxns.forEach((dtxn, idx) => {\r\n const isSigned = 'txn' in dtxn;\r\n // push the incoming txn into signed, we'll overwrite it later\r\n signedTxns.push(transactions[idx]);\r\n // Its already signed, skip it\r\n if (isSigned) {\r\n return;\r\n // Not specified in indexes to sign, skip it\r\n }\r\n else if (indexesToSign && indexesToSign.length && !indexesToSign.includes(Number(idx))) {\r\n return;\r\n }\r\n // Not to be signed by our signer, skip it\r\n else {\r\n const senderAddress = this.algosdk.encodeAddress(dtxn.snd);\r\n const rekeyAddress = dtxn.rekey ? this.algosdk.encodeAddress(dtxn.rekey) : null;\r\n const isSignerConnected = rekeyAddress\r\n ? connectedAccounts.includes(rekeyAddress) && connectedAccounts.includes(senderAddress)\r\n : connectedAccounts.includes(senderAddress);\r\n if (!isSignerConnected) {\r\n return;\r\n }\r\n }\r\n // overwrite with an empty blob\r\n signedTxns[idx] = new Uint8Array();\r\n const txn = this.algosdk.Transaction.from_obj_for_encoding(dtxn);\r\n const promise = txn.reKeyTo\r\n ? this.#client.signTransactionWithSpecificPublicKey(token, pw, txn, txn.reKeyTo.publicKey)\r\n : this.#client.signTransaction(token, pw, txn);\r\n signingPromises.push(promise);\r\n });\r\n const signingResults = await Promise.all(signingPromises);\r\n // Restore the newly signed txns in the correct order\r\n let signedIdx = 0;\r\n const formattedTxns = signedTxns.reduce((acc, txn) => {\r\n // If its an empty array, infer that it is one of the\r\n // ones we wanted to have signed and overwrite the empty buff\r\n if (txn.length === 0) {\r\n acc.push(signingResults[signedIdx]);\r\n signedIdx += 1;\r\n }\r\n else if (returnGroup) {\r\n acc.push(txn);\r\n }\r\n return acc;\r\n }, []);\r\n return formattedTxns;\r\n }\r\n}\n\nconst ICON$2 = \"data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e %3c!-- Generated by Pixelmator Pro 3.2.2 --%3e %3csvg width='409' height='210' viewBox='0 0 409 210' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctext id='MNEMONIC' xml:space='preserve' x='0' y='129' font-family='Helvetica' font-size='72' fill='black'%3eMNEMONIC%3c/text%3e%3c/svg%3e\";\n\nclass MnemonicWalletClient extends BaseClient {\r\n #client;\r\n network;\r\n constructor({ metadata, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.network = network;\r\n this.metadata = MnemonicWalletClient.metadata;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.MNEMONIC,\r\n name: 'MNEMONIC',\r\n icon: ICON$2,\r\n isWalletConnect: false\r\n };\r\n static async init({ algodOptions, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.MNEMONIC.toUpperCase()} initializing...`);\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const provider = new MnemonicWalletClient({\r\n metadata: MnemonicWalletClient.metadata,\r\n algosdk: algosdk,\r\n algodClient: algodClient,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.MNEMONIC.toUpperCase()} initialized`);\r\n return provider;\r\n }\r\n catch (e) {\r\n console.error('Error initializing...', e);\r\n return null;\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async connect() {\r\n const password = this.requestPassword();\r\n if (!password) {\r\n this.#client = undefined;\r\n throw new Error('Mnemonic passphrase is required');\r\n }\r\n this.#client = this.algosdk.mnemonicToSecretKey(password);\r\n return {\r\n ...MnemonicWalletClient.metadata,\r\n accounts: [\r\n {\r\n name: `MnemonicWallet 1`,\r\n address: this.#client.addr,\r\n providerId: MnemonicWalletClient.metadata.id\r\n }\r\n ]\r\n };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async disconnect() {\r\n this.#client = undefined;\r\n return;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async reconnect() {\r\n return null;\r\n }\r\n requestPassword() {\r\n // TODO: store it locally?\r\n const pass = prompt('enter mnemonic passphrase, 25 words');\r\n return pass ? pass : '';\r\n }\r\n signTransactions(connectedAccounts, txnGroups, indexesToSign, returnGroup = true) {\r\n if (!this.#client) {\r\n throw new Error('Client not connected');\r\n }\r\n // If txnGroups is a nested array, flatten it\r\n const transactions = Array.isArray(txnGroups[0])\r\n ? txnGroups.flatMap((txn) => txn)\r\n : txnGroups;\r\n // Decode the transactions to access their properties.\r\n const decodedTxns = transactions.map((txn) => {\r\n return this.algosdk.decodeObj(txn);\r\n });\r\n const signedTxns = [];\r\n // Sign them with the client.\r\n const signingResults = [];\r\n decodedTxns.forEach((dtxn, idx) => {\r\n const isSigned = 'txn' in dtxn;\r\n // push the incoming txn into signed, we'll overwrite it later\r\n signedTxns.push(transactions[idx]);\r\n // Its already signed, skip it\r\n if (isSigned) {\r\n return;\r\n // Not specified in indexes to sign, skip it\r\n }\r\n else if (indexesToSign && indexesToSign.length && !indexesToSign.includes(Number(idx))) {\r\n return;\r\n }\r\n // Not to be signed by our signer, skip it\r\n else if (!connectedAccounts.includes(this.algosdk.encodeAddress(dtxn.snd))) {\r\n return;\r\n }\r\n // overwrite with an empty blob\r\n signedTxns[idx] = new Uint8Array();\r\n const txn = this.algosdk.Transaction.from_obj_for_encoding(dtxn);\r\n const signedTxn = txn.signTxn(this.#client?.sk);\r\n signingResults.push(signedTxn);\r\n });\r\n // Restore the newly signed txns in the correct order\r\n let signedIdx = 0;\r\n const formattedTxns = signedTxns.reduce((acc, txn) => {\r\n // If its an empty array, infer that it is one of the\r\n // ones we wanted to have signed and overwrite the empty buff\r\n if (txn.length === 0) {\r\n acc.push(signingResults[signedIdx]);\r\n signedIdx += 1;\r\n }\r\n else if (returnGroup) {\r\n acc.push(txn);\r\n }\r\n return acc;\r\n }, []);\r\n return Promise.resolve(formattedTxns);\r\n }\r\n signEncodedTransactions(_transactions) {\r\n throw new Error('Method not implemented.');\r\n }\r\n}\n\nconst ICON$1 = \"data:image/svg+xml,%3Csvg fill='%23000000' width='800px' height='800px' viewBox='0 0 24 24' id='wallet' data-name='Flat Line' xmlns='http://www.w3.org/2000/svg' class='icon flat-line'%3E%3Cpath id='secondary' d='M16,12h5V8H5A2,2,0,0,1,3,6V19a1,1,0,0,0,1,1H20a1,1,0,0,0,1-1V16H16a1,1,0,0,1-1-1V13A1,1,0,0,1,16,12Z' style='fill: rgb(44, 169, 188); stroke-width: 2;'%3E%3C/path%3E%3Cpath id='primary' d='M19,4H5A2,2,0,0,0,3,6H3A2,2,0,0,0,5,8H21' style='fill: none; stroke: rgb(0, 0, 0); stroke-linecap: round; stroke-linejoin: round; stroke-width: 2;'%3E%3C/path%3E%3Cpath id='primary-2' data-name='primary' d='M21,8V19a1,1,0,0,1-1,1H4a1,1,0,0,1-1-1V6A2,2,0,0,0,5,8Zm0,4H16a1,1,0,0,0-1,1v2a1,1,0,0,0,1,1h5Z' style='fill: none; stroke: rgb(0, 0, 0); stroke-linecap: round; stroke-linejoin: round; stroke-width: 2;'%3E%3C/path%3E%3C/svg%3E\";\n\nclass CustomWalletClient extends BaseClient {\r\n network;\r\n providerProxy;\r\n static metadata = {\r\n id: PROVIDER_ID.CUSTOM,\r\n icon: ICON$1,\r\n isWalletConnect: false,\r\n name: 'Custom'\r\n };\r\n constructor({ providerProxy, metadata, algosdk, algodClient, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.providerProxy = providerProxy;\r\n this.network = network;\r\n }\r\n static async init({ clientOptions, algodOptions, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.CUSTOM.toUpperCase()} initializing...`);\r\n if (!clientOptions) {\r\n throw new Error(`Attempt to create custom wallet with no provider specified.`);\r\n }\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n try {\r\n return new CustomWalletClient({\r\n providerProxy: clientOptions.getProvider({\r\n algod: algodClient,\r\n algosdkStatic: algosdk,\r\n network\r\n }),\r\n metadata: {\r\n ...CustomWalletClient.metadata,\r\n name: clientOptions.name,\r\n icon: clientOptions.icon ?? CustomWalletClient.metadata.icon\r\n },\r\n algodClient,\r\n algosdk,\r\n network\r\n });\r\n }\r\n finally {\r\n debugLog(`${PROVIDER_ID.CUSTOM.toUpperCase()} initialized`, '✅');\r\n }\r\n }\r\n catch (e) {\r\n console.error('Error initializing...', e);\r\n return null;\r\n }\r\n }\r\n async connect() {\r\n return await this.providerProxy.connect(this.metadata);\r\n }\r\n async disconnect() {\r\n await this.providerProxy.disconnect();\r\n }\r\n async reconnect() {\r\n return await this.providerProxy.reconnect(this.metadata);\r\n }\r\n async signTransactions(connectedAccounts, txnGroups, indexesToSign, returnGroup = true) {\r\n return await this.providerProxy.signTransactions(connectedAccounts, txnGroups, indexesToSign, returnGroup);\r\n }\r\n}\n\n/**\r\n * arc-0027\r\n */\r\nconst ARC_0027_PREFIX = 'arc0027';\r\nconst ARC_0027_CHANNEL_NAME = `${ARC_0027_PREFIX}:channel`;\r\nconst ARC_0027_ENABLE_REQUEST = `${ARC_0027_PREFIX}:enable:request`;\r\nconst ARC_0027_GET_PROVIDERS_REQUEST = `${ARC_0027_PREFIX}:get_providers:request`;\r\nconst ARC_0027_PROVIDER_ID = 'f6d1c86b-4493-42fb-b88d-a62407b4cdf6';\r\nconst ARC_0027_SIGN_TXNS_REQUEST = `${ARC_0027_PREFIX}:sign_txns:request`;\r\n/**\r\n * errors\r\n */\r\nconst UNKNOWN_ERROR = 4000;\r\nconst METHOD_TIMED_OUT_ERROR = 4002;\r\nconst METHOD_NOT_SUPPORTED_ERROR = 4003;\r\nconst NETWORK_NOT_SUPPORTED_ERROR = 4004;\r\n/**\r\n * timeouts\r\n */\r\nconst DEFAULT_REQUEST_TIMEOUT = 180000; // 3 minutes in milliseconds\r\nconst LOWER_REQUEST_TIMEOUT = 750; // 0.75 seconds in milliseconds\r\n/**\r\n * icon\r\n */\r\nconst ICON = 'data:image/svg+xml;base64,' +\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMiIKICAgdmlld0JveD0iMCAwIDEzNjUuMzMzMyAxMzY1LjMzMzMiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGgKICAgIGQ9Im0gNjY3Ljk5OTk4LDEwNDguNjY2MiBjIDAsLTY0LjE2Njk4IC0wLjYyMDQ0LC0xMjguODE2OTggLTEuMzc4NzcsLTE0My42NjY3IC0yLjgxMTA3LC01NS4wNDczNyAtMTIuMDY3NDksLTkzLjA1MjU5IC0zMy4yNDA1OSwtMTM2LjQ3OTkyIC0yMS41MDczNCwtNDQuMTEyODkgLTUxLjA3MDU3LC04Mi42MzAyMiAtODQuNzM2ODYsLTExMC40MDE5OCAtMjMuNjQ4MjEsLTE5LjUwNzcxIC0yOS4zOTQ4NCwtMjMuNTc5NjMgLTUzLjU5NzA3LC0zNy45Nzc1NSAtMTAuMzU1NTMsLTYuMTYwNDkgLTQ1Ljk3MTAyLC0yMi44MDY3MyAtNDguNzk2MjIsLTIyLjgwNjczIC0wLjk0NDQzLDAgLTIuMjg3MTUsLTAuNTUyODkgLTIuOTgzODEsLTEuMjI4NjUgLTEuNDkxOTUsLTEuNDQ3MTYgLTM0LjAwNzg3LC0xMS4wNzg0NyAtNDQuNiwtMTMuMjEwNjQgLTE5LjUwOTI4LC0zLjkyNzE4IC00Ni4xMDEzMSwtNi44NjQxMiAtNjUuOTI5MTUsLTcuMjgxNTIgbCAtMTMuMjYyNDksLTAuMjc5MTkgLTEuNzk0NCwxMi42NjY2NyBjIC0yLjQ3MjMzLDE3LjQ1MjI1IC0yLjk5NDMyLDQ4LjMxNTQzIC0zLjAwNDg3LDE3Ny42NjY2NiBsIC0wLjAwOSwxMTEuNjY2NjYgaCAtMjggLTI4IGwgMC4wMjg5LC0xMzAuMzMzMzMgYyAwLjAyNjQsLTExOC45MzM1NyAwLjI1Mjg0LC0xMzIuNDkwODIgMi41ODg1NiwtMTU0Ljk5OTk5IDIuNjU1MjMsLTI1LjU4ODI2IDYuMzY3NjgsLTQ4LjY4Njg2IDkuODU3NTksLTYxLjMzMzM0IDcuMDU0NTIsLTI1LjU2MzU4IDEwLjYyNTc5LC0zNy4yNjIyMSAxMi44MjE0MywtNDIgMC42Nzk3LC0xLjQ2NjY2IDIuMTI2MzMsLTUuMzY2NjYgMy4yMTQ3MywtOC42NjY2NiA2LjY5Njc2LC0yMC4zMDQ0NyAyNi40NDAxNSwtNTguNzgxMzYgNDMuNDg4NzMsLTg0Ljc1MzAzIDI4LjA3NzM3LC00Mi43NzI4MSA2MC4zNDY2OSwtNzYuODgwNzQgMTA0LjY2NjY3LC0xMTAuNjMwMjYgNC42ODc3NywtMy41Njk3MiAyOS40ODMwNSwtMjAuMDcxOTkgMzkuNjU5OTgsLTI2LjM5NTMyIDEzLjU2MjQxLC04LjQyNjg5IDUxLjgwNDgsLTI2LjY4OTI1IDY1LjAwNjY4LC0zMS4wNDM0NSAzLjMsLTEuMDg4NCA3LjIsLTIuNTMxMiA4LjY2NjY3LC0zLjIwNjIzIDcuNjYxMzMsLTMuNTI2MDkgNDEuMjA5ODgsLTEzLjE5MDY5IDU2LC0xNi4xMzIzNyA3OS45NTg3OCwtMTUuOTAzMzkgMTU3Ljk3ODkyLC0xMC43Njc3MSAyMzMuOTk5OTksMTUuNDAzMDYgNDEuOTE4NjEsMTQuNDMwNzYgNzUuOTk2NDksMzIuMTc3NzkgMTE0Ljc1MTY2LDU5Ljc2MDE5IDE2Ljg4MDQ3LDEyLjAxMzk5IDQ3LjIyMTc2LDM4Ljk4MjMxIDU5LjkxMTE2LDUzLjI1MTAzIDUuNDE5Myw2LjA5MzgzIDExLjUxMDgsMTIuNzc1MDMgMTMuNTM2NSwxNC44NDcxIDMuNTYzNiwzLjY0NTA5IDI0LjIyOTQsMzAuNTQ2NDkgMjkuODI3OCwzOC44Mjc4NyAyNC4xNjc3LDM1Ljc0OTczIDQ1LjkxMjYsODEuODc4OTQgNTcuMjI5MSwxMjEuNDA0NzQgMS4yNTk4LDQuNCAyLjgxMjQsOS41IDMuNDUwNCwxMS4zMzMzMyAxLjYxNDgsNC42NDA3OCA2LjUzMDksMjguMjM1NiA4LjA1NjMsMzguNjY2NjcgMC42OTcxLDQuNzY2NjcgMS41ODAzLDkuNTE2OTUgMS45NjI2LDEwLjU1NjE2IDAuMzgyNCwxLjAzOTIzIDEuNTcxNiwxMy4wMzkyMyAyLjY0MjcsMjYuNjY2NjcgMS41MTk3LDE5LjMzNDgzIDEuOTQ5NSw1Mi42NzI4MyAxLjk1NjMsMTUxLjc3NzE3IGwgMC4wMSwxMjYuOTk5OTkgaCAtMjcuOTA3NSAtMjcuOTA3NiBsIC0wLjYzOTIsLTEzOS42NjY2NiBjIC0wLjUwMTYsLTEwOS41Nzg2MyAtMS4wMzM5LC0xNDIuMTA4MTcgLTIuNDcxMSwtMTUxIGwgLTEuODMxOCwtMTEuMzMzMzMgLTEyLjYyMTQsMC4yMzMwNCBjIC00MS4xOTI1LDAuNzYwNTcgLTgwLjc3OTcyLDguNTI0MjEgLTExOC45NjgzMywyMy4zMzE0NyBsIC0xNC4zNDY4Nyw1LjU2Mjg2IDEuMDEzNTQsOC43Njk2NCBjIDAuNTU3NDQsNC44MjMzMSAxLjAxMzUzLDk4Ljc2OTY1IDEuMDEzNTMsMjA4Ljc2OTY1IFYgMTAyMiBsIC0yNy42NjY2NywwLjM2MDQgLTI3LjY2NjY2LDAuMzYwMyBWIDgyOS4yMTc3MSBjIDAsLTE2NC45MjU5MSAtMC4yNzQ1MiwtMTkzLjM5NzY5IC0xLjg1ODg4LC0xOTIuNzg5NzEgLTguMjY2MjcsMy4xNzIwNiAtNDMuNTg1MTcsMzQuMTczMzIgLTU5LjI2MDMyLDUyLjAxNTg5IC0zNy4wMDU5Niw0Mi4xMjI4MyAtNjMuMjI1MSw5MC40MjEzIC03Ni4xOTQ0NSwxNDAuMzU4NDEgLTExLjMzNTMxLDQzLjY0NTM2IC0xMi4wODU5Miw1Ny45ODA0NCAtMTEuMDc1NDMsMjExLjUxNzMgbCAwLjgyMjc4LDEyNS4wMTM3IGggLTI4LjIxNjg2IC0yOC4yMTY4NCB6IG0gNDAuMTQ2OTYsLTMwNy4xMTM4IGMgMTYuMjcwNDgsLTM0LjI1NTk4IDM1LjE1MzYyLC02Mi4xNDM5IDYxLjk1NjQxLC05MS41MDE1OCAxMy40MDA5NiwtMTQuNjc4MzMgMzUuMTE3NTUsLTM1LjE5MzkgNDUuMjI5OTYsLTQyLjcyODUzIDIuOTMzMzQsLTIuMTg1NTggNS42MzMzNCwtNC4zMzE0IDYsLTQuNzY4NDYgMS4yMzM5NSwtMS40NzA4NyAyNC44ODc1OCwtMTguMjUzMzEgMjguNzk2MzYsLTIwLjQzMTI2IDIuMTI4NjcsLTEuMTg2MDggNC43NzAzMSwtMi43MzE3OCA1Ljg3MDMxLC0zLjQzNDg5IDEyLjk1MTY5LC04LjI3ODY4IDM0LjU3NzI4LC0xOS41MDUyMyA1Ni42NjY2NiwtMjkuNDE3NTIgMTAuODEzOTksLTQuODUyNjMgMzYuNDY4MjMsLTEzLjQ5NzE2IDUxLjMzMzM0LC0xNy4yOTc0NSAyNy40NzU5LC03LjAyNDI3IDQ4LjI1OTMyLC0xMC4yNDc0NiA3My44ODM0MiwtMTEuNDU4MiAxMC42OTc0LC0wLjUwNTQ2IDE5LjQ0OTksLTEuMzI4OTEgMTkuNDQ5OSwtMS44Mjk5IDAsLTYuNDQ4NzYgLTE4LjI2MTEsLTQ4LjI1NTY2IC0zMC43MTgsLTcwLjMyNTYzIC04LjAxMjIsLTE0LjE5NTQ0IC0yMi40MzU4LC0zNi41MTA0OCAtMjUuMjI0NiwtMzkuMDI1NjYgLTAuNDA2NiwtMC4zNjY2NiAtMi40OTYxMiwtMy4wNjY2NiAtNC42NDM0MywtNiAtMTkuNzAwOTEsLTI2LjkxMjM4IC01NS4wMzY2OSwtNjAuMzg0NDkgLTg2Ljc0NzI5LC04Mi4xNzIwNiAtNTkuNzQyMzksLTQxLjA0NzU1IC0xMzAuNzM1NzYsLTYzLjgxMDUxIC0yMDYuMjMzOTIsLTY2LjEyNTgzIC00Ny42MDY0OCwtMS40NTk5NiAtMTAwLjIwMDE5LDguMDk0NzUgLTE0OS43NjYwNywyNy4yMDgwNCAtMjUuOTQ2OTksMTAuMDA1NTEgLTY5LjMxNzMxLDM0LjU2MDI2IC05MCw1MC45NTQ4MiAtNDkuNTM0MTEsMzkuMjY0MjIgLTgyLjY1Njg4LDc5LjkwNjkzIC0xMTAuNDA0OCwxMzUuNDcwMjYgLTcuMzMwNDcsMTQuNjc4NzQgLTIwLjI2MTg2LDQ1Ljk1MjM3IC0yMC4yNjE4Niw0OS4wMDE4IDAsMS41NTMwNiAzLjcyMDk2LDIuMTE2NjEgMTguOTUzNzcsMi44NzA1OCAxNy41MzYzOCwwLjg2OCA0NS40MjI4NSw0LjA0Mzc0IDQ3LjY2MjM3LDUuNDI3ODMgMC41MjkzMywwLjMyNzE1IDQuMjA3MjQsMS4xNDE1MiA4LjE3MzEzLDEuODA5NzIgMTQuOTMwODQsMi41MTU2NSA1NS45NDQ3MSwxNC44NjkwOCA2NS40Nzc4NCwxOS43MjIgMS45ODAyNiwxLjAwODA3IDQuMTM1NDYsMS44MzI4NCA0Ljc4OTM1LDEuODMyODQgMC42NTM4OSwwIDIuNzc5NDUsLTQuMDUgNC43MjM0NSwtOSAzLjQzMjkxLC04Ljc0MTE3IDE1Ljc1MDI3LC0zMC41ODg5MyAyMS40MTg4NCwtMzcuOTkxNCAxNi4xODI5MSwtMjEuMTMyOTEgMjQuNTgwMDksLTMwLjI1OTM4IDM5LjQ2NzkxLC00Mi44OTU3MiAxNS4yMDUxNywtMTIuOTA1NjkgMjEuMTgwMjksLTE3LjAxOTI4IDM5LjU3MTg0LC0yNy4yNDMzNCAzOC4wNTIxNSwtMjEuMTUzNjMgODYuNzgzNjEsLTMxLjc5NzQ0IDEyOS4yMjUxMSwtMjguMjI1MDcgMzMuMjQ3NTksMi43OTg0OSA1NS4wODQ4Nyw4LjYxODU1IDgyLjUzNjM3LDIxLjk5NzUzIDM2LjA4NzA0LDE3LjU4NzY2IDYzLjQ4NTY0LDQwLjYyMzEgODguNzc4NzEsNzQuNjQwOTYgOC43OTcwOCwxMS44MzE2MSA4Ljc3NDY2LDEyLjA3NyAtMS40NDUzNywxNS44MjIyOCAtMy4zLDEuMjA5MzMgLTEzLjQ2Mzg3LDYuMzQyODUgLTIyLjU4NjM4LDExLjQwNzgzIC05LjEyMjUsNS4wNjQ5NyAtMTcuMzQ0MTcsOC45MTgyNCAtMTguMjcwMzcsOC41NjI4MiAtMC45MjYyLC0wLjM1NTQxIC0zLjQ4MzY3LC0zLjQ1MDczIC01LjY4MzI1LC02Ljg3ODQ5IC01LjcyMjE1LC04LjkxNzIgLTI5LjcxMjY3LC0zMS45NDA4NSAtNDEuNDYsLTM5Ljc4OTA4IC0zNS4xNTk2NywtMjMuNDg5NjYgLTc0LjE0MzY3LC0zMy4zODg4OCAtMTE2Ljk5NzM2LC0yOS43MDkxNCAtNTkuMDAwNDcsNS4wNjYyMiAtMTE0Ljc3MzQ4LDQ0LjUxMzk1IC0xNDEuNzIwOTQsMTAwLjIzNzg5IC0yLjkwNDk0LDYuMDA3MDIgLTUuMjgxNywxMS45OTE0MSAtNS4yODE3LDEzLjI5ODY0IDAsMS40MjQ2NiAyLjEwNTM0LDMuNDUwODIgNS4yNTU2Nyw1LjA1OCAxNC45NTUwMSw3LjYyOTQ4IDQ2LjQ3OTc1LDMzLjAzNjg0IDY5LjQ4NTQ5LDU2LjAwMTg1IDI3LjcxMDExLDI3LjY2MTAyIDQ1Ljc4OTkzLDUwLjkwNTk4IDY1LjI2NjE1LDgzLjkxMTY1IDguNjE2OTYsMTQuNjAyODcgMTIuNDU5NzQsMjIuNDUxMTMgMjIuMTIxMDYsNDUuMTc4NjggbCAyLjQzMTIsNS43MTkyMiAyLjU1NDMyLC01LjcxOTIyIGMgMS40MDQ4OCwtMy4xNDU1OCA2LjA2OTc2LC0xMy4xMjA2NCAxMC4zNjY0LC0yMi4xNjY4MSB6IG0gLTI0NS40ODAyOCw5Ni42Njk4MSBjIDAsLTEwMS40NDQ0NSAwLjM1MDAxLC0xODQuNzk0NDUgMC43Nzc4LC0xODUuMjIyMjQgMS45NjYwNCwtMS45NjYwNSAyMS4zMTA0MSw5LjU3ODU5IDQxLjIyMjE5LDI0LjYwMTI1IGwgMTQuNjY2NjcsMTEuMDY1NDMgMC4zMzg1MSwxNjcgMC4zMzg0OSwxNjYuOTk5OTUgaCAtMjguNjcxODMgLTI4LjY3MTgzIHoiCiAgICBmaWxsPSIjZmZmZmZmIiAvPgogIDxwYXRoCiAgICBkPSJNIDAsNjgyLjY2NjY1IFYgMCBIIDY4Mi42NjY2NSAxMzY1LjMzMzMgViA2ODIuNjY2NjUgMTM2NS4zMzMzIEggNjgyLjY2NjY1IDAgWiBNIDcyNC4zMTE4NiwxMDI1IGMgMC4zNTI2OCwtMTI3LjE2NjgyIDAuNjI1NTYsLTE0Mi44MjY2NyAyLjY2NjE0LC0xNTMuMDAwMDIgMS4yNTAyOSwtNi4yMzMzMyAzLjI0NjY1LC0xNy4wMzMzMyA0LjQzNjM0LC0yNCAyLjE2OTM0LC0xMi43MDMxMyA1LjkyODM5LC0yNy4yNzg3MiA5LjI4NDQ0LC0zNiAwLjk4NzcsLTIuNTY2NjcgMi41Mjc0NCwtNy4wNjY2NyAzLjQyMTY3LC0xMCAwLjg5NDIzLC0yLjkzMzMzIDMuNjMyOTUsLTkuNjg1ODcgNi4wODYwNCwtMTUuMDA1NjQgMi40NTMwOSwtNS4zMTk3NiA0LjQ2MDE2LC0xMC4wNzIzNSA0LjQ2MDE2LC0xMC41NjEyOSAwLC0wLjc5MDE1IDYuMDI2NDQsLTEzLjI1NjM1IDkuMzk0MzgsLTE5LjQzMzA3IDAuNjk5NzUsLTEuMjgzMzMgMS44NDY1OCwtMy4zODMzMyAyLjU0ODUsLTQuNjY2NjcgMy4xOTMwNCwtNS44Mzc5MyAxNC4wMDg2NCwtMjMuNzM0ODkgMTQuNzA1MjUsLTI0LjMzMzMzIDAuNDI2ODMsLTAuMzY2NjYgMy43NDE1OSwtNC44NjY2NiA3LjM2NjE1LC0xMCAzLjYyNDU0LC01LjEzMzMzIDcuNTg0ODgsLTEwLjUzMzMzIDguODAwNzIsLTEyIDE5LjI5NjI0LC0yMy4yNzcwMSAzNi4xMTI4OSwtNDAuNTI5ODQgNDguNzcyNTMsLTUwLjAzNzU4IDQuMjYwMTksLTMuMTk5NTIgOC4zNDU4LC02LjQ2MzQ0IDkuMDc5MTMsLTcuMjUzMTYgMC43MzMzNCwtMC43ODk3MSA0LjQ4MzM0LC0zLjcyMzQ2IDguMzMzMzQsLTYuNTE5NDQgbCA3LC01LjA4MzYgdiAxOTIuNzgwMjIgMTkyLjc4MDE4IGggMjkuMzY5NzQgMjkuMzY5NzYgbCAtMC41MDA1NywtMjA1LjY2NjYyIGMgLTAuMjc1MzIsLTExMy4xMTY2NiAtMC43NDE3MSwtMjA3LjA0ODc4IC0xLjAzNjQzLC0yMDguNzM4MDMgLTAuNDU0OTcsLTIuNjA3ODIgMC40NzAzMywtMy40ODc2MiA2LjEzMDgzLC01LjgyOTM1IDMuNjY2NjYsLTEuNTE2ODggOC41NTczNCwtMy41ODQ3NiAxMC44NjgxNywtNC41OTUyOSAyLjMxMDgzLC0xLjAxMDUyIDUuMTg0NzMsLTEuODM3MzIgNi4zODY0NSwtMS44MzczMiAxLjIwMTcyLDAgNC40MTEwNCwtMS4wOTQ5MSA3LjEzMTgzLC0yLjQzMzEyIDEzLjk1ODk2LC02Ljg2NTY4IDYxLjc1MzQ3LC0xNS42NTIxMSA5MS43NDg2NywtMTYuODY2ODQgbCAyMC4xMzUyLC0wLjgxNTQyIDAuODY3OCw4LjM5MTAyIGMgMC40Nzc0LDQuNjE1MDYgMS40NDY5LDEyLjU5MTAyIDIuMTU0NiwxNy43MjQzNiAwLjc1MTcsNS40NTI4MiAxLjMxMzMsNjQuNDkxODYgMS4zNTA3LDE0MS45OTk5OSAwLjAzNSw3Mi45NjY2NyAwLjU0OCwxMzMuNDI5MTYgMS4xMzk1LDEzNC4zNjExMSAwLjgyNjEsMS4zMDE1IDcuNTQ2NCwxLjYxMDcgMjguOTc5NiwxLjMzMzMzIGwgMjcuOTA0MSwtMC4zNjExMSAtMC4wOTcsLTEzNi42NjY2NiBjIC0wLjA5NCwtMTMyLjc3MDI1IC0wLjE4MTYsLTEzNy4zNTA5MiAtMy4wNTcyLC0xNjAuNjY2NjYgLTMuMTk4MiwtMjUuOTMxNjQgLTUuMzM2NSwtMzcuMzUwNjYgLTEwLjQ4NjQsLTU2IC0xLjgyMjUsLTYuNiAtMy40Mzk5LC0xMi42IC0zLjU5NCwtMTMuMzMzMzQgLTEuNTgsLTcuNTE1NzcgLTMuMDk5NiwtMTIuMjk4MyAtNi45Mzc0LC0yMS44MzQyNCAtMi40NzE5LC02LjE0MjE2IC00LjQ5NDQsLTExLjk5MDQ0IC00LjQ5NDQsLTEyLjk5NjE3IDAsLTMuMTI2NDEgLTIzLjUxMTEsLTUyLjEwOTQ0IC0yOC42NDgzLC01OS42ODU2OSAtMS41NDc4LC0yLjI4MjgxIC0zLjIwNzcsLTUuMTc3OTEgLTMuNjg4NSwtNi40MzM1NiAtMS43ODIxLC00LjY1MzggLTI2LjM0MTksLTQwLjUxNTIgLTMyLjMyOTksLTQ3LjIwNzA1IC0wLjczMzMsLTAuODE5NTQgLTQuMzMzMywtNS4yNDMxMiAtOCwtOS44MzAyIC04LjYxMTEsLTEwLjc3Mjc0IC00MS41MTU1OSwtNDQuMDgwNjQgLTUyLjU1NzYsLTUzLjIwMjAzIC00LjcwNjY4LC0zLjg4ODAyIC05LjM4ODc1LC03LjkwMDI4IC0xMC40MDQ2LC04LjkxNjEzIC0xLjg4MTk2LC0xLjg4MTk1IC01Ljk1NzMsLTQuNzQzIC0yOC4zNzExMiwtMTkuOTE3NzIgLTYuOTY2NjcsLTQuNzE2NiAtMTMuMzI4NTYsLTkuMTMyMzUgLTE0LjEzNzU1LC05LjgxMjc3IC0wLjgwODk5LC0wLjY4MDQyIC01LjMwODk5LC0zLjIxMzQzIC0xMCwtNS42Mjg5MiAtNC42OTEwMSwtMi40MTU1IC04LjgyOTEyLC00Ljc2NDU0IC05LjE5NTc5LC01LjIyMDA4IC0yLjI5NTY4LC0yLjg1MjIyIC01MC41MTMyMywtMjQuNTUwMTYgLTYzLjk5OTk5LC0yOC44MDAwNyAtMjQuNTAxMTQsLTcuNzIwNzMgLTM2LjQxNDI0LC0xMS4xODA0NyAtNDMuMzMzMzQsLTEyLjU4NDY1IC00LjQsLTAuODkyOTUgLTExLjksLTIuNjgwNiAtMTYuNjY2NjYsLTMuOTcyNTYgLTM5LjkyMDQ1LC0xMC44MjAwNyAtMTM4LjY2NjM5LC0xMC41MTUyIC0xNzkuMzMzMzMsMC41NTM2OSAtMy42NjY2NywwLjk5OCAtMTEuNDY2NjcsMi44NTc3MSAtMTcuMzMzMzMsNC4xMzI2NyAtNS44NjY2NywxLjI3NDk2IC0xNi40MzYyNCw0LjM1MTUyIC0yMy40ODc5NCw2LjgzNjggLTcuMDUxNywyLjQ4NTI4IC0xMy41NjEwMiw0LjUxODY5IC0xNC40NjUxNyw0LjUxODY5IC0wLjkwNDEzLDAgLTMuNTM0NTYsMC44NTY2NCAtNS44NDUzOSwxLjkwMzY0IC0xMC41NTQyMSw0Ljc4MTk1IC0xNi43ODI1Miw3LjQyOTY5IC0xNy40NzY4Niw3LjQyOTY5IC0yLjIyNzY4LDAgLTUzLjM0ODIsMjYuMTM1NiAtNTYuODIxOTUsMjkuMDUwNDggLTEuMDQ2NDgsMC44NzgxMiAtOC4yMDI2OSw1Ljc5Nzk2IC0xNS45MDI2OSwxMC45MzI5OCAtMjkuMzA3NjcsMTkuNTQ0ODEgLTQxLjg1MDI3LDI5Ljc5OTIyIC02Ni4wMjkyOCw1My45ODMzMyAtMTguNjM4MDEsMTguNjQxOTQgLTI4LjQ0MTg0LDI5Ljk0Mjg0IC00MS41NTE5OSw0Ny44OTcwNiAtMy44MDMwMiw1LjIwODIyIC04LjY3MTAyLDExLjg2OTQ4IC0xMC44MTc3OCwxNC44MDI4MiAtMi4xNDY3NiwyLjkzMzMzIC01LjYxNDkzLDguMzMzMzMgLTcuNzA3MDUsMTIgLTIuMDkyMTIsMy42NjY2NiAtNC42MTEzMSw3LjQ5NjczIC01LjU5ODIyLDguNTExMjQgLTAuOTg2ODksMS4wMTQ1MiAtMy4xNzM1OCw0LjYxNDUyIC00Ljg1OTMsOCAtMS42ODU3MiwzLjM4NTQ5IC02LjQ3NDEsMTIuNzU1NDIgLTEwLjY0MDgzLDIwLjgyMjA5IC00LjE2NjczLDguMDY2NjcgLTkuOTkwODMsMjAuMzY2NjcgLTEyLjk0MjQxLDI3LjMzMzMzIC0yLjk1MTYsNi45NjY2NyAtNi4yMjYwMywxNC41NTczNSAtNy4yNzY1MSwxNi44NjgxNyAtMS4wNTA0OCwyLjMxMDgzIC0xLjkyNjczLDUuMDEwODMgLTEuOTQ3MjMsNiAtMC4wMjA1LDAuOTg5MTggLTEuODQ5MDUsNi44OTg1IC00LjA2MzQ4LDEzLjEzMTgzIC0zLjY5MzIyLDEwLjM5NjAzIC01LjI5MTE3LDE2LjMwMDQ4IC0xMS4xODYyNCw0MS4zMzMzMyAtOC4zNDY4MSwzNS40NDM5OCAtOS4yNDY3OCw1Ni42MDI1IC04LjgxODg4LDIwNy4zMzMzMyAwLjE5OTg2LDcwLjQgMC42NDA4NCwxMjguNDUgMC45Nzk5OCwxMjkgMC43OTY2NCwxLjI5MTk5IDUyLjY0MjM4LDEuMjcyNjEgNTQuNjM2OTcsLTAuMDIwNCAxLjEwMTQ4LC0wLjcxNDA3IDEuNzIyMTEsLTM4LjM4NTk2IDIuMjg5NTksLTEzOC45Nzk1OCAwLjY5MDIsLTEyMi4zNDM2NiAxLjYzMDg1LC0xNjEuMjA5MjkgMy45NTgwMSwtMTYzLjUzNjQ3IDEuMjcwMzMsLTEuMjcwMzIgNDguMTg1MTYsMi4wMTgxNCA1OC45MDc5OCw0LjEyOTExIDUuODY2NjcsMS4xNTQ5NSAxNS40NjY2NywzLjAzNzk3IDIxLjMzMzM0LDQuMTg0NDkgMTkuNzA4MjUsMy44NTE1OSA0NS45NjkzMiwxMi41NTE2MiA2MS41OTE4OCwyMC40MDQ3OSA0LjU0MjIsMi4yODMyOCA5LjA3MjIsNC4xNTE0MSAxMC4wNjY2Niw0LjE1MTQxIDAuOTk0NDcsMCAyLjM3ODEyLDAuNTIwMzQgMy4wNzQ3OSwxLjE1NjMgMC42OTY2NywwLjYzNTk2IDYuMzg1MTMsMy44NDY2OSAxMi42NDEwNCw3LjEzNDk1IDYuMjU1ODksMy4yODgyNyAxNi42ODA5Miw5LjUxNzk0IDIzLjE2NjcsMTMuODQzNzEgNi40ODU4LDQuMzI1NzcgMTQuMTgyNiw5LjQzNTIzIDE3LjEwNCwxMS4zNTQzNiAyLjkyMTQyLDEuOTE5MTIgNS42OTYzOSw0LjAyMTU3IDYuMTY2NjMsNC42NzIxMSAwLjQ3MDIzLDAuNjUwNTQgNS4wNTQ5Niw0LjU0MDgxIDEwLjE4ODI5LDguNjQ1MDIgMTcuMTc0NSwxMy43MzE0MyA0MS45NjEzLDM5Ljc4NTUxIDUzLjYwNTkyLDU2LjM0NjYzIDEuNjE2NiwyLjI5OTE1IDMuNDQ4ODMsNC43ODAyNSA0LjA3MTYzLDUuNTEzNTkgNi4yMjMwNyw3LjMyNzUgMjAuMTQ3NjEsMzAuNzc2ODggMjkuNjkwNjYsNDkuOTk5OTkgOC44MDI1NiwxNy43MzE1NCAyMC4xNTU1OSw0Ny4xODIzIDIxLjg0NDUyLDU2LjY2NjY3IDAuNTIyMzYsMi45MzMzMyAxLjc2OTcsOC4zMzMzMyAyLjc3MTg2LDEyIDguNDY0NTcsMzAuOTY5OTcgOS45ODMxMiw2My4xMDkyMiAxMC4wMDEwOSwyMTEuNjY2NjQgbCAwLjAxNDMsMTE4LjMzMzMgaCAyOC42MjYxNiAyOC42MjYxNiB6IE0gNjkwLjk3NzU0LDc1Ni42MzQxNyBjIC0xMS4yNDM3LC0yOS4wNTY3MyAtMzYuOTc0MDgsLTY5Ljk3NDgxIC02Mi44NjA1MywtOTkuOTY0ODQgLTguNTY4MzYsLTkuOTI2NjUgLTQzLjYyMDkzLC00NC42MDUxIC00NS4xMTcwMiwtNDQuNjM1NDkgLTAuOTE2NjcsLTAuMDE4NyAtMS42NjY2NywtMC42MDUwMyAtMS42NjY2NywtMS4zMDMxMyAwLC0wLjY5ODExIC0yLjg1LC0zLjIxNjAzIC02LjMzMzMzLC01LjU5NTM5IC0zLjQ4MzM0LC0yLjM3OTM3IC02LjkzMzM0LC01LjAxNTE2IC03LjY2NjY3LC01Ljg1NzMxIC0wLjczMzMzLC0wLjg0MjE2IC0zLjQzMzMzLC0yLjk0NTMyIC02LC00LjY3MzcgLTIuNTY2NjcsLTEuNzI4MzggLTQuOTY2NjcsLTMuNTI2OTkgLTUuMzMzMzMsLTMuOTk2OTIgLTAuOTkyOTEsLTEuMjcyNTIgLTE0LjUyMjI2LC0xMC42MDc0IC0xNS4zNzM2NiwtMTAuNjA3NCAtMS43MDQxNCwwIC04LjYyNjM0LC01Ljk2NzQ3IC04LjYyNjM0LC03LjQzNjU4IDAsLTEuNzQ4MzIgMTAuNDY0MjYsLTIzLjQ4MTg1IDExLjgyNjgxLC0yNC41NjM0MiAwLjQ2MTkyLC0wLjM2NjY3IDIuMjk1MTEsLTMuMzY2NjcgNC4wNzM3NSwtNi42NjY2NyAxLjc3ODY0LC0zLjMgMy42MDc1NCwtNi4zIDQuMDY0MjQsLTYuNjY2NjcgMC40NTY2OSwtMC4zNjY2NiAyLjI0OTQyLC0yLjc2NjY2IDMuOTgzODUsLTUuMzMzMzMgNC41OTcwMywtNi44MDI4MSAyNS4wNzM1NSwtMjcuNDQzMTYgMzIuMDUxMzUsLTMyLjMwNzc1IDMuMywtMi4zMDA2MSA2LjMsLTQuNTY3MjYgNi42NjY2NiwtNS4wMzcwMiAwLjM2NjY3LC0wLjQ2OTc2IDMuMzY2NjcsLTIuMzA5MzYgNi42NjY2NywtNC4wODggMy4zLC0xLjc3ODY0IDYuMywtMy41Nzg2NCA2LjY2NjY3LC00IDIuNjg4NDQsLTMuMDg5NDQgMjcuODQ3ODMsLTE0LjA4NjMyIDM5LjMzMzMzLC0xNy4xOTIxMyAzMy42MzAyNCwtOS4wOTQwNCA1NS4xMzk4LC05LjM4MjUxIDkwLC0xLjIwNjk5IDE2LjgxNjgzLDMuOTQzOTUgMzYuNzI0OTUsMTIuMjUyOTMgNTIuMDUzMzcsMjEuNzI1MzQgMTQuMjYxMzgsOC44MTMwNCA0MC42MDY1OCwzNC4xMDg0NCA0OC4zNjcyLDQ2LjQzOTg4IDEuMjY5MTYsMi4wMTY2NyAzLjQyMDcyLDMuNjY2NjcgNC43ODEyNCwzLjY2NjY3IDEuMzYwNSwwIDcuNDk2NjgsLTIuNzk1MzEgMTMuNjM1OTIsLTYuMjExNzkgNi4xMzkyNSwtMy40MTY0OCAxNi44NjIyNiwtOC44ODE4MSAyMy44Mjg5MywtMTIuMTQ1MTggNi45NjY2NywtMy4yNjMzOCAxMi44NjQ2MSwtNi4xMTYwMiAxMy4xMDY1MywtNi4zMzkyIDEuNDQ2MiwtMS4zMzQxNiAtMTcuOTI1MzgsLTI2LjE5NDcgLTMwLjY2NjMsLTM5LjM1NTYxIC0xOC44ODk5NiwtMTkuNTEyNjcgLTM2LjM5MDE1LC0zMi45MzE2NCAtNTYuNzc0MTUsLTQzLjUzMzg2IC02LjQxNjM1LC0zLjMzNzI5IC0xMi4zMzE0NSwtNi41OTkwMSAtMTMuMTQ0NjgsLTcuMjQ4MjYgLTAuODEzMjMsLTAuNjQ5MjQgLTQuMTEzMjMsLTIuMDIyNzYgLTcuMzMzMzMsLTMuMDUyMjYgLTMuMjIwMTEsLTEuMDI5NSAtOS4xNTQ3NCwtMy4xNjQ4IC0xMy4xODgwNywtNC43NDUxMiAtOS44NzQ5OSwtMy44NjkxMyAtMTguODA1MTUsLTYuMjA4MTggLTMwLC03Ljg1Nzc4IC01LjEzMzMzLC0wLjc1NjQyIC0xMy4yMzMzMywtMi4wOTA2OCAtMTgsLTIuOTY1MDIgLTEyLjU4OTYxLC0yLjMwOTMgLTQzLjc5NDI4LC0yLjA2MDE3IC01Ny4zMzMzMywwLjQ1Nzc1IC02LjIzMzMzLDEuMTU5MjQgLTE0LjMzMzMzLDIuNTEwNzYgLTE4LDMuMDAzMzcgLTkuMDQ2MiwxLjIxNTM4IC0xNy41ODYwNSwzLjU4OTMyIC0zMi45Nzg1Myw5LjE2NzUxIC0xMy4xNTY2MSw0Ljc2NzkyIC0zOC42NDE5MSwxNi44NTMyNyAtNDIuMzM2MjUsMjAuMDc2MjMgLTEuMTEwMiwwLjk2ODU0IC00LjExODU1LDIuODExMzIgLTYuNjg1MjIsNC4wOTUwNSAtNC41NTE5MiwyLjI3NjY4IC01LjQ0OTk4LDIuOTM4MDkgLTExLjY2NjY2LDguNTkyMjggLTEuNjUsMS41MDA3MSAtMy4zNjAyNywyLjcyODU2IC0zLjgwMDU5LDIuNzI4NTYgLTEuODEyLDAgLTIxLjU1ODg1LDE4LjcwODc1IC0yOS43Mzk1OSwyOC4xNzYxMyAtMTYuMjAyNDIsMTguNzUwNzMgLTE3LjU2OTU4LDIwLjQ2NTE1IC0yMS4xMjQ4NCwyNi40OTA1MyAtMS45NDcxNiwzLjMgLTMuOTU3NzgsNi4zIC00LjQ2ODA2LDYuNjY2NjcgLTEuNTI4ODIsMS4wOTg1NSAtMTUuODY2OTIsMjkuNjY3ODggLTE1Ljg2NjkyLDMxLjYxNTU2IDAsMi43ODQ2OSAtMy42OTUxMiwzLjU1MDI3IC03LjAxMDI5LDEuNDUyNDEgLTYuNDkyNjMsLTQuMTA4NTQgLTQ1LjI1Mjc1LC0xNi4xMDc2IC02MS42NTYzOCwtMTkuMDg3MDkgLTYuNiwtMS4xOTg3OSAtMTcuNywtMy4zMDEwNSAtMjQuNjY2NjYsLTQuNjcxNjkgLTYuOTY2NjcsLTEuMzcwNjQgLTIxLjUxNjY3LC0yLjkxMjc4IC0zMi4zMzMzNCwtMy40MjY5OCAtMTAuODE2NjYsLTAuNTE0MTggLTE5LjY2NjY2LC0xLjQ2NjEyIC0xOS42NjY2NiwtMi4xMTU0IDAsLTAuNjQ5MjYgMS40Mjc2NywtNC42MTI0MiAzLjE3MjYsLTguODA2OTggMS43NDQ5MywtNC4xOTQ1OCAzLjYyNzEsLTkuMTI2NSA0LjE4MjYxLC0xMC45NTk4MyAwLjU1NTQ5LC0xLjgzMzMzIDMuMzI3ODMsLTguMjk0ODcgNi4xNjA3MywtMTQuMzU4OTYgMi44MzI5LC02LjA2NDA5IDUuMTUwNzIsLTExLjg3ODY4IDUuMTUwNzIsLTEyLjkyMTMgMCwtMS4wNDI2MyAwLjY1OTY3LC0yLjMwMzM5IDEuNDY1OTIsLTIuODAxNjggMC44MDYyNiwtMC40OTgzIDMuMDk1MDQsLTQuMjgzNyA1LjA4NjIsLTguNDEyMDIgMTcuMjM2MSwtMzUuNzM2MTMgNTcuNDAxMTgsLTg2LjE2NTIgODguNzgxMjIsLTExMS40Njg4MSA0LjQsLTMuNTQ3OTkgOS4yLC03LjU0OTI4IDEwLjY2NjY2LC04Ljg5MTc2IDUuNTY4MzIsLTUuMDk2ODUgMjkuNjUzOTksLTIxLjg2ODg0IDM4Ljk2NzgzLC0yNy4xMzUxMyAyLjAzNDM2LC0xLjE1MDI5IDUuNDk4ODQsLTMuMjEyMzEgNy42OTg4NCwtNC41ODIyNSAxMC40ODk1LC02LjUzMTkgNDYuODg5ODksLTIzLjU2MTM1IDU2Ljc3ODI2LC0yNi41NjI5OSAyLjUwNTI4LC0wLjc2MDQ5IDkuMzU1MDcsLTMuMTE1OTEgMTUuMjIxNzQsLTUuMjM0MjcgNS44NjY2NiwtMi4xMTgzNiAxNS40NjY2NiwtNC45MjAzNiAyMS4zMzMzMywtNi4yMjY2NiA1Ljg2NjY3LC0xLjMwNjMyIDE0Ljg2NjY3LC0zLjQ2ODEyIDIwLC00LjgwNDAyIDUuMTMzMzMsLTEuMzM1ODkgMTYuMjMzMzMsLTMuMjE3NDIgMjQuNjY2NjYsLTQuMTgxMTggMTkuOTc3NDgsLTIuMjgzMDMgODMuOTA4OTUsLTIuMzA3NzYgMTAzLjMzMzM0LC0wLjA0IDI5LjQ0Nzc1LDMuNDM4MDEgNzIuODYxNjksMTUuNzQ1MDggMTAyLjY2NjY2LDI5LjEwNDE0IDE1LjgzMzQzLDcuMDk2OCAzOC4xMjcyOCwxOC42OTk5OSAzOS4zMzMzMywyMC40NzE2NyAwLjM2NjY3LDAuNTM4NjMgMi4xNjY2NywxLjc1MjI5IDQsMi42OTcwMyA0Ljk1MTg0LDIuNTUxNzMgMjEuNzk2ODMsMTMuNjM3NDIgMjMuMzMzMzMsMTUuMzU1NjYgMC43MzMzNCwwLjgyMDA3IDUuMDI4MzQsMy45ODg4OCA5LjU0NDQ2LDcuMDQxNzkgNC41MTYxLDMuMDUyOTIgOC40MTYxLDYuMDE1NzUgOC42NjY2Niw2LjU4NDA3IDAuMjUwNTUsMC41NjgzMyAzLjQ1MTc0LDMuNDMzMzEgNy4xMTM3NSw2LjM2NjY1IDEwLjUwMTE3LDguNDExNjQgMzEuMzM5MTksMjkuNDkyOTIgNDIuODMzMjgsNDMuMzMzMzMgMTEuOTcyNDQsMTQuNDE2NDEgMjUuMjYyMjEsMzEuOTMxMTYgMjcuNTk3MDEsMzYuMzcwMzUgMC44NjgsMS42NTAyOCAzLjAyMzMsNS4wMTgzNCA0Ljc4OTYsNy40ODQ1NiAxLjc2NjQsMi40NjYyMiA0Ljk5MzEsNy44NTc3OCA3LjE3MDYsMTEuOTgxMjQgMTAuNzMxOCwyMC4zMjI0OSAxOC41NzM2LDM2LjEzOTYzIDIwLjkwMzksNDIuMTYzODUgMS40MTg0LDMuNjY2NjYgNC40MDkzLDExLjA3ODg0IDYuNjQ2NSwxNi40NzE0OCAyLjIzNzEsNS4zOTI2NSA0LjA2NzYsMTAuNTU1OCA0LjA2NzYsMTEuNDczNjYgMCwxLjIxNzgzIC01LjMxNTEsMS45MjU5IC0xOS42NjY3LDIuNjE5OTQgLTEwLjgxNjcsMC41MjMxIC0yNC4xNjY3LDEuODQ2MjIgLTI5LjY2NjcsMi45NDAyOCAtNS41LDEuMDk0MDQgLTEyLjk5OTk2LDIuNDg4NCAtMTYuNjY2NjIsMy4wOTg1NiAtMy42NjY2NywwLjYxMDE2IC0xMC4yNjY2NywxLjgxMDk3IC0xNC42NjY2NywyLjY2ODQ1IC0xMi44MTMwNCwyLjQ5NzA1IC01NC4wNiwxNS42NTU3OSAtNTguNjY2NjcsMTguNzE2MDMgLTAuNzMzMzMsMC40ODcxNiAtNC4zMzMzMywxLjk4NzA5IC04LDMuMzMzMTggLTYuMDE3NjksMi4yMDkxOSAtMjMuNjI2NzMsMTAuOTYxMjcgLTQzLjMzMzMzLDIxLjUzNzYgLTUwLjMyMTQsMjcuMDA3MDIgLTExMi4xODU5NCw4Ny4zMjgyNCAtMTQxLjMzMzMzLDEzNy44MDc1MSAtMy4xODgxNyw1LjUyMTQ4IC00Ljg3MjYxLDguNDkzMjEgLTYuNjEyOTIsMTEuNjY2NjYgLTAuNzAzNzcsMS4yODMzNCAtMi42NTk1Niw0LjczMzM0IC00LjM0NjIxLDcuNjY2NjcgLTIuODAxNjUsNC44NzI1MyAtMTMuMzgzMjEsMjcuMzY0OTIgLTE2LjYwNzMxLDM1LjMwMDg1IC0xLjI0MDQ5LDMuMDUzNDQgLTEuNjQ5NDYsMi41MDM3NiAtNS40NTYsLTcuMzMzMzMgeiBtIC0xNzAuOTk3OTcsOTkuNjk5MTQgYyAtMC4wMTA3LC05MS40ODMzMyAtMC40NjEyMiwtMTY3LjAwNDkgLTEsLTE2Ny44MjU3IC0xLjI3NzQ4LC0xLjk0NjIgLTIwLjMzMzcyLC0xNy4wNDQ2OSAtMjMuOTY2MzIsLTE4Ljk4ODggLTEuNTQyOTMsLTAuODI1NzUgLTMuNjAyMTIsLTIuMjc5NDMgLTQuNTc1OTYsLTMuMjMwMzkgLTMuNDkwNDEsLTMuNDA4MzYgLTIxLjgzNjgzLC0xMy4yMTIyNiAtMjUuMTAzOTcsLTEzLjQxNDk2IGwgLTMuMzMzMzMsLTAuMjA2ODEgLTAuMzM4MDEsMTg1IC0wLjMzODAyLDE4NC45OTk5NSBoIDI5LjMzODAxIDI5LjMzODAyIHoiCiAgICBmaWxsPSIjOGMwMTlhIiAvPgo8L3N2Zz4K';\n\n/**\r\n * Generates a UUID version 4 string. This function attempts to use the `crypto.randomUUID()` function from the Web\r\n * Crypto API if it is available, otherwise it uses a polyfill method.\r\n *\r\n * NOTE: `crypto.randomUUID()` is not available in non-secure contexts; only localhost and HTTPS.\r\n * @returns {string} a valid UUID version 4 string.\r\n * @see {@link https://stackoverflow.com/a/2117523}\r\n */\r\nfunction generateUuid() {\r\n if (window.crypto.randomUUID) {\r\n return window.crypto.randomUUID();\r\n }\r\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (value) => {\r\n const valueAsNumber = parseInt(value);\r\n return (valueAsNumber ^\r\n (window.crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (valueAsNumber / 4)))).toString(16);\r\n });\r\n}\n\nclass KibisisClient extends BaseClient {\r\n genesisHash;\r\n methods;\r\n network;\r\n constructor({ metadata, algosdk, algodClient, genesisHash, methods, network }) {\r\n super(metadata, algosdk, algodClient);\r\n this.genesisHash = genesisHash;\r\n this.methods = methods;\r\n this.network = network;\r\n }\r\n static metadata = {\r\n id: PROVIDER_ID.KIBISIS,\r\n icon: ICON,\r\n isWalletConnect: false,\r\n name: 'Kibisis'\r\n };\r\n /**\r\n * public static functions\r\n */\r\n static async init({ algodOptions, algosdkStatic, network = DEFAULT_NETWORK }) {\r\n try {\r\n debugLog(`${PROVIDER_ID.KIBISIS.toUpperCase()}#${KibisisClient.init.name}: initializing...`);\r\n const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk;\r\n const algodClient = getAlgodClient(algosdk, algodOptions);\r\n const version = await algodClient.versionsCheck().do();\r\n const genesisHash = version['genesis_hash_b64']; // get the genesis hash of the network\r\n const result = await KibisisClient.sendRequestWithTimeout({\r\n method: 'getProviders',\r\n params: {\r\n providerId: ARC_0027_PROVIDER_ID\r\n },\r\n reference: ARC_0027_GET_PROVIDERS_REQUEST,\r\n timeout: LOWER_REQUEST_TIMEOUT\r\n });\r\n // check for a result\r\n if (!result) {\r\n throw {\r\n code: UNKNOWN_ERROR,\r\n message: `received response, but provider details were empty for provider \"${PROVIDER_ID.KIBISIS.toUpperCase()}\"`,\r\n providerId: ARC_0027_PROVIDER_ID\r\n };\r\n }\r\n const networkConfiguration = result.networks.find((value) => value.genesisHash === genesisHash);\r\n // check if the network is supported\r\n if (!networkConfiguration) {\r\n throw {\r\n code: NETWORK_NOT_SUPPORTED_ERROR,\r\n data: {\r\n genesisHash\r\n },\r\n message: `network \"${network}\" not supported on provider \"${PROVIDER_ID.KIBISIS.toUpperCase()}\"`,\r\n providerId: ARC_0027_PROVIDER_ID\r\n };\r\n }\r\n const provider = new KibisisClient({\r\n metadata: KibisisClient.metadata,\r\n algosdk: algosdk,\r\n algodClient: algodClient,\r\n genesisHash,\r\n methods: networkConfiguration.methods,\r\n network\r\n });\r\n debugLog(`${PROVIDER_ID.KIBISIS.toUpperCase()}#${KibisisClient.init.name}: initialized`, '✅');\r\n return provider;\r\n }\r\n catch (error) {\r\n console.error('Error initializing...', error);\r\n return null;\r\n }\r\n }\r\n static mapAccountsToWallet(accounts) {\r\n return {\r\n ...KibisisClient.metadata,\r\n accounts: accounts.map(({ address, name }) => ({\r\n address,\r\n name: name || '',\r\n providerId: PROVIDER_ID.KIBISIS\r\n }))\r\n };\r\n }\r\n static async sendRequestWithTimeout({ method, params, timeout, reference }) {\r\n return new Promise((resolve, reject) => {\r\n const channel = new BroadcastChannel(ARC_0027_CHANNEL_NAME);\r\n const requestId = generateUuid();\r\n // eslint-disable-next-line prefer-const\r\n let timer;\r\n // listen to responses\r\n channel.onmessage = (message) => {\r\n // if the response's request id does not match the intended request, just ignore\r\n if (!message.data || message.data.requestId !== requestId) {\r\n return;\r\n }\r\n // clear the timer, we can handle it from here\r\n window.clearTimeout(timer);\r\n // if there is an error, reject\r\n if (message.data.error) {\r\n reject(message.data.error);\r\n // close the channel, we are done here\r\n return channel.close();\r\n }\r\n // return the result\r\n resolve(message.data.result);\r\n // close the channel, we are done here\r\n return channel.close();\r\n };\r\n timer = window.setTimeout(() => {\r\n // close the channel connection\r\n channel.close();\r\n reject({\r\n code: METHOD_TIMED_OUT_ERROR,\r\n data: {\r\n method\r\n },\r\n message: `no response from provider \"${PROVIDER_ID.KIBISIS.toUpperCase()}\"`,\r\n providerId: ARC_0027_PROVIDER_ID\r\n });\r\n }, timeout || DEFAULT_REQUEST_TIMEOUT);\r\n // broadcast the request on the next tick\r\n // this allows the channel to be ready before the request is sent\r\n window.setTimeout(() => {\r\n channel.postMessage({\r\n id: requestId,\r\n params,\r\n reference\r\n });\r\n }, 0);\r\n });\r\n }\r\n /**\r\n * private functions\r\n */\r\n convertBytesToBase64(bytes) {\r\n return byteArrayToBase64(bytes);\r\n }\r\n convertBase64ToBytes(input) {\r\n return base64ToByteArray(input);\r\n }\r\n /**\r\n * Calls the enable method on the provider that returns the authorized accounts.\r\n * @returns {Arc0027Account[]} the authorized accounts.\r\n * @throws {METHOD_CANCELED_ERROR} if the method was cancelled by the user.\r\n * @throws {METHOD_NOT_SUPPORTED_ERROR} if the method is not supported for the configured network.\r\n * @throws {METHOD_TIMED_OUT_ERROR} if the method timed out by lack of response.\r\n * @throws {NETWORK_NOT_SUPPORTED_ERROR} if the network is not supported for the configured network.\r\n * @throws {UNKNOWN_ERROR} if the response result was empty.\r\n */\r\n async enable() {\r\n const method = 'enable';\r\n debugLog(`${PROVIDER_ID.KIBISIS.toUpperCase()}#${this.refreshSupportedMethods.name}(): check if \"${method}\" is supported on \"${this.network}\"`);\r\n // check the method is supported\r\n this.validateMethod(method);\r\n const result = await KibisisClient.sendRequestWithTimeout({\r\n method,\r\n params: {\r\n genesisHash: this.genesisHash,\r\n providerId: ARC_0027_PROVIDER_ID\r\n },\r\n reference: ARC_0027_ENABLE_REQUEST\r\n });\r\n // check for a result\r\n if (!result) {\r\n throw {\r\n code: UNKNOWN_ERROR,\r\n message: `received response, but \"${method}\" request details were empty for provider \"${PROVIDER_ID.KIBISIS.toUpperCase()}\"`,\r\n providerId: ARC_0027_PROVIDER_ID\r\n };\r\n }\r\n return result.accounts;\r\n }\r\n /**\r\n * Convenience function that gets the provider information and updates the supported methods. This should be called\r\n * before interacting with the provider to ensure methods are supported.\r\n * @throws {METHOD_TIMED_OUT_ERROR} if the method timed out by lack of response.\r\n * @throws {NETWORK_NOT_SUPPORTED_ERROR} if the network is not supported for the configured network.\r\n * @throws {UNKNOWN_ERROR} if the response result was empty.\r\n */\r\n async refreshSupportedMethods() {\r\n const method = 'getProviders';\r\n debugLog(`${PROVIDER_ID.KIBISIS.toUpperCase()}#${this.refreshSupportedMethods.name}(): refreshing supported methods`);\r\n const result = await KibisisClient.sendRequestWithTimeout({\r\n method,\r\n params: {\r\n providerId: ARC_0027_PROVIDER_ID\r\n },\r\n reference: ARC_0027_GET_PROVIDERS_REQUEST,\r\n timeout: LOWER_REQUEST_TIMEOUT\r\n });\r\n // check for a result\r\n if (!result) {\r\n throw {\r\n code: UNKNOWN_ERROR,\r\n message: `received response, but enable request details were empty for provider \"${PROVIDER_ID.KIBISIS.toUpperCase()}\"`,\r\n providerId: ARC_0027_PROVIDER_ID\r\n };\r\n }\r\n const networkConfiguration = result.networks.find((value) => value.genesisHash === this.genesisHash);\r\n // check if the network is supported\r\n if (!networkConfiguration) {\r\n throw {\r\n code: NETWORK_NOT_SUPPORTED_ERROR,\r\n data: {\r\n genesisHash: this.genesisHash\r\n },\r\n message: `network \"${this.network}\" not supported on provider \"${PROVIDER_ID.KIBISIS.toUpperCase()}\"`,\r\n providerId: ARC_0027_PROVIDER_ID\r\n };\r\n }\r\n debugLog(`${PROVIDER_ID.KIBISIS.toUpperCase()}#${this.refreshSupportedMethods.name}(): methods [${networkConfiguration.methods.join(',')}] found for \"${this.network}\"`);\r\n // update the methods\r\n this.methods = networkConfiguration.methods;\r\n }\r\n /**\r\n * Calls the signTxns methods to sign the supplied transactions.\r\n * @param {Arc0001SignTxns[]} txns - the unsigned or signed transactions as defined in ARC-0001.\r\n * @returns {(string | null)[]} the authorized accounts.\r\n * @throws {INVALID_INPUT_ERROR} if computed group ID for the txns does not match the assigned group ID.\r\n * @throws {INVALID_GROUP_ID_ERROR} if the unsigned txns is malformed or not conforming to ARC-0001.\r\n * @throws {METHOD_CANCELED_ERROR} if the method was cancelled by the user.\r\n * @throws {METHOD_NOT_SUPPORTED_ERROR} if the method is not supported for the configured network.\r\n * @throws {METHOD_TIMED_OUT_ERROR} if the method timed out by lack of response.\r\n * @throws {NETWORK_NOT_SUPPORTED_ERROR} if the network is not supported for the configured network.\r\n * @throws {UNAUTHORIZED_SIGNER_ERROR} if a signer in the request is not authorized by the provider.\r\n * @throws {UNKNOWN_ERROR} if the response result was empty.\r\n */\r\n async signTxns(txns) {\r\n const method = 'signTxns';\r\n debugLog(`${PROVIDER_ID.KIBISIS.toUpperCase()}#${this.signTransactions.name}(): check if \"${method}\" is supported on \"${this.network}\"`);\r\n // check the method is supported\r\n this.validateMethod(method);\r\n const result = await KibisisClient.sendRequestWithTimeout({\r\n method,\r\n params: {\r\n providerId: ARC_0027_PROVIDER_ID,\r\n txns\r\n },\r\n reference: ARC_0027_SIGN_TXNS_REQUEST\r\n });\r\n // check for a result\r\n if (!result) {\r\n throw {\r\n code: UNKNOWN_ERROR,\r\n message: `received response, but \"${method}\" request details were empty for provider \"${PROVIDER_ID.KIBISIS.toUpperCase()}\"`,\r\n providerId: ARC_0027_PROVIDER_ID\r\n };\r\n }\r\n return result.stxns;\r\n }\r\n /**\r\n * Validates whether a method is supported with the provider.\r\n * @param {ProviderMethods} method - the method to validate.\r\n * @throws {METHOD_NOT_SUPPORTED_ERROR} if the method is not supported for the configured network.\r\n */\r\n validateMethod(method) {\r\n if (!this.methods.includes(method)) {\r\n throw {\r\n code: METHOD_NOT_SUPPORTED_ERROR,\r\n data: {\r\n method\r\n },\r\n message: `\"${method}\" operation not supported on \"${this.network}\" for provider \"${PROVIDER_ID.KIBISIS.toUpperCase()}\"`,\r\n providerId: ARC_0027_PROVIDER_ID\r\n };\r\n }\r\n }\r\n /**\r\n * public functions\r\n */\r\n async connect() {\r\n await this.refreshSupportedMethods(); // refresh the supported methods\r\n const accounts = await this.enable();\r\n return KibisisClient.mapAccountsToWallet(accounts);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n async disconnect() {\r\n return;\r\n }\r\n async reconnect() {\r\n return await this.connect();\r\n }\r\n async signTransactions(connectedAccounts, transactions, indexesToSign, returnGroup = true) {\r\n await this.refreshSupportedMethods(); // refresh the supported methods\r\n const txns = await Promise.all(transactions.map(async (value, index) => {\r\n const decodedTxn = this.algosdk.decodeObj(value);\r\n const isSigned = !!decodedTxn.txn;\r\n const sender = this.algosdk.encodeAddress(isSigned\r\n ? decodedTxn.txn.snd\r\n : decodedTxn.snd);\r\n const accountInfo = await this.getAccountInfo(sender);\r\n const authAddr = accountInfo['auth-addr'];\r\n const txn = this.convertBytesToBase64(this.algosdk.decodeUnsignedTransaction(value).toByte());\r\n // if the transaction is signed, instruct the provider not to sign by providing an empty signers array\r\n if (isSigned) {\r\n return {\r\n txn: this.convertBytesToBase64(this.algosdk.decodeSignedTransaction(value).txn.toByte()),\r\n signers: [],\r\n ...(authAddr && { authAddr })\r\n };\r\n }\r\n // if the sender is not authorized or the index has not been included in the to be signed indexes, instruct the provider not to sign by providing an empty signers array\r\n if (!connectedAccounts.includes(sender) ||\r\n (indexesToSign && !indexesToSign.includes(index))) {\r\n return {\r\n txn,\r\n signers: [],\r\n ...(authAddr && { authAddr })\r\n };\r\n }\r\n // if the transaction is not signed, has been authorized and/or is in the index, instruct the provider not to sign\r\n return {\r\n txn,\r\n ...(authAddr && { authAddr })\r\n };\r\n }));\r\n const result = await this.signTxns(txns);\r\n // null values indicate transactions that were not signed by the provider, as defined in ARC-0001, see https://arc.algorand.foundation/ARCs/arc-0001#semantic-and-security-requirements\r\n return result.reduce((acc, value, index) => {\r\n if (value) {\r\n return [...acc, this.convertBase64ToBytes(value)];\r\n }\r\n // if the group wants to be returned, get the transaction from the input\r\n return returnGroup ? [...acc, transactions[index]] : acc;\r\n }, []);\r\n }\r\n}\n\nvar allClients = {\r\n [PeraWalletClient.metadata.id]: PeraWalletClient,\r\n [DaffiWalletClient.metadata.id]: DaffiWalletClient,\r\n [MyAlgoWalletClient.metadata.id]: MyAlgoWalletClient,\r\n [DeflyWalletClient.metadata.id]: DeflyWalletClient,\r\n [ExodusClient.metadata.id]: ExodusClient,\r\n [AlgoSignerClient.metadata.id]: AlgoSignerClient,\r\n [LuteClient.metadata.id]: LuteClient,\r\n [WalletConnectClient.metadata.id]: WalletConnectClient,\r\n [KMDWalletClient.metadata.id]: KMDWalletClient,\r\n [MnemonicWalletClient.metadata.id]: MnemonicWalletClient,\r\n [CustomWalletClient.metadata.id]: CustomWalletClient,\r\n [KibisisClient.metadata.id]: KibisisClient,\r\n [MagicAuth.metadata.id]: MagicAuth\r\n};\n\nconst initializeProviders = async (providers, nodeConfig, algosdkStatic) => {\r\n if (typeof window === 'undefined') {\r\n debugLog('Window object is not available, skipping initialization');\r\n return {};\r\n }\r\n // Set all providers to null to preserve order\r\n const initializedProviders = providers.reduce((acc, provider) => {\r\n const providerId = typeof provider === 'string' ? provider : provider.id;\r\n acc[providerId] = null;\r\n return acc;\r\n }, {});\r\n const { network = DEFAULT_NETWORK, nodeServer = DEFAULT_NODE_BASEURL, nodePort = DEFAULT_NODE_PORT, nodeToken = DEFAULT_NODE_TOKEN } = nodeConfig || {};\r\n const initClient = async (provider) => {\r\n const { id, ...providerConfig } = typeof provider === 'string' ? { id: provider } : provider;\r\n const initParams = {\r\n network,\r\n algodOptions: [nodeToken, nodeServer, nodePort],\r\n algosdkStatic,\r\n ...providerConfig\r\n };\r\n const client = await allClients[id].init(initParams);\r\n initializedProviders[id] = client;\r\n };\r\n debugLog('Initializing providers:', getProviderList(providers));\r\n const initPromises = providers.map((provider) => initClient(provider));\r\n await Promise.all(initPromises);\r\n return initializedProviders;\r\n};\n\nconst clearAccounts = (id) => {\r\n const { clearActiveAccount, removeAccounts } = useWalletStore.getState();\r\n clearActiveAccount(id);\r\n removeAccounts(id);\r\n};\n\nconst getActiveProviders = () => {\r\n const accounts = useWalletStore.getState().accounts;\r\n return [...new Set(accounts.map((acct) => acct.providerId))];\r\n};\r\nconst isActiveProvider = (id) => {\r\n const activeProviders = getActiveProviders();\r\n return activeProviders.includes(id);\r\n};\n\nconst reconnectProviders = async (providers) => {\r\n try {\r\n const clients = Object.values(providers);\r\n for (const client of clients) {\r\n const id = client?.metadata.id;\r\n // Only reconnect to active providers\r\n if (id && isActiveProvider(id)) {\r\n await client.reconnect(() => clearAccounts(id));\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n};\n\nfunction encodeNFDTransactionsArray(transactionsArray) {\r\n return transactionsArray.map(([_type, txn]) => {\r\n return base64ToByteArray(txn);\r\n });\r\n}\n\nconst WalletContext = createContext(null);\r\nconst useWalletContext = () => {\r\n const context = useContext(WalletContext);\r\n if (context === undefined) {\r\n throw new Error('useWallet must be used within the WalletProvider');\r\n }\r\n return context;\r\n};\r\nconst WalletProvider = ({ children, value }) => {\r\n return require$$0.createElement(WalletContext.Provider, { value: value }, children);\r\n};\n\nfunction shallow$1(objA, objB) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size)\n return false;\n for (const [key, value] of objA) {\n if (!Object.is(value, objB.get(key))) {\n return false;\n }\n }\n return true;\n }\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size)\n return false;\n for (const value of objA) {\n if (!objB.has(value)) {\n return false;\n }\n }\n return true;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n return true;\n}\n\nfunction useWallet() {\r\n const [providers, setProviders] = useState(null);\r\n const clients = useWalletContext();\r\n const { activeAccount, accounts: connectedAccounts, setActiveAccount: _setActiveAccount, addAccounts } = useHydratedWalletStore(walletStoreSelector, shallow$1);\r\n const getAccountsByProvider = (id) => {\r\n return connectedAccounts.filter((account) => account.providerId === id);\r\n };\r\n const connectedActiveAccounts = useMemo(() => connectedAccounts.filter((account) => account.providerId === activeAccount?.providerId), [connectedAccounts, activeAccount]);\r\n useEffect(() => {\r\n if (!clients) {\r\n setProviders(null);\r\n return;\r\n }\r\n const supportedClients = Object.keys(clients);\r\n setProviders(supportedClients\r\n // Remove any clients that didn't initialise\r\n .filter((id) => !!clients?.[id])\r\n .map((id) => {\r\n return {\r\n ...allClients[id],\r\n // Override static details with any instance details\r\n ...clients[id],\r\n accounts: getAccountsByProvider(id),\r\n isActive: activeAccount?.providerId === id,\r\n isConnected: connectedAccounts.some((accounts) => accounts.providerId === id),\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n connect: (arg, throws) => connect(id, arg, throws),\r\n disconnect: () => disconnect(id),\r\n reconnect: () => reconnect(id),\r\n setActiveProvider: () => setActive(id),\r\n setActiveAccount: (account) => selectActiveAccount(id, account)\r\n };\r\n }));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [clients, connectedAccounts, connectedActiveAccounts, activeAccount]);\r\n const getClient = (id) => {\r\n if (!id)\r\n throw new Error('Provider ID is missing.');\r\n const walletClient = clients?.[id];\r\n if (!walletClient)\r\n throw new Error(`Client not found for ID: ${id}`);\r\n return walletClient;\r\n };\r\n const status = useMemo(() => {\r\n if (activeAccount === undefined) {\r\n return 'initializing';\r\n }\r\n if (activeAccount === null && connectedAccounts.length) {\r\n return 'connected';\r\n }\r\n if (activeAccount === null && !connectedAccounts.length) {\r\n return 'disconnected';\r\n }\r\n if (activeAccount && activeAccount.address) {\r\n return 'active';\r\n }\r\n return 'error';\r\n }, [activeAccount, connectedAccounts.length]);\r\n const isActive = useMemo(() => {\r\n return status === 'active';\r\n }, [status]);\r\n const isReady = useMemo(() => {\r\n return status !== 'initializing';\r\n }, [status]);\r\n const selectActiveAccount = (providerId, address) => {\r\n try {\r\n const account = connectedAccounts.find((acct) => acct.address === address && acct.providerId === providerId);\r\n if (!account) {\r\n throw new Error(`No accounts with address ${address} found.`);\r\n }\r\n _setActiveAccount(account);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const connect = async (id, arg, throws = false) => {\r\n try {\r\n const walletClient = getClient(id);\r\n const walletInfo = await walletClient?.connect(() => clearAccounts(id), arg);\r\n _setActiveAccount(walletInfo.accounts[0]);\r\n addAccounts(walletInfo.accounts);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n if (throws) {\r\n throw e;\r\n }\r\n }\r\n };\r\n const reconnect = async (id) => {\r\n try {\r\n const walletClient = getClient(id);\r\n const walletInfo = await walletClient?.reconnect(() => clearAccounts(id));\r\n if (walletInfo && walletInfo.accounts.length) {\r\n addAccounts(walletInfo.accounts);\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n await disconnect(id);\r\n }\r\n };\r\n const disconnect = async (id) => {\r\n try {\r\n const walletClient = getClient(id);\r\n await walletClient?.disconnect();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n finally {\r\n clearAccounts(id);\r\n }\r\n };\r\n const setActive = (id) => {\r\n try {\r\n const accounts = getAccountsByProvider(id);\r\n _setActiveAccount(accounts[0]);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n const signTransactions = async (transactions, indexesToSign, returnGroup = true) => {\r\n const walletClient = getClient(activeAccount?.providerId);\r\n if (!walletClient || !activeAccount?.address) {\r\n throw new Error('No wallet found.');\r\n }\r\n const signedTransactions = await walletClient.signTransactions(connectedActiveAccounts.map((acct) => acct.address), transactions, indexesToSign, returnGroup);\r\n return signedTransactions;\r\n };\r\n const sendTransactions = async (transactions, waitRoundsToConfirm) => {\r\n const walletClient = getClient(activeAccount?.providerId);\r\n const result = await walletClient?.sendRawTransactions(transactions, waitRoundsToConfirm);\r\n return result;\r\n };\r\n const signer = async (txnGroup, indexesToSign) => {\r\n const algosdk = await getAlgosdk();\r\n const txnBlobs = txnGroup.map(algosdk.encodeUnsignedTransaction);\r\n return await Promise.resolve(signTransactions(txnBlobs, indexesToSign, false));\r\n };\r\n const getAccountInfo = async () => {\r\n if (!activeAccount)\r\n throw new Error('No selected account.');\r\n const walletClient = getClient(activeAccount.providerId);\r\n const accountInfo = await walletClient?.getAccountInfo(activeAccount.address);\r\n return accountInfo;\r\n };\r\n const getAddress = () => {\r\n return activeAccount?.address;\r\n };\r\n const getAssets = async () => {\r\n if (!activeAccount)\r\n throw new Error('No selected account.');\r\n const walletClient = getClient(activeAccount.providerId);\r\n return await walletClient?.getAssets(activeAccount.address);\r\n };\r\n const groupTransactionsBySender = (transactions) => {\r\n const walletClient = getClient(activeAccount?.providerId);\r\n return walletClient?.groupTransactionsBySender(transactions);\r\n };\r\n return {\r\n clients,\r\n providers,\r\n connectedAccounts,\r\n connectedActiveAccounts,\r\n activeAccount,\r\n activeAddress: activeAccount?.address,\r\n status,\r\n isActive,\r\n isReady,\r\n signer,\r\n signTransactions,\r\n sendTransactions,\r\n getAddress,\r\n groupTransactionsBySender,\r\n getAccountInfo,\r\n getAssets\r\n };\r\n}\n\nfunction useInitializeProviders({ providers, nodeConfig, algosdkStatic, debug = false }) {\r\n // Enable debug mode\r\n const { setDebug } = useDebugStore();\r\n useEffect(() => setDebug(debug), [debug, setDebug]);\r\n // Initialize providers\r\n const [walletProviders, setWalletProviders] = useState(null);\r\n useEffect(() => {\r\n async function initializeAndConnect() {\r\n try {\r\n // Initialize with provided configuration\r\n const initializedProviders = await initializeProviders(providers, nodeConfig, algosdkStatic);\r\n setWalletProviders(initializedProviders);\r\n // Reconnect the session when the user returns to the app\r\n await reconnectProviders(initializedProviders);\r\n }\r\n catch (error) {\r\n console.error('Error initializing wallet providers:', error);\r\n }\r\n }\r\n void initializeAndConnect();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n return walletProviders;\r\n}\n\nexport { DEFAULT_NETWORK, DEFAULT_NODE_BASEURL, DEFAULT_NODE_PORT, DEFAULT_NODE_TOKEN, PROVIDER_ID, WalletProvider, AlgoSignerClient as algosigner, CustomWalletClient as custom, DeflyWalletClient as defly, encodeNFDTransactionsArray, ExodusClient as exodus, KibisisClient as kibisis, KMDWalletClient as kmd, LuteClient as lute, MagicAuth as magic, MnemonicWalletClient as mnemonic, MyAlgoWalletClient as myalgo, PeraWalletClient as pera, reconnectProviders, useInitializeProviders, useWallet, WalletConnectClient as walletconnect };\n"],"names":[],"sourceRoot":"","ignoreList":[0]}